Пример #1
0
 public static function _clean($destination, $source, $syncTaskId = 0, $whitelist = array())
 {
     $service = ServicesModel::first(array('library' => 'Calendar'))->toArray();
     $task = TasksServicesModel::first(array('task_id' => $syncTaskId, 'service_id' => $service['id']))->toArray();
     $task['stats'] = json_decode($task['stats'], true);
     // Calendars
     $calendars = CalendarsModel::all(array('user_id' => $source['username']['id'], 'sync_task_id' => $syncTaskId))->toArray();
     // Events
     $toDeleteEvents = array();
     $migratedEvents = MigratedDataModel::all(array('source_id' => $source['username']['id'], 'sync_task_id' => $syncTaskId, 'kind' => static::$kind['event']));
     if ($migratedEvents) {
         $migratedEvents = $migratedEvents->toArray();
         if ($migratedEvents) {
             $destinationCalendars = CalendarsModel::all(array('user_id' => $destination['username']['id'], 'sync_task_id' => $syncTaskId));
             if ($destinationCalendars) {
                 $destinationCalendars = $destinationCalendars->toArray();
                 if ($destinationCalendars) {
                     foreach ($destinationCalendars as $calendar) {
                         // get events
                         $newEvents = array();
                         do {
                             $payload = array('maxResults' => static::$limit);
                             if (isset($events['nextPageToken'])) {
                                 $payload['pageToken'] = $events['nextPageToken'];
                             }
                             $events = \Rest::get(sprintf(static::$endpoints['events'], $calendar['calendar_id']), $payload, $destination);
                             if (isset($events['result']['error'])) {
                                 d(static::$endpoints['events']);
                             }
                             if (isset($events['items'])) {
                                 foreach ($events['items'] as $event) {
                                     if (isset($event['summary'])) {
                                         $newEvents[static::identifier($event, $calendar)] = $event['id'];
                                     }
                                 }
                             }
                         } while (isset($events['nextPageToken']) && $events['nextPageToken']);
                         // Mark events
                         foreach ($migratedEvents as $event) {
                             if (isset($newEvents[$event['unique']])) {
                                 $toDeleteEvents[] = array('eventId' => $newEvents[$event['unique']], 'calendarId' => $calendar['calendar_id']);
                             }
                         }
                     }
                 }
             }
         }
     }
     switch (true) {
         # Share / Clean
         ############################################################################
         case !empty($whitelist):
             // Calendars
             if ($calendars) {
                 foreach ($calendars as $calendar) {
                     if (isset($whitelist['calendars']) && in_array($calendar['calendar_id'], $whitelist['calendars'])) {
                         \Rest::delete('https://www.googleapis.com/calendar/v3/calendars/' . $calendar['calendar_id'], array(), $destination);
                     }
                 }
             }
             break;
             # Move
             ############################################################################
         # Move
         ############################################################################
         case $destination['username']['id'] == $source['username']['id']:
             // Calendars
             if ($calendars) {
                 foreach ($calendars as $calendar) {
                     \Rest::delete('https://www.googleapis.com/calendar/v3/calendars/' . $calendar['calendar_id'], array(), $destination);
                 }
             }
             # Migrate / Sync
             ############################################################################
         # Migrate / Sync
         ############################################################################
         default:
             // Calendars
             if ($calendars && $task['stats']['calendars']) {
                 foreach ($calendars as $calendar) {
                     if ($calendar['calendar_new_id']) {
                         \Rest::delete('https://www.googleapis.com/calendar/v3/calendars/' . $calendar['calendar_new_id'], array(), $destination);
                     }
                 }
             }
             // Events
             if ($toDeleteEvents && $task['stats']['events']) {
                 foreach ($toDeleteEvents as $event) {
                     \Rest::delete('https://www.googleapis.com/calendar/v3/calendars/' . $event['calendarId'] . '/events/' . $event['eventId'], array(), $destination);
                 }
             }
             break;
     }
 }