/** * preSave. * * @param Doctrine_Event $event */ public function preSave($event) { $record = $event->getInvoker(); if ($record->isNew()) { $file = $record->getFilename(); if ($file != basename($file) && is_file($file)) { $fs = new lyMediaFileSystem(); $dest_path = $record->getFolderPath(); $dest_file = $fs->generateUniqueFileName($dest_path, basename($file)); $fs->import($file, $dest_path . $dest_file); $record->setType(mime_content_type($file)); $record->setFilename($dest_file); } if ($record->supportsThumbnails()) { lyMediaTools::generateThumbnails($record->getFolderPath(), $record->getFilename()); } } else { $modified = $record->getModified(true); if (isset($modified['folder_id']) || isset($modified['filename'])) { //Selected new folder or edited filename: move/rename asset $dest_folder = Doctrine::getTable('lyMediaFolder')->find($record->getFolderId()); $src_folder = $dest_folder; if (isset($modified['folder_id'])) { $src_folder = Doctrine::getTable('lyMediaFolder')->find($modified['folder_id']); } $src = $src_folder->getRelativePath() . (isset($modified['filename']) ? $modified['filename'] : $record->getFileName()); $dest = $dest_folder->getRelativePath() . $record->getFileName(); $fs = new lyMediaFileSystem(); $fs->rename($src, $dest, $record->supportsThumbnails()); } } }
/** * Used by synchronize task. * * @param string $baseFolder * @param bool $verbose * @param bool $removeOrphanAssets * @param bool $removeOrphanFolders */ public function synchronizeWith($baseFolder, $verbose = true, $removeOrphanAssets = false, $removeOrphanFolders = false) { if (!is_dir($baseFolder)) { throw new lyMediaException(sprintf('%s is not a directory', $baseFolder)); } $files = sfFinder::type('file')->maxdepth(0)->ignore_version_control()->in($baseFolder); $assets = $this->getAssetsWithFilenames(); $fs = new lyMediaFileSystem(); foreach ($files as $file) { $basename = basename($file); if (!array_key_exists($basename, $assets)) { // File exists, asset does not exist: create asset $fs->import($file, $this->getRelativePath() . $basename); $lyMediaAsset = new lyMediaAsset(); $lyMediaAsset->setFolderId($this->getId()); $lyMediaAsset->setFilename($basename); $lyMediaAsset->setType(mime_content_type($file)); $lyMediaAsset->setFilesize(filesize($file) / 1024); $lyMediaAsset->save(); if ($verbose) { lyMediaTools::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) { lyMediaTools::log(sprintf("Deleting asset %s", $asset->getPath()), 'yellow'); } } else { if ($verbose) { lyMediaTools::log(sprintf("Warning: No file for asset %s", $asset->getPath()), 'red'); } } } $dirs = sfFinder::type('dir')->maxdepth(0)->discard(lyMediaTools::getThumbnailFolder())->ignore_version_control()->in($baseFolder); $folders = $this->getSubfoldersWithFolderNames(); foreach ($dirs as $dir) { list(, $name) = lyMediaTools::splitPath($dir); if (!array_key_exists($name, $folders)) { // dir exists in filesystem, not in database: create folder in database $lyMediaFolder = new lyMediaFolder(); $lyMediaFolder->setName($name); $lyMediaFolder->create($this); if ($verbose) { lyMediaTools::log(sprintf("Importing directory %s", $dir), 'green'); } } else { // dir exists in filesystem and database: look inside $lyMediaFolder = $folders[$name]; unset($folders[$name]); } $lyMediaFolder->synchronizeWith($dir, $verbose, $removeOrphanAssets, $removeOrphanFolders); } foreach ($folders as $name => $folder) { if ($removeOrphanFolders) { $folder->delete(null, true); if ($verbose) { lyMediaTools::log(sprintf("Deleting folder %s", $folder->getRelativePath()), 'yellow'); } } else { if ($verbose) { lyMediaTools::log(sprintf("Warning: No directory for folder %s", $folder->getRelativePath()), 'red'); } } } }