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 
4 include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateAction.php';
5 
13 {
17 
18  const PATTERN_PARENT_TYPE = 'action';
19 
20 
21  private $pattern = array();
22  private $filter_type = self::FILTER_SOURCE_TITLE;
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  {
226  return self::TYPE_BLOCK_ROLE;
227  }
228 
234  public function toXml(ilXmlWriter $writer)
235  {
236  $writer->xmlStartTag('blockRoleAction');
237 
238  switch($this->getFilterType())
239  {
240  case self::FILTER_SOURCE_OBJ_ID:
241  $writer->xmlStartTag('roleFilter',array('source' => 'objId'));
242  break;
243 
244  default:
245  case self::FILTER_SOURCE_TITLE:
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';
299  foreach(ilDidacticTemplateFilterPatternFactory::lookupPatternsByParentId($this->getActionId(),self::PATTERN_PARENT_TYPE) as $pattern)
300  {
301  $this->addFilterPattern($pattern);
302  }
303  }
304 }
305 ?>
Class ilObjRole.
Description of ilDidacticTemplateBlockRoleAction.
static lookupPatternsByParentId($a_parent_id, $a_parent_type)
Get patterns by template id.
addFilterPattern(ilDidacticTemplateFilterPattern $pattern)
Add filter.
xmlStartTag($tag, $attrs=NULL, $empty=FALSE, $encode=TRUE, $escape=TRUE)
Writes a starttag.
XML writer class.
static _lookupTitle($a_id)
lookup object title
xmlEndTag($tag)
Writes an endtag.
deleteLocalPolicy($a_role_id, $source)
Delete local policy.
filterRoles(ilObject $source)
Filter roles.
$a_type
Definition: workflow.php:93
Create styles array
The data for the language used.
initSourceObject()
Init the source object.
setFilterPatterns(Array $patterns)
Set filter patterns.
Abstract class for template actions.
const MODE_UNPROTECTED_DELETE_LOCAL_POLICIES
global $ilDB
static getLogger($a_component_id)
Get component logger.
Represents a filter pattern for didactic template actions.