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

SendVerificationEmail   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Test Coverage

Coverage 15%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 7
eloc 38
c 1
b 0
f 1
dl 0
loc 59
ccs 6
cts 40
cp 0.15
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A handle() 0 13 4
A buildEmail() 0 30 2
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Commands;
4
5
use GeminiLabs\SiteReviews\Contracts\CommandContract as Contract;
6
use GeminiLabs\SiteReviews\Database\OptionManager;
7
use GeminiLabs\SiteReviews\Helpers\Arr;
8
use GeminiLabs\SiteReviews\Modules\Email;
9
use GeminiLabs\SiteReviews\Modules\Html\Template;
10
use GeminiLabs\SiteReviews\Modules\Html\TemplateTags;
11
use GeminiLabs\SiteReviews\Review;
12
13
class SendVerificationEmail implements Contract
14
{
15
    public $review;
16
    public $verify_url;
17
18 24
    public function __construct(Review $review, string $verify_url)
19
    {
20 24
        $this->review = $review;
21 24
        $this->verify_url = $verify_url;
22
    }
23
24
    /**
25
     * @return bool
26
     */
27 24
    public function handle()
28
    {
29 24
        if (!glsr(OptionManager::class)->getBool('settings.general.request_verification', false)) {
30 24
            return false;
31
        }
32
        $recipient = $this->review->email ?: Arr::get($this->review->user(), 'data.user_email');
33
        if (empty($recipient)) {
34
            return false;
35
        }
36
        $email = glsr(Email::class)->compose($this->buildEmail($recipient), [
37
            'review' => $this->review,
38
        ]);
39
        return $email->send();
40
    }
41
42
    protected function buildEmail(string $recipient): array
43
    {
44
        $context = glsr(TemplateTags::class)->tags($this->review, [
45
            'include' => [
46
                'review_assigned_links',
47
                'review_assigned_posts',
48
                'review_assigned_terms',
49
                'review_assigned_users',
50
                'review_author',
51
                'review_categories',
52
                'review_content',
53
                'review_email',
54
                'review_rating',
55
                'review_title',
56
                'site_title',
57
                'site_url',
58
            ],
59
        ]);
60
        $context['verify_url'] = $this->verify_url; // use the provided verify_url with the redirect path
61
        $template = trim(glsr(OptionManager::class)->get('settings.general.request_verification_message'));
62
        if (!empty($template)) {
63
            $templatePathForHook = 'request_verification_message';
64
            $message = glsr(Template::class)->interpolate($template, $templatePathForHook, compact('context'));
65
        } else {
66
            glsr_log()->error('The request_verification_message setting is missing.');
67
        }
68
        return [
69
            'to' => $recipient,
70
            'subject' => __('Please verify your review', 'site-reviews'),
71
            'message' => $message ?? '',
72
        ];
73
    }
74
}
75