Passed
Push — develop ( afff43...70b7ee )
by Paul
14:29
created

SiteReviewsShortcode::generateSchema()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

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