ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilObjRole.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once "./Services/Object/classes/class.ilObject.php";
6 require_once('./Services/Repository/classes/class.ilObjectPlugin.php');
7 
16 class ilObjRole extends ilObject
17 {
22 
30  var $parent;
31 
34 
38 
45  function __construct($a_id = 0,$a_call_by_reference = false)
46  {
47  $this->type = "role";
48  $this->disk_quota = 0;
49  $this->wsp_disk_quota = 0;
50  parent::__construct($a_id,$a_call_by_reference);
51  }
52 
61  public static function createDefaultRole($a_title, $a_description, $a_tpl_name, $a_ref_id)
62  {
63  global $ilDB;
64 
65  // SET PERMISSION TEMPLATE OF NEW LOCAL CONTRIBUTOR ROLE
66  $res = $ilDB->query("SELECT obj_id FROM object_data ".
67  " WHERE type=".$ilDB->quote("rolt", "text").
68  " AND title=".$ilDB->quote($a_tpl_name, "text"));
69  while($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT))
70  {
71  $tpl_id = $row->obj_id;
72  }
73 
74  if(!$tpl_id)
75  {
76  return null;
77  }
78 
79  include_once './Services/AccessControl/classes/class.ilObjRole.php';
80  $role = new ilObjRole();
81  $role->setTitle($a_title);
82  $role->setDescription($a_description);
83  $role->create();
84 
85  $GLOBALS['rbacadmin']->assignRoleToFolder($role->getId(),$a_ref_id,'y');
86 
87  $GLOBALS['rbacadmin']->copyRoleTemplatePermissions(
88  $tpl_id,
89  ROLE_FOLDER_ID,
90  $a_ref_id,
91  $role->getId()
92  );
93 
94  $ops = $GLOBALS['rbacreview']->getOperationsOfRole(
95  $role->getId(),
96  ilObject::_lookupType($a_ref_id, TRUE),
97  $a_ref_id
98  );
99  $GLOBALS['rbacadmin']->grantPermission(
100  $role->getId(),
101  $ops,
102  $a_ref_id
103  );
104  return $role;
105  }
106 
107 
112  public function validate()
113  {
114  global $ilErr;
115 
116  if(substr($this->getTitle(),0,3) == 'il_')
117  {
118  $ilErr->setMessage('msg_role_reserved_prefix');
119  return false;
120  }
121  return true;
122  }
123 
128  public function getPresentationTitle()
129  {
130  return ilObjRole::_getTranslation($this->getTitle());
131  }
132 
133  function toggleAssignUsersStatus($a_assign_users)
134  {
135  $this->assign_users = (int) $a_assign_users;
136  }
138  {
139  return $this->assign_users ? $this->assign_users : 0;
140  }
141  // Same method (static)
142  public static function _getAssignUsersStatus($a_role_id)
143  {
144  global $ilDB;
145 
146  $query = "SELECT assign_users FROM role_data WHERE role_id = ".$ilDB->quote($a_role_id,'integer')." ";
147  $res = $ilDB->query($query);
148  while($row = $ilDB->fetchObject($res))
149  {
150  return $row->assign_users ? true : false;
151  }
152  return false;
153  }
154 
159  function read ()
160  {
161  global $ilDB;
162 
163  $query = "SELECT * FROM role_data WHERE role_id= ".$ilDB->quote($this->id,'integer')." ";
164 
165  $res = $ilDB->query($query);
166  if ($res->numRows() > 0)
167  {
168  $data = $ilDB->fetchAssoc($res);
169 
170  // fill member vars in one shot
171  $this->assignData($data);
172  }
173  else
174  {
175  $this->ilias->raiseError("<b>Error: There is no dataset with id ".$this->id."!</b><br />class: ".get_class($this)."<br />Script: ".__FILE__."<br />Line: ".__LINE__, $this->ilias->FATAL);
176  }
177 
178  parent::read();
179  }
180 
186  function assignData($a_data)
187  {
188  $this->setTitle(ilUtil::stripSlashes($a_data["title"]));
189  $this->setDescription(ilUtil::stripslashes($a_data["desc"]));
190  $this->setAllowRegister($a_data["allow_register"]);
191  $this->toggleAssignUsersStatus($a_data['assign_users']);
192  $this->setDiskQuota($a_data['disk_quota']);
193  $this->setPersonalWorkspaceDiskQuota($a_data['wsp_disk_quota']);
194  }
195 
200  function update ()
201  {
202  global $ilDB;
203 
204  $query = "UPDATE role_data SET ".
205  "allow_register= ".$ilDB->quote($this->allow_register,'integer').", ".
206  "assign_users = ".$ilDB->quote($this->getAssignUsersStatus(),'integer').", ".
207  "disk_quota = ".$ilDB->quote($this->getDiskQuota(),'integer').", ".
208  "wsp_disk_quota = ".$ilDB->quote($this->getPersonalWorkspaceDiskQuota(),'integer')." ".
209  "WHERE role_id= ".$ilDB->quote($this->id,'integer')." ";
210  $res = $ilDB->manipulate($query);
211 
212  parent::update();
213 
214  $this->read();
215 
216  return true;
217  }
218 
226  function create()
227  {
228  global $ilDB;
229 
230  $this->id = parent::create();
231 
232  $query = "INSERT INTO role_data ".
233  "(role_id,allow_register,assign_users,disk_quota,wsp_disk_quota) ".
234  "VALUES ".
235  "(".$ilDB->quote($this->id,'integer').",".
236  $ilDB->quote($this->getAllowRegister(),'integer').",".
237  $ilDB->quote($this->getAssignUsersStatus(),'integer').",".
238  $ilDB->quote($this->getDiskQuota(),'integer').",".
239  $ilDB->quote($this->getPersonalWorkspaceDiskQuota(),'integer').")"
240  ;
241  $res = $ilDB->query($query);
242 
243  return $this->id;
244  }
245 
252  function setAllowRegister($a_allow_register)
253  {
254  if (empty($a_allow_register))
255  {
256  $a_allow_register == 0;
257  }
258 
259  $this->allow_register = (int) $a_allow_register;
260  }
261 
268  function getAllowRegister()
269  {
270  return $this->allow_register ? $this->allow_register : false;
271  }
272 
281  function setDiskQuota($a_disk_quota)
282  {
283  $this->disk_quota = $a_disk_quota;
284  }
285 
295  function getDiskQuota()
296  {
297  return $this->disk_quota;
298  }
299 
300 
309  function setPersonalWorkspaceDiskQuota($a_disk_quota)
310  {
311  $this->wsp_disk_quota = $a_disk_quota;
312  }
313 
324  {
325  return $this->wsp_disk_quota;
326  }
327 
334  static function _lookupRegisterAllowed()
335  {
336  global $ilDB;
337 
338  $query = "SELECT * FROM role_data ".
339  "JOIN object_data ON object_data.obj_id = role_data.role_id ".
340  "WHERE allow_register = 1";
341  $res = $ilDB->query($query);
342 
343  $roles = array();
344  while($role = $ilDB->fetchAssoc($res))
345  {
346  $roles[] = array("id" => $role["obj_id"],
347  "title" => $role["title"],
348  "auth_mode" => $role['auth_mode']);
349  }
350 
351  return $roles;
352  }
353 
360  static function _lookupAllowRegister($a_role_id)
361  {
362  global $ilDB;
363 
364  $query = "SELECT * FROM role_data ".
365  " WHERE role_id =".$ilDB->quote($a_role_id,'integer');
366 
367  $res = $ilDB->query($query);
368  if ($role_rec = $ilDB->fetchAssoc($res))
369  {
370  if ($role_rec["allow_register"])
371  {
372  return true;
373  }
374  }
375  return false;
376  }
377 
385  function setParent($a_parent_ref)
386  {
387  $this->parent = $a_parent_ref;
388  }
389 
396  function getParent()
397  {
398  return $this->parent;
399  }
400 
401 
408  function delete()
409  {
410  global $rbacadmin, $rbacreview,$ilDB;
411 
412  // Temporary bugfix
413  if($rbacreview->hasMultipleAssignments($this->getId()))
414  {
415  ilLoggerFactory::getLogger('ac')->warning('Found role with multiple assignments: role_id: ' . $this->getId());
416  ilLoggerFactory::getLogger('ac')->warning('Aborted deletion of role.');
417  return false;
418  }
419 
420  if ($rbacreview->isAssignable($this->getId(),$this->getParent()))
421  {
422  ilLoggerFactory::getLogger('ac')->debug('Handling assignable role...');
423  // do not delete a global role, if the role is the last
424  // role a user is assigned to.
425  //
426  // Performance improvement: In the code section below, we
427  // only need to consider _global_ roles. We don't need
428  // to check for _local_ roles, because a user who has
429  // a local role _always_ has a global role too.
430  $last_role_user_ids = array();
431  if ($this->getParent() == ROLE_FOLDER_ID)
432  {
433  ilLoggerFactory::getLogger('ac')->debug('Handling global role...');
434  // The role is a global role: check if
435  // we find users who aren't assigned to any
436  // other global role than this one.
437  $user_ids = $rbacreview->assignedUsers($this->getId());
438 
439  foreach ($user_ids as $user_id)
440  {
441  // get all roles each user has
442  $role_ids = $rbacreview->assignedRoles($user_id);
443 
444  // is last role?
445  if (count($role_ids) == 1)
446  {
447  $last_role_user_ids[] = $user_id;
448  }
449  }
450  }
451 
452  // users with last role found?
453  if (count($last_role_user_ids) > 0)
454  {
455  $user_names = array();
456  foreach ($last_role_user_ids as $user_id)
457  {
458  // GET OBJECT TITLE
459  $user_names[] = ilObjUser::_lookupLogin($user_id);
460  }
461 
462  // TODO: This check must be done in rolefolder object because if multiple
463  // roles were selected the other roles are still deleted and the system does not
464  // give any feedback about this.
465  $users = implode(', ',$user_names);
466  ilLoggerFactory::getLogger('ac')->info('Cannot delete last global role of users.');
467  $this->ilias->raiseError($this->lng->txt("msg_user_last_role1")." ".
468  $users."<br/>".$this->lng->txt("msg_user_last_role2"),$this->ilias->error_obj->WARNING);
469  }
470  else
471  {
472  ilLoggerFactory::getLogger('ac')->debug('Starting deletion of assignable role: role_id: ' . $this->getId());
473  $rbacadmin->deleteRole($this->getId(),$this->getParent());
474 
475  // Delete ldap role group mappings
476  include_once('./Services/LDAP/classes/class.ilLDAPRoleGroupMappingSettings.php');
478 
479  // delete object_data entry
480  parent::delete();
481 
482  // delete role_data entry
483  $query = "DELETE FROM role_data WHERE role_id = ".$ilDB->quote($this->getId(),'integer');
484  $res = $ilDB->manipulate($query);
485 
486  include_once 'Services/AccessControl/classes/class.ilRoleDesktopItem.php';
487  $role_desk_item_obj = new ilRoleDesktopItem($this->getId());
488  $role_desk_item_obj->deleteAll();
489 
490  }
491  }
492  else
493  {
494  ilLoggerFactory::getLogger('ac')->debug('Starting deletion of linked role: role_id ' . $this->getId());
495  // linked local role: INHERITANCE WAS STOPPED, SO DELETE ONLY THIS LOCAL ROLE
496  $rbacadmin->deleteLocalRole($this->getId(),$this->getParent());
497  }
498  return true;
499  }
500 
501  function getCountMembers()
502  {
503  global $rbacreview;
504 
505  return count($rbacreview->assignedUsers($this->getId()));
506  }
507 
508  static function _getTranslation($a_role_title)
509  {
510  global $lng;
511 
512  $test_str = explode('_',$a_role_title);
513 
514  if ($test_str[0] == 'il')
515  {
516  $test2 = (int) $test_str[3];
517  if ($test2 > 0)
518  {
519  unset($test_str[3]);
520  }
521 
522  return $lng->txt(implode('_',$test_str));
523  }
524 
525  return $a_role_title;
526  }
527 
528 
529 
530  static function _updateAuthMode($a_roles)
531  {
532  global $ilDB;
533 
534  foreach ($a_roles as $role_id => $auth_mode)
535  {
536  $query = "UPDATE role_data SET ".
537  "auth_mode= ".$ilDB->quote($auth_mode,'text')." ".
538  "WHERE role_id= ".$ilDB->quote($role_id,'integer')." ";
539  $res = $ilDB->manipulate($query);
540  }
541  }
542 
543  static function _getAuthMode($a_role_id)
544  {
545  global $ilDB;
546 
547  $query = "SELECT auth_mode FROM role_data ".
548  "WHERE role_id= ".$ilDB->quote($a_role_id,'integer')." ";
549  $res = $ilDB->query($query);
550  $row = $ilDB->fetchAssoc($res);
551 
552  return $row['auth_mode'];
553  }
554 
562  public static function _getRolesByAuthMode($a_auth_mode)
563  {
564  global $ilDB;
565 
566  $query = "SELECT * FROM role_data ".
567  "WHERE auth_mode = ".$ilDB->quote($a_auth_mode,'text');
568  $res = $ilDB->query($query);
569  $roles = array();
570  while($row = $ilDB->fetchObject($res))
571  {
572  $roles[] = $row->role_id;
573  }
574  return $roles;
575  }
576 
585  public static function _resetAuthMode($a_auth_mode)
586  {
587  global $ilDB;
588 
589  $query = "UPDATE role_data SET auth_mode = 'default' WHERE auth_mode = ".$ilDB->quote($a_auth_mode,'text');
590  $res = $ilDB->manipulate($query);
591  }
592 
593  // returns array of operation/objecttype definitions
594  // private
596  {
597  global $ilDB, $lng, $objDefinition,$rbacreview;
598 
599  $operation_info = $rbacreview->getOperationAssignment();
600  foreach($operation_info as $info)
601  {
602  if($objDefinition->getDevMode($info['type']))
603  {
604  continue;
605  }
606  $rbac_objects[$info['typ_id']] = array("obj_id" => $info['typ_id'],
607  "type" => $info['type']);
608 
609  // handle plugin permission texts
610  $txt = $objDefinition->isPlugin($info['type'])
611  ? ilObjectPlugin::lookupTxtById($info['type'], $info['type']."_".$info['operation'])
612  : $lng->txt($info['type']."_".$info['operation']);
613  if (substr($info['operation'], 0, 7) == "create_" &&
614  $objDefinition->isPlugin(substr($info['operation'], 7)))
615  {
616  $txt = ilObjectPlugin::lookupTxtById(substr($info['operation'], 7), $info['type']."_".$info['operation']);
617  }
618  $rbac_operations[$info['typ_id']][$info['ops_id']] = array(
619  "ops_id" => $info['ops_id'],
620  "title" => $info['operation'],
621  "name" => $txt);
622 
623  }
624  return array($rbac_objects,$rbac_operations);
625  }
626 
627 
628  public static function isAutoGenerated($a_role_id)
629  {
630  return substr(ilObject::_lookupTitle($a_role_id), 0, 3) == 'il_';
631  }
632 
640  public function changeExistingObjects($a_start_node,$a_mode,$a_filter,$a_exclusion_filter = array())
641  {
642  global $tree,$rbacreview;
643 
644  // Get node info of subtree
645  $nodes = $tree->getRbacSubtreeInfo($a_start_node);
646 
647  // get local policies
648  $all_local_policies = $rbacreview->getObjectsWithStopedInheritance($this->getId());
649 
650  // filter relevant roles
651  $local_policies = array();
652  foreach($all_local_policies as $lp)
653  {
654  if(isset($nodes[$lp]))
655  {
656  $local_policies[] = $lp;
657  }
658  }
659 
660  // Delete deprecated policies
661  switch($a_mode)
662  {
663  case self::MODE_UNPROTECTED_DELETE_LOCAL_POLICIES:
664  case self::MODE_PROTECTED_DELETE_LOCAL_POLICIES:
665  $local_policies = $this->deleteLocalPolicies($a_start_node,$local_policies,$a_filter);
666  #$local_policies = array($a_start_node == ROOT_FOLDER_ID ? SYSTEM_FOLDER_ID : $a_start_node);
667  break;
668  }
669  $this->adjustPermissions($a_mode,$nodes,$local_policies,$a_filter,$a_exclusion_filter);
670 
671  #var_dump(memory_get_peak_usage());
672  #var_dump(memory_get_usage());
673  }
674 
680  protected function deleteLocalPolicies($a_start,$a_policies,$a_filter)
681  {
682  global $rbacreview,$rbacadmin;
683 
684  $local_policies = array();
685  foreach($a_policies as $policy)
686  {
687  if($policy == $a_start or $policy == SYSTEM_FOLDER_ID)
688  {
689  $local_policies[] = $policy;
690  continue;
691  }
692  if(!in_array('all',$a_filter) and !in_array(ilObject::_lookupType(ilObject::_lookupObjId($policy)),$a_filter))
693  {
694  $local_policies[] = $policy;
695  continue;
696  }
697  $rbacadmin->deleteLocalRole($this->getId(),$policy);
698  }
699  return $local_policies;
700  }
701 
710  protected function adjustPermissions($a_mode,$a_nodes,$a_policies,$a_filter,$a_exclusion_filter = array())
711  {
712  global $rbacadmin, $rbacreview, $tree;
713 
714  $operation_stack = array();
715  $policy_stack = array();
716  $node_stack = array();
717 
718  $start_node = current($a_nodes);
719  array_push($node_stack,$start_node);
720  $this->updatePolicyStack($policy_stack, $start_node['child']);
721  $this->updateOperationStack($operation_stack, $start_node['child'],true);
722 
723  include_once "Services/AccessControl/classes/class.ilRbacLog.php";
724  $rbac_log_active = ilRbacLog::isActive();
725 
726  $local_policy = false;
727  foreach($a_nodes as $node)
728  {
729  $cmp_node = end($node_stack);
730  while($relation = $tree->getRelationOfNodes($node,$cmp_node))
731  {
732  switch($relation)
733  {
736  $GLOBALS['ilLog']->write(__METHOD__.': Handling sibling/none relation.');
737  array_pop($operation_stack);
738  array_pop($policy_stack);
739  array_pop($node_stack);
740  $cmp_node = end($node_stack);
741  $local_policy = false;
742  break;
743 
747  default:
748  $GLOBALS['ilLog']->write(__METHOD__.': Handling child/equals/parent '. $relation);
749  break 2;
750  }
751 
752  }
753 
754  if($local_policy)
755  {
756  continue;
757  }
758 
759  // Start node => set permissions and continue
760  if($node['child'] == $start_node['child'])
761  {
762  if($this->isHandledObjectType($a_filter,$a_exclusion_filter,$node['type']))
763  {
764  if($rbac_log_active)
765  {
766  $rbac_log_roles = $rbacreview->getParentRoleIds($node['child'], false);
767  $rbac_log_old = ilRbacLog::gatherFaPa($node['child'], array_keys($rbac_log_roles));
768  }
769 
770  // Set permissions
771  $perms = end($operation_stack);
772  $rbacadmin->grantPermission(
773  $this->getId(),
774  (array) $perms[$node['type']],
775  $node['child']
776  );
777 
778  if($rbac_log_active)
779  {
780  $rbac_log_new = ilRbacLog::gatherFaPa($node['child'], array_keys($rbac_log_roles));
781  $rbac_log = ilRbacLog::diffFaPa($rbac_log_old, $rbac_log_new);
782  ilRbacLog::add(ilRbacLog::EDIT_TEMPLATE_EXISTING, $node['child'], $rbac_log);
783  }
784  }
785  continue;
786  }
787 
788  // Node has local policies => update permission stack and continue
789  if(in_array($node['child'], $a_policies) and ($node['child'] != SYSTEM_FOLDER_ID))
790  {
791  $local_policy = true;
792  $this->updatePolicyStack($policy_stack, $node['child']);
793  $this->updateOperationStack($operation_stack, $node['child']);
794  array_push($node_stack, $node);
795  continue;
796  }
797 
798  // Continue if this object type is not in filter
799  if(!$this->isHandledObjectType($a_filter,$a_exclusion_filter,$node['type']))
800  {
801  continue;
802  }
803 
804  if($rbac_log_active)
805  {
806  $rbac_log_roles = $rbacreview->getParentRoleIds($node['child'], false);
807  $rbac_log_old = ilRbacLog::gatherFaPa($node['child'], array_keys($rbac_log_roles));
808  }
809 
810  // Node is course => create course permission intersection
811  if(($a_mode == self::MODE_UNPROTECTED_DELETE_LOCAL_POLICIES or
812  $a_mode == self::MODE_UNPROTECTED_KEEP_LOCAL_POLICIES) and ($node['type'] == 'crs'))
813 
814  {
815  // Copy role permission intersection
816  $perms = end($operation_stack);
817  $this->createPermissionIntersection($policy_stack,$perms['crs'],$node['child'],$node['type']);
818  if($this->updateOperationStack($operation_stack,$node['child']))
819  {
820  $this->updatePolicyStack($policy_stack, $node['child']);
821  array_push($node_stack, $node);
822  }
823  }
824 
825  // Node is group => create group permission intersection
826  if(($a_mode == self::MODE_UNPROTECTED_DELETE_LOCAL_POLICIES or
827  $a_mode == self::MODE_UNPROTECTED_KEEP_LOCAL_POLICIES) and ($node['type'] == 'grp'))
828  {
829  // Copy role permission intersection
830  $perms = end($operation_stack);
831  $this->createPermissionIntersection($policy_stack,$perms['grp'],$node['child'],$node['type']);
832  if($this->updateOperationStack($operation_stack,$node['child']))
833  {
834  $this->updatePolicyStack($policy_stack, $node['child']);
835  array_push($node_stack, $node);
836  }
837  }
838 
839  // Set permission
840  $perms = end($operation_stack);
841  $rbacadmin->grantPermission(
842  $this->getId(),
843  (array) $perms[$node['type']],
844  $node['child']
845  );
846 
847  if($rbac_log_active)
848  {
849  $rbac_log_new = ilRbacLog::gatherFaPa($node['child'], array_keys($rbac_log_roles));
850  $rbac_log = ilRbacLog::diffFaPa($rbac_log_old, $rbac_log_new);
851  ilRbacLog::add(ilRbacLog::EDIT_TEMPLATE_EXISTING, $node['child'], $rbac_log);
852  }
853  }
854  }
855 
862  protected function isHandledObjectType($a_filter,$a_exclusion_filter,$a_type)
863  {
864  if(in_array($a_type,$a_exclusion_filter))
865  {
866  return false;
867  }
868 
869  if(in_array('all',$a_filter))
870  {
871  return true;
872  }
873  return in_array($a_type,$a_filter);
874  }
875 
882  protected function updateOperationStack(&$a_stack,$a_node, $a_init = false)
883  {
884  global $rbacreview;
885 
886  $has_policies = null;
887  $policy_origin = null;
888 
889  if($a_node == ROOT_FOLDER_ID)
890  {
891  $has_policies = TRUE;
892  $policy_origin = ROLE_FOLDER_ID;
893  }
894  else
895  {
896  $has_policies = $rbacreview->getLocalPolicies($a_node);
897  $policy_origin = $a_node;
898 
899  if($a_init)
900  {
901  $parent_roles = $rbacreview->getParentRoleIds($a_node,false);
902  if($parent_roles[$this->getId()])
903  {
904  $a_stack[] = $rbacreview->getAllOperationsOfRole(
905  $this->getId(),
906  $parent_roles[$this->getId()]['parent']
907  );
908  }
909  return true;
910  }
911 
912  }
913 
914  if(!$has_policies)
915  {
916  return false;
917  }
918 
919  $a_stack[] = $rbacreview->getAllOperationsOfRole(
920  $this->getId(),
921  $policy_origin
922  );
923  return true;
924  }
925 
931  protected function updatePolicyStack(&$a_stack,$a_node)
932  {
933  global $rbacreview;
934 
935  $has_policies = null;
936  $policy_origin = null;
937 
938  if($a_node == ROOT_FOLDER_ID)
939  {
940  $has_policies = TRUE;
941  $policy_origin = ROLE_FOLDER_ID;
942  }
943  else
944  {
945  $has_policies = $rbacreview->getLocalPolicies($a_node);
946  $policy_origin = $a_node;
947  }
948 
949  if(!$has_policies)
950  {
951  return false;
952  }
953 
954  $a_stack[] = $policy_origin;
955  return true;
956  }
957 
965  protected function createPermissionIntersection($policy_stack,$a_current_ops,$a_id,$a_type)
966  {
967  global $ilDB, $rbacreview,$rbacadmin;
968 
969  static $course_non_member_id = null;
970  static $group_non_member_id = null;
971  static $group_open_id = null;
972  static $group_closed_id = null;
973 
974  // Get template id
975  switch($a_type)
976  {
977  case 'grp':
978 
979  include_once './Modules/Group/classes/class.ilObjGroup.php';
981  #var_dump("GROUP TYPE",$type);
982  switch($type)
983  {
984  case GRP_TYPE_CLOSED:
985  if(!$group_closed_id)
986  {
987  $query = "SELECT obj_id FROM object_data WHERE type='rolt' AND title='il_grp_status_closed'";
988  $res = $ilDB->query($query);
989  while($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT))
990  {
991  $group_closed_id = $row->obj_id;
992  }
993  }
994  $template_id = $group_closed_id;
995  #var_dump("GROUP CLOSED id:" . $template_id);
996  break;
997 
998  case GRP_TYPE_OPEN:
999  default:
1000  if(!$group_open_id)
1001  {
1002  $query = "SELECT obj_id FROM object_data WHERE type='rolt' AND title='il_grp_status_open'";
1003  $res = $ilDB->query($query);
1004  while($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT))
1005  {
1006  $group_open_id = $row->obj_id;
1007  }
1008  }
1009  $template_id = $group_open_id;
1010  #var_dump("GROUP OPEN id:" . $template_id);
1011  break;
1012  }
1013  break;
1014 
1015  case 'crs':
1016  if(!$course_non_member_id)
1017  {
1018  $query = "SELECT obj_id FROM object_data WHERE type='rolt' AND title='il_crs_non_member'";
1019  $res = $ilDB->query($query);
1020  while($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT))
1021  {
1022  $course_non_member_id = $row->obj_id;
1023  }
1024  }
1025  $template_id = $course_non_member_id;
1026  break;
1027  }
1028 
1029  $current_ops = $a_current_ops[$a_type];
1030 
1031  // Create intersection template permissions
1032  if($template_id)
1033  {
1034  //$rolf = $rbacreview->getRoleFolderIdOfObject($a_id);
1035 
1036  $rbacadmin->copyRolePermissionIntersection(
1037  $template_id, ROLE_FOLDER_ID,
1038  $this->getId(), end($policy_stack),
1039  $a_id,$this->getId()
1040  );
1041  }
1042  else
1043  {
1044  #echo "No template id for ".$a_id.' of type'.$a_type.'<br>';
1045  }
1046  #echo "ROLE ASSIGN: ".$rolf.' AID'.$a_id;
1047  if($a_id and !$GLOBALS['rbacreview']->isRoleAssignedToObject($this->getId(),$a_id))
1048  {
1049  $rbacadmin->assignRoleToFolder($this->getId(),$a_id,"n");
1050  }
1051  return true;
1052  }
1053 
1054 } // END class.ilObjRole
1055 ?>
const GRP_TYPE_OPEN
static _lookupLogin($a_user_id)
lookup login
Class ilObjRole.
global $ilErr
Definition: raiseError.php:16
$disk_quota
The disk quota in bytes.
Class ilObjRoleGUI.
$template_id
Definition: example_062.php:89
static lookupTxtById($plugin_id, $lang_var)
getPresentationTitle()
return translated title for autogenerated roles
static _lookupRegisterAllowed()
get all roles that are activated in user registration
getPersonalWorkspaceDiskQuota()
Gets the minimal personal workspace disk quota imposed by this role.
const MODE_PROTECTED_DELETE_LOCAL_POLICIES
createPermissionIntersection($policy_stack, $a_current_ops, $a_id, $a_type)
Create course group permission intersection.
Class ilObject Basic functions for all objects.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
setParent($a_parent_ref)
set reference id of parent object this is neccessary for non RBAC protected objects!!! ...
toggleAssignUsersStatus($a_assign_users)
static _updateAuthMode($a_roles)
const RELATION_PARENT
static _lookupTitle($a_id)
lookup object title
setAllowRegister($a_allow_register)
set allow_register of role
update()
updates a record "role" and write it into database public
static isActive()
updatePolicyStack(&$a_stack, $a_node)
Update policy stack.
static _getAuthMode($a_role_id)
static _resetAuthMode($a_auth_mode)
Reset auth mode to default.
deleteLocalPolicies($a_start, $a_policies, $a_filter)
Delete local policies.
static _getAssignUsersStatus($a_role_id)
static gatherFaPa($a_ref_id, array $a_role_ids, $a_add_action=false)
getAllowRegister()
get allow_register
static diffFaPa(array $a_old, array $a_new)
getDiskQuota()
Gets the minimal disk quota imposed by this role.
setTitle($a_title)
set object title
static createDefaultRole($a_title, $a_description, $a_tpl_name, $a_ref_id)
const MODE_PROTECTED_KEEP_LOCAL_POLICIES
create()
create
$a_type
Definition: workflow.php:93
$info
Definition: example_052.php:80
static isAutoGenerated($a_role_id)
getId()
get object id public
const GRP_TYPE_CLOSED
static _lookupObjId($a_id)
isHandledObjectType($a_filter, $a_exclusion_filter, $a_type)
Check if type is filterer.
getTitle()
get object title public
static _getRolesByAuthMode($a_auth_mode)
Get roles by auth mode.
redirection script todo: (a better solution should control the processing via a xml file) ...
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
__construct($a_id=0, $a_call_by_reference=false)
Constructor public.
const RELATION_EQUALS
setPersonalWorkspaceDiskQuota($a_disk_quota)
Sets the minimal personal workspace disk quota imposed by this role.
$txt
Definition: error.php:12
const RELATION_CHILD
const RELATION_NONE
static _getTranslation($a_role_title)
validate()
Validate role data.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
adjustPermissions($a_mode, $a_nodes, $a_policies, $a_filter, $a_exclusion_filter=array())
Adjust permissions.
getParent()
get reference id of parent object
__getPermissionDefinitions()
const MODE_UNPROTECTED_DELETE_LOCAL_POLICIES
static add($a_action, $a_ref_id, array $a_diff, $a_source_ref_id=false)
const MODE_UNPROTECTED_KEEP_LOCAL_POLICIES
changeExistingObjects($a_start_node, $a_mode, $a_filter, $a_exclusion_filter=array())
Change existing objects.
global $ilDB
static lookupGroupTye($a_id)
Lookup group type.
const EDIT_TEMPLATE_EXISTING
updateOperationStack(&$a_stack, $a_node, $a_init=false)
Update operation stack.
const RELATION_SIBLING
setDescription($a_desc)
set object description
static getLogger($a_component_id)
Get component logger.
read()
loads "role" from database private
static _lookupAllowRegister($a_role_id)
check whether role is allowed in user registration or not
setDiskQuota($a_disk_quota)
Sets the minimal disk quota imposed by this role.
assignData($a_data)
loads a record "role" from array public