Esempio n. 1
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();
             }
         }
     }
 }
Esempio n. 2
0
 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;
             }
         }
     }
     // Migrated Data
     $migratedData = array();
     $share = SharesModel::first(array('task_id' => $task['id']));
     if ($share) {
         $share = $share->toArray();
         $migratedData = json_decode($share['data'], true);
         $service = ServicesModel::first($share['service_id'])->toArray();
         $backups = call_user_func_array(array('app\\libraries\\' . $service['library'], 'shared'), array($task));
     }
     echo \Render::view('clean/details/' . strtolower($_service['name']), array('task' => $task, 'service' => $_service, 'migratedData' => $migratedData, 'data' => $backups), 'return');
 }
Esempio n. 3
0
 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');
 }