function exchangesync_syncItems($cal, $user, $user_id, $entries_sync) { global $alert_admin, $alerts; global $systemurl; global $entryObj; global $created_items, $deleted_items; // "Returns" global $area; // Build where statement for query and add items that needs to be created $entries_new = array(); $delete_where = array(); foreach ($entries_sync as $entry_id => $entry) { // Only create new if the user is still assigned to entry if (isset($entry['user_assigned'][$user_id])) { //$entry = getEntry($entry['entry_id']); // Need more information templateAssignEntry('entryObj', $entry); $rooms = $entryObj->room . ' (' . $area[$entry['area_id']] . ')'; // Add the entry to list of items $i = $cal->createCalendarItems_addItem(utf8_encode($entryObj->entry_name), exchangesync_getEntryCalendarDescription($systemurl, $entryObj), date('c', $entryObj->time_start), date('c', $entryObj->time_end), array('ReminderIsSet' => false, 'Location' => utf8_encode($rooms)), $user['user_ews_sync_email']); $entries_new[$i] = $entry['entry_id']; } // Delete this entry for this user $delete_where[] = '(`entry_id` = \'' . $entry_id . '\' && `user_id` = \'' . $user_id . '\')'; } // Delete in Exchange $Q_sync = mysql_query("select * from `entry_exchangesync`\n\t\tWHERE " . implode(' || ', $delete_where)); $deleted_items = array(); while ($R_sync = mysql_fetch_assoc($Q_sync)) { try { $deleted_item = $cal->deleteItem($R_sync['exchange_id']); $deleted_items[$R_sync['entry_id']] = $deleted_item; printout($R_sync['entry_id'] . ' deleted'); } catch (Exception $e) { printout('Exception - deleteItem - ' . $R_sync['entry_id'] . ': ' . $e->getMessage()); $alert_admin = true; $alerts[] = 'deleteItem exception'; } } // Delete all the exchangesync data $Q_sync = mysql_query("delete from `entry_exchangesync`\n\t\tWHERE " . implode(' || ', $delete_where)); printout_mysqlerror(); // Create the new items $created_items = array(); try { if (count($entries_new)) { $created_items = $cal->createCalendarItems(); } else { printout('No calendar items to be created'); } } catch (Exception $e) { printout('Exception - createCalendarItems: ' . $e->getMessage() . '<br />'); $alert_admin = true; $alerts[] = 'createCalendarItems exception: ' . $e->getMessage(); } foreach ($created_items as $i => $ids) { if (!is_null($ids['Id'])) { $entry = $entries_sync[$entries_new[$i]]; printout($entries_new[$i] . ' created.'); // Inserting in sync mysql_query("INSERT INTO `entry_exchangesync` (\n\t\t\t\t`entry_id` ,\n\t\t\t\t`exchange_id` ,\n\t\t\t\t`exchange_changekey`,\n\t\t\t\t`user_id`,\n\t\t\t\t`entry_rev`,\n\t\t\t\t`sync_from`,\n\t\t\t\t`sync_to`\n\t\t\t)\n\t\t\tVALUES (\n\t\t\t\t'" . $entry['entry_id'] . "' , \n\t\t\t\t'" . $ids['Id'] . "', \n\t\t\t\t'" . $ids['ChangeKey'] . "',\n\t\t\t\t'" . $user_id . "',\n\t\t\t\t'" . $entry['rev_num'] . "',\n\t\t\t\t'" . $entry['time_start'] . "',\n\t\t\t\t'" . $entry['time_end'] . "'\n\t\t\t);"); printout_mysqlerror(); } else { if ($ids['ResponseMessage']->ResponseCode == 'ErrorCreateItemAccessDenied') { // Alert admin, alert user and disable sync emailSend($user_id, 'Ikke tilgang til kalender', exchangesync_getUsermsgAccessDenied($systemurl)); mysql_query("UPDATE `users` SET `user_ews_sync` = '0' WHERE `user_id` =" . $user_id); printout($entries_new[$i] . ' not created. User ' . $user_id . ' has access denied error when creating items. Has disabled the sync of this user. Message from Exchange: ' . $ids['ResponseMessage']->MessageText); $alert_admin = true; $alerts[] = $entries_new[$i] . ' not created. User ' . $user_id . ' has access denied error when creating items. Has disabled the sync of this user. Message from Exchange: ' . $ids['ResponseMessage']->MessageText; } else { // Unknown error, alert admin printout($entries_new[$i] . ' not created: ' . print_r($ids['ResponseMessage'], true)); $alert_admin = true; $alerts[] = $entries_new[$i] . ' not created. Message from Exchange: ' . $ids['ResponseMessage']->MessageText; } } } }
exchangesync_analyzeSync($entries, $cal_ids, $cal, $user, $user_id); // Sync any entries removed from this user that has been synced earlier foreach ($sync as $entry_id => $R_sync) { // => Sync $entries_sync[$entry_id] = getEntry($entry_id); } // Sync items printout(count($entries_sync) . ' items to be synced to Exchange'); if (count($entries_sync)) { exchangesync_syncItems($cal, $user, $user_id, $entries_sync); } } } catch (Exception $e) { if ($e->getMessage() == 'getCalendarItems failed. ResponseClass: Error. ResponseCode: ErrorFolderNotFound. Message: The specified folder could not be found in the store.') { // Alert admin, alert user and disable sync emailSend($user_id, 'Ikke tilgang til kalender', exchangesync_getUsermsgAccessDenied($systemurl)); mysql_query("UPDATE `users` SET `user_ews_sync` = '0' WHERE `user_id` =" . $user_id); $msg = 'User ' . $user_id . ' has access denied error when getting calendar items. Has disabled the sync of this user. Message from Exchange: ' . $e->getMessage(); printout($msg); $alert_admin = true; $alerts[] = $msg; } else { // Unknown error, alert admin printout('Exception during user ' . $user_id . ': ' . $e->getMessage()); $alert_admin = true; $alerts[] = 'Exception during user ' . $user_id . ': ' . $e->getMessage(); } } } } catch (Exception $e) { printout('Exception: ' . $e->getMessage());