Пример #1
0
 function convert(&$Medium, $mimeType)
 {
     if (Medium::name(null, $mimeType) === 'Image') {
         $randomFrame = rand(1, $Medium->objects['ffmpeg_movie']->getFrameCount() - 1);
         $resource = $Medium->objects['ffmpeg_movie']->getFrame($randomFrame)->toGDImage();
         if (!is_resource($resource)) {
             return false;
         }
         $Image = Medium::factory(array('gd' => $resource), 'image/gd');
         return $Image->convert($mimeType);
     }
     return false;
 }
Пример #2
0
 /**
  * "makes" a file
  *
  * @param string $file Absolute path to a file
  * @access protected
  * @return boolean
  */
 function _make($file)
 {
     $File = new File($file);
     $name = Medium::name($file);
     $subdir = array_pop(explode(DS, dirname($this->source)));
     if ($name === 'Icon' || strpos($file, 'ico' . DS) !== false) {
         return true;
     }
     if ($this->version) {
         $configString = 'Media.filter.' . strtolower($name) . '.' . $this->version;
         $filter = array(Configure::read($configString));
     } else {
         $configString = 'Media.filter.' . strtolower($name);
         $filter = Configure::read($configString);
     }
     foreach ($filter as $version => $instructions) {
         $directory = Folder::slashTerm(rtrim($this->destination . $version . DS . $subdir, '.'));
         $Folder = new Folder($directory, $this->_createDirectories);
         if (!$Folder->pwd()) {
             $this->err($directory . ' could not be created or is not writable.');
             $this->err('Please check your permissions.');
             return false;
         }
         $Medium = Medium::make($File->pwd(), $instructions);
         if (!$Medium) {
             $this->err('Failed to make version ' . $version . ' of medium.');
             return false;
         }
         $Medium->store($Folder->pwd() . $File->name, $this->overwrite);
     }
     return true;
 }
Пример #3
0
 /**
  * Triggered by `beforeValidate`, `beforeSave` or upon user request
  *
  * Prepares runtime for being used by `perform()`
  *
  * @param Model $Model
  * @param string $file Optionally provide a valid transfer resource to be used as source
  * @return mixed true if transfer is ready to be performed, false on error, null if no data was found
  */
 function prepare(&$Model, $file = null)
 {
     if (isset($Model->data[$Model->alias]['file'])) {
         $file = $Model->data[$Model->alias]['file'];
     }
     if (empty($file)) {
         return null;
     }
     if ($this->runtime[$Model->alias]['hasPerformed']) {
         $this->reset($Model);
     }
     if ($this->runtime[$Model->alias]['isReady']) {
         return true;
     }
     /* Extraction must happen after reset */
     extract($this->settings[$Model->alias], EXTR_SKIP);
     extract($this->runtime[$Model->alias], EXTR_SKIP);
     if (TransferValidation::blank($file)) {
         /* Set explicitly null enabling allowEmpty in rules act upon emptiness */
         return $Model->data[$Model->alias]['file'] = null;
     }
     if ($source = $this->_source($Model, $file)) {
         $this->runtime[$Model->alias]['source'] = $source;
     } else {
         return false;
     }
     /* Temporary is optional and can fail */
     if ($source['type'] !== 'file-local') {
         $temporary = $this->runtime[$Model->alias]['temporary'] = $this->_temporary($Model, $file);
     }
     $this->_addMarker($Model, 'DS', DS);
     $this->_addMarker($Model, 'uuid', String::uuid());
     $this->_addMarker($Model, 'unixTimestamp', time());
     $this->_addMarker($Model, 'year', date('Y'));
     $this->_addMarker($Model, 'month', date('m'));
     $this->_addMarker($Model, 'day', date('d'));
     $filename = $this->_addMarker($Model, 'Source.filename', $source['filename'], true);
     $extension = $this->_addMarker($Model, 'Source.extension', $source['extension'], true);
     $this->_addMarker($Model, 'Source.basename', empty($extension) ? $filename : $filename . '.' . $extension);
     $this->_addMarker($Model, 'Source.mimeType', $source['mimeType'], true);
     $this->_addMarker($Model, 'Source.type', $source['type']);
     $this->_addMarker($Model, 'Medium.name', strtolower(Medium::name($source['file'], $source['mimeType'])));
     $this->_addMarker($Model, 'Medium.short', Medium::short($source['file'], $source['mimeType']));
     /* Needed for tableless Models */
     if (isset($Model->data[$Model->alias])) {
         $this->_addMarker($Model, $Model->alias . '.', $Model->data[$Model->alias], true);
         $this->_addMarker($Model, 'Model.', $Model->data[$Model->alias], true);
     }
     $this->_addMarker($Model, 'Model.name', $Model->name);
     $this->_addMarker($Model, 'Model.alias', $Model->alias);
     if (!($destinationFile = $this->_replaceMarker($Model, $destinationFile))) {
         return false;
     }
     if ($destination = $this->_destination($Model, $baseDirectory . $destinationFile)) {
         $this->runtime[$Model->alias]['destination'] = $destination;
     } else {
         return false;
     }
     if ($source == $destination || $temporary == $destination) {
         return false;
     }
     $Folder = new Folder($destination['dirname'], $createDirectory);
     if (!$Folder->pwd()) {
         $message = "TransferBehavior::prepare - Directory `{$destination['dirname']}` could ";
         $message .= "not be created or is not writable. Please check the permissions.";
         trigger_error($message, E_USER_WARNING);
         return false;
     }
     return $this->runtime[$Model->alias]['isReady'] = true;
 }
