<?php
require(dirname(__FILE__)."/config.php");
/*
http://www.howtoforge.com/talking-soap-with-exchange
*/
if (isset($_GET["function"]))
{
switch ($_GET["function"])
{
case "getMeetingsRestOfDay":
if (isset($_GET["shortname"]))
{
echo getMeetingsRestOfDay($_GET["shortname"]);
}
break;
case "bookMeeting":
{
}
break;
//case "":
//
//break;
}
}
/*
$CreateItem->SendMeetingInvitations = "SendToNone";
$CreateItem->SavedItemFolderId->DistinguishedFolderId->Id = "calendar";
$CreateItem->Items->CalendarItem = array();
$CreateItem->Items->CalendarItem[0]->Subject = "Hello from PHP";
$CreateItem->Items->CalendarItem[0]->Start = "2010-01-01T16:00:00Z"; # ISO date format. Z denotes UTC time
$CreateItem->Items->CalendarItem[0]->End = "2010-01-01T17:00:00Z";
$CreateItem->Items->CalendarItem[0]->IsAllDayEvent = false;
$CreateItem->Items->CalendarItem[0]->LegacyFreeBusyStatus = "Busy";
$CreateItem->Items->CalendarItem[0]->Location = "Bahamas";
$CreateItem->Items->CalendarItem[0]->Categories->String = "MyCategory";
$result = $client->CreateItem($CreateItem);
print_array($result);
*/
/*
Get all meetings from now and 9 hours later
Return a JSON formed string
*/
function getMeetingsRestOfDay($shortname)
{
global $Calender;
global $wsdl;
$founditem = false;
foreach($Calender as $item)
{
if ($item->Shortname == $shortname)
{
$founditem = $item;
break;
}
}
if ($founditem !== false)
{
$FindItem->Traversal = "Shallow";
$FindItem->ItemShape->BaseShape = "AllProperties";
$FindItem->ParentFolderIds->DistinguishedFolderId->Id = "calendar";
/* Dont forget to use the proper timezone and setting for daylight saving time (php handles this fine) */
$FindItem->CalendarView->StartDate = date("c"); //"2009-04-07T08:00:00Z";
$FindItem->CalendarView->EndDate = date("c", strtotime("+9 hour")); //"2009-04-08T00:00:00Z";
//echo date("c")." ".date("c", strtotime("+8 hour"))." ".date("c", strtotime("18:00"))."\n";
$returndata = "{ \n\tshortname:'".$shortname."',\n\tmeetings:[\n";
try
{
$client = new ExchangeNTLMSoapClient($wsdl);
$client->user = $founditem->UserName;
$client->pass = $founditem->Password;
$result = $client->FindItem($FindItem);
if ($result)
{
//print_array($result);
$calendaritems = $result->ResponseMessages->FindItemResponseMessage->RootFolder->Items->CalendarItem;
//print_array($calendaritems);
for ($i = 0; $i < count($calendaritems); $i++)
{
if (count($calendaritems) > 1)
{
$item = $calendaritems[$i];
}
else
{
$item = $calendaritems;
}
$returndata .= "\t\t{\n";
$returndata .= "\t\torganizer:'".$item->Organizer->Mailbox->Name."',\n";
$returndata .= "\t\tstart:'".date("G:i", strtotime($item->Start))."',\n";
$returndata .= "\t\t}";
if ($i+1 < count($calendaritems))
{
$returndata .= ",\n";
}
}
}
}
catch (SoapFault $exception)
{
return "{ error:'".$exception."',\nshortname:'".$shortname."'}\n";
}
$returndata .= "\n\t]\n}\n";
return $returndata;
}
else
{
return "{ error:'Unknown shortname',\nshortname:'".$shortname."'}\n";
}
}
function print_array($var)
{
echo "<pre>\n";
echo "</pre>\n";
}
class NTLMSoapClient extends SoapClient {
function __doRequest($request, $location, $action, $version)
{
global $exchangeurl;
$location=$exchangeurl; //override url to exchange server
$headers = array( 'Method: POST',
'Connection: Keep-Alive',
'User-Agent: PHP-SOAP-CURL',
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: "'.$action.'"',
);
$this->__last_request_headers = $headers;
curl_setopt($ch, CURLOPT_HTTP_VERSION
, CURL_HTTP_VERSION_1_1
);
curl_setopt($ch, CURLOPT_USERPWD
, $this->user.':'.$this->pass);
/*$myfile = "/tmp/debugex.txt";
$fh = fopen($myfile, 'w+') or die("can't open file");
fwrite($fh, "user: ". $this->user. " pass: ".$this->pass."\n");
fwrite($fh, "req: ". $request ."loc: ". $location ." act: ". $action ." ver: ". $version."\n");
fwrite($fh, "reponse: ". $response."\n\n");
fclose($fh);
*/
return $response;
}
function __getLastRequestHeaders()
{
return implode("\n", $this->__last_request_headers
)."\n";
}
}
class ExchangeNTLMSoapClient extends NTLMSoapClient
{
public $user = '';
public $password = '';
}
class NTLMStream
{
private $path;
private $mode;
private $options;
private $opened_path;
private $buffer;
private $pos;
/**
* Open the stream
*
* @param unknown_type $path
* @param unknown_type $mode
* @param unknown_type $options
* @param unknown_type $opened_path
* @return unknown
*/
public function stream_open($path, $mode, $options, $opened_path)
{
echo "[NTLMStream::stream_open] $path , mode=$mode \n";
$this->path = $path;
$this->mode = $mode;
$this->options = $options;
$this->opened_path = $opened_path;
$this->createBuffer($path);
return true;
}
/**
* Close the stream
*
*/
public function stream_close()
{
echo "[NTLMStream::stream_close] \n";
}
/**
* Read the stream
*
* @param int $count number of bytes to read
* @return content from pos to count
*/
public function stream_read($count)
{
echo "[NTLMStream::stream_read] $count \n";
if(strlen($this->buffer) == 0)
{
return false;
}
$read = substr($this->buffer,$this->pos, $count);
return $read;
}
/***
* write the stream
*
* @param $data
* @return
*/
public function stream_write($data)
{
echo "[NTLMStream::stream_write] \n";
if(strlen($this->buffer) == 0)
{
return false;
}
return true;
}
/**
*
* @return true if eof else false
*/
public function stream_eof()
{
echo "[NTLMStream::stream_eof] ";
{
echo "true \n";
return true;
}
echo "false \n";
return false;
}
/**
* @return int the position of the current read pointer
*/
public function stream_tell()
{
echo "[NTLMStream::stream_tell] \n";
}
/**
* Flush stream data
*/
public function stream_flush()
{
echo "[NTLMStream::stream_flush] \n";
$this->buffer = null;
}
/**
* Stat the file, return only the size of the buffer
*
* @return array stat information
*/
public function stream_stat()
{
echo "[NTLMStream::stream_stat] \n";
$this->createBuffer($this->path);
return $stat;
}
/**
* Stat the url, return only the size of the buffer
*
* @return array stat information
*/
public function url_stat($path, $flags)
{
echo "[NTLMStream::url_stat] \n";
$this->createBuffer($path);
return $stat;
}
/* Create the buffer by requesting the url through cURL */
private function createBuffer($path)
{
if($this->buffer)
{
return;
}
echo "[NTLMStream::createBuffer] create buffer from : $path \n";
curl_setopt($this->ch, CURLOPT_HTTP_VERSION
, CURL_HTTP_VERSION_1_1
);
curl_setopt($this->ch, CURLOPT_HTTPAUTH
, CURLAUTH_NTLM
);
curl_setopt($this->ch, CURLOPT_USERPWD
, $user.':'.$pass);
echo "[NTLMStream::createBuffer] buffer size : ".strlen($this->buffer)."bytes \n";
/*$myfile = "/tmp/debugex.txt";
$fh = fopen($myfile, 'w+') or die("can't open file");
fwrite($fh, "user: ". $this->user. " pass: ".$this->pass."\n");
fwrite($fh, "req: ". $request ."loc: ". $location ." act: ". $action ." ver: ". $version."\n");
fwrite($fh, "reponse: ". $response."\n\n");
fclose($fh);
*/
}
}
?>