LatestEpisodeComponent   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 93
Duplicated Lines 7.53 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
c 1
b 0
f 0
lcom 1
cbo 3
dl 7
loc 93
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A componentDetails() 0 7 1
A defineProperties() 0 18 1
B setState() 7 32 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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
}