ActionManager   A
last analyzed

Complexity

Total Complexity 20

Size/Duplication

Total Lines 104
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 94%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 20
c 1
b 0
f 1
lcom 1
cbo 2
dl 0
loc 104
ccs 47
cts 50
cp 0.94
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
F getCardsMovedFromTodoToDone() 0 79 19
1
<?php
2
3
namespace TrelloBurndown\Manager;
4
5
use TrelloBurndown\Client\TrelloClient;
6
7
/**
8
 * Class ActionManager.
9
 */
10
class ActionManager
11
{
12
    /**
13
     * @var \Trello\Client
14
     */
15
    private $client;
16
17
    /**
18
     * ActionManager constructor.
19
     *
20
     * @param TrelloClient $trelloClient
21
     */
22 29
    public function __construct(TrelloClient $trelloClient)
23
    {
24 29
        $this->client = $trelloClient->getClient();
25 29
    }
26
27
    /**
28
     * @param array $todoLists
29
     * @param array $wipLists
30
     * @param array $doneLists
31
     *
32
     * @return array
33
     */
34 5
    public function getCardsMovedFromTodoToDone(array $todoLists, array $wipLists, array $doneLists)
35
    {
36
        // Get all actions on done lists.
37 5
        $actionsOnDoneLists = [];
38 5
        foreach ($doneLists as $list) {
39 5
            $actionsOnDoneLists = array_merge(
40
                $actionsOnDoneLists,
41 5
                $this->client
42 5
                    ->api('lists')
43 5
                    ->actions()
44 5
                    ->all($list->getId(), ['filter' => 'updateCard', 'limit' => '100'])
45
            );
46
        }
47
48
        // Get all done cards
49 5
        $doneCards = [];
50 5
        foreach ($doneLists as $list) {
51 5
            $doneCards = array_merge(
52
                $doneCards,
53 5
                $this->client
54 5
                    ->api('lists')
55 5
                    ->cards()
56 5
                    ->all($list->getId()));
57
        }
58
59
        // Get ids of done cards
60 5
        $doneCardIds = [];
61 5
        foreach ($doneCards as $card) {
62 5
            $doneCardIds[] = $card['id'];
63
        }
64
65
        // Get todo list Ids
66 5
        $todoListsIds = [];
67 5
        foreach ($todoLists as $list) {
68 5
            $todoListsIds[] = $list->getId();
69
        }
70
71
        // Get wip list Ids
72 5
        $wipListsIds = [];
73 5
        foreach ($wipLists as $list) {
74 5
            $wipListsIds[] = $list->getId();
75
        }
76
77
        // Get done list Ids
78 5
        $doneListsIds = [];
79 5
        foreach ($doneLists as $list) {
80 5
            $doneListsIds[] = $list->getId();
81
        }
82
83 5
        $cardFromTodoToDone = [];
84
85 5
        foreach ($actionsOnDoneLists as $action) {
86 5
            if ($action['type'] == 'updateCard' &&
87 5
                isset($action['data']['listBefore']) &&
88 5
                isset($action['data']['listAfter']) &&
89 5
                ((in_array($action['data']['listBefore']['id'], $todoListsIds) &&
90 1
                        in_array($action['data']['old']['idList'], $todoListsIds)) ||
91 4
                    (in_array($action['data']['listBefore']['id'], $wipListsIds) &&
92 5
                        in_array($action['data']['old']['idList'], $wipListsIds)))
93
                &&
94 5
                in_array($action['data']['listAfter']['id'], $doneListsIds) &&
95 5
                in_array($action['data']['card']['id'], $doneCardIds)
96
            ) {
97 5
                if (!isset($cardFromTodoToDone[$action['data']['card']['id']])) {
98 5
                    $cardFromTodoToDone[$action['data']['card']['id']] = [
99 5
                        'date' => $action['date'],
100 5
                        'card' => $action['data']['card']['name'],
101
                    ];
102
                } elseif ($action['date'] > $cardFromTodoToDone[$action['data']['card']['id']]['date']) {
103
                    $cardFromTodoToDone[$action['data']['card']['id']] = [
104
                        'date' => $action['date'],
105 5
                        'card' => $action['data']['card']['name'],
106
                    ];
107
                }
108
            }
109
        }
110
111 5
        return $cardFromTodoToDone;
112
    }
113
}
114