offsetGet($filename); } /** * Call object as function to get medium by filename. * * @param string $filename * @return mixed */ public function __invoke($filename) { return $this->offsetGet($filename); } /** * Get a list of all media. * * @return array|Medium[] */ public function all() { ksort($this->instances, SORT_NATURAL | SORT_FLAG_CASE); return $this->instances; } /** * Get a list of all image media. * * @return array|Medium[] */ public function images() { ksort($this->images, SORT_NATURAL | SORT_FLAG_CASE); return $this->images; } /** * Get a list of all video media. * * @return array|Medium[] */ public function videos() { ksort($this->videos, SORT_NATURAL | SORT_FLAG_CASE); return $this->videos; } /** * Get a list of all audio media. * * @return array|Medium[] */ public function audios() { ksort($this->audios, SORT_NATURAL | SORT_FLAG_CASE); return $this->audios; } /** * Get a list of all file media. * * @return array|Medium[] */ public function files() { ksort($this->files, SORT_NATURAL | SORT_FLAG_CASE); return $this->files; } /** * @param string $name * @param Medium $file */ protected function add($name, $file) { $this->instances[$name] = $file; switch ($file->type) { case 'image': $this->images[$name] = $file; break; case 'video': $this->videos[$name] = $file; break; case 'audio': $this->audios[$name] = $file; break; default: $this->files[$name] = $file; } } /** * Get filename, extension and meta part. * * @param string $filename * @return array */ protected function getFileParts($filename) { if (preg_match('/(.*)@(\d+)x\.(.*)$/', $filename, $matches)) { $name = $matches[1]; $extension = $matches[3]; $extra = (int) $matches[2]; $type = 'alternative'; if ($extra === 1) { $type = 'base'; $extra = null; } } else { $fileParts = explode('.', $filename); $name = array_shift($fileParts); $extension = null; $extra = null; $type = 'base'; while (($part = array_shift($fileParts)) !== null) { if ($part != 'meta' && $part != 'thumb') { if (isset($extension)) { $name .= '.' . $extension; } $extension = $part; } else { $type = $part; $extra = '.' . $part . '.' . implode('.', $fileParts); break; } } } return array($name, $extension, $type, $extra); } }