Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- if (!isset($_POST['host']) ||
- !isset($_POST['username']) ||
- !isset($_POST['password']) ||
- !isset($_POST['version']) ||
- !isset($_POST['datestart']) ||
- !isset($_POST['dateend']) ||
- !isset($_POST['fields'])
- ) {
- die('Required vars not passed.');
- }
- if (!isset($_POST['folder_id']) && !isset($_POST['mailbox'])) {
- die('Must pass either mailbox address or exchange id');
- } elseif (isset($_POST['folder_id']) && isset($_POST['mailbox'])) {
- die('Cannot pass both mailbox address and exchange id');
- }
- $host = $_POST['host'];
- $username = $_POST['username'];
- $password = $_POST['password'];
- $version = $_POST['version'];
- $date_start = $_POST['datestart']; // unix timestamp
- $date_end = $_POST['dateend']; // unix timestamp
- $fields = unserialize($_POST['fields']);
- $timezone_get = isset($_POST['timezoneget']) ? $_POST['timezoneget'] : false;
- $timezone_set = isset($_POST['timezoneset']) ? $_POST['timezoneset'] : false;
- $debug = isset($_REQUEST['debug']) ? true : false;
- if (isset($_POST['folder_id'])) {
- $address_type = 'folder_id';
- $folder_id = $_POST['folder_id']; // must be unique exchange id. If unknown, use list.php to find out the exact folder id.
- } else {
- $address_type = 'mailbox';
- $mailbox_address = $_POST['mailbox'];
- }
- if ($debug) {
- echo '<pre>
- Host: '.$host.'
- Username: '.$username.'
- Password: '.$password.'
- Version: '.$version.'
- Date Start: '.$date_start.'
- Date End: '.$date_end.'
- '.($address_type == 'folder_id' ? 'Folder ID: '.$folder_id : 'Mailbox: '.$mailbox_address).'
- Fields: '.var_export($fields, true).'
- </pre>';
- }
- require_once 'php-ews-master/NTLMSoapClient.php';
- require_once 'php-ews-master/NTLMSoapClient/Exchange.php';
- require_once 'php-ews-master/ExchangeWebServices.php';
- require_once 'php-ews-master/EWSType.php';
- require_once 'php-ews-master/EWS_Exception.php';
- require_once 'php-ews-master/EWSType/FindItemType.php';
- require_once 'php-ews-master/EWSType/ItemQueryTraversalType.php';
- require_once 'php-ews-master/EWSType/ItemResponseShapeType.php';
- require_once 'php-ews-master/EWSType/DefaultShapeNamesType.php';
- require_once 'php-ews-master/EWSType/CalendarViewType.php';
- require_once 'php-ews-master/EWSType/NonEmptyArrayOfBaseFolderIdsType.php';
- require_once 'php-ews-master/EWSType/DistinguishedFolderIdType.php';
- require_once 'php-ews-master/EWSType/DistinguishedFolderIdNameType.php';
- require_once 'php-ews-master/EWSType/EmailAddressType.php';
- require_once 'php-ews-master/EWSType/FolderIdType.php';
- require_once 'php-ews-master/EWSType/EmailAddress.php';
- require_once 'php-ews-master/EWSType/FindFolderType.php';
- require_once 'php-ews-master/EWSType/FolderQueryTraversalType.php';
- require_once 'php-ews-master/EWSType/FolderResponseShapeType.php';
- require_once 'php-ews-master/EWSType/IndexedPageViewType.php';
- // Define EWS
- $ews = new ExchangeWebServices($host, $username, $password, $version);
- // Set init class
- $request = new EWSType_FindItemType();
- // Use this to search only the items in the parent directory in question or use ::SOFT_DELETED
- // to identify "soft deleted" items, i.e. not visible and not in the trash can.
- $request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
- // This identifies the set of properties to return in an item or folder response
- $request->ItemShape = new EWSType_ItemResponseShapeType();
- $request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
- // Define the timeframe to load calendar items
- $request->CalendarView = new EWSType_CalendarViewType();
- $request->CalendarView->StartDate = date('c', $date_start); // an ISO8601 date e.g. 2012-06-12T15:18:34+03:00
- $request->CalendarView->EndDate = date('c', $date_end); // an ISO8601 date later than the above
- // Build request type based on provided vars
- $request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
- if ($address_type == 'folder_id') {
- $request->ParentFolderIds->FolderId = new EWSType_FolderIdType();
- $request->ParentFolderIds->FolderId->Id = $folder_id;
- } elseif ($address_type == 'mailbox') {
- $mailBox =
- $mailBox->EmailAddress = $room['mailbox'];
- $request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
- $request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CALENDAR;
- $request->ParentFolderIds->DistinguishedFolderId->Mailbox = new EWSType_EmailAddress();
- $request->ParentFolderIds->DistinguishedFolderId->Mailbox->EmailAddress = $mailbox_address;
- }
- // Send request
- $response = $ews->FindItem($request);
- //echo '<pre>'.var_export($response, true).'</pre>';
- if ($debug) {
- echo '<pre>Total Items in View: '.$response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView.'</pre>';
- //echo '<pre>'.var_export($response, true).'</pre>';
- }
- // Set Timezone responses
- $tz['pull'] = $timezone_get ? new DateTimeZone($timezone_get) : new DateTimeZone('UTC');
- $tz['push'] = $timezone_set ? new DateTimeZone($timezone_set) : new DateTimeZone('America/New_York');
- // Loop through each item if event(s) were found in the timeframe specified
- if ($response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView > 0) {
- $events = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->CalendarItem;
- $event_list = array();
- foreach ($events as $event){
- if ($debug) {
- echo '<pre>'.var_export($event, true).'</pre><br>=================================================<br>';
- }
- $event_data = array();
- foreach ($fields as $field) {
- switch ($field) {
- case 'id': $event_data['id'] = $event->ItemId->Id; break;
- case 'change_key': $event_data['change_key'] = $event->ItemId->ChangeKey; break;
- case 'start':
- $event_data['start'] = new DateTime($event->Start, $tz['pull']);
- $event_data['start']->setTimezone($tz['push']);
- $event_data['start'] = $event_data['start']->format('Y-m-d H:i:s');
- break;
- case 'end':
- $event_data['end'] = new DateTime($event->End, $tz['pull']);
- $event_data['end']->setTimezone($tz['push']);
- $event_data['end'] = $event_data['end']->format('Y-m-d H:i:s');
- break;
- case 'subject': $event_data['subject'] = $event->Subject; break;
- case 'location': $event_data['location'] = $event->Location; break;
- case 'allday': $event_data['allday'] = $event->IsAllDayEvent; break;
- case 'duration': $event_data['duration'] = $event->Duration; break;
- case 'uid': $event_data['uid'] = $event->UID;
- }
- }
- if ($debug) {
- echo "<pre>-=-=- Exchange to array data -=-=-\n".var_export($event_data, true).'</pre>';
- }
- $event_list[] = $event_data;
- }
- }
- echo serialize($event_list);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement