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