Passed
Push — develop ( 682124...f6f5f6 )
by Paul
14:18
created

Controller::runSearchQuery()   A

Complexity

Conditions 5
Paths 12

Size

Total Lines 27
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 27
ccs 0
cts 23
cp 0
rs 9.2408
c 0
b 0
f 0
cc 5
nc 12
nop 0
crap 30
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Integrations\FusionBuilder;
4
5
use GeminiLabs\SiteReviews\Controllers\AbstractController;
6
use GeminiLabs\SiteReviews\Database\ShortcodeOptionManager;
7
use GeminiLabs\SiteReviews\Helpers\Svg;
8
9
class Controller extends AbstractController
10
{
11
    /**
12
     * @action fusion_builder_admin_scripts_hook
13
     * @action fusion_builder_enqueue_live_scripts
14
     */
15
    public function enqueueBuilderStyles(): void
16
    {
17
        $inlineFile = glsr()->path('assets/styles/integrations/fusion-inline.css');
18
        if (!file_exists($inlineFile)) {
19
            glsr_log()->error("Inline stylesheet is missing: {$inlineFile}");
20
            return;
21
        }
22
        $icons = [
23
            ':icon-0' => Svg::encoded('assets/images/icon-static.svg'),
24
            ':icon-1' => Svg::encoded('assets/images/icons/fusion/icon-form.svg'),
25
            ':icon-2' => Svg::encoded('assets/images/icons/fusion/icon-review.svg'),
26
            ':icon-3' => Svg::encoded('assets/images/icons/fusion/icon-reviews.svg'),
27
            ':icon-4' => Svg::encoded('assets/images/icons/fusion/icon-summary.svg'),
28
        ];
29
        $css = str_replace(
30
            array_keys($icons),
31
            array_values($icons),
32
            file_get_contents($inlineFile)
33
        );
34
        wp_add_inline_style('fusion_builder_css', $css);
35
        wp_add_inline_style('fusion-builder-frame-builder-css', $css);
36
    }
37
38
    /**
39
     * @filter site-reviews/defaults/style-classes/defaults
40
     */
41
    public function filterButtonClass(array $defaults): array
42
    {
43
        if ('default' !== glsr_get_option('general.style')) {
44
            return $defaults;
45
        }
46
        if (!defined('AVADA_VERSION')) {
47
            return $defaults;
48
        }
49
        $defaults['button'] = 'glsr-button fusion-button fusion-button-default fusion-button-default-size fusion-button-default-span fusion-button-default-type';
50
        return $defaults;
51
    }
52
53
    /**
54
     * @filter site-reviews/modal_wrapped_by
55
     */
56
    public function filterModalWrappedBy(array $builders): array
57
    {
58
        $builders[] = 'avada';
59
        return $builders;
60
    }
61
62
    /**
63
     * @filter site-reviews/enqueue/public/inline-script/after
64
     */
65
    public function filterPublicInlineScript(string $script): string
66
    {
67
        $inlineFile = glsr()->path('assets/scripts/integrations/fusion-inline.js');
68
        if (!file_exists($inlineFile)) {
69
            glsr_log()->error("Inline javascript is missing: {$inlineFile}");
70
            return $script;
71
        }
72
        return $script.file_get_contents($inlineFile);
73
    }
74
75
    /**
76
     * @filter site-reviews/register/widgets
77
     */
78
    public function filterRegisterWidgets(bool $bool): bool
79
    {
80
        if (function_exists('is_fusion_editor') && !is_fusion_editor()) {
81
            return false;
82
        }
83
        return $bool;
84
    }
85
86
    /**
87
     * @action site-reviews/activated
88
     */
89
    public function onActivated(): void
90
    {
91
        if (function_exists('fusion_builder_auto_activate_element')) {
92
            fusion_builder_auto_activate_element('site_review');
93
            fusion_builder_auto_activate_element('site_reviews');
94
            fusion_builder_auto_activate_element('site_reviews_form');
95
            fusion_builder_auto_activate_element('site_reviews_summary');
96
        }
97
    }
98
99
    /**
100
     * @action fusion_builder_shortcodes_init
101
     */
102
    public function registerElements(): void
103
    {
104
        Elements\FusionSiteReview::registerElement();
105
        Elements\FusionSiteReviews::registerElement();
106
        Elements\FusionSiteReviewsForm::registerElement();
107
        Elements\FusionSiteReviewsSummary::registerElement();
108
    }
109
110
    /**
111
     * @action wp_ajax_glsr_fusion_search_query
112
     */
113
    public function runSearchQuery(): void
114
    {
115
        $reqMethod = 'POST' === filter_input(INPUT_SERVER, 'REQUEST_METHOD') ? \INPUT_POST : \INPUT_GET;
116
        if (filter_input($reqMethod, 'fusion_load_nonce')) {
117
            check_ajax_referer('fusion_load_nonce', 'fusion_load_nonce');
118
        } else {
119
            check_ajax_referer('fusion-page-options-nonce', 'fusion_po_nonce');
120
        }
121
        $data = array_fill_keys(['labels', 'results'], []);
122
        $params = filter_input($reqMethod, 'params', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
123
        $labels = filter_input($reqMethod, 'labels', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
124
        $search = filter_input($reqMethod, 'search');
125
        $option = $params['option'] ?? '';
126
        if (!is_null($search)) {
127
            $params['search'] = $search;
128
            $items = call_user_func([glsr(ShortcodeOptionManager::class), $option], $params);
129
            $callback = fn ($id, $text) => compact('id', 'text');
130
            $data['results'] = array_map($callback, array_keys($items), array_values($items));
131
        } elseif (!is_null($labels)) {
132
            $params['include'] = $labels;
133
            $items = call_user_func([glsr(ShortcodeOptionManager::class), $option], $params);
134
            $items = array_filter($items, fn ($id) => in_array($id, $labels), \ARRAY_FILTER_USE_KEY);
135
            $callback = fn ($id, $text) => compact('id', 'text');
136
            $data['labels'] = array_map($callback, array_keys($items), array_values($items));
137
        }
138
        echo wp_json_encode($data);
139
        wp_die();
140
    }
141
}
142