/**
  * 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());
         }
     }
 }
 public function setup()
 {
     parent::setup();
     unset($this['type'], $this['filesize'], $this['created_at'], $this['updated_at']);
     // add the i18n label stuff
     if ($this->getObject()->getTable()->isI18n()) {
         $cultures = sfConfig::get('app_lyMediaManager_i18n_cultures', array());
         if (isset($cultures[0])) {
             throw new sfException('Invalid i18n_cultures format in app.yml. Use the format:
     i18n_cultures:
       en:   English
       fr:   Français');
         }
         $this->embedI18n(array_keys($cultures));
         foreach ($cultures as $culture => $name) {
             $this->widgetSchema->setLabel($culture, $name);
         }
     }
     $this->widgetSchema['folder_id']->setOption('method', 'getIndentName');
     $this->widgetSchema['folder_id']->setOption('order_by', array('lft', ''));
     if ($this->isNew()) {
         $this->widgetSchema['filename'] = new sfWidgetFormInputFile();
         $this->validatorSchema['filename'] = new lyMediaValidatorFile(array('required' => 'true', 'path' => $this->getOption('upload_root') . sfConfig::get('app_lyMediaManager_media_root', 'media'), 'mime_types' => lyMediaTools::getAllowedMimeTypes(), 'allowed_extensions' => lyMediaTools::getAllowedExtensions()));
         if ($this->getOption('folder_id')) {
             $this->setDefault('folder_id', $this->getOption('folder_id'));
         }
     } else {
         $query = Doctrine_query::create()->from('lyMediaFolder')->where('id != ?', $this->getObject()->getFolder()->getId());
         $this->widgetSchema['folder_id']->setOption('query', $query);
         $this->widgetSchema['folder_id']->setOption('add_empty', 'Move to ...');
         $this->widgetSchema['filename'] = new sfWidgetFormInput();
         $this->validatorSchema['filename'] = new lyMediaValidatorFilename(array('required' => true, 'allowed_extensions' => lyMediaTools::getAllowedExtensions()));
     }
     $this->validatorSchema->setPostValidator(new lyMediaValidatorAsset());
 }
 public function setup()
 {
     parent::setup();
     unset($this['type'], $this['filesize'], $this['created_at'], $this['updated_at']);
     $this->widgetSchema['folder_id'] = new sfWidgetFormInputHidden();
     $this->validatorSchema['folder_id'] = new sfValidatorInteger();
     $this->widgetSchema['filename'] = new sfWidgetFormInputFile();
     $this->validatorSchema['filename'] = new lyMediaValidatorFile(array('required' => 'true', 'path' => lyMediaTools::getBasePath() . $this->getOption('folder')->getRelativePath(), 'mime_types' => lyMediaTools::getAllowedMimeTypes(), 'allowed_extensions' => lyMediaTools::getAllowedExtensions()));
     $this->widgetSchema['filename']->setLabel('Upload file');
 }
 /**
  * Checks if asset file and thumbnails exist in filesystem.
  *
  * @param string $folder asset folder (relative path)
  * @param string $file asset filename
  * @param boolean $check_thumbs check existence/non-existence of thumbnail files
  * @param boolean $exist true=must exist, false=must not exist
  * 
  * @return lyMediaTestFunctional current lyMediaTestFunctional instance
  */
 protected function checkFile($folder, $file, $check_thumbs = true, $exist = true)
 {
     $file_path = lyMediaTools::getBasePath() . $folder . $file;
     $this->test()->is(is_file($file_path), $exist, 'File ' . $folder . $file . ($exist ? ' has ' : ' has not ') . 'been found');
     if ($check_thumbs) {
         foreach (lyMediaTools::getThumbnailSettings() as $key => $params) {
             $file_path = lyMediaTools::getThumbnailPath($folder, $file, $key, false);
             $this->test()->is(is_file($file_path), $exist, 'Thumbnail ' . $key . '_' . $file . ($exist ? ' has ' : ' has not ') . 'been found');
         }
     }
     return $this;
 }
 public function setup()
 {
     parent::setup();
     unset($this['type'], $this['filesize'], $this['created_at'], $this['updated_at']);
     $this->widgetSchema['folder_id']->setOption('method', 'getIndentName');
     if ($this->isNew()) {
         $this->widgetSchema['filename'] = new sfWidgetFormInputFile();
         $this->validatorSchema['filename'] = new lyMediaValidatorFile(array('required' => 'true', 'path' => $this->getOption('upload_root') . sfConfig::get('app_lyMediaManager_media_root', 'media'), 'mime_types' => lyMediaTools::getAllowedMimeTypes(), 'allowed_extensions' => lyMediaTools::getAllowedExtensions()));
         if ($user = $this->getOption('user')) {
             if ($user->getAttribute('view') == 'icons' && $user->getAttribute('folder_id')) {
                 $this->setDefault('folder_id', $user->getAttribute('folder_id'));
             }
         }
     } else {
         $query = Doctrine_query::create()->from('lyMediaFolder')->where('id != ?', $this->getObject()->getFolder()->getId());
         $this->widgetSchema['folder_id']->setOption('query', $query);
         $this->widgetSchema['folder_id']->setOption('add_empty', 'Move to ...');
         $this->widgetSchema['filename'] = new sfWidgetFormInput();
         $this->validatorSchema['filename'] = new lyMediaValidatorFilename(array('required' => true, 'allowed_extensions' => lyMediaTools::getAllowedExtensions()));
         $this->validatorSchema->setPostValidator(new lyMediaValidatorAsset());
     }
 }
