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(); }
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(); }
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); } } } } } }
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 _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; } }
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(); } } } }
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.')); }