/** * Recursively creates parent folders * * @param string $path * @return sfAssetFolder */ public static function createFromPath($path) { $path = self::cleanPath($path); list($parent_path, $name) = sfAssetsLibraryTools::splitPath($path); if (!($parent_folder = self::retrieveByPath($parent_path))) { $parent_folder = self::createFromPath($parent_path); $parent_folder->save(); } $folder = new sfAssetFolder(); $folder->setName($name); $folder->setRelativePath($path); $folder->insertAsLastChildOf($parent_folder); $folder->save(); return $folder; }
/** * Overrrides the parent synchronizeWith() method to add a fix when calling * insertAsLastChildOf($this->reload()) because $this->reload() doesn't return * $this. * * @see parent::synchronizeWith() */ public function synchronizeWith($baseFolder, $verbose = true, $removeOrphanAssets = false, $removeOrphanFolders = false) { if (!is_dir($baseFolder)) { throw new sfAssetException(sprintf('%s is not a directory', $baseFolder)); } $files = sfFinder::type('file')->maxdepth(0)->ignore_version_control()->in($baseFolder); $assets = $this->getAssetsWithFilenames(); foreach ($files as $file) { if (!array_key_exists(basename($file), $assets)) { // File exists, asset does not exist: create asset $sfAsset = new sfAsset(); $sfAsset->setFolderId($this->getId()); $sfAsset->create($file, false); $sfAsset->save(); if ($verbose) { sfAssetsLibraryTools::log(sprintf("Importing file %s", $file), 'green'); } } else { // File exists, asset exists: do nothing unset($assets[basename($file)]); } } foreach ($assets as $name => $asset) { if ($removeOrphanAssets) { // File does not exist, asset exists: delete asset $asset->delete(); if ($verbose) { sfAssetsLibraryTools::log(sprintf("Deleting asset %s", $asset->getUrl()), 'yellow'); } } else { if ($verbose) { sfAssetsLibraryTools::log(sprintf("Warning: No file for asset %s", $asset->getUrl()), 'red'); } } } $dirs = sfFinder::type('dir')->maxdepth(0)->discard(sfConfig::get('app_sfAssetsLibrary_thumbnail_dir', 'thumbnail'))->ignore_version_control()->in($baseFolder); $folders = $this->getSubfoldersWithFolderNames(); foreach ($dirs as $dir) { list(, $name) = sfAssetsLibraryTools::splitPath($dir); if (!array_key_exists($name, $folders)) { $this->reload(); // dir exists in filesystem, not in database: create folder in database $sfAssetFolder = new sfAssetFolder(); $sfAssetFolder->insertAsLastChildOf($this); $sfAssetFolder->setName($name); $sfAssetFolder->save(); if ($verbose) { sfAssetsLibraryTools::log(sprintf("Importing directory %s", $dir), 'green'); } } else { // dir exists in filesystem and database: look inside $sfAssetFolder = $folders[$name]; unset($folders[$name]); } $sfAssetFolder->synchronizeWith($dir, $verbose, $removeOrphanAssets, $removeOrphanFolders); } foreach ($folders as $name => $folder) { if ($removeOrphanFolders) { $folder->delete(null, true); if ($verbose) { sfAssetsLibraryTools::log(sprintf("Deleting folder %s", $folder->getRelativePath()), 'yellow'); } } else { if ($verbose) { sfAssetsLibraryTools::log(sprintf("Warning: No directory for folder %s", $folder->getRelativePath()), 'red'); } } } }
public function executeCreateFolder() { if ($this->getRequest()->getMethod() == sfRequest::POST) { // Handle the form submission $parentFolder = sfAssetFolderPeer::retrieveByPath($this->getRequestParameter('parent_folder')); $this->forward404Unless($parentFolder); $folder = new sfAssetFolder(); $folder->setName($this->getRequestParameter('name')); $folder->insertAsLastChildOf($this->parentFolder); $folder->save(); $this->redirectToPath('sfAsset/list?dir=' . $folder->getRelativePath()); } else { // Display the form return sfView::SUCCESS; } }
/** * create folder * @param sfWebRequest $request */ public function executeCreateFolder(sfWebRequest $request) { $this->form = new sfAssetFolderForm(); $this->form->bind($request->getParameter($this->form->getName())); if ($this->form->isValid()) { $parentFolder = sfAssetFolderPeer::retrieveByPK($this->form->getValue('parent_folder')); $this->forward404Unless($parentFolder, 'parent folder not found'); $folder = new sfAssetFolder(); $folder->setName($this->form->getValue('name')); $folder->insertAsLastChildOf($parentFolder); $folder->save(); $this->redirectToPath('@sf_asset_library_dir?dir=' . $folder->getRelativePath()); } }