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