AlbumTyped::getAlbumTypes()   B
last analyzed

Complexity

Conditions 9
Paths 1

Size

Total Lines 14
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 12
c 0
b 0
f 0
dl 0
loc 14
rs 8.0555
cc 9
nc 1
nop 1
1
<?php
2
3
namespace Itstructure\MFU\Models\Albums;
4
5
use Illuminate\Database\Eloquent\{Collection, Builder as EloquentBuilder};
6
use Itstructure\MFU\Processors\SaveProcessor;
7
use Itstructure\MFU\Models\Owners\OwnerMediafile;
8
9
/**
10
 * Class Album
11
 * @package Itstructure\MFU\Models\Albums
12
 */
13
abstract class AlbumTyped extends AlbumBase
14
{
15
    const ALBUM_TYPE_IMAGE     = SaveProcessor::FILE_TYPE_IMAGE . '_album';
16
    const ALBUM_TYPE_AUDIO     = SaveProcessor::FILE_TYPE_AUDIO . '_album';
17
    const ALBUM_TYPE_VIDEO     = SaveProcessor::FILE_TYPE_VIDEO . '_album';
18
    const ALBUM_TYPE_APP       = SaveProcessor::FILE_TYPE_APP . '_album';
19
    const ALBUM_TYPE_APP_WORD  = SaveProcessor::FILE_TYPE_APP_WORD . '_album';
20
    const ALBUM_TYPE_APP_EXCEL = SaveProcessor::FILE_TYPE_APP_EXCEL . '_album';
21
    const ALBUM_TYPE_APP_VISIO = SaveProcessor::FILE_TYPE_APP_VISIO . '_album';
22
    const ALBUM_TYPE_APP_PPT   = SaveProcessor::FILE_TYPE_APP_PPT . '_album';
23
    const ALBUM_TYPE_APP_PDF   = SaveProcessor::FILE_TYPE_APP_PDF . '_album';
24
    const ALBUM_TYPE_TEXT      = SaveProcessor::FILE_TYPE_TEXT . '_album';
25
    const ALBUM_TYPE_OTHER     = SaveProcessor::FILE_TYPE_OTHER . '_album';
26
27
    /**
28
     * @return string
29
     */
30
    abstract public static function getAlbumType(): string;
31
32
    /**
33
     * @param string $type
34
     * @param bool $plural
35
     * @return null|string
36
     */
37
    public static function getAlbumTitle(string $type, bool $plural = false): ?string
38
    {
39
        return static::getAlbumTypes($plural)[$type] ?? '';
0 ignored issues
show
Bug Best Practice introduced by
The expression return static::getAlbumT...s($plural)[$type] ?? '' could return the type array which is incompatible with the type-hinted return null|string. Consider adding an additional type-check to rule them out.
Loading history...
40
    }
41
42
    /**
43
     * @param bool $plural
44
     * @return array
45
     */
46
    public static function getAlbumTypes(bool $plural = false): array
47
    {
48
        return [
49
            self::ALBUM_TYPE_IMAGE     => trans('uploader::main.image_album' . ($plural ? 's' : '')),
50
            self::ALBUM_TYPE_AUDIO     => trans('uploader::main.audio_album' . ($plural ? 's' : '')),
51
            self::ALBUM_TYPE_VIDEO     => trans('uploader::main.video_album' . ($plural ? 's' : '')),
52
            self::ALBUM_TYPE_APP       => trans('uploader::main.applications'),
53
            self::ALBUM_TYPE_APP_WORD  => trans('uploader::main.word_album' . ($plural ? 's' : '')),
54
            self::ALBUM_TYPE_APP_EXCEL => trans('uploader::main.excel_album' . ($plural ? 's' : '')),
55
            self::ALBUM_TYPE_APP_VISIO => trans('uploader::main.visio_album' . ($plural ? 's' : '')),
56
            self::ALBUM_TYPE_APP_PPT   => trans('uploader::main.ppt_album' . ($plural ? 's' : '')),
57
            self::ALBUM_TYPE_APP_PDF   => trans('uploader::main.pdf_album' . ($plural ? 's' : '')),
58
            self::ALBUM_TYPE_TEXT      => trans('uploader::main.text_files'),
59
            self::ALBUM_TYPE_OTHER     => trans('uploader::main.other_files')
60
        ];
61
    }
62
63
    /**
64
     * @param string $albumType
65
     * @return null|string
66
     */
67
    public static function getFileType(string $albumType = null): ?string
68
    {
69
        $albumTypes = [
70
            self::ALBUM_TYPE_IMAGE     => SaveProcessor::FILE_TYPE_IMAGE,
71
            self::ALBUM_TYPE_AUDIO     => SaveProcessor::FILE_TYPE_AUDIO,
72
            self::ALBUM_TYPE_VIDEO     => SaveProcessor::FILE_TYPE_VIDEO,
73
            self::ALBUM_TYPE_APP       => SaveProcessor::FILE_TYPE_APP,
74
            self::ALBUM_TYPE_APP_WORD  => SaveProcessor::FILE_TYPE_APP_WORD,
75
            self::ALBUM_TYPE_APP_EXCEL => SaveProcessor::FILE_TYPE_APP_EXCEL,
76
            self::ALBUM_TYPE_APP_VISIO => SaveProcessor::FILE_TYPE_APP_VISIO,
77
            self::ALBUM_TYPE_APP_PPT   => SaveProcessor::FILE_TYPE_APP_PPT,
78
            self::ALBUM_TYPE_APP_PDF   => SaveProcessor::FILE_TYPE_APP_PDF,
79
            self::ALBUM_TYPE_TEXT      => SaveProcessor::FILE_TYPE_TEXT,
80
            self::ALBUM_TYPE_OTHER     => SaveProcessor::FILE_TYPE_OTHER
81
        ];
82
        return array_key_exists($albumType ?? static::getAlbumType(), $albumTypes)
83
            ? $albumTypes[$albumType ?? static::getAlbumType()]
84
            : null;
85
    }
86
87
    /**
88
     * @param string|null $ownerAttribute
89
     * @return Collection
90
     */
91
    public function getMediaFiles(string $ownerAttribute = null): Collection
92
    {
93
        return OwnerMediafile::getMediaFiles($this->type, $this->id, $ownerAttribute);
0 ignored issues
show
Bug Best Practice introduced by
The property type does not exist on Itstructure\MFU\Models\Albums\AlbumTyped. Since you implemented __get, consider adding a @property annotation.
Loading history...
94
    }
95
96
    /**
97
     * @param string|null $ownerAttribute
98
     * @return EloquentBuilder
99
     */
100
    public function getMediaFilesQuery(string $ownerAttribute = null): EloquentBuilder
101
    {
102
        return OwnerMediafile::getMediaFilesQuery([
103
            'owner_name' => $this->type,
0 ignored issues
show
Bug Best Practice introduced by
The property type does not exist on Itstructure\MFU\Models\Albums\AlbumTyped. Since you implemented __get, consider adding a @property annotation.
Loading history...
104
            'owner_id' => $this->id,
105
            'owner_attribute' => $ownerAttribute,
106
        ]);
107
    }
108
109
    /**
110
     * @param bool $withOwners
111
     * @return EloquentBuilder
112
     */
113
    public static function getAllQuery(bool $withOwners = false): EloquentBuilder
114
    {
115
        return parent::getAllQuery($withOwners)->where('type', '=', static::getAlbumType());
116
    }
117
}
118