Passed
Push — main ( a0e9c5...805967 )
by Paul
07:42
created

VerificationController::verifyReview()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 2
Bugs 1 Features 1
Metric Value
eloc 13
c 2
b 1
f 1
dl 0
loc 17
ccs 0
cts 14
cp 0
rs 9.8333
cc 3
nc 3
nop 1
crap 12
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Controllers;
4
5
use GeminiLabs\SiteReviews\Commands\CreateReview;
6
use GeminiLabs\SiteReviews\Commands\SendVerificationEmail;
7
use GeminiLabs\SiteReviews\Commands\VerifyReview;
8
use GeminiLabs\SiteReviews\Helpers\Arr;
9
use GeminiLabs\SiteReviews\Modules\Encryption;
10
use GeminiLabs\SiteReviews\Request;
11
use GeminiLabs\SiteReviews\Review;
12
13
class VerificationController extends Controller
14
{
15
    /**
16
     * @action site-reviews/review/created
17
     */
18 24
    public function sendVerificationEmail(Review $review, CreateReview $command): void
19
    {
20 24
        $path = wp_parse_url((string) get_permalink($command->post_id), PHP_URL_PATH);
21 24
        $verifyUrl = $review->verifyUrl($path);
22 24
        if (!empty($verifyUrl)) {
23 24
            $this->execute(new SendVerificationEmail($review, $verifyUrl));
24
        }
25
    }
26
27
    /**
28
     * @action site-reviews/route/ajax/verified-review
29
     */
30
    public function verifiedReviewAjax(Request $request): void
31
    {
32
        $reviewId = $request->cast('review_id', 'int');
33
        $token = sanitize_text_field($request->get('verified'));
34
        $token = (int) glsr(Encryption::class)->decrypt($token);
35
        if (empty($reviewId) || $reviewId !== $token) {
36
            wp_send_json_error();
37
        }
38
        $review = glsr_get_review($reviewId);
39
        if ($review->isValid()) {
40
            $html = $review->build($request->toArray());
41
            $message = $review->is_approved
42
                ? __('Thank you, your review has been verified.', 'site-reviews')
43
                : __('Thank you, your review has been verified and is awaiting approval.', 'site-reviews');
44
            wp_send_json_success([
45
                'attributes' => $html->attributes(),
46
                'message' => $message,
47
                'review' => (string) $html,
48
            ]);
49
        }
50
        wp_send_json_error();
51
    }
52
53
    /**
54
     * @action site-reviews/route/get/public/verify
55
     */
56
    public function verifyReview(Request $request): void
57
    {
58
        $postId = Arr::getAs('int', $request->data, 0);
59
        $redirectUrl = get_home_url();
60
        $review = glsr_get_review($postId);
61
        if ($review->isValid()) {
62
            $isVerified = $this->execute(new VerifyReview($review));
63
            $path = Arr::get($request->data, 1);
64
            $redirectUrl .= $path;
65
            $redirectUrl = add_query_arg('review_id', $review->ID, $redirectUrl);
66
            if ($isVerified) {
67
                $token = glsr(Encryption::class)->encrypt($review->ID);
68
                $redirectUrl = add_query_arg('verified', $token, $redirectUrl);
69
            }
70
        }
71
        wp_redirect($redirectUrl);
72
        exit;
73
    }
74
}
75