Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 46 |
|
0.00% |
0 / 13 |
CRAP | |
0.00% |
0 / 1 |
tao_models_classes_RoleService | |
0.00% |
0 / 46 |
|
0.00% |
0 / 13 |
342 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
initRole | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getRole | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 | |||
getRoleClass | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
setRoleToUsers | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
20 | |||
getUsers | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
2 | |||
addRole | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
removeRole | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
getIncludedRoles | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
includeRole | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
unincludeRole | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
getAllRoles | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
createInstance | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | |
3 | /* |
4 | * This program is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU General Public License |
6 | * as published by the Free Software Foundation; under version 2 |
7 | * of the License (non-upgradable). |
8 | * |
9 | * This program is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU General Public License |
15 | * along with this program; if not, write to the Free Software |
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | * |
18 | * Copyright (c) 2002-2008 (original work) Public Research Centre Henri Tudor & University of Luxembourg |
19 | * (under the project TAO & TAO2); |
20 | * 2008-2010 (update and modification) Deutsche Institut für Internationale Pädagogische Forschung |
21 | * (under the project TAO-TRANSFER); |
22 | * 2009-2012 (update and modification) Public Research Centre Henri Tudor |
23 | * (under the project TAO-SUSTAIN & TAO-DEV); |
24 | * |
25 | */ |
26 | |
27 | use oat\generis\model\GenerisRdf; |
28 | use oat\oatbox\event\EventManagerAwareTrait; |
29 | use oat\tao\model\event\RoleChangedEvent; |
30 | use oat\tao\model\event\RoleCreatedEvent; |
31 | use oat\tao\model\event\RoleRemovedEvent; |
32 | |
33 | /** |
34 | * This class provide service on user roles management |
35 | * |
36 | * @access public |
37 | * @author Joel Bout, <joel@taotesting.com> |
38 | * @package tao |
39 | */ |
40 | class tao_models_classes_RoleService extends tao_models_classes_GenerisService implements |
41 | core_kernel_users_RolesManagement |
42 | { |
43 | use EventManagerAwareTrait; |
44 | |
45 | /** |
46 | * the core user service |
47 | * |
48 | * @access public |
49 | * @var core_kernel_users_Service |
50 | */ |
51 | protected $generisUserService = null; |
52 | |
53 | /** |
54 | * the class of the target role |
55 | * |
56 | * @access public |
57 | * @var core_kernel_classes_Class |
58 | */ |
59 | private $roleClass = null; |
60 | |
61 | |
62 | /** |
63 | * Constructor, calls the initRole method. |
64 | * |
65 | * @access protected |
66 | * @author Joel Bout, <joel@taotesting.com> |
67 | */ |
68 | protected function __construct() |
69 | { |
70 | parent::__construct(); |
71 | $this->generisUserService = core_kernel_users_Service::singleton(); |
72 | $this->initRole(); |
73 | } |
74 | |
75 | /** |
76 | * Initialize the allowed role. |
77 | * To be overriden. |
78 | * |
79 | * @access protected |
80 | * @author Joel Bout, <joel@taotesting.com> |
81 | * @return mixed |
82 | */ |
83 | protected function initRole() |
84 | { |
85 | $this->roleClass = new core_kernel_classes_Class(GenerisRdf::CLASS_ROLE); |
86 | } |
87 | |
88 | /** |
89 | * Get the Role matching the uri |
90 | * |
91 | * @access public |
92 | * @author Joel Bout, <joel@taotesting.com> |
93 | * @param string uri |
94 | * @return core_kernel_classes_Resource |
95 | */ |
96 | public function getRole($uri) |
97 | { |
98 | $returnValue = null; |
99 | |
100 | if (!empty($uri)) { |
101 | $returnValue = new core_kernel_classes_Resource($uri); |
102 | } |
103 | |
104 | return $returnValue; |
105 | } |
106 | |
107 | /** |
108 | * get the target role class |
109 | * |
110 | * @access public |
111 | * @author Joel Bout, <joel@taotesting.com> |
112 | * @return core_kernel_classes_Class |
113 | */ |
114 | public function getRoleClass() |
115 | { |
116 | $returnValue = null; |
117 | |
118 | $returnValue = $this->roleClass; |
119 | |
120 | return $returnValue; |
121 | } |
122 | |
123 | /** |
124 | * assign a role to a set of users |
125 | * |
126 | * @access public |
127 | * @author Joel Bout, <joel@taotesting.com> |
128 | * @param Resource role |
129 | * @param array users |
130 | * @return boolean |
131 | */ |
132 | public function setRoleToUsers(core_kernel_classes_Resource $role, $users = []) |
133 | { |
134 | $returnValue = (bool) false; |
135 | $userService = tao_models_classes_UserService::singleton(); |
136 | |
137 | $rolesProperty = new core_kernel_classes_Property(GenerisRdf::PROPERTY_USER_ROLES); |
138 | foreach ($users as $u) { |
139 | $u = ($u instanceof core_kernel_classes_Resource) ? $u : new core_kernel_classes_Resource($u); |
140 | |
141 | // just in case of ... |
142 | $userService->unnatachRole($u, $role); |
143 | |
144 | // assign the new role. |
145 | $u->setPropertyValue($rolesProperty, $role); |
146 | |
147 | if (common_session_SessionManager::getSession()->getUserUri() == $u->getUri()) { |
148 | common_session_SessionManager::getSession()->refresh(); |
149 | } |
150 | } |
151 | |
152 | $returnValue = true; |
153 | |
154 | return (bool) $returnValue; |
155 | } |
156 | |
157 | /** |
158 | * get the users who have the role in parameter |
159 | * |
160 | * @access public |
161 | * @author Joel Bout, <joel@taotesting.com> |
162 | * @param core_kernel_classes_Resource role |
163 | * @return array |
164 | */ |
165 | public function getUsers(core_kernel_classes_Resource $role) |
166 | { |
167 | $returnValue = []; |
168 | |
169 | $filters = [GenerisRdf::PROPERTY_USER_ROLES => $role->getUri()]; |
170 | $options = ['like' => false, 'recursive' => true]; |
171 | |
172 | $userClass = new core_kernel_classes_Class(GenerisRdf::CLASS_GENERIS_USER); |
173 | $results = $userClass->searchInstances($filters, $options); |
174 | |
175 | $returnValue = array_keys($results); |
176 | |
177 | return (array) $returnValue; |
178 | } |
179 | |
180 | /** |
181 | * Creates a new Role in persistent memory. |
182 | * |
183 | * @param string $label The label of the new role. |
184 | * @param mixed $includedRoles The roles to include to the new role. Can be either a core_kernel_classes_Resource |
185 | * or an array of core_kernel_classes_Resource. |
186 | * @param core_kernel_classes_Class (optional) A specific class for the new role. |
187 | * @return core_kernel_classes_Resource The newly created role. |
188 | */ |
189 | public function addRole($label, $includedRoles = null, core_kernel_classes_Class $class = null) |
190 | { |
191 | return $this->generisUserService->addRole($label, $includedRoles, $class); |
192 | } |
193 | |
194 | /** |
195 | * Remove a given Role from persistent memory. References to this role |
196 | * will also be removed from the persistent memory. |
197 | * |
198 | * @param core_kernel_classes_Resource $role The Role to remove. |
199 | * @return boolean True if the Role was removed, false otherwise. |
200 | * @deprecated use oat\tao\test\unit\models\classes\accessControl\Service\DeleteRoleService |
201 | * |
202 | * @todo Move this logic to oat\tao\test\unit\models\classes\accessControl\Service\DeleteRoleService |
203 | */ |
204 | public function removeRole(core_kernel_classes_Resource $role) |
205 | { |
206 | $this->getEventManager()->trigger(new RoleRemovedEvent($role->getUri())); |
207 | return $this->generisUserService->removeRole($role); |
208 | } |
209 | |
210 | /** |
211 | * Returns the Roles included by a given Role. |
212 | * |
213 | * @param core_kernel_classes_Resource $role The Role you want to know what are its included Roles. |
214 | * @return array An array of core_kernel_classes_Resource corresponding to the included Roles. |
215 | */ |
216 | public function getIncludedRoles(core_kernel_classes_Resource $role) |
217 | { |
218 | return $this->generisUserService->getIncludedRoles($role); |
219 | } |
220 | |
221 | /** |
222 | * Includes the $roleToInclude Role to the $role Role. |
223 | * |
224 | * @param core_kernel_classes_Resource $role A Role. |
225 | * @param core_kernel_classes_Resource $roleToInclude A Role to include. |
226 | */ |
227 | public function includeRole(core_kernel_classes_Resource $role, core_kernel_classes_Resource $roleToInclude) |
228 | { |
229 | $this->generisUserService->includeRole($role, $roleToInclude); |
230 | $this->getEventManager()->trigger( |
231 | new RoleChangedEvent($role->getUri(), 'included role', $roleToInclude->getUri()) |
232 | ); |
233 | } |
234 | |
235 | /** |
236 | * Uninclude a Role from another Role. |
237 | * |
238 | * @param core_kernel_classes_Resource $role The Role from which you want to uninclude another Role. |
239 | * @param core_kernel_classes_Resource $roleToUninclude The Role to uninclude. |
240 | */ |
241 | public function unincludeRole(core_kernel_classes_Resource $role, core_kernel_classes_Resource $roleToUninclude) |
242 | { |
243 | $this->generisUserService->unincludeRole($role, $roleToUninclude); |
244 | $this->getEventManager()->trigger( |
245 | new RoleChangedEvent($role->getUri(), 'excluded role', $roleToUninclude->getUri()) |
246 | ); |
247 | } |
248 | |
249 | /** |
250 | * Returns the whole collection of Roles stored into TAO. |
251 | * |
252 | * @return array An associative array where keys are Role URIs and values are core_kernel_classes_Resource |
253 | * instances. |
254 | */ |
255 | public function getAllRoles() |
256 | { |
257 | return $this->generisUserService->getAllRoles(); |
258 | } |
259 | |
260 | /** |
261 | * @inheritdoc |
262 | */ |
263 | public function createInstance(core_kernel_classes_Class $clazz, $label = '') |
264 | { |
265 | $instance = parent::createInstance($clazz, $label); |
266 | if ($instance) { |
267 | $this->getEventManager()->trigger(new RoleCreatedEvent($instance->getUri())); |
268 | } |
269 | return $instance; |
270 | } |
271 | } |