Пример #1
0
 public function rebuildCache($user_id, $force = false)
 {
     $lastBuildTime = $force ? 0 : \GO::config()->get_setting('files_shared_cache_ctime', $user_id);
     if (!$lastBuildTime || $this->_getLastMtime($user_id) > $lastBuildTime) {
         $home = \GO\Files\Model\Folder::model()->findHomeFolder(GO::user());
         $homeFolder = $home->path;
         \GO::debug("Rebuilding shared cache");
         $this->deleteByAttribute('user_id', $user_id);
         $stmt = $this->_findShares($user_id);
         //sort by path and only list top level shares
         $shares = array();
         while ($folder = $stmt->fetch()) {
             //$folder->checkFsSync();
             //sort by path and only list top level shares
             $shares[$folder->path] = $folder;
         }
         ksort($shares);
         foreach ($shares as $path => $folder) {
             $isSubDir = isset($lastPath) && strpos($path . '/', $lastPath . '/') === 0;
             $isInHome = strpos($path . '/', $homeFolder . '/') === 0;
             if (!$isSubDir && !$isInHome) {
                 $sharedRoot = new SharedRootFolder();
                 $sharedRoot->user_id = $user_id;
                 $sharedRoot->folder_id = $folder->id;
                 $sharedRoot->save();
                 $lastPath = $path;
             }
         }
         \GO::config()->save_setting('files_shared_cache_ctime', time(), $user_id);
         return time();
     } else {
         return $lastBuildTime;
     }
 }
Пример #2
0
 /**
  * Returns the last modification time, as a unix timestamp
  *
  * @return int
  */
 public function getLastModified()
 {
     //checks the folders and returns build time
     return \GO\Files\Model\SharedRootFolder::model()->rebuildCache(\GO::user()->id, false);
 }
Пример #3
0
 protected function actionTree($params)
 {
     //refresh forces sync with db
     if (!empty($params['sync_folder_id'])) {
         if ($params['sync_folder_id'] == "shared") {
             \GO\Files\Model\SharedRootFolder::model()->rebuildCache(\GO::user()->id, true);
         } else {
             if (empty(GO::config()->files_disable_filesystem_sync)) {
                 $syncFolder = \GO\Files\Model\Folder::model()->findByPk($params['sync_folder_id']);
                 if ($syncFolder) {
                     $syncFolder->syncFilesystem();
                 }
             }
         }
     }
     $response = array();
     $expandFolderIds = $this->_getExpandFolderIds($params);
     $showFiles = isset($params['showFiles']);
     switch ($params['node']) {
         case 'shared':
             $response = $this->_buildSharedTree($expandFolderIds);
             break;
         case 'root':
             if (!empty($params['root_folder_id'])) {
                 $folder = \GO\Files\Model\Folder::model()->findByPk($params['root_folder_id']);
                 //					$folder->checkFsSync();
                 $node = $this->_folderToNode($folder, $expandFolderIds, true, $showFiles);
                 $response[] = $node;
             } else {
                 $folder = \GO\Files\Model\Folder::model()->findHomeFolder(\GO::user());
                 //					$folder->checkFsSync();
                 $node = $this->_folderToNode($folder, $expandFolderIds, true, $showFiles);
                 $node['text'] = \GO::t('personal', 'files');
                 $node['iconCls'] = 'folder-home';
                 $node['path'] = $folder->path;
                 $response[] = $node;
                 $node = array('text' => \GO::t('shared', 'files'), 'id' => 'shared', 'readonly' => true, 'draggable' => false, 'allowDrop' => false, 'parent_id' => 0, 'iconCls' => 'folder-shares', 'path' => "shared");
                 //expand shares for non admins only. Admin may see too many folders.
                 if (!\GO::user()->isAdmin()) {
                     $node['expanded'] = true;
                     $node['children'] = $this->_buildSharedTree($expandFolderIds);
                 }
                 $response[] = $node;
                 if (GO::config()->files_show_addressbooks && GO::modules()->addressbook) {
                     $contactsFolder = \GO\Files\Model\Folder::model()->findByPath('addressbook');
                     if ($contactsFolder) {
                         $node = $this->_folderToNode($contactsFolder, $expandFolderIds, false, $showFiles);
                         $node['text'] = \GO::t('addressbook', 'addressbook');
                         $response[] = $node;
                     }
                 }
                 if (GO::config()->files_show_projects && GO::modules()->projects) {
                     $projectsFolder = \GO\Files\Model\Folder::model()->findByPath('projects');
                     if ($projectsFolder) {
                         $node = $this->_folderToNode($projectsFolder, $expandFolderIds, false, $showFiles);
                         $node['text'] = \GO::t('projects', 'projects');
                         $response[] = $node;
                     }
                 }
                 if (GO::config()->files_show_projects && GO::modules()->projects2) {
                     $projectsFolder = \GO\Files\Model\Folder::model()->findByPath('projects2');
                     if ($projectsFolder) {
                         $node = $this->_folderToNode($projectsFolder, $expandFolderIds, false, $showFiles);
                         $node['text'] = \GO::t('projects', 'projects2');
                         $response[] = $node;
                     }
                 }
                 if (\GO::user()->isAdmin()) {
                     $logFolder = \GO\Files\Model\Folder::model()->findByPath('log', true);
                     //						$logFolder->syncFilesystem();
                     $node = $this->_folderToNode($logFolder, $expandFolderIds, false, $showFiles);
                     $node['text'] = \GO::t('logFiles');
                     $response[] = $node;
                 }
             }
             break;
         default:
             $folder = \GO\Files\Model\Folder::model()->findByPk($params['node']);
             if (!$folder) {
                 return false;
             }
             //				$folder->checkFsSync();
             $stmt = $folder->getSubFolders(\GO\Base\Db\FindParams::newInstance()->limit(200)->order('name', 'ASC'));
             while ($subfolder = $stmt->fetch()) {
                 $response[] = $this->_folderToNode($subfolder, $expandFolderIds, false, $showFiles);
                 if ($showFiles) {
                     $response = array_merge($response, $this->_addFileNodes($subfolder->parent));
                 }
             }
             break;
     }
     return $response;
 }