Passed
Push — master ( ece31d...41b8a6 )
by Paul
10:20 queued 04:17
created

Rebusify::reset()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
ccs 0
cts 6
cp 0
crap 2
rs 10
c 1
b 0
f 0
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Modules;
4
5
use GeminiLabs\SiteReviews\Application;
6
use GeminiLabs\SiteReviews\Database;
7
use GeminiLabs\SiteReviews\Helper;
8
use GeminiLabs\SiteReviews\Review;
9
10
class Rebusify
11
{
12
    const API_URL = 'https://www.rebusify.com/api/rbs/';
13
    const WEB_URL = 'https://rebusify.com/plans?ref=105';
14
15
    public $message;
16
    public $response;
17
    public $success;
18
19
    /**
20
     * @return mixed
21
     */
22
    public function __get($key)
23
    {
24
        return property_exists($this, $key)
25
            ? $this->$key
26
            : glsr_get($this->response, $key, null);
27
    }
28
29
    /**
30
     * @return self
31
     */
32
    public function activateKey($apiKey = '', $email = '')
33
    {
34
        $this->send('api_key_activation.php', [
35
            'body' => [
36
                'apikey' => $apiKey ?: 0,
37
                'domain' => get_home_url(),
38
                'email' => $email ?: 0,
39
            ],
40
        ]);
41
        return $this;
42
    }
43
44
    /**
45
     * @return self
46
     */
47
    public function reset()
48
    {
49
        $this->message = '';
50
        $this->response = [];
51
        $this->success = false;
52
        return $this;
53
    }
54
55
    /**
56
     * @return self
57
     */
58
    public function sendReview(Review $review)
59
    {
60
        $this->send('index.php', [
61
            'body' => $this->getBodyForReview($review),
62
            'timeout' => 120,
63
        ]);
64
        return $this;
65
    }
66
67
    /**
68
     * @return self
69
     */
70
    public function sendReviewResponse(Review $review)
71
    {
72
        $this->send('fetch_customer_reply.php', [
73
            'body' => $this->getBodyForResponse($review),
74
        ]);
75
        return $this;
76
    }
77
78
    /**
79
     * @return array
80
     */
81
    protected function getBodyForResponse(Review $review)
82
    {
83
        $rebusifyResponse = [
84
            'reply' => glsr(Helper::class)->truncate($review->response, 300),
85
            'review_id' => glsr(Database::class)->get($review->ID, 'rebusify'), // this is the rebusify review ID
86
            'review_transaction_id' => $review->review_id,
87
            'type' => 'M',
88
        ];
89
        return apply_filters('site-reviews/rebusify/response', $rebusifyResponse, $review);
90
    }
91
92
    /**
93
     * @return array
94
     */
95
    protected function getBodyForReview(Review $review)
96
    {
97
        $rebusifyReview = [
98
            'domain' => get_home_url(),
99
            'firstname' => glsr(Helper::class)->truncate(glsr(Helper::class)->convertName($review->author, 'first'), 25),
100
            'rate' => $review->rating,
101
            'review_transaction_id' => $review->review_id,
102
            'reviews' => glsr(Helper::class)->truncate($review->content, 280),
103
            'title' => glsr(Helper::class)->truncate($review->title, 35),
104
            'transaction' => Application::ID, // woocommerce field, not needed for Site Reviews
105
        ];
106
        return apply_filters('site-reviews/rebusify/review', $rebusifyReview, $review);
107
    }
108
109
    /**
110
     * @param \WP_Error|array $response
111
     * @return void
112
     */
113
    protected function handleResponse($response)
114
    {
115
        if (is_wp_error($response)) {
116
            $this->message = $response->get_error_message();
117
        } else {
118
            $responseBody = wp_remote_retrieve_body($response);
119
            $responseCode = wp_remote_retrieve_response_code($response);
120
            $responseData = (array) json_decode($responseBody, true);
121
            $this->response = array_shift($responseData);
122
            $this->message = glsr_get($this->response, 'msg');
123
            $this->success = 'success' === glsr_get($this->response, 'result') || 'yes' === glsr_get($this->response, 'success'); // @todo remove this ugly hack!
124
            if (200 !== $responseCode) {
125
                glsr_log()->error('Bad response code ['.$responseCode.']');
126
            }
127
            if (!$this->success) {
128
                glsr_log()->error($this->message);
129
            }
130
        }
131
    }
132
133
    /**
134
     * @param string $endpoint
135
     * @return void
136
     */
137
    protected function send($endpoint, array $args = [])
138
    {
139
        $args = wp_parse_args($args, [
140
            'body' => null,
141
            'headers' => ['Content-Type' => 'application/x-www-form-urlencoded'],
142
            'redirection' => 5,
143
            'sslverify' => false,
144
            'timeout' => 5,
145
        ]);
146
        $this->reset();
147
        $this->handleResponse(
148
            wp_remote_post(trailingslashit(static::API_URL).$endpoint, $args)
149
        );
150
    }
151
}
152