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; } }
public static function detail() { $taskId = (int) $_POST['id']; $task = TasksModel::details($taskId); if ($task['services']) { foreach ($task['services'] as $service) { if ($service['id'] == $_POST['type']) { $_service = $service; } } } $kinds = array(); $graphData = array(); switch ($_service['name']) { case 'Youtube': $kinds = array(Youtube::$kind['playlist'], Youtube::$kind['subscription']); // Graph data $graphData['source']['playlists'] = PlaylistsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_id']))->toArray(); $graphData['source']['subscriptions'] = SubscriptionsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_id']))->toArray(); $graphData['destination']['playlists'] = PlaylistsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_affected_id']))->toArray(); $graphData['destination']['subscriptions'] = SubscriptionsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_affected_id']))->toArray(); break; case 'Contacts': $kinds = array(Contacts::$kind['contact']); // Graph data $graphData['source']['contacts'] = BackupsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_id'], 'entity_type' => Contacts::$kind['contact']))->toArray(); $graphData['destination']['contacts'] = BackupsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_affected_id'], 'entity_type' => Contacts::$kind['contact']))->toArray(); break; case 'Tasks': $kinds = array(Tasks::$kind['list']); // Graph data $graphData['source']['lists'] = BackupsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_id'], 'entity_type' => Tasks::$kind['list']))->toArray(); $graphData['destination']['lists'] = BackupsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_affected_id'], 'entity_type' => Tasks::$kind['list']))->toArray(); break; case 'Calendar': $kinds = array(Calendar::$kind['calendar']); // Graph data $graphData['source']['calendars'] = BackupsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_id'], 'entity_type' => Calendar::$kind['calendar']))->toArray(); $graphData['destination']['calendars'] = BackupsModel::all(array('sync_task_id' => $taskId, 'user_id' => $task['user_affected_id'], 'entity_type' => Calendar::$kind['calendar']))->toArray(); break; } // Migrated Data $migratedData = array(); $migrated = MigratedDataModel::all(array('sync_task_id' => $taskId, 'kind' => $kinds))->toArray(); if ($migrated) { foreach ($migrated as $migrate) { switch ($migrate['kind']) { case Youtube::$kind['playlist']: $play = PlaylistsModel::first($migrate['table_id'])->toArray(); $migratedData['playlists'][] = $play; $migratedData['playlistsGraph'][$migrate['source_id']][] = $play; $migratedData['playlistsIds'][] = $play['id']; break; case Youtube::$kind['subscription']: $subs = SubscriptionsModel::first($migrate['table_id'])->toArray(); $migratedData['subscriptions'][] = $subs; $migratedData['subscriptionsGraph'][$migrate['source_id']][] = $subs; $migratedData['subscriptionsIds'][] = $subs['id']; break; case Contacts::$kind['contact']: $contact = BackupsModel::first($migrate['table_id'])->toArray(); $migratedData['contacts'][] = $contact; $migratedData['contactsGraph'][$migrate['source_id']][] = $contact; $migratedData['contactsIds'][] = $contact['id']; break; case Tasks::$kind['list']: $contact = BackupsModel::first($migrate['table_id'])->toArray(); $migratedData['lists'][] = $contact; $migratedData['listsGraph'][$migrate['source_id']][] = $contact; $migratedData['listsIds'][] = $contact['id']; break; case Calendar::$kind['calendar']: $calendar = CalendarsModel::first($migrate['table_id'])->toArray(); $migratedData['calendars'][] = $calendar; $migratedData['calendarsGraph'][$migrate['source_id']][] = $calendar; $migratedData['calendarsIds'][] = $calendar['id']; break; } } } echo \Render::view('migrate/details/' . strtolower($_service['name']), array('task' => $task, 'service' => $_service, 'migratedData' => $migratedData, 'graphData' => $graphData), 'return'); }