function thumbnail_image_path($asset, $folder_path = null, $type = 'small')
{
    return image_path(lyMediaTools::getThumbnailURI($asset, $folder_path, $type));
}
 /**
  * Deletes a file and related thumbnails.
  *
  * @param string $file path of the file to delete (can be relative to web dir).
  * @param bool $thumbs, if true thubnail files are also deleted.
  */
 public function unlink($file, $thumbs = false)
 {
     $file = $this->makePathAbsolute($file);
     if (file_exists($file)) {
         unlink($file);
     }
     if ($thumbs) {
         $info = pathinfo($file);
         $path = $info['dirname'] . DIRECTORY_SEPARATOR . lyMediaTools::getThumbnailFolder() . DIRECTORY_SEPARATOR;
         foreach ($this->getThumbnailTypes() as $key) {
             $file = $path . $key . '_' . $info['basename'];
             if (file_exists($file)) {
                 unlink($file);
             }
         }
     }
 }
        ?>
        </span>
      <?php 
    }
    ?>
    </div>
    <?php 
}
?>
    <?php 
echo thumbnail_image_tag($asset, $folder->getRelativePath(), 'small', 'alt=asset title=' . $asset->getTitle());
?>
  </div>
  <div class="lymedia_caption">
    <?php 
echo lyMediaTools::formatAssetCaption($asset);
?>
  </div>
  <div class="lymedia_iconbar">
    <ul class="lymedia_actions_icons">
      <li class="edit">
        <?php 
echo link_to(image_tag('/lyMediaManagerPlugin/images/edit', 'alt=edit'), 'ly_media_asset_edit', $asset, array('title' => 'edit asset'));
?>
      </li>
      <li class="delete">
        <?php 
echo link_to(image_tag('/lyMediaManagerPlugin/images/delete', 'alt=delete'), 'ly_media_asset_delete', $asset, array('method' => 'delete', 'confirm' => 'Are you sure?', 'title' => 'delete asset'));
?>
      </li>
    </ul>
 /**
  * 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');
             }
         }
     }
 }
<div id="lymedia_thumb_menu">
  <div class="title">
    <?php 
echo __('Choose size');
?>
  </div>
  <span class="_original"><?php 
echo __('original');
?>
</span>
  <?php 
foreach (lyMediaTools::getThumbnailSettings() as $type => $params) {
    ?>
  <span class="<?php 
    echo $type;
    ?>
"><?php 
    echo __($type) . ' (' . $params['width'] . 'x' . $params['height'] . ')';
    ?>
</span>
  <?php 
}
?>
  <span class="_cancel"><?php 
echo __('Cancel');
?>
</span>
</div>