/** * Generates an MD5 hash of the file attributes and options. * * @param File $file * @param array $options * @return string */ protected function generateHash(File $file, array $options = []) { $fileSignature = ['id' => (string) $file->getKey()]; // Add any modifications that may have run on the file. if (array_key_exists($this->getFileModificationKey(), $options)) { $fileSignature[$this->getFileModificationKey()] = $options[$this->getFileModificationKey()]; } return md5(json_encode($this->recursiveKeySort($fileSignature))); }
public function it_generates_a_name_for_a_file_according_to_its_attributes_and_options(FileModel $fileModel) { $fileModel->getMimeType()->willReturn('image/png'); $fileModel->getKey()->willReturn(999); $fileModel->setAttribute('slot', 'profile'); $options = ['modifications' => ['shrink' => 'run shrink filter here', 'blur' => 'run blur filter here'], 'validators' => ['image_size' => 'run image size validator']]; $fileName = $this->fileName($fileModel, $options); $mixedOptions = ['validators' => ['file_size' => 'run file size validator'], 'modifications' => ['blur' => 'run blur filter here', 'shrink' => 'run shrink filter here']]; $this->fileName($fileModel, $mixedOptions)->shouldBeEqualTo($fileName); }
/** * @param $slot * @param Clippable $clippable * @return null|FileModel */ public function getBySlot($slot, Clippable $clippable = null) { if ($clippable) { $query = FileModel::forClippable(get_class($clippable), $clippable->getKey()); } else { $query = FileModel::unattached(); } return $query->inSlot($slot)->first(); }
public function onDelete(FileModel $fileModel, array $options = []) { $fileModel->setAttribute('mime_type', 'image/jpeg'); return $fileModel; }
/** * Get all the files by mimetype or slot, attached or unattached to a model * * @param null|Clippable $clippable * @param null|string|array $mimeTypes * @param null|string|int|array $slot * @return \Illuminate\Database\Eloquent\Collection */ public function getFilesFor(Clippable $clippable = null, $mimeTypes = null, $slot = null) { $query = $clippable ? $clippable->clippedFiles() : FileModel::query(); // Filter by slot(s) if ($slot) { $slot = is_array($slot) ? $slot : [$slot]; $query->whereIn('slot', $slot); } // Filter by file type(s) if ($mimeTypes) { $mimeTypes = is_array($mimeTypes) ? $mimeTypes : [$mimeTypes]; $query->whereIn('mime_type', $mimeTypes); } return $query->get(); }