Passed
Push — master ( 197c27...f2cc15 )
by Paul
22:24 queued 07:48
created

Controller   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 13
eloc 29
c 1
b 0
f 1
dl 0
loc 79
ccs 0
cts 30
cp 0
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A onReviewCreated() 0 16 4
A filterActivityTriggerLabel() 0 9 3
A filterActivityTriggers() 0 7 1
A filterUserHasAccessToAchievement() 0 10 5
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Integrations\GamiPress;
4
5
use GeminiLabs\SiteReviews\Controllers\Controller as BaseController;
6
use GeminiLabs\SiteReviews\Helpers\Arr;
7
use GeminiLabs\SiteReviews\Review;
8
9
class Controller extends BaseController
10
{
11
    public const TRIGGER_GET = 'site_reviews_gamipress/received/user';
12
    public const TRIGGER_WRITE = 'site_reviews_gamipress/reviewed/any';
13
14
    /**
15
     * @param string $label
16
     * @param int $requirementId
17
     * @param array $requirement
18
     * @return string
19
     * @filter gamipress_activity_trigger_label
20
     */
21
    public function filterActivityTriggerLabel($label, $requirementId, $requirement)
22
    {
23
        if (static::TRIGGER_GET === Arr::get($requirement, 'trigger_type')) {
24
            return _x('getting a review', '1 point for ... 1 time', 'site-reviews');
25
        }
26
        if (static::TRIGGER_WRITE === Arr::get($requirement, 'trigger_type')) {
27
            return _x('writing a review', '1 point for ... 1 time', 'site-reviews');
28
        }
29
        return $label;
30
    }
31
32
    /**
33
     * @param array $triggers
34
     * @return array
35
     * @filter gamipress_activity_triggers
36
     */
37
    public function filterActivityTriggers($triggers)
38
    {
39
        $triggers[glsr()->name] = [
40
            static::TRIGGER_GET => __('Get review', 'site-reviews'),
41
            static::TRIGGER_WRITE => __('Write review', 'site-reviews'),
42
        ];
43
        return $triggers;
44
    }
45
46
    /**
47
     * @param bool $result
48
     * @param int $userId
49
     * @param int $requirementId
50
     * @param string $trigger
51
     * @param int $siteId
52
     * @param array $args
53
     * @return bool
54
     * @filter user_has_access_to_achievement
55
     */
56
    public function filterUserHasAccessToAchievement($result, $userId, $requirementId, $trigger)
57
    {
58
        if (!function_exists('gamipress_get_requirement_types_slugs')) {
59
            return $result;
60
        }
61
        $isRequirement = in_array(get_post_type($requirementId), gamipress_get_requirement_types_slugs());
62
        if ($result && $isRequirement && in_array($trigger, [static::TRIGGER_GET, static::TRIGGER_WRITE])) {
63
            return true;
64
        }
65
        return $result;
66
    }
67
68
    /**
69
     * @return void
70
     * @action site-reviews/review/created
71
     */
72
    public function onReviewCreated(Review $review)
73
    {
74
        if (!is_user_logged_in() || !function_exists('gamipress_trigger_event')) {
75
            return;
76
        }
77
        $assignedUsers = wp_list_pluck(glsr_get_review($review->ID)->assignedUsers(), 'ID');
78
        $assignedUsers = array_values(array_diff($assignedUsers, [get_current_user_id()]));
79
        foreach ($assignedUsers as $userId) {
80
            gamipress_trigger_event([
81
                'event' => static::TRIGGER_GET,
82
                'user_id' => (int) $userId,
83
            ]);
84
        }
85
        gamipress_trigger_event([
86
            'event' => static::TRIGGER_WRITE,
87
            'user_id' => get_current_user_id(),
88
        ]);
89
    }
90
}
91