Passed
Push — develop ( f66d95...f9d2ce )
by Paul
13:45
created

SiteReviewsShortcode::enqueue()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

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