diff --git a/Controller/ApiController.php b/Controller/ApiController.php index dc6f040..e8a2cfd 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -1241,6 +1241,8 @@ final class ApiController extends Controller break; default: $response->header->set('Content-Type', MimeType::M_BIN, true); + $response->header->set('Content-Disposition', 'attachment; filename="' . \addslashes($media->name) . '"', true); + $response->header->set('Content-Transfer-Encoding', 'binary', true); } } diff --git a/Models/CollectionMapper.php b/Models/CollectionMapper.php index 7d9c0c0..0acf5d6 100755 --- a/Models/CollectionMapper.php +++ b/Models/CollectionMapper.php @@ -24,6 +24,9 @@ use phpOMS\DataStorage\Database\Mapper\ReadMapper; * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 + * + * @template T of Collection + * @extends MediaMapper */ final class CollectionMapper extends MediaMapper { diff --git a/Models/MediaListTrait.php b/Models/MediaListTrait.php new file mode 100644 index 0000000..a42b89d --- /dev/null +++ b/Models/MediaListTrait.php @@ -0,0 +1,143 @@ +files; + } + + /** + * Get media file by type + * + * @param int $type Media type + * + * @return Media + * + * @since 1.0.0 + */ + public function getFileByType(int $type) : Media + { + foreach ($this->files as $file) { + if ($file->hasMediaTypeId($type)) { + return $file; + } + } + + return new NullMedia(); + } + + /** + * Get all media files by type name + * + * @param string $type Media type + * + * @return Media + * + * @since 1.0.0 + */ + public function getFileByTypeName(string $type) : Media + { + foreach ($this->files as $file) { + if ($file->hasMediaTypeName($type)) { + return $file; + } + } + + return new NullMedia(); + } + + /** + * Get all media files by type name + * + * @param string $type Media type + * + * @return Media[] + * + * @since 1.0.0 + */ + public function getFilesByTypeName(string $type) : array + { + $files = []; + foreach ($this->files as $file) { + if ($file->hasMediaTypeName($type)) { + $files[] = $file; + } + } + + return $files; + } + + /** + * Check if file with a certain type name exists + * + * @param string $type Type name + * + * @return bool + * + * @since 1.0.0 + */ + public function hasFileTypeName(string $type) : bool + { + foreach ($this->files as $file) { + if ($file->hasMediaTypeName($type)) { + return true; + } + } + + return false; + } + + /** + * Add media to item + * + * @param Media $media Media + * + * @return void + * + * @since 1.0.0 + */ + public function addFile(Media $media) : void + { + $this->files[] = $media; + } +}