/**
  * @param array $photo
  * @param array $photo Photo data
  * @param array $options Available options
  * <pre>
  * fallback: A fallback photo to use when photo is not found
  * transform: Transformation options to be applied to photo
  * </pre>
  * @return bool|PhotoResult
  */
 public function build($photo, array $options = array())
 {
     $options = array_merge(array('transform' => array(), 'fallback' => null), $options);
     if (empty($photo)) {
         // Could not find photo data
         if ($options['fallback'] == null || !$this->storageManager->has(StorageManager::FALLBACK_STORAGE)) {
             // No fallback photo is defined or no fallback storage added
             // We shouldn't probably continue. Seems developer prefers
             // to handle missing images manually.
             return false;
         }
         // Construct default data
         $photo = array('photo_id' => 0, 'storage_name' => StorageManager::FALLBACK_STORAGE, 'file_name' => pathinfo($options['fallback'], PATHINFO_FILENAME), 'file_path' => $options['fallback'], 'file_mime' => 'image/png', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'));
     }
     $photoResult = new PhotoResult($photo);
     $storage = $this->storageManager->get($photo['storage_name']);
     if (!empty($options['transform'])) {
         // Transformation options available
         $modifiedFileName = $this->generateModifiedSaveName($photo['file_path'], $options['transform']);
         $photoResult->setOriginalFilePath($photo['file_path']);
         $photoResult->setOriginalPath($storage->getPhotoPath($photo['file_path']));
         if (!($info = $storage->getInfo($modifiedFileName))) {
             // Only do image manipulation once
             // (ie if file does not exists)
             list($modifiedFileName, $info['file_size']) = $this->transformPhoto($storage, $storage->getPhotoResource($photoResult->originalFilePath(), tempnam($this->options['tmp_dir'], 'sp')), $modifiedFileName, $photo['file_mime'], $options['transform']);
         }
         $photoResult->setFileSize($info['file_size']);
         // Set the file path to the new modified photo path
         $photoResult->setFilePath($modifiedFileName);
     }
     $photoResult->setPath($storage->getPhotoPath($photoResult->filePath()));
     $photoResult->setUrl($storage->getPhotoUrl($photoResult->filePath()));
     return $photoResult;
 }
 /**
  * @param \SimplePhoto\PhotoResult $photo
  * @return array
  */
 public function getPhotosAttribute($photo)
 {
     return ['url' => $photo->url()];
 }