Esempio n. 1
0
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;
            }
        }
    }
}
Esempio n. 2
0
                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());