Test Failed
Push — develop ( fe7dfd...f4a85b )
by Paul
08:21
created

SiteReviewsWidget::widgetName()   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
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Widgets;
4
5
use GeminiLabs\SiteReviews\Contracts\ShortcodeContract;
6
use GeminiLabs\SiteReviews\Database;
7
use GeminiLabs\SiteReviews\Helpers\Arr;
8
use GeminiLabs\SiteReviews\Shortcodes\SiteReviewsShortcode;
9
10
class SiteReviewsWidget extends Widget
11
{
12
    /**
13
     * @param array $instance
14
     *
15
     * @return string
16
     */
17
    public function form($instance)
18
    {
19
        $this->widgetArgs = $this->shortcode()->normalize($instance)->args;
20
        $terms = glsr(Database::class)->terms();
21
        $this->renderField('text', [
22
            'label' => _x('Title', 'admin-text', 'site-reviews'),
23
            'name' => 'title',
24
        ]);
25
        $this->renderField('number', [
26
            'default' => 10,
27
            'label' => _x('How many reviews would you like to display?', 'admin-text', 'site-reviews'),
28
            'max' => 100,
29
            'name' => 'display',
30
        ]);
31
        $this->renderField('select', [
32
            'label' => _x('What is the minimum rating to display?', 'admin-text', 'site-reviews'),
33
            'name' => 'rating',
34
            'options' => [
35
                '0' => esc_attr(sprintf(_nx('%s star', '%s stars', 0, 'admin-text', 'site-reviews'), 0)),
36
                '1' => esc_attr(sprintf(_nx('%s star', '%s stars', 1, 'admin-text', 'site-reviews'), 1)),
37
                '2' => esc_attr(sprintf(_nx('%s star', '%s stars', 2, 'admin-text', 'site-reviews'), 2)),
38
                '3' => esc_attr(sprintf(_nx('%s star', '%s stars', 3, 'admin-text', 'site-reviews'), 3)),
39
                '4' => esc_attr(sprintf(_nx('%s star', '%s stars', 4, 'admin-text', 'site-reviews'), 4)),
40
                '5' => esc_attr(sprintf(_nx('%s star', '%s stars', 5, 'admin-text', 'site-reviews'), 5)),
41
            ],
42
        ]);
43
        if (count($reviewTypes = glsr()->retrieveAs('array', 'review_types')) > 1) {
44
            $this->renderField('select', [
45
                'label' => _x('Which type of review would you like to display?', 'admin-text', 'site-reviews'),
46
                'name' => 'type',
47
                'options' => Arr::prepend($reviewTypes, _x('All Reviews', 'admin-text', 'site-reviews'), ''),
48
            ]);
49
        }
50
        if (!empty($terms)) {
51
            $this->renderField('select', [
52
                'label' => _x('Limit reviews to this category', 'admin-text', 'site-reviews'),
53
                'name' => 'assigned_terms',
54
                'options' => Arr::prepend($terms, _x('Do not assign a category', 'admin-text', 'site-reviews'), ''),
55
            ]);
56
        }
57
        $this->renderField('text', [
58
            'default' => '',
59
            'description' => sprintf(_x('You may also enter %s to use the Post ID of the current page.', 'admin-text', 'site-reviews'), '<code>post_id</code>'),
60
            'label' => _x('Limit reviews to those assigned to a Post ID', 'admin-text', 'site-reviews'),
61
            'name' => 'assigned_posts',
62
        ]);
63
        $this->renderField('text', [
64
            'default' => '',
65
            'description' => sprintf(esc_html_x('You may also enter %s to use the ID of the logged-in user.', 'admin-text', 'site-reviews'), '<code>user_id</code>'),
66
            'label' => _x('Limit reviews to those assigned to a User ID', 'admin-text', 'site-reviews'),
67
            'name' => 'assigned_users',
68
        ]);
69
        $this->renderField('text', [
70
            'label' => _x('Enter any custom CSS classes here', 'admin-text', 'site-reviews'),
71
            'name' => 'class',
72
        ]);
73
        $this->renderField('checkbox', [
74
            'name' => 'hide',
75
            'options' => $this->shortcode()->getHideOptions(),
76
        ]);
77
        return ''; // WP_Widget::form should return a string
78
    }
79
80
    /**
81
     * @param array $newInstance
82
     * @param array $oldInstance
83
     *
84
     * @return array
85
     */
86
    public function update($newInstance, $oldInstance)
87
    {
88
        if (!is_numeric($newInstance['display'])) {
89
            $newInstance['display'] = 10;
90
        }
91
        $newInstance['display'] = min(50, max(0, intval($newInstance['display'])));
92
        return parent::update($newInstance, $oldInstance);
93
    }
94
95
    protected function shortcode(): ShortcodeContract
96
    {
97
        return glsr(SiteReviewsShortcode::class);
98
    }
99
}
100