Test Failed
Push — develop ( c6b569...7a7654 )
by Paul
09:40
created

SiteReviewsShortcode::config()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 86
Code Lines 69

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 1.0499

Importance

Changes 0
Metric Value
eloc 69
dl 0
loc 86
ccs 12
cts 19
cp 0.6316
rs 8.6763
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1.0499

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace GeminiLabs\SiteReviews\Shortcodes;
4
5
use GeminiLabs\SiteReviews\Database\ReviewManager;
6
use GeminiLabs\SiteReviews\Helpers\Cast;
7
use GeminiLabs\SiteReviews\Modules\Html\ReviewsHtml;
8
use GeminiLabs\SiteReviews\Modules\Schema;
9
use GeminiLabs\SiteReviews\Reviews;
10
11
class SiteReviewsShortcode extends Shortcode
12
{
13
    public function buildReviewsHtml(): ReviewsHtml
14
    {
15
        $reviews = glsr(ReviewManager::class)->reviews($this->args);
16
        $this->debug((array) $reviews);
17
        $this->generateSchema($reviews);
18
        if ('modal' === glsr_get_option('reviews.excerpts_action')) {
19
            glsr()->store('use_modal', true);
20
        }
21
        return new ReviewsHtml($reviews);
22
    }
23
24
    public function buildTemplate(): string
25
    {
26
        return (string) $this->buildReviewsHtml();
27
    }
28
29
    public function generateSchema(Reviews $reviews): void
30
    {
31
        if (Cast::toBool($this->args['schema'])) {
32
            glsr(Schema::class)->store(
33
                glsr(Schema::class)->build($this->args, $reviews)
34
            );
35
        }
36
    }
37
38
    protected function config(): array
39
    {
40
        return [
41
            'assigned_posts' => [
42
                'label' => esc_html_x('Limit Reviews by Assigned Pages', 'admin-text', 'site-reviews'),
43
                'placeholder' => esc_html_x('Select a Page...', 'admin-text', 'site-reviews'),
44
                'type' => 'select',
45
            ],
46
            'assigned_terms' => [
47
                'label' => esc_html_x('Limit Reviews by Categories', 'admin-text', 'site-reviews'),
48
                'placeholder' => esc_html_x('Select a Category...', 'admin-text', 'site-reviews'),
49
                'type' => 'select',
50 8
            ],
51
            'assigned_users' => [
52 8
                'label' => esc_html_x('Limit Reviews by Assigned Users', 'admin-text', 'site-reviews'),
53 8
                'placeholder' => esc_html_x('Select a User...', 'admin-text', 'site-reviews'),
54 8
                'type' => 'select',
55 8
            ],
56 8
            'terms' => [
57 8
                'label' => esc_html_x('Limit Reviews by Accepted Terms', 'admin-text', 'site-reviews'),
58 8
                'options' => [
59 8
                    'true' => esc_html_x('Terms were accepted', 'admin-text', 'site-reviews'),
60 8
                    'false' => esc_html_x('Terms were not accepted', 'admin-text', 'site-reviews'),
61 8
                ],
62 8
                'placeholder' => esc_html_x('Select Review Terms...', 'admin-text', 'site-reviews'),
63
                'type' => 'select',
64
            ],
65
            'type' => [
66
                'label' => esc_html_x('Limit Reviews by Type', 'admin-text', 'site-reviews'),
67
                'options' => $this->getTypeOptions(),
68
                'placeholder' => esc_html_x('Select a Review Type...', 'admin-text', 'site-reviews'),
69
                'type' => 'select',
70
            ],
71
            'rating' => [
72
                'default' => (string) $this->minRating(),
73
                'group' => 'display',
74
                'label' => esc_html_x('Minimum Rating', 'admin-text', 'site-reviews'),
75
                'max' => $this->maxRating(),
76
                'min' => $this->minRating(),
77
                // 'placeholder' => (string) $this->minRating(),
78
                'step' => 1,
79
                'type' => 'number',
80
            ],
81
            'display' => [
82
                'default' => 10,
83
                'group' => 'display',
84
                'label' => esc_html_x('Reviews Per Page', 'admin-text', 'site-reviews'),
85
                'max' => 50,
86
                'min' => 1,
87
                // 'placeholder' => 10,
88
                'step' => 1,
89
                'type' => 'number',
90
            ],
91
            'pagination' => [
92
                'label' => esc_html_x('Pagination Type', 'admin-text', 'site-reviews'),
93
                'group' => 'display',
94
                'options' => [
95
                    'loadmore' => esc_attr_x('Load More Button', 'admin-text', 'site-reviews'),
96
                    'ajax' => esc_attr_x('Pagination Links (AJAX)', 'admin-text', 'site-reviews'),
97
                    'true' => esc_attr_x('Pagination Links (with page reload)', 'admin-text', 'site-reviews'),
98
                ],
99
                'placeholder' => esc_attr_x('No Pagination', 'admin-text', 'site-reviews'),
100
                'type' => 'select',
101
            ],
102
            'schema' => [
103
                'description' => esc_html_x('The schema should only be enabled once on your page.', 'admin-text', 'site-reviews'),
104
                'group' => 'schema',
105
                'label' => esc_html_x('Enable the schema?', 'admin-text', 'site-reviews'),
106
                'type' => 'checkbox',
107
            ],
108
            'hide' => [
109
                'group' => 'hide',
110
                'options' => $this->getHideOptions(),
111
                'type' => 'checkbox',
112
            ],
113
            'id' => [
114
                'description' => esc_html_x('This should be a unique value.', 'admin-text', 'site-reviews'),
115
                'group' => 'advanced',
116
                'label' => esc_html_x('Custom ID', 'admin-text', 'site-reviews'),
117
                'type' => 'text',
118
            ],
119
            'class' => [
120
                'description' => esc_html_x('Separate multiple classes with spaces.', 'admin-text', 'site-reviews'),
121
                'group' => 'advanced',
122
                'label' => esc_html_x('Additional CSS classes', 'admin-text', 'site-reviews'),
123
                'type' => 'text',
124
            ],
125
        ];
126
    }
127
128
    protected function debug(array $data = []): void
129
    {
130
        if (!empty($this->args['debug'])) {
131
            $reviews = [];
132
            foreach ($data['reviews'] as $review) {
133
                $reviews[$review->ID] = get_class($review);
134
            }
135
            $data['reviews'] = $reviews;
136
            parent::debug($data);
137
        }
138
    }
139
140
    protected function hideOptions(): array
141
    {
142
        return [ // order is intentional
143
            'title' => _x('Hide the title', 'admin-text', 'site-reviews'),
144
            'rating' => _x('Hide the rating', 'admin-text', 'site-reviews'),
145
            'date' => _x('Hide the date', 'admin-text', 'site-reviews'),
146
            'assigned_links' => _x('Hide the assigned links (if shown)', 'admin-text', 'site-reviews'),
147
            'content' => _x('Hide the content', 'admin-text', 'site-reviews'),
148
            'avatar' => _x('Hide the avatar (if shown)', 'admin-text', 'site-reviews'),
149
            'author' => _x('Hide the author', 'admin-text', 'site-reviews'),
150
            'verified' => _x('Hide the verified badge', 'admin-text', 'site-reviews'),
151
            'response' => _x('Hide the response', 'admin-text', 'site-reviews'),
152
        ];
153
    }
154
155
    protected function shortcodeDescription(): string
156
    {
157
        return esc_html_x('Display your reviews', 'admin-text', 'site-reviews');
158
    }
159
160
    protected function shortcodeName(): string
161
    {
162
        return esc_html_x('Latest Reviews', 'admin-text', 'site-reviews');
163
    }
164
}
165