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 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;
 }
 /**
  * preDelete.
  *
  * @param Doctrine_Event $event.
  */
 public function preDelete($event)
 {
     $record = $event->getInvoker();
     $fs = new lyMediaFileSystem();
     if ($fs->is_writable($record->getNode()->getParent()->getRelativePath())) {
         //Delete folder contents
         foreach ($record->getAssets() as $a) {
             $a->delete();
         }
     }
     $fs->rmdir($record->getRelativePath());
 }