Passed
Push — master ( 1a00b5...984447 )
by y
03:02
created

User::_getMap()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 4
rs 10
c 3
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A User::__toString() 0 2 1
1
<?php
2
3
namespace Helix\Asana;
4
5
use Helix\Asana\Base\AbstractEntity;
6
use Helix\Asana\User\Photo;
7
use Helix\Asana\User\TaskList;
8
9
/**
10
 * A user.
11
 *
12
 * @see https://developers.asana.com/docs/asana-users
13
 * @see https://developers.asana.com/docs/user
14
 *
15
 * @immutable Users cannot be altered via the API.
16
 *
17
 * @method string       getEmail        ()
18
 * @method string       getName         ()
19
 * @method null|Photo   getPhoto        ()
20
 * @method Workspace[]  getWorkspaces   ()
21
 */
22
class User extends AbstractEntity {
23
24
    const TYPE = 'user';
25
26
    protected static $map = [
27
        'photo' => Photo::class,
28
        'workspaces' => [Workspace::class]
29
    ];
30
31
    final public function __toString (): string {
32
        return "users/{$this->getGid()}";
33
    }
34
35
    /**
36
     * @param Workspace $workspace
37
     * @return $this
38
     */
39
    public function addToWorkspace (Workspace $workspace) {
40
        $this->api->post("{$workspace}/addUser", ['user' => $this->getGid()]);
41
        $this->_merge('workspaces', [$workspace]);
42
        return $this;
43
    }
44
45
    /**
46
     * @param Workspace $workspace
47
     * @return Portfolio[]
48
     */
49
    public function getFavoritePortfolios (Workspace $workspace) {
50
        return $this->getFavorites(Portfolio::class, Portfolio::TYPE, $workspace);
51
    }
52
53
    /**
54
     * @param Workspace $workspace
55
     * @return Project[]
56
     */
57
    public function getFavoriteProjects (Workspace $workspace) {
58
        return $this->getFavorites(Project::class, Project::TYPE, $workspace);
59
    }
60
61
    /**
62
     * @param Workspace $workspace
63
     * @return Tag[]
64
     */
65
    public function getFavoriteTags (Workspace $workspace) {
66
        return $this->getFavorites(Tag::class, Tag::TYPE, $workspace);
67
    }
68
69
    /**
70
     * @param Workspace $workspace
71
     * @return Team[]
72
     */
73
    public function getFavoriteTeams (Workspace $workspace) {
74
        return $this->getFavorites(Team::class, Team::TYPE, $workspace);
75
    }
76
77
    /**
78
     * @param Workspace $workspace
79
     * @return User[]
80
     */
81
    public function getFavoriteUsers (Workspace $workspace) {
82
        return $this->getFavorites(self::class, self::TYPE, $workspace);
83
    }
84
85
    /**
86
     * @param string $class
87
     * @param string $resourceType
88
     * @param Workspace $workspace
89
     * @return array
90
     */
91
    protected function getFavorites (string $class, string $resourceType, Workspace $workspace) {
92
        return $this->loadAll($class, "{$this}/favorites", [
93
            'resource_type' => $resourceType,
94
            'workspace' => $workspace->getGid()
95
        ]);
96
    }
97
98
    /**
99
     * Returns all incomplete tasks in the given workspace that are assigned to the user.
100
     *
101
     * @see https://developers.asana.com/docs/#get-multiple-tasks
102
     *
103
     * @param Workspace $workspace
104
     * @return Task[]
105
     */
106
    public function getIncompleteTasks (Workspace $workspace) {
107
        return $this->loadAll(Task::class, 'tasks', [
108
            'assignee' => $this->getGid(),
109
            'workspace' => $workspace->getGid(),
110
            'completed_since' => 'now'
111
        ]);
112
    }
113
114
    /**
115
     * @param Workspace $workspace
116
     * @return Portfolio[]
117
     */
118
    public function getPortfolios (Workspace $workspace) {
119
        return $this->loadAll(Portfolio::class, "portfolios", [
120
            'workspace' => $workspace->getGid(),
121
            'owner' => $this->getGid()
122
        ]);
123
    }
124
125
    /**
126
     * @param Workspace $workspace
127
     * @return TaskList
128
     */
129
    public function getTaskList (Workspace $workspace) {
130
        return $this->load(TaskList::class, "{$this}/user_task_list", [
131
            'workspace' => $workspace->getGid()
132
        ]);
133
    }
134
135
    /**
136
     * Returns all tasks in the given workspace that are assigned to the user.
137
     *
138
     * @see https://developers.asana.com/docs/#get-multiple-tasks
139
     *
140
     * @param Workspace $workspace
141
     * @param string[] $filter
142
     * @return Task[]
143
     */
144
    public function getTasks (Workspace $workspace, array $filter = []) {
145
        $filter['assignee'] = $this->getGid();
146
        $filter['workspace'] = $workspace->getGid();
147
        return $this->loadAll(Task::class, 'tasks', $filter);
148
    }
149
150
    /**
151
     * @param Workspace $organization
152
     * @return Team[]
153
     */
154
    public function getTeams (Workspace $organization) {
155
        return $this->loadAll(Team::class, "{$this}/teams", [
156
            'organization' => $organization->getGid()
157
        ]);
158
    }
159
160
    public function getUrl (): string {
161
        return "https://app.asana.com/0/{$this->getGid()}/list";
162
    }
163
164
    /**
165
     * @param Workspace $workspace
166
     * @return $this
167
     */
168
    public function removeFromWorkspace (Workspace $workspace) {
169
        $this->api->post("{$workspace}/removeUser", ['user' => $this->getGid()]);
170
        $this->_remove('workspaces', [$workspace]);
171
        return $this;
172
    }
173
}