Example #1
0
 public static function start()
 {
     // Create task
     $task = TasksModel::create();
     $task->user_id = $_SESSION['current']['username']['id'];
     $task->user_affected_id = $_SESSION['current']['username']['id'];
     $task->group_id = $_SESSION['current']['username']['group'];
     $task->type = TasksModel::TYPE_BACKUP;
     $task->title = 'Backup Data';
     $task->created_at = date(DATE_TIME);
     $task->estimate = 10 * 60;
     $task->status = TasksModel::STATUS_PROGRESS;
     $task->save();
     // Add services
     if ($_POST['services']) {
         foreach ($_POST['services'] as $serviceId) {
             $serviceId = (int) $serviceId;
             $taskService = TasksServicesModel::create(array('task_id' => $task->id, 'service_id' => $serviceId))->save();
         }
         $task->contains = json_encode(ServicesActionsModel::getActions($_POST['services']));
         $task->save();
     }
     \Util::notice(array('type' => 'success', 'text' => 'The backup process has started. Check the list below to review it\'s status.'));
     $task = new PushTask('/queue/backup/' . $task->id);
     $task->add();
 }
Example #2
0
 public static function start()
 {
     // Create task
     $task = TasksModel::create();
     $task->user_id = $_SESSION['current']['username']['id'];
     $task->user_affected_id = $_SESSION['current']['username']['id'];
     $task->group_id = $_SESSION['current']['username']['group'];
     $task->type = TasksModel::TYPE_CLEAN;
     $task->title = 'Clean Data';
     $task->created_at = date(DATE_TIME);
     $task->estimate = 10 * 60;
     $task->save();
     // Add services to task
     if (isset($_SESSION['clean']) && $_SESSION['clean']['service']) {
         $serviceId = (int) $_SESSION['clean']['service'];
         TasksServicesModel::create(array('task_id' => $task->id, 'service_id' => $serviceId))->save();
         $task->save();
     }
     // Create share
     $share = SharesModel::create();
     $share->task_id = $task->id;
     $share->user_id = $_SESSION['current']['username']['id'];
     $share->service_id = $_SESSION['clean']['service'];
     $share->title = 'Clean Data';
     $share->data = json_encode($_SESSION['clean']['selectedData']);
     $share->link = sha1($task->user_id . time());
     $share->expires = 86400;
     $share->created_at = date(DATE_TIME);
     $share->status = SharesModel::STATUS_ACTIVE;
     $share->save();
     // Reset clean
     unset($_SESSION['clean']);
     \Util::notice(array('type' => 'success', 'text' => 'The cleaning process has started. Check the list below to review it\'s status.'));
     $task = new PushTask('/queue/add/' . $task->id);
     $task->add();
 }
Example #3
0
 public static function _clean($destination, $source, $syncTaskId = 0, $whitelist = array())
 {
     $service = ServicesModel::first(array('library' => 'Tasks'))->toArray();
     $task = TasksServicesModel::first(array('task_id' => $syncTaskId, 'service_id' => $service['id']))->toArray();
     $task['stats'] = json_decode($task['stats'], true);
     // lists
     $lists = BackupsModel::all(array('user_id' => $source['username']['id'], 'sync_task_id' => $syncTaskId, 'entity_type' => static::$kind['list']))->toArray();
     if ($lists && ($task['stats']['lists'] || $destination['username']['id'] == $source['username']['id'])) {
         foreach ($lists as $list) {
             // $whitelist - shared or clean data
             if ($whitelist) {
                 if (isset($whitelist['lists']) && in_array($list['entity_id'], $whitelist['lists'])) {
                     \Rest::delete('https://www.googleapis.com/tasks/v1/users/@me/lists/' . $list['entity_id'], array(), $destination);
                 }
             } else {
                 if ($destination['username']['id'] == $source['username']['id']) {
                     \Rest::delete('https://www.googleapis.com/tasks/v1/users/@me/lists/' . $list['entity_id'], array(), $destination);
                 } else {
                     if ($list['entity_new_id']) {
                         \Rest::delete('https://www.googleapis.com/tasks/v1/users/@me/lists/' . $list['entity_new_id'], array(), $destination);
                     }
                 }
             }
         }
     }
 }
Example #4
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;
     }
 }
Example #5
0
 public static function _clean($destination, $source, $syncTaskId = 0, $whitelist = array())
 {
     $service = ServicesModel::first(array('library' => 'Youtube'))->toArray();
     $task = TasksServicesModel::first(array('task_id' => $syncTaskId, 'service_id' => $service['id']))->toArray();
     $task['stats'] = json_decode($task['stats'], true);
     // Playlists
     $playlists = PlaylistsModel::all(array('user_id' => $source['username']['id'], 'sync_task_id' => $syncTaskId))->toArray();
     // Videos
     $videos = array();
     $migratedVideos = MigratedDataModel::all(array('source_id' => $source['username']['id'], 'sync_task_id' => $syncTaskId, 'kind' => static::$kind['video']));
     if ($migratedVideos) {
         $migratedVideos = $migratedVideos->toArray();
         if ($migratedVideos) {
             $destinationPlaylists = PlaylistsModel::all(array('user_id' => $destination['username']['id'], 'sync_task_id' => $syncTaskId));
             if ($destinationPlaylists) {
                 $destinationPlaylists = $destinationPlaylists->toArray();
                 if ($destinationPlaylists) {
                     foreach ($destinationPlaylists as $playlist) {
                         foreach ($migratedVideos as $video) {
                             $payload = array('part' => static::$part['playlistItems']['minimal'], 'playlistId' => $playlist['youtube_playlist_id'], 'videoId' => $video['identifier']);
                             $vids = array();
                             $vids = \Rest::get(static::$endpoints['playlistItems'], $payload, $destination);
                             if (isset($vids['result']['error'])) {
                                 d($vids);
                             }
                             if ($vids && $vids['items']) {
                                 foreach ($vids['items'] as $vid) {
                                     $videos[] = $vid['id'];
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     // Subscriptions
     $newSubscriptions = array();
     $oldSubscriptions = MigratedDataModel::all(array('destination_id' => $destination['username']['id'], 'sync_task_id' => $syncTaskId))->column('identifier');
     do {
         $payload = array('part' => static::$part['subscriptions']['minimal'], 'mine' => 'true', 'maxResults' => static::$limit);
         if (isset($subscriptions['nextPageToken'])) {
             $payload['pageToken'] = $subscriptions['nextPageToken'];
         }
         $subscriptions = \Rest::get(static::$endpoints['subscriptions'], $payload, $destination);
         if (isset($subscriptions['result']['error'])) {
             d($subscriptions);
         }
         if ($subscriptions['items']) {
             foreach ($subscriptions['items'] as $sub) {
                 $newSubscriptions[] = $sub;
             }
         }
     } while (isset($subscriptions['nextPageToken']) && $subscriptions['nextPageToken']);
     switch (true) {
         # Share / Clean
         ############################################################################
         case !empty($whitelist):
             // Playlist
             if ($playlists) {
                 foreach ($playlists as $playlist) {
                     if (isset($whitelist['playlists']) && in_array($playlist['youtube_playlist_id'], $whitelist['playlists'])) {
                         \Rest::delete(static::$endpoints['playlists'], array('id' => $playlist['youtube_playlist_id']), $destination);
                     }
                 }
             }
             // Subscriptions
             if ($newSubscriptions) {
                 foreach ($newSubscriptions as $sub) {
                     if (isset($whitelist['subscriptions']) && in_array($sub['snippet']['resourceId']['channelId'], $whitelist['subscriptions'])) {
                         \Rest::delete(static::$endpoints['subscriptions'], array('id' => $sub['id']), $destination);
                     }
                 }
             }
             break;
             # Move
             ############################################################################
         # Move
         ############################################################################
         case $destination['username']['id'] == $source['username']['id']:
             // Playlist
             if ($playlists) {
                 foreach ($playlists as $playlist) {
                     \Rest::delete(static::$endpoints['playlists'], array('id' => $playlist['youtube_playlist_id']), $destination);
                 }
             }
             // Subscriptions
             if ($newSubscriptions) {
                 foreach ($newSubscriptions as $sub) {
                     \Rest::delete(static::$endpoints['subscriptions'], array('id' => $sub['id']), $destination);
                 }
             }
             break;
             # Migrate / Sync
             ############################################################################
         # Migrate / Sync
         ############################################################################
         default:
             // Playlist
             if ($playlists && $task['stats']['playlists']) {
                 foreach ($playlists as $playlist) {
                     if ($playlist['new_youtube_id']) {
                         \Rest::delete(static::$endpoints['playlists'], array('id' => $playlist['new_youtube_id']), $destination);
                     }
                 }
             }
             // Videos
             if ($videos && $task['stats']['videos']) {
                 foreach ($videos as $videoId) {
                     \Rest::delete(static::$endpoints['playlistItems'], array('id' => $videoId), $destination);
                 }
             }
             // Subscriptions
             if ($newSubscriptions) {
                 foreach ($newSubscriptions as $sub) {
                     if (in_array($sub['snippet']['resourceId']['channelId'], $oldSubscriptions) && $task['stats']['subscriptions']) {
                         \Rest::delete(static::$endpoints['subscriptions'], array('id' => $sub['id']), $destination);
                     }
                 }
             }
             break;
     }
 }
Example #6
0
 public static function add($taskId = 0, $revert = false)
 {
     $taskId = (int) $taskId;
     if ($taskId) {
         $start = microtime(true);
         $task = TasksModel::details($taskId);
         // Settings
         $settings = array('initialStatus' => TasksModel::STATUS_SCHEDULED, 'startStatus' => TasksModel::STATUS_PROGRESS, 'finishStatus' => TasksModel::STATUS_FINISHED, 'source' => true, 'sourceBackup' => true, 'destination' => true, 'destinationBackup' => true, 'action' => true, 'actionType' => TasksModel::TYPE_BACKUP);
         if ($task && $task['services']) {
             switch ($task['type']) {
                 case TasksModel::TYPE_BACKUP:
                     $settings['destination'] = false;
                     $settings['action'] = false;
                     break;
                 case TasksModel::TYPE_MIGRATE:
                 case TasksModel::TYPE_SYNC:
                 case TasksModel::TYPE_MOVE:
                     $settings['actionType'] = $task['type'];
                     if ($revert) {
                         $settings['initialStatus'] = TasksModel::STATUS_FINISHED;
                         $settings['startStatus'] = TasksModel::STATUS_REVERTING;
                         $settings['finishStatus'] = TasksModel::STATUS_REVERTED;
                         $settings['sourceBackup'] = false;
                         $settings['destinationBackup'] = false;
                         $settings['actionType'] = TasksModel::TYPE_REVERT;
                     }
                     break;
                 case TasksModel::TYPE_SHARE:
                     $settings['destination'] = false;
                     $settings['action'] = false;
                     break;
                 case TasksModel::TYPE_CLEAN:
                     $settings['destination'] = false;
                     $settings['actionType'] = TasksModel::TYPE_CLEAN;
                     if ($revert) {
                         $settings['initialStatus'] = TasksModel::STATUS_FINISHED;
                         $settings['startStatus'] = TasksModel::STATUS_REVERTING;
                         $settings['finishStatus'] = TasksModel::STATUS_REVERTED;
                         $settings['sourceBackup'] = false;
                         $settings['destinationBackup'] = false;
                         $settings['actionType'] = TasksModel::TYPE_REVERT;
                     }
                     break;
             }
             if ($task['status'] == $settings['initialStatus']) {
                 // Start the task
                 $dbTask = TasksModel::first($taskId);
                 $dbTask->started_at = date(DATE_TIME);
                 $dbTask->status = $settings['startStatus'];
                 $dbTask->save();
                 $source = array();
                 if ($settings['source']) {
                     $source = UsersModel::profile($task['user_id']);
                     $source['credentials'] = \Auth::oAuthRefreshToken($source, 'updateSession', 'force');
                 }
                 $destination = array();
                 if ($settings['destination']) {
                     $destination = UsersModel::profile($task['user_affected_id']);
                     $destination['credentials'] = \Auth::oAuthRefreshToken($destination, 'updateSession', 'force');
                 }
                 // Call services
                 foreach ($task['services'] as $service) {
                     $stats = array();
                     // Save source data
                     if ($settings['source'] && $settings['sourceBackup']) {
                         $stats = call_user_func_array(array('app\\libraries\\' . $service['library'], 'backup'), array($source, 0, $taskId));
                     }
                     // Save destination data
                     if ($settings['destination'] && $settings['destinationBackup']) {
                         $stats = call_user_func_array(array('app\\libraries\\' . $service['library'], 'backup'), array($destination, 0, $taskId));
                     }
                     // Copy source to destination
                     if ($settings['action'] && $settings['actionType']) {
                         $stats = call_user_func_array(array('app\\libraries\\' . $service['library'], $settings['actionType']), array($source, $destination, $taskId, false));
                     }
                     // Update task service
                     $taskService = TasksServicesModel::first(array('task_id' => $task['id'], 'service_id' => $service['id']));
                     if ($settings['actionType'] != TasksModel::TYPE_REVERT) {
                         $taskService->stats = json_encode($stats);
                         $taskService->save();
                     }
                 }
                 // Finish Task
                 $dbTask->finished_at = date(DATE_TIME, time());
                 $dbTask->duration = microtime(true) - $start;
                 $dbTask->status = $settings['finishStatus'];
                 $dbTask->save();
             }
         }
     }
 }
Example #7
0
 public static function start()
 {
     // Create task
     $task = TasksModel::create();
     $task->user_id = $_SESSION['wizard']['source']['username']['id'];
     $task->user_affected_id = $_SESSION['wizard']['destination']['username']['id'];
     $task->group_id = $_SESSION['current']['username']['group'];
     $task->type = \Util::action(false, $_SESSION['wizard']['action']);
     $task->title = ucfirst(\Util::action()) . ' Data';
     $task->created_at = date(DATE_TIME);
     $task->estimate = 10 * 60;
     $task->save();
     // Add services
     if ($_SESSION['wizard']['services']) {
         foreach ($_SESSION['wizard']['services'] as $serviceId => $service) {
             $serviceId = (int) $serviceId;
             TasksServicesModel::create(array('task_id' => $task->id, 'service_id' => $serviceId))->save();
         }
         $task->contains = json_encode(ServicesActionsModel::getActions($_POST['services']));
         $task->save();
     }
     // Reset wizard
     unset($_SESSION['wizard']);
     $task = new PushTask('/queue/add/' . $task->id);
     $task->add();
     // Notification
     \Util::notice(array('type' => 'success', 'text' => 'Your ' . \Util::action('termination') . ' process has started. Check the list below to see it\'s status.'));
 }