Passed
Push — develop ( 0ca1de...49b51d )
by Paul
18:10
created

PublicController::enqueueAssets()   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
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Controllers;
4
5
use GeminiLabs\SiteReviews\Commands\CreateReview;
6
use GeminiLabs\SiteReviews\Commands\EnqueuePublicAssets;
7
use GeminiLabs\SiteReviews\Contracts\BuilderContract;
8
use GeminiLabs\SiteReviews\Modules\Html\Builder;
9
use GeminiLabs\SiteReviews\Modules\Schema;
10
use GeminiLabs\SiteReviews\Modules\Style;
11
use GeminiLabs\SiteReviews\Request;
12
use GeminiLabs\SiteReviews\Shortcodes\SiteReviewsShortcode;
13
14
class PublicController extends AbstractController
15
{
16
    /**
17
     * @action site-reviews/route/ajax/approved-review
18
     */
19
    public function approvedReviewAjax(Request $request): void
20
    {
21
        $reviewId = $request->cast('review_id', 'int');
22
        $review = glsr_get_review($reviewId);
23
        if (!$review->isValid() || !$review->is_approved) {
24
            wp_send_json_error();
25
        }
26
        $html = $review->build($request->toArray());
27
        wp_send_json_success([
28
            'attributes' => $html->attributes(),
29
            'review' => (string) $html,
30
        ]);
31
    }
32
33
    /**
34
     * @action wp_enqueue_scripts
35
     */
36
    public function enqueueAssets(): void
37
    {
38
        $this->execute(new EnqueuePublicAssets());
39
    }
40
41
    /**
42
     * @action site-reviews/route/ajax/fetch-paged-reviews
43
     */
44
    public function fetchPagedReviewsAjax(Request $request): void
45
    {
46
        glsr()->store(glsr()->paged_handle, $request->toArray());
47
        $html = glsr(SiteReviewsShortcode::class)
48
            ->normalize($request->cast('atts', 'array'))
49
            ->buildReviewsHtml();
50
        $response = [
51
            'max_num_pages' => $html->max_num_pages,
52
            'pagination' => $html->getPagination($wrap = false),
53
            'reviews' => $html->getReviews(),
54
        ];
55
        wp_send_json_success($response);
56
    }
57
58
    /**
59
     * @filter site-reviews/render/view
60
     */
61 130
    public function filterRenderView(string $view): string
62
    {
63 130
        return glsr(Style::class)->view($view);
64
    }
65
66
    /**
67
     * @action wp_footer
68
     */
69
    public function renderSchema(): void
70
    {
71
        if (empty(glsr_get_option('schema.integration.plugin'))) {
72
            glsr(Schema::class)->render();
73
        }
74
    }
75
76
    /**
77
     * @action site-reviews/route/public/submit-review
78
     */
79
    public function submitReview(Request $request): void
80
    {
81
        $command = $this->execute(new CreateReview($request));
82
        if ($command->successful()) {
83
            wp_safe_redirect($command->referer()); // @todo add review ID to referer?
84
            exit;
85
        }
86
    }
87
88
    /**
89
     * @action site-reviews/route/ajax/submit-review
90
     */
91 8
    public function submitReviewAjax(Request $request): void
92
    {
93 8
        $command = $this->execute(new CreateReview($request));
94 8
        $command->sendJsonResponse();
95
    }
96
}
97