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' : ''));
 }