Advertisement
zxurian

Untitled

May 12th, 2013
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.62 KB | None | 0 0
  1. <?php
  2.  
  3. if (!isset($_POST['host']) ||
  4.     !isset($_POST['username']) ||
  5.     !isset($_POST['password']) ||
  6.     !isset($_POST['version']) ||
  7.     !isset($_POST['datestart']) ||
  8.     !isset($_POST['dateend']) ||
  9.     !isset($_POST['fields'])
  10. ) {
  11.     die('Required vars not passed.');
  12. }
  13. if (!isset($_POST['folder_id']) && !isset($_POST['mailbox'])) {
  14.     die('Must pass either mailbox address or exchange id');
  15. } elseif (isset($_POST['folder_id']) && isset($_POST['mailbox'])) {
  16.     die('Cannot pass both mailbox address and exchange id');
  17. }
  18.  
  19. $host = $_POST['host'];
  20. $username = $_POST['username'];
  21. $password = $_POST['password'];
  22. $version = $_POST['version'];
  23. $date_start = $_POST['datestart']; // unix timestamp
  24. $date_end = $_POST['dateend']; // unix timestamp
  25. $fields = unserialize($_POST['fields']);
  26. $timezone_get = isset($_POST['timezoneget']) ? $_POST['timezoneget'] : false;
  27. $timezone_set = isset($_POST['timezoneset']) ? $_POST['timezoneset'] : false;
  28. $debug = isset($_REQUEST['debug']) ? true : false;
  29.  
  30. if (isset($_POST['folder_id'])) {
  31.     $address_type = 'folder_id';
  32.     $folder_id = $_POST['folder_id']; // must be unique exchange id. If unknown, use list.php to find out the exact folder id.
  33. } else {
  34.     $address_type = 'mailbox';
  35.     $mailbox_address = $_POST['mailbox'];
  36. }
  37.  
  38. if ($debug) {
  39.     echo '<pre>
  40. Host: '.$host.'
  41. Username: '.$username.'
  42. Password: '.$password.'
  43. Version: '.$version.'
  44. Date Start: '.$date_start.'
  45. Date End: '.$date_end.'
  46. '.($address_type == 'folder_id' ? 'Folder ID: '.$folder_id : 'Mailbox: '.$mailbox_address).'
  47. Fields: '.var_export($fields, true).'
  48. </pre>';
  49. }
  50.        
  51. require_once 'php-ews-master/NTLMSoapClient.php';
  52. require_once 'php-ews-master/NTLMSoapClient/Exchange.php';
  53. require_once 'php-ews-master/ExchangeWebServices.php';
  54. require_once 'php-ews-master/EWSType.php';
  55. require_once 'php-ews-master/EWS_Exception.php';
  56. require_once 'php-ews-master/EWSType/FindItemType.php';
  57. require_once 'php-ews-master/EWSType/ItemQueryTraversalType.php';
  58. require_once 'php-ews-master/EWSType/ItemResponseShapeType.php';
  59. require_once 'php-ews-master/EWSType/DefaultShapeNamesType.php';
  60. require_once 'php-ews-master/EWSType/CalendarViewType.php';
  61. require_once 'php-ews-master/EWSType/NonEmptyArrayOfBaseFolderIdsType.php';
  62. require_once 'php-ews-master/EWSType/DistinguishedFolderIdType.php';
  63. require_once 'php-ews-master/EWSType/DistinguishedFolderIdNameType.php';
  64. require_once 'php-ews-master/EWSType/EmailAddressType.php';
  65. require_once 'php-ews-master/EWSType/FolderIdType.php';
  66. require_once 'php-ews-master/EWSType/EmailAddress.php';
  67. require_once 'php-ews-master/EWSType/FindFolderType.php';
  68. require_once 'php-ews-master/EWSType/FolderQueryTraversalType.php';
  69. require_once 'php-ews-master/EWSType/FolderResponseShapeType.php';
  70. require_once 'php-ews-master/EWSType/IndexedPageViewType.php';
  71.  
  72.  
  73. // Define EWS
  74. $ews = new ExchangeWebServices($host, $username, $password, $version);
  75.  
  76. // Set init class
  77. $request = new EWSType_FindItemType();
  78. // Use this to search only the items in the parent directory in question or use ::SOFT_DELETED
  79. // to identify "soft deleted" items, i.e. not visible and not in the trash can.
  80. $request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
  81.  
  82. // This identifies the set of properties to return in an item or folder response
  83. $request->ItemShape = new EWSType_ItemResponseShapeType();
  84. $request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
  85.  
  86. // Define the timeframe to load calendar items
  87. $request->CalendarView = new EWSType_CalendarViewType();
  88. $request->CalendarView->StartDate = date('c', $date_start); // an ISO8601 date e.g. 2012-06-12T15:18:34+03:00
  89. $request->CalendarView->EndDate = date('c', $date_end); // an ISO8601 date later than the above
  90.  
  91. // Build request type based on provided vars
  92. $request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
  93. if ($address_type == 'folder_id') {
  94.     $request->ParentFolderIds->FolderId = new EWSType_FolderIdType();
  95.     $request->ParentFolderIds->FolderId->Id = $folder_id;
  96. } elseif ($address_type == 'mailbox') {
  97.     $mailBox =
  98.     $mailBox->EmailAddress = $room['mailbox'];
  99.     $request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
  100.     $request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CALENDAR;
  101.     $request->ParentFolderIds->DistinguishedFolderId->Mailbox = new EWSType_EmailAddress();
  102.     $request->ParentFolderIds->DistinguishedFolderId->Mailbox->EmailAddress = $mailbox_address;
  103. }
  104.  
  105. // Send request
  106. $response = $ews->FindItem($request);
  107.  
  108. //echo '<pre>'.var_export($response, true).'</pre>';
  109. if ($debug) {
  110.     echo '<pre>Total Items in View: '.$response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView.'</pre>';
  111.     //echo '<pre>'.var_export($response, true).'</pre>';
  112. }
  113.  
  114. // Set Timezone responses
  115. $tz['pull'] = $timezone_get ? new DateTimeZone($timezone_get) : new DateTimeZone('UTC');
  116. $tz['push'] = $timezone_set ? new DateTimeZone($timezone_set) : new DateTimeZone('America/New_York');
  117.  
  118. // Loop through each item if event(s) were found in the timeframe specified
  119. if ($response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView > 0) {
  120.     $events = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->CalendarItem;
  121.     $event_list = array();
  122.     foreach ($events as $event){
  123.         if ($debug) {
  124.             echo '<pre>'.var_export($event, true).'</pre><br>=================================================<br>';
  125.         }
  126.         $event_data = array();
  127.         foreach ($fields as $field) {
  128.             switch ($field) {
  129.                 case 'id': $event_data['id'] = $event->ItemId->Id; break;
  130.                 case 'change_key': $event_data['change_key'] = $event->ItemId->ChangeKey; break;
  131.                 case 'start':
  132.                     $event_data['start'] = new DateTime($event->Start, $tz['pull']);
  133.                     $event_data['start']->setTimezone($tz['push']);
  134.                     $event_data['start'] = $event_data['start']->format('Y-m-d H:i:s');
  135.                     break;
  136.                 case 'end':
  137.                     $event_data['end'] = new DateTime($event->End, $tz['pull']);
  138.                     $event_data['end']->setTimezone($tz['push']);
  139.                     $event_data['end'] = $event_data['end']->format('Y-m-d H:i:s');
  140.                     break;
  141.                 case 'subject': $event_data['subject'] = $event->Subject; break;
  142.                 case 'location': $event_data['location'] = $event->Location; break;
  143.                 case 'allday': $event_data['allday'] = $event->IsAllDayEvent; break;
  144.                 case 'duration': $event_data['duration'] = $event->Duration; break;
  145.                 case 'uid': $event_data['uid'] = $event->UID;
  146.             }
  147.         }
  148.         if ($debug) {
  149.             echo "<pre>-=-=- Exchange to array data -=-=-\n".var_export($event_data, true).'</pre>';
  150.         }
  151.         $event_list[] = $event_data;
  152.     }
  153. }
  154.  
  155. echo serialize($event_list);
  156.  
  157. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement