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; } }
/** * 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); }
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; }