Completed
Branch develop-3.0 (63d375)
by Mohamed
02:58
created

MessageQueuer::queueAdd()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
/*
4
 * This file is part of the Tinyissue package.
5
 *
6
 * (c) Mohamed Alsharaf <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Tinyissue\Repository\Project\Issue;
13
14
use Tinyissue\Model\Message\Queue;
15
use Tinyissue\Model\Project;
16
use Tinyissue\Model\User;
17
18
trait MessageQueuer
19
{
20
    /**
21
     * Insert update issue to message queue.
22
     *
23
     * @param Project\Issue $issue
24
     * @param User          $changeBy
25
     *
26
     * @return void
27
     */
28
    public function queueUpdate(Project\Issue $issue, User $changeBy)
29
    {
30
        // is Closed?
31
        $this->queueClosedIssue($issue, $changeBy);
32
33
        // is Reopened?
34
        $this->queueReopenedIssue($issue, $changeBy);
35
36
        // If the assignee has changed and it is not the logged in user who made the action
37
        $noMessageForMe = $this->queueAssign($issue, $changeBy);
38
39
        // If the update was just for assigning user, then skip update issue
40
        $this->queueUpdateIssue($issue, $changeBy, $noMessageForMe);
41
    }
42
43
    /**
44
     * @param Project\Issue $issue
45
     * @param User          $changeBy
46
     * @param bool|int      $noMessageForMe
47
     */
48
    protected function queueUpdateIssue(Project\Issue $issue, User $changeBy, $noMessageForMe = false)
49
    {
50
        // Number of changed attributes
51
        $countChanges = count($issue->getDirty());
52
53
        if (!($countChanges === 1 && $noMessageForMe !== false)) {
54
            return (new Queue())->updater($changeBy)->queue(Queue::UPDATE_ISSUE, $issue, $changeBy);
55
        }
56
    }
57
58
    /**
59
     * @param Project\Issue $issue
60
     * @param User          $changeBy
61
     */
62
    protected function queueClosedIssue(Project\Issue $issue, User $changeBy)
63
    {
64
        if (!$issue->isOpen()) {
65
            (new Queue())->updater($changeBy)->queue(Queue::CLOSE_ISSUE, $issue, $changeBy);
66
        }
67
    }
68
69
    /**
70
     * @param Project\Issue $issue
71
     * @param User          $changeBy
72
     */
73
    protected function queueReopenedIssue(Project\Issue $issue, User $changeBy)
74
    {
75
        if ((int) $issue->getOriginal('status') === Project\Issue::STATUS_CLOSED) {
76
            (new Queue())->updater($changeBy)->queue(Queue::REOPEN_ISSUE, $issue, $changeBy);
77
        }
78
    }
79
80
    /**
81
     * Insert add issue to message queue.
82
     *
83
     * @param Project\Issue $issue
84
     * @param User          $changeBy
85
     *
86
     * @return void
87
     */
88
    public function queueAdd(Project\Issue $issue, User $changeBy)
89
    {
90
        return (new Queue())->updater($changeBy)->queue(Queue::ADD_ISSUE, $issue, $changeBy);
91
    }
92
93
    /**
94
     * Insert assign issue to message queue.
95
     *
96
     * @param Project\Issue $issue
97
     * @param User          $changeBy
98
     *
99
     * @return bool|int
100
     */
101
    public function queueAssign(Project\Issue $issue, User $changeBy)
102
    {
103
        // Whether or not the assignee has changed
104
        $return = false;
105
106
        // If the assignee has changed and it is not the logged in user who made the action
107
        if ($issue->assigned_to > 0 && $changeBy->id !== $issue->assigned_to && $issue->assigned_to !== $issue->getOriginal('assigned_to', $issue->assigned_to)) {
108
            (new Queue())->updater($changeBy)->queue(Queue::ASSIGN_ISSUE, $issue, $changeBy);
109
110
            $return = $issue->assigned_to;
111
        }
112
113
        return $return;
114
    }
115
116
    /**
117
     * Insert issue tag changes to message queue.
118
     *
119
     * @param Project\Issue $issue
120
     * @param array         $addedTags
121
     * @param array         $removedTags
122
     * @param User          $changeBy
123
     *
124
     * @return mixed
125
     */
126
    public function queueChangeTags(Project\Issue $issue, array $addedTags, array $removedTags, User $changeBy)
127
    {
128
        return (new Queue())->updater($changeBy)->queueIssueTagChanges($issue, $addedTags, $removedTags, $changeBy);
129
    }
130
}
131