Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 /**
  * 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;
 }