ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilDidacticTemplateBlockRoleAction.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateAction.php';
5
13{
17
18 const PATTERN_PARENT_TYPE = 'action';
19
20
21 private $pattern = array();
23
28 public function __construct($action_id = 0)
29 {
30 parent::__construct($action_id);
31 }
32
38 {
39 $this->pattern[] = $pattern;
40 }
41
46 public function setFilterPatterns(Array $patterns)
47 {
48 $this->pattern = $patterns;
49 }
50
55 public function getFilterPattern()
56 {
57 return $this->pattern;
58 }
59
64 public function setFilterType($a_type)
65 {
66 $this->filter_type = $a_type;
67 }
68
73 public function getFilterType()
74 {
75 return $this->filter_type;
76 }
77
81 public function save()
82 {
83 global $ilDB;
84
85 parent::save();
86
87 $query = 'INSERT INTO didactic_tpl_abr (action_id,filter_type) '.
88 'VALUES( '.
89 $ilDB->quote($this->getActionId(),'integer').', '.
90 $ilDB->quote($this->getFilterType(),'integer').' '.
91 ')';
92 $ilDB->manipulate($query);
93
94 foreach($this->getFilterPattern() as $pattern)
95 {
96 /* @var ilDidacticTemplateFilterPattern $pattern */
97 $pattern->setParentId($this->getActionId());
98 $pattern->setParentType(self::PATTERN_PARENT_TYPE);
99 $pattern->save();
100 }
101 }
102
108 public function delete()
109 {
110 global $ilDB;
111
112 parent::delete();
113
114 $query = 'DELETE FROM didactic_tpl_abr '.
115 'WHERE action_id = '.$ilDB->quote($this->getActionId(),'integer');
116 $ilDB->manipulate($query);
117
118 foreach($this->getFilterPattern() as $pattern)
119 {
120 $pattern->delete();
121 }
122 return true;
123 }
124
125
126
127
131 public function apply()
132 {
133 $source = $this->initSourceObject();
134 $roles = $this->filterRoles($source);
135
136 // Create local policy for filtered roles
137 foreach($roles as $role_id => $role)
138 {
139 $this->blockRole($role_id, $source);
140 }
141 return true;
142 }
143
149 protected function blockRole($a_role_id, $source)
150 {
151 global $rbacadmin, $rbacreview;
152
153 // Set assign to 'y' only if it is a local role
154 $assign = $rbacreview->isAssignable($a_role_id, $source->getRefId()) ? 'y' : 'n';
155
156 // Delete permissions
157 $rbacadmin->revokeSubtreePermissions($source->getRefId(), $a_role_id);
158
159 // Delete template permissions
160 $rbacadmin->deleteSubtreeTemplates($source->getRefId(), $a_role_id);
161
162 $rbacadmin->assignRoleToFolder(
163 $a_role_id,
164 $source->getRefId(),
165 $assign
166 );
167 return true;
168 }
169
173 public function revert()
174 {
175 $source = $this->initSourceObject();
176 $roles = $this->filterRoles($source);
177
178 // Create local policy for filtered roles
179 foreach($roles as $role_id => $role)
180 {
181 $this->deleteLocalPolicy($role_id, $source);
182 }
183 return true;
184 }
185
192 protected function deleteLocalPolicy($a_role_id, $source)
193 {
194 global $rbacreview, $rbacadmin;
195
196 // Create role folder if it does not exist
197 //$rolf = $rbacreview->getRoleFolderIdOfObject($source->getRefId());
198
199 if($rbacreview->getRoleFolderOfRole($a_role_id) == $source->getRefId())
200 {
201 ilLoggerFactory::getLogger('otpl')->debug('Ignoring local role: '.ilObject::_lookupTitle($a_role_id));
202 return false;
203 }
204
205 $rbacadmin->deleteLocalRole($a_role_id, $source->getRefId());
206
207 // Change existing object
208 include_once './Services/AccessControl/classes/class.ilObjRole.php';
209 $role = new ilObjRole($a_role_id);
210 $role->changeExistingObjects(
211 $source->getRefId(),
213 array('all')
214 );
215
216 return true;
217 }
218
219
224 public function getType()
225 {
227 }
228
234 public function toXml(ilXmlWriter $writer)
235 {
236 $writer->xmlStartTag('blockRoleAction');
237
238 switch($this->getFilterType())
239 {
241 $writer->xmlStartTag('roleFilter',array('source' => 'objId'));
242 break;
243
244 default:
246 $writer->xmlStartTag('roleFilter',array('source' => 'title'));
247 break;
248 }
249
250 foreach($this->getFilterPattern() as $pattern)
251 {
252 $pattern->toXml($writer);
253 }
254 $writer->xmlEndTag('roleFilter');
255 $writer->xmlEndTag('blockRoleAction');
256 return;
257 }
258
262 public function __clone()
263 {
264 parent::__clone();
265
266 // Clone patterns
267 $cloned = array();
268 foreach($this->getFilterPattern() as $pattern)
269 {
270 $clones[] = clone $pattern;
271 }
272 $this->setFilterPatterns($clones);
273 }
274
280 public function read()
281 {
282 global $ilDB;
283
284 if(!parent::read())
285 {
286 return false;
287 }
288
289 $query = 'SELECT * FROM didactic_tpl_abr '.
290 'WHERE action_id = '.$ilDB->quote($this->getActionId());
291 $res = $ilDB->query($query);
292 while($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT))
293 {
294 $this->setFilterType($row->filter_type);
295 }
296
297 // Read filter
298 include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateFilterPatternFactory.php';
300 {
301 $this->addFilterPattern($pattern);
302 }
303 }
304}
305?>
An exception for terminatinating execution or to throw for unit testing.
Abstract class for template actions.
initSourceObject()
Init the source object.
filterRoles(ilObject $source)
Filter roles.
Description of ilDidacticTemplateBlockRoleAction.
setFilterPatterns(Array $patterns)
Set filter patterns.
deleteLocalPolicy($a_role_id, $source)
Delete local policy.
addFilterPattern(ilDidacticTemplateFilterPattern $pattern)
Add filter.
static lookupPatternsByParentId($a_parent_id, $a_parent_type)
Get patterns by template id.
Represents a filter pattern for didactic template actions.
static getLogger($a_component_id)
Get component logger.
Class ilObjRole.
const MODE_UNPROTECTED_DELETE_LOCAL_POLICIES
static _lookupTitle($a_id)
lookup object title
XML writer class.
xmlEndTag($tag)
Writes an endtag.
xmlStartTag($tag, $attrs=NULL, $empty=FALSE, $encode=TRUE, $escape=TRUE)
Writes a starttag.
global $ilDB
$a_type
Definition: workflow.php:93