protected function doClean($values) { $my_id = 0; if ($values['parent_id']) { $parent = lyMediaFolderTable::getInstance()->find($values['parent_id']); } else { $my_id = $values['id']; $object = lyMediaFolderTable::getInstance()->find($my_id); $parent = $object->getNode()->getParent(); } $fs = new lyMediaFileSystem(); if (!$fs->is_dir($parent->getRelativePath()) || !$fs->is_writable($parent->getRelativePath())) { throw new sfValidatorError($this, 'parent_unwritable', array('name' => $values['name'], 'parent' => $parent->getName())); } if (!$parent || !$parent->getNode()->isValidNode()) { throw new sfValidatorError($this, 'invalid'); } if ($children = $parent->getNode()->getChildren()) { foreach ($children as $c) { if ($values['name'] == $c->getName() && $c->getId() != $my_id) { throw new sfValidatorError($this, 'folder_exists', array('name' => $values['name'], 'parent' => $parent->getName())); } } } return $values; }
protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); if ($arguments['folder']) { $folder = lyMediaFolderTable::getInstance()->findOneByRelativePath(trim($arguments['folder'], DIRECTORY_SEPARATOR) . '/'); } else { $folder = lyMediaFolderTable::getInstance()->getRoot(); } if (false === $folder) { throw new lyMediaException('Folder not found!'); } if (!$this->askConfirmation(array('Thumbnails will be generated for assets in the following media library folder:', '', $folder->getRelativePath() . ($options['no-recurse'] ? '' : ' and ALL subfolders recursively (use option --no-recurse to avoid it)'), '', 'Are you sure you want to proceed? (y/N)'), 'QUESTION_LARGE', false)) { $this->logSection('media', 'task aborted'); return 1; } if ($options['no-recurse']) { $folders = array($folder); } else { $folders = $folder->getNode()->getDescendants(null, true); } foreach ($folders as $folder) { $this->logSection('media', sprintf('Working in %s ...', $folder->getRelativePath()), null, 'COMMENT'); try { $folder->generateThumbnails(); } catch (lyMediaException $e) { throw new sfException(strtr($e->getMessage(), $e->getMessageParams())); } $this->logSection('media', 'Done!'); } }
/** * @see sfTask */ protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); if (lyMediaFolderTable::getInstance()->getRoot()) { throw new sfException('The media library already has a root'); } $this->logSection('media-manager', sprintf('Creating root node at %s...', sfConfig::get('app_lyMediaManager_media_root', 'media')), null, 'COMMENT'); lyMediaFolderTable::getInstance()->createRoot(sfConfig::get('app_lyMediaManager_media_root', 'media')); $this->logSection('media-manager', 'Root Node Created', null, 'INFO'); }
protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $rootFolder = lyMediaFolderTable::getInstance()->getRoot(); //TODO: check if media root has been created $this->logSection('media', sprintf('Comparing files from %s with assets stored in the database...', $arguments['dirname']), null, 'COMMENT'); try { $rootFolder->synchronizeWith($arguments['dirname'], $options['verbose'], $options['removeOrphanAssets'], $options['removeOrphanFolders']); } catch (lyMediaException $e) { throw new sfException(strtr($e->getMessage(), $e->getMessageParams())); } $this->logSection('media', 'Synchronization complete', null, 'INFO'); }
protected function doBind(array $values) { if ($this->isNew()) { if ($values['folder_id']) { $folder = lyMediaFolderTable::getInstance()->find($values['folder_id']); $this->validatorSchema['filename']->setOption('path', $this->getOption('upload_root') . $folder->getPath()); } } else { if (empty($values['folder_id'])) { //Folder unchanged $values['folder_id'] = $this->getObject()->getFolderId(); } } parent::doBind($values); }
protected function doClean($values) { $folder = lyMediaFolderTable::getInstance()->find($values['folder_id']); if ($folder === false) { throw new sfValidatorError($this, 'invalid'); } $fs = new lyMediaFileSystem(); if (!$fs->is_dir($folder->getRelativePath()) || !$fs->is_writable($folder->getRelativePath())) { throw new sfValidatorError($this, 'folder_unwritable', array('folder' => $folder->getRelativePath())); } $my_id = empty($values['id']) ? 0 : $values['id']; $assets = $folder->getAssets(); foreach ($assets as $a) { if ($values['filename'] == $a->getFilename() && $a->getId() != $my_id) { throw new sfValidatorError($this, 'file_exists', array('name' => $values['filename'], 'folder' => $folder->getName())); } } return $values; }
public function executeAdd(sfWebRequest $request) { $parent = lyMediaFolderTable::getInstance()->retrieveCurrent($this->getUser()->getAttribute('folder_id', 0)); $form = new lyMediaCreateFolderForm(null, array('parent' => $parent)); $form->bind($request->getParameter($form->getName())); if ($form->isValid()) { try { $form->save(); $this->getUser()->setFlash('notice', 'Folder successfully created.'); } catch (lyMediaException $e) { $this->getUser()->setFlash('error', strtr($e->getMessage(), $e->getMessageParams())); } } else { if ($form['name']->hasError()) { $msg = 'Error on folder name: '; $msg .= $form['name']->getError()->getMessage(); } elseif ($form->hasGlobalErrors()) { $errors = $form->getGlobalErrors(); $msg = $errors[0]->getMessage(); } $this->getUser()->setFlash('error', $msg); } $this->redirect('@ly_media_asset_icons?folder_id=' . $this->getUser()->getAttribute('folder_id', 0) . ($this->getUser()->getAttribute('popup', 0) ? '&popup=1' : '')); }
/** * 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); } $record->generateThumbnails(); } else { $modified = $record->getModified(true); if (isset($modified['folder_id']) || isset($modified['filename'])) { //Selected new folder or edited filename: move/rename asset $dest_folder = lyMediaFolderTable::getInstance()->find($record->getFolderId()); $src_folder = $dest_folder; if (isset($modified['folder_id'])) { $src_folder = lyMediaFolderTable::getInstance()->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()); } } }
* file that was distributed with this source code. */ /** * Functional tests for file system errors. * * @package lyMediaManagerPlugin * @subpackage functional tests * @copyright Copyright (C) 2010 Massimo Giagnoni. * @license http://www.symfony-project.org/license MIT * @version SVN: $Id$ */ include dirname(__FILE__) . '/../bootstrap/functional.php'; Doctrine_Core::loadData(dirname(__FILE__) . '/../data/fixtures/fixtures_fs.yml'); $root = Doctrine::getTable('lyMediaFolder')->findOneByName('media'); $subf1 = lyMediaFolderTable::getInstance()->findOneByName('testsub1'); $subf2 = lyMediaFolderTable::getInstance()->findOneByName('testsub2'); //Creates some test assets. Cannot be done in fixtures $file = dirname(__FILE__) . '/../data/assets/asset1.png'; $asset = new lyMediaAsset(); $asset->setFolder($subf1); $asset->setFilename($file); $asset->save(); $asset->refresh(); $file = dirname(__FILE__) . '/../data/assets/asseta.png'; $asset2 = new lyMediaAsset(); $asset2->setFolder($subf2); $asset2->setFilename($file); $asset2->save(); $asset2->refresh(); $base = sfConfig::get('sf_web_dir') . DIRECTORY_SEPARATOR . 'media' . DIRECTORY_SEPARATOR; chmod($base . 'testsub1', 0555);
<?php include dirname(__FILE__) . '/../bootstrap/unit.php'; $conn = lyMediaFolderTable::getInstance()->getConnection(); $root = lyMediaFolderTable::getInstance()->createRoot('test_root'); $fs = new lyMediaFileSystem(); $t = new lime_test(30, new lime_output_color()); $t->info('Create first level folder'); $folder = new lyMediaFolder(); $folder->setName('test'); $folder->create($root); $folder->refresh(); /* * test_root * -- test */ $t->is($folder->getName(), 'test', '->getName()'); $t->is($folder->getRelativePath(), 'test_root/test/', '->getRelativePath()'); $t->ok($folder->getNode()->isValidNode(), 'Folder is a valid node'); $t->is($folder->getNode()->getPath('/', true), 'test_root/test', 'Folder has right path'); $t->ok($fs->is_dir($folder->getRelativePath()), 'Folder exists in filesystem'); $t->info('Create sub-folder'); $sub = new lyMediaFolder(); $sub->setName('test-sub'); $sub->create($folder); $sub->refresh(); /* * test_root * -- test * -- -- test-sub */
protected function executeBatchDelete(sfWebRequest $request) { $ids = $request->getParameter('ids'); $table = lyMediaFolderTable::getInstance(); foreach ($ids as $id) { $object = $table->find($id); if ($object) { if (!$this->deleteNode($object)) { $this->redirect('@ly_media_folder'); } } } $this->getUser()->setFlash('notice', 'The selected items have been deleted successfully.'); $this->redirect('@ly_media_folder'); }
<?php include dirname(__FILE__) . '/../bootstrap/unit.php'; $fs = new lyMediaFileSystem(); $t = new lime_test(5, new lime_output_color()); $t->info('->createRoot()'); $root = lyMediaFolderTable::getInstance()->createRoot('test_root'); $t->is($root->getRelativePath(), 'test_root/', '->getRelativePath()'); $t->ok($root->getNode()->isValidNode(), 'Folder is valid node'); $t->ok($root->getNode()->isRoot(), 'Folder is root'); $t->ok($fs->is_dir($root->getRelativePath()), 'Root dir created in filesystem'); $t->info('->getRoot()'); $t->is_deeply($root->toArray(), lyMediaFolderTable::getInstance()->getRoot()->toArray(), '->getRoot()');
/** * Uploads an asset * * @param sfWebRequest $request */ public function executeUpload(sfWebRequest $request) { $folder = lyMediaFolderTable::getInstance()->retrieveCurrent($this->getUser()->getAttribute('folder_id', 0)); $form = new lyMediaUploadForm(null, array('folder' => $folder)); $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); if ($form->isValid()) { $form->save(); $this->getUser()->setFlash('notice', 'File successfully uploaded.'); } else { if ($form['filename']->hasError()) { $msg = 'Error on file name: '; $msg .= $form['filename']->getError()->getMessage(); } if ($form['folder_id']->hasError()) { $msg = $form['folder_id']->getError()->getMessage(); } elseif ($form->hasGlobalErrors()) { $errors = $form->getGlobalErrors(); $msg = $errors[0]->getMessage(); } $this->getUser()->setFlash('error', $msg); } $this->redirect('@ly_media_asset_icons?folder_id=' . $this->getUser()->getAttribute('folder_id', 0) . ($this->getUser()->getAttribute('popup', 0) ? '&popup=1' : '')); }