1
|
|
|
<?php namespace CosmicRadioTV\Podcast\Components; |
2
|
|
|
|
3
|
|
|
use Cms\Classes\CodeBase; |
4
|
|
|
use CosmicRadioTV\Podcast\Models\Release; |
5
|
|
|
use CosmicRadioTV\Podcast\Models\Show; |
6
|
|
|
use CosmicRadioTV\Podcast\Models; |
7
|
|
|
use CosmicRadioTV\Podcast\Models\Episode; |
8
|
|
|
use Illuminate\Database\Eloquent\Collection; |
9
|
|
|
use Illuminate\Database\Eloquent\ModelNotFoundException; |
10
|
|
|
|
11
|
|
|
|
12
|
|
|
class LatestEpisodeComponent extends EpisodeComponent |
13
|
|
|
{ |
14
|
|
|
|
15
|
|
|
/** |
16
|
|
|
* Component constructor. Takes in the page or layout code section object |
17
|
|
|
* and properties set by the page or layout. |
18
|
|
|
* Override: change dirname |
19
|
|
|
* |
20
|
|
|
* @param CodeBase $cmsObject |
21
|
|
|
* @param array $properties |
22
|
|
|
*/ |
23
|
|
|
public function __construct(CodeBase $cmsObject = null, $properties = []) |
24
|
|
|
{ |
25
|
|
|
parent::__construct($cmsObject, $properties); |
26
|
|
|
|
27
|
|
|
$this->dirName = str_replace('latestepisode', 'episode', $this->dirName); |
28
|
|
|
} |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* Component Details |
32
|
|
|
* |
33
|
|
|
* @return array |
34
|
|
|
*/ |
35
|
|
|
public function componentDetails() |
36
|
|
|
{ |
37
|
|
|
return [ |
38
|
|
|
'name' => 'cosmicradiotv.podcast::components.latest_episode.name', |
39
|
|
|
'description' => 'cosmicradiotv.podcast::components.latest_episode.description' |
40
|
|
|
]; |
41
|
|
|
} |
42
|
|
|
|
43
|
|
|
/** |
44
|
|
|
* User editable properties |
45
|
|
|
* |
46
|
|
|
* @return array |
47
|
|
|
*/ |
48
|
|
|
public function defineProperties() |
49
|
|
|
{ |
50
|
|
|
return [ |
51
|
|
|
'showSlugFilter' => [ |
52
|
|
|
'title' => 'cosmicradiotv.podcast::components.latest_episode.properties.show_slug_filter.title', |
53
|
|
|
'description' => 'cosmicradiotv.podcast::components.latest_episode.properties.show_slug_filter.description', |
54
|
|
|
'default' => '{{ :show_slug }}', |
55
|
|
|
'type' => 'string', |
56
|
|
|
'required' => false, |
57
|
|
|
], |
58
|
|
|
'updateTitle' => [ |
59
|
|
|
'title' => 'cosmicradiotv.podcast::components.common.properties.update_title.title', |
60
|
|
|
'description' => 'cosmicradiotv.podcast::components.common.properties.update_title.description', |
61
|
|
|
'default' => true, |
62
|
|
|
'type' => 'checkbox', |
63
|
|
|
], |
64
|
|
|
]; |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
/** |
68
|
|
|
* Set components state based on parameters |
69
|
|
|
* |
70
|
|
|
* @throws ModelNotFoundException |
71
|
|
|
*/ |
72
|
|
|
public function setState() |
73
|
|
|
{ |
74
|
|
|
$showSlugFilter = $this->property('showSlugFilter'); |
75
|
|
|
if (!empty($showSlugFilter)) { |
76
|
|
|
$this->show = Show::query() |
77
|
|
|
->where('slug', $showSlugFilter) |
78
|
|
|
->firstOrFail(); |
79
|
|
|
|
80
|
|
|
$this->episode = $this->show->episodes() |
81
|
|
|
->getQuery() |
82
|
|
|
->where('published', true) |
83
|
|
|
->orderBy('release', 'desc') |
84
|
|
|
->with(['releases', 'releases.release_type', 'image', 'tags', 'show']) |
85
|
|
|
->firstOrFail(); |
86
|
|
|
} else { |
87
|
|
|
$this->episode = Episode::query() |
88
|
|
|
->where('published', true) |
89
|
|
|
->orderBy('release', 'desc') |
90
|
|
|
->with(['releases', 'releases.release_type', 'image', 'tags', 'show']) |
91
|
|
|
->firstOrFail(); |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
|
95
|
|
|
$this->releases = Collection::make($this->episode->releases); // Creates a copy |
96
|
|
View Code Duplication |
$this->releases->sort(function (Release $a, Release $b) { |
97
|
|
|
// Order by the sort_order column |
98
|
|
|
$aRating = $a->release_type->sort_order; |
99
|
|
|
$bRating = $b->release_type->sort_order; |
100
|
|
|
|
101
|
|
|
return $aRating - $bRating; |
102
|
|
|
}); |
103
|
|
|
} |
104
|
|
|
} |