/** * Disconnect user from service * * @param string $service Service name (google or dropbox) * @param boolean $removeData Remove remote data (when project creator) * * @return JSON string or false */ public function disconnect($service, $removeData = false) { if (!$service || !in_array($service, $this->_services)) { $this->setError(Lang::txt('PLG_PROJECTS_FILES_SYNC_INVALID_SERVICE')); return false; } $config = $this->_connect[$service]; // Make sure we have service if (!isset($config) || !$config) { $this->setError(Lang::txt('PLG_PROJECTS_FILES_SYNC_MISSING_CONFIG')); return false; } // Load project $obj = new \Components\Projects\Tables\Project($this->_db); if (!$obj->loadProject($this->model->get('id'))) { $this->setError(Lang::txt('PLG_PROJECTS_FILES_SYNC_PROBLEM_LOADING_DATA')); return false; } // Get project params $pparams = $this->model->params; // Remove all connection info and remote data $remoteid = $pparams->get($service . '_dir_id'); // Project creator? $creator = $this->_uid == $this->model->get('owned_by_user') ? 1 : 0; // Clean up stored values for the disconnecting member $this->disconnectMember($service, $this->_uid, $remoteid); // Disconnect service if user is project creator if ($creator) { if ($removeData == true && $remoteid) { // Disconnect all members $objO = $this->model->table('Owner'); $owners = $objO->getOwners($this->model->get('id'), $filters = array('connected' => 1)); if ($owners) { foreach ($owners as $owner) { // Clean up stored values for the disconnecting member $this->disconnectMember($service, $owner->userid, $remoteid); } } $this->deleteRemoteItem($this->model->get('id'), $service, $this->_uid, $remoteid, $permanent = true); $obj->saveParam($this->model->get('id'), $service . '_sync', ''); $obj->saveParam($this->model->get('id'), $service . '_last_remote_change', ''); $obj->saveParam($this->model->get('id'), $service . '_last_local_change', ''); $obj->saveParam($this->model->get('id'), $service . '_sync_id', ''); $obj->saveParam($this->model->get('id'), $service . '_prev_sync_id', ''); $obj->saveParam($this->model->get('id'), $service . '_sync_lock', ''); $obj->saveParam($this->model->get('id'), $service . '_sync_queue', ''); $obj->saveParam($this->model->get('id'), $service . '_dir_id', ''); } // Clean up token $obj->saveParam($this->model->get('id'), $service . '_token', 0); } return true; }
/** * Auto sync project repositories connected with GDrive * * @param object $job \Components\Cron\Models\Job * @return boolean */ public function googleSync(\Components\Cron\Models\Job $job) { $database = App::get('db'); $pconfig = Component::params('com_projects'); require_once PATH_CORE . DS . 'components' . DS . 'com_projects' . DS . 'tables' . DS . 'project.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_projects' . DS . 'tables' . DS . 'owner.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_projects' . DS . 'helpers' . DS . 'connect.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_projects' . DS . 'helpers' . DS . 'html.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_projects' . DS . 'tables' . DS . 'remotefile.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_projects' . DS . 'helpers' . DS . 'remote' . DS . 'google.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_publications' . DS . 'tables' . DS . 'attachment.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_publications' . DS . 'tables' . DS . 'publication.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_publications' . DS . 'tables' . DS . 'version.php'; // Get all projects $obj = new \Components\Projects\Tables\Project($database); $projects = $obj->getValidProjects(array(), array(), $pconfig, false, 'alias'); if (!$projects) { return true; } $prefix = $pconfig->get('offroot', 0) ? '' : PATH_CORE; $webdir = DS . trim($pconfig->get('webpath'), DS); Request::setVar('auto', 1); foreach ($projects as $alias) { // Load project $project = $obj->getProject($alias, 0); $pparams = new JParameter($project->params); $connected = $pparams->get('google_dir_id'); $token = $pparams->get('google_token'); if (!$connected || !$token) { continue; } // Unlock sync $obj->saveParam($project->id, 'google_sync_lock', ''); // Plugin params $plugin_params = array($project, 'com_projects', true, $project->created_by_user, NULL, NULL, 'sync', array('files')); $sections = Event::trigger('projects.onProject', $plugin_params); } return true; }