Пример #4
0
 /**
  * Parses instruction sets and invokes `Medium::make()` for a file
  *
  * @param Model $Model
  * @param string $file Path to a file relative to `baseDirectory`  or an absolute path to a file
  * @return boolean
  */
 function make(&$Model, $file, $overwrite = false)
 {
     extract($this->settings[$Model->alias]);
     list($file, $relativeFile) = $this->_file($Model, $file);
     $relativeDirectory = DS . rtrim(dirname($relativeFile), '.');
     $name = Medium::name($file);
     $filter = Configure::read('Media.filter.' . strtolower($name));
     $hasCallback = method_exists($Model, 'beforeMake');
     foreach ($filter as $version => $instructions) {
         $directory = Folder::slashTerm($filterDirectory . $version . $relativeDirectory);
         $Folder = new Folder($directory, $createDirectory);
         if (!$Folder->pwd()) {
             $message = "MediaBehavior::make - Directory `{$directory}` ";
             $message .= "could not be created or is not writable. ";
             $message .= "Please check the permissions.";
             trigger_error($message, E_USER_WARNING);
             continue;
         }
         if ($hasCallback) {
             $process = compact('overwrite', 'directory', 'name', 'version', 'instructions');
             if ($Model->beforeMake($file, $process)) {
                 continue;
             }
         }
         if (!($Medium = Medium::make($file, $instructions))) {
             $message = "MediaBehavior::make - Failed to make version `{$version}` ";
             $message .= "of file `{$file}`. ";
             trigger_error($message, E_USER_WARNING);
             continue;
         }
         $Medium->store($directory . basename($file), $overwrite);
     }
     return true;
 }
 function convert($Medium, $mimeType)
 {
     if (Medium::name(null, $mimeType) === 'Image') {
         $coverArt = $this->__coverArt($Medium);
         if (!$coverArt) {
             return false;
         }
         $resource = @imagecreatefromstring($coverArt);
         if (!is_resource($resource)) {
             return false;
         }
         $Image = Medium::factory(array('gd' => $resource), 'image/gd');
         return $Image->convert($mimeType);
     }
     return false;
 }
Пример #6
0
 /**
  * Factory method
  *
  * Takes a file and determines type of medium to use for it
  * Falls back to generic medium
  *
  * @param mixed $file See description of the constructor
  * @param string $mimeType Sets the mimeType of the new medium
  * @return object
  */
 static function &factory($file, $mimeType = null)
 {
     if ($mimeType === null) {
         $mimeType = MimeType::guessType($file, array('experimental' => false));
     }
     $name = Medium::name(null, $mimeType);
     $class = $name . 'Medium';
     if (!class_exists($class)) {
         App::import('Vendor', 'Media.' . $class, array('file' => 'medium' . DS . strtolower($name) . '.php'));
     }
     $Object = new $class($file, $mimeType);
     return $Object;
 }