49                 (isset($ilDB)) ? $this->
ilDB =& $ilDB : $this->
ilDB =& $ilias->db;
 
   73                 if (!isset($a_usr_id))
 
   75                         $message = get_class($this).
"::removeUser(): No usr_id given!";
 
   76                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
   79                 $query = 
"DELETE FROM rbac_ua WHERE usr_id = ".$ilDB->quote($a_usr_id,
'integer');
 
   96                 if (!isset($a_rol_id) or !isset($a_ref_id))
 
   98                         $message = get_class($this).
"::deleteRole(): Missing parameter! role_id: ".$a_rol_id.
" ref_id of role folder: ".$a_ref_id;
 
   99                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  103                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
  105                         $this->ilErr->raiseError($lng->txt(
"msg_sysrole_not_deletable"),$this->ilErr->MESSAGE);
 
  108                 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
 
  110                 $mapping->deleteRole($a_rol_id); 
 
  117                 $query = 
"DELETE FROM rbac_ua ".
 
  118                          "WHERE rol_id = ".$ilDB->quote($a_rol_id,
'integer');
 
  122                 $query = 
"DELETE FROM rbac_pa ".
 
  123                          "WHERE rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
 
  142                 if (!isset($a_obj_id))
 
  144                         $message = get_class($this).
"::deleteTemplate(): No obj_id given!";
 
  145                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  148                 $query = 
'DELETE FROM rbac_templates '.
 
  149                          'WHERE rol_id = '.$ilDB->quote($a_obj_id,
'integer');
 
  152                 $query = 
'DELETE FROM rbac_fa '.
 
  153                         'WHERE rol_id = '.$ilDB->quote($a_obj_id,
'integer');
 
  170                 if (!isset($a_rol_id))
 
  172                         $message = get_class($this).
"::deleteLocalRole(): Missing parameter! role_id: '".$a_rol_id.
"'";
 
  173                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  177                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
  184                         $clause = 
'AND parent = '.$ilDB->quote($a_ref_id,
'integer').
' ';
 
  187                 $query = 
'DELETE FROM rbac_fa '.
 
  188                          'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
 
  192                 $query = 
'DELETE FROM rbac_templates '.
 
  193                          'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
 
  211                 global 
$ilDB,$rbacreview;
 
  213                 if (!isset($a_rol_id) or !isset($a_usr_id))
 
  215                         $message = get_class($this).
"::assignUser(): Missing parameter! role_id: ".$a_rol_id.
" usr_id: ".$a_usr_id;
 
  216                         #$this->ilErr->raiseError($message,$this->ilErr->WARNING); 
  220                 $alreadyAssigned = $rbacreview->isAssigned($a_usr_id,$a_rol_id);        
 
  223                 if (!$alreadyAssigned) 
 
  225                         $query = 
"INSERT INTO rbac_ua (usr_id, rol_id) ".
 
  226                          "VALUES (".$ilDB->quote($a_usr_id,
'integer').
",".$ilDB->quote($a_rol_id,
'integer').
")";
 
  229                         include_once 
'Services/AccessControl/classes/class.ilRoleDesktopItem.php';
 
  235                                 foreach($role_desk_item_obj->getAll() as $item_data)
 
  237                                         if(!$tmp_user->isDesktopItem($item_data[
'item_id'],$item_data[
'item_type']))
 
  239                                                 $tmp_user->addDesktopItem($item_data[
'item_id'],$item_data[
'item_type']);
 
  245                 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
 
  247                 $mapping->assign($a_rol_id,$a_usr_id); 
 
  263                 if (!isset($a_rol_id) or !isset($a_usr_id))
 
  265                         $message = get_class($this).
"::deassignUser(): Missing parameter! role_id: ".$a_rol_id.
" usr_id: ".$a_usr_id;
 
  266                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  269                 $query = 
"DELETE FROM rbac_ua ".
 
  270                          "WHERE usr_id = ".$ilDB->quote($a_usr_id,
'integer').
" ".
 
  271                          "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
 
  274                 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
 
  276                 $mapping->deassign($a_rol_id,$a_usr_id); 
 
  293                 if (!isset($a_rol_id) or !isset($a_ops) or !isset($a_ref_id))
 
  295                         $this->ilErr->raiseError(get_class($this).
"::grantPermission(): Missing parameter! ".
 
  296                                                         "role_id: ".$a_rol_id.
" ref_id: ".$a_ref_id.
" operations: ",$this->ilErr->WARNING);
 
  299                 if (!is_array($a_ops))
 
  301                         $this->ilErr->raiseError(get_class($this).
"::grantPermission(): Wrong datatype for operations!",
 
  302                                                                          $this->ilErr->WARNING);
 
  312                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
  318                 foreach ($a_ops as $key => $operation)
 
  320                         $a_ops[$key] = (int) $operation;
 
  324                 $ops_ids = serialize($a_ops);
 
  326                 $query = 
'DELETE FROM rbac_pa '.
 
  327                         'WHERE rol_id = %s '.
 
  329                 $res = $ilDB->queryF(
$query,array(
'integer',
'integer'),
 
  330                         array($a_rol_id,$a_ref_id));
 
  337                 $query = 
"INSERT INTO rbac_pa (rol_id,ops_id,ref_id) ".
 
  339                          "(".$ilDB->quote($a_rol_id,
'integer').
",".$ilDB->quote($ops_ids,
'text').
",".$ilDB->quote($a_ref_id,
'integer').
")";
 
  358                 if (!isset($a_ref_id))
 
  360                         $message = get_class($this).
"::revokePermission(): Missing parameter! ref_id: ".$a_ref_id;
 
  361                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  363 #$log->write("ilRBACadmin::revokePermission(), 0"); 
  366                 if ($a_keep_protected != 
true)
 
  369                         if ($a_rol_id == SYSTEM_ROLE_ID)
 
  376                                 $and1 = 
" AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
 
  383                         $query = 
"DELETE FROM rbac_pa ".
 
  384                                  "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
 
  395                 $roles_in_scope = $rbacreview->getParentRoleIds($a_ref_id);
 
  399 #$log->write("ilRBACadmin::revokePermission(), 1"); 
  403                         foreach ($roles_in_scope as $role)
 
  405                                 if ($role[
'protected'] == 
true)
 
  410                                 $role_ids[] = $role[
'obj_id'];
 
  419                         $query = 
'DELETE FROM rbac_pa '.
 
  420                                 'WHERE '.$ilDB->in(
'rol_id',$role_ids,
false,
'integer').
' '.
 
  421                                 'AND ref_id = '.$ilDB->quote($a_ref_id,
'integer');
 
  426 #$log->write("ilRBACadmin::revokePermission(), 2");      
  428                         if ($a_rol_id == SYSTEM_ROLE_ID)
 
  434                         if ($roles_in_scope[$a_rol_id][
'protected'] == 
true)
 
  439                         $query = 
"DELETE FROM rbac_pa ".
 
  440                                  "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
" ".
 
  441                                  "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
 
  458                 $query = 
"DELETE FROM rbac_pa ".
 
  460                         "(SELECT child FROM tree WHERE ".
 
  461                                 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
 
  462                                 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
 
  464                         "AND rol_id = ".$ilDB->quote($a_role_id,
'integer');
 
  466                 $ilDB->manipulate(
$query);
 
  480                 $query = 
"DELETE FROM rbac_templates ".
 
  482                         "(SELECT child FROM tree WHERE ".
 
  483                                 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
 
  484                                 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
 
  486                         "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
 
  488                 $ilDB->manipulate(
$query);
 
  490                 $query = 
"DELETE FROM rbac_fa ".
 
  492                         "(SELECT child FROM tree WHERE ".
 
  493                                 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
 
  494                                 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
 
  496                         "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
 
  499                 $ilDB->manipulate(
$query);
 
  515                 if (!isset($a_ref_ids) or !is_array($a_ref_ids))
 
  517                         $message = get_class($this).
"::revokePermissionList(): Missing parameter or parameter is not an array! reference_list: ".var_dump($a_ref_ids);
 
  518                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  521                 if (!isset($a_rol_id))
 
  523                         $message = get_class($this).
"::revokePermissionList(): Missing parameter! rol_id: ".$a_rol_id;
 
  524                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  528                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
  533                 $query = 
"DELETE FROM rbac_pa ".
 
  534                          "WHERE ".$ilDB->in(
'ref_id',$a_ref_ids,
false,
'integer').
' '.
 
  535                          "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
 
  551         public function copyRolePermissions($a_source_id,$a_source_parent,$a_dest_parent,$a_dest_id,$a_consider_protected = 
true)
 
  553                 global $tree,$rbacreview;
 
  558                 $source_obj = $tree->getParentId($a_source_parent);
 
  559                 $target_obj = $tree->getParentId($a_dest_parent);
 
  560                 $ops = $rbacreview->getRoleOperationsOnObject($a_source_id,$source_obj);
 
  579                 global $rbacreview,
$ilDB;
 
  581                 if (!isset($a_source_id) or !isset($a_source_parent) or !isset($a_dest_id) or !isset($a_dest_parent))
 
  583                         $message = __METHOD__.
": Missing parameter! source_id: ".$a_source_id.
 
  584                                            " source_parent_id: ".$a_source_parent.
 
  585                                            " dest_id : ".$a_dest_id.
 
  586                                            " dest_parent_id: ".$a_dest_parent;
 
  587                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  591                 if ($a_dest_id == SYSTEM_ROLE_ID)
 
  596                 $query = 
'DELETE FROM rbac_templates WHERE rol_id = '.$ilDB->quote($a_dest_id,
'integer').
' '.
 
  597                         'AND parent = '.$ilDB->quote($a_dest_parent,
'integer');
 
  600                 $query = 
'SELECT * FROM rbac_templates '.
 
  601                          'WHERE rol_id = '.$ilDB->quote($a_source_id,
'integer').
' '.
 
  602                          'AND parent = '.$ilDB->quote($a_source_parent,
'integer');
 
  604                 while (
$row = $ilDB->fetchObject(
$res))
 
  606                         $query = 
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
 
  608                                  $ilDB->quote($a_dest_id,
'integer').
",".
 
  609                                  $ilDB->quote(
$row->type,
'text').
",".
 
  610                                  $ilDB->quote(
$row->ops_id,
'integer').
",".
 
  611                                  $ilDB->quote($a_dest_parent,
'integer').
")";
 
  612                         $ilDB->manipulate(
$query);
 
  616                 if ($a_consider_protected == 
true)
 
  618                         if ($rbacreview->isProtected($a_source_parent,$a_source_id))
 
  641                 global $rbacreview,
$ilDB;
 
  643                 if (!isset($a_source1_id) or !isset($a_source1_parent) 
 
  644                 or !isset($a_source2_id) or !isset($a_source2_parent) 
 
  645                 or !isset($a_dest_id) or !isset($a_dest_parent))
 
  647                         $message = get_class($this).
"::copyRolePermissionIntersection(): Missing parameter! source1_id: ".$a_source1_id.
 
  648                                            " source1_parent: ".$a_source1_parent.
 
  649                                            " source2_id: ".$a_source2_id.
 
  650                                            " source2_parent: ".$a_source2_parent.
 
  651                                            " dest_id: ".$a_dest_id.
 
  652                                            " dest_parent_id: ".$a_dest_parent;
 
  653                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  657                 if ($a_dest_id == SYSTEM_ROLE_ID)
 
  662                 if ($rbacreview->isProtected($a_source2_parent,$a_source2_id))
 
  667                 $query = 
"SELECT s1.type, s1.ops_id ".
 
  668                         "FROM rbac_templates s1, rbac_templates s2 ".
 
  669                         "WHERE s1.rol_id = ".$ilDB->quote($a_source1_id,
'integer').
" ".
 
  670                         "AND s1.parent = ".$ilDB->quote($a_source1_parent,
'integer').
" ".
 
  671                         "AND s2.rol_id = ".$ilDB->quote($a_source2_id,
'integer').
" ".
 
  672                         "AND s2.parent = ".$ilDB->quote($a_source2_parent,
'integer').
" ".
 
  673                         "AND s1.type = s2.type ".
 
  674                         "AND s1.ops_id = s2.ops_id";
 
  677                 $query = 
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
 
  679                 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
 
  680                 while(
$row = $ilDB->fetchObject(
$res))
 
  682                         $ilDB->execute($sta,array(
 
  706                 if (!isset($a_rol_id) or !isset($a_ref_id))
 
  708                         $message = get_class($this).
"::deleteRolePermission(): Missing parameter! role_id: ".$a_rol_id.
" ref_id: ".$a_ref_id;
 
  709                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  713                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
  718                 if ($a_type !== 
false)
 
  720                         $and_type = 
" AND type=".$ilDB->quote($a_type,
'text').
" ";
 
  723                 $query = 
'DELETE FROM rbac_templates '.
 
  724                          'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
 
  725                          'AND parent = '.$ilDB->quote($a_ref_id,
'integer').
' '.
 
  747                 if (!isset($a_rol_id) or !isset($a_type) or !isset($a_ops) or !isset($a_ref_id))
 
  749                         $message = get_class($this).
"::setRolePermission(): Missing parameter!".
 
  750                                            " role_id: ".$a_rol_id.
 
  752                                            " operations: ".$a_ops.
 
  753                                            " ref_id: ".$a_ref_id;
 
  754                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  757                 if (!is_string($a_type) or empty($a_type))
 
  759                         $message = get_class($this).
"::setRolePermission(): a_type is no string or empty!";
 
  760                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  763                 if (!is_array($a_ops) or empty($a_ops))
 
  765                         $message = get_class($this).
"::setRolePermission(): a_ops is no array or empty!";
 
  766                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  770                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
  775                 $query = 
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
 
  777                 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
 
  778                 foreach ($a_ops as $op)
 
  780                         $res = $ilDB->execute($sta,array(
 
  808                 if (!isset($a_rol_id) or !isset($a_parent))
 
  810                         $message = get_class($this).
"::assignRoleToFolder(): Missing Parameter!".
 
  811                                            " role_id: ".$a_rol_id.
 
  812                                            " parent_id: ".$a_parent.
 
  813                                            " assign: ".$a_assign;
 
  814                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  818                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
  824                 if ($a_assign != 
"y")
 
  829                 $query = sprintf(
'INSERT INTO rbac_fa (rol_id, parent, assign, protected) '.
 
  830                         'VALUES (%s,%s,%s,%s)',
 
  831                         $ilDB->quote($a_rol_id,
'integer'),
 
  832                         $ilDB->quote($a_parent,
'integer'),
 
  833                         $ilDB->quote($a_assign,
'text'),
 
  834                         $ilDB->quote(
'n',
'text'));
 
  852                 if (!isset($a_type_id) or !isset($a_ops_id))
 
  854                         $message = get_class($this).
"::assignOperationToObject(): Missing parameter!".
 
  855                                            "type_id: ".$a_type_id.
 
  856                                            "ops_id: ".$a_ops_id;
 
  857                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  860                 $query = 
"INSERT INTO rbac_ta (typ_id, ops_id) ".
 
  861                          "VALUES(".$ilDB->quote($a_type_id,
'integer').
",".$ilDB->quote($a_ops_id,
'integer').
")";
 
  878                 if (!isset($a_type_id) or !isset($a_ops_id))
 
  880                         $message = get_class($this).
"::deassignPermissionFromObject(): Missing parameter!".
 
  881                                            "type_id: ".$a_type_id.
 
  882                                            "ops_id: ".$a_ops_id;
 
  883                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  886                 $query = 
"DELETE FROM rbac_ta ".
 
  887                          "WHERE typ_id = ".$ilDB->quote($a_type_id,
'integer').
" ".
 
  888                          "AND ops_id = ".$ilDB->quote($a_ops_id,
'integer');
 
  900                 $query = 
'UPDATE rbac_fa '.
 
  901                         'SET protected = '.$ilDB->quote($a_value,
'text').
' '.
 
  902                         'WHERE rol_id = '.$ilDB->quote($a_role_id,
'integer');
 
  919                 global $rbacreview,
$ilLog,$ilObjDataCache;
 
  921                 $source_rolf = $rbacreview->getRoleFolderIdOfObject($a_source_id);
 
  922                 $target_rolf = $rbacreview->getRoleFolderIdOfObject($a_target_id);
 
  929                 $real_local = array();
 
  930                 foreach($rbacreview->getRolesOfRoleFolder($source_rolf,
false) as $role_data)
 
  932                         $title = $ilObjDataCache->lookupTitle($role_data);
 
  933                         if(substr(
$title,0,3) == 
'il_')
 
  937                         $real_local[] = $role_data;
 
  939                 if(!count($real_local))
 
  947                         if(!is_object($tmp_obj))
 
  951                         $rolf = $tmp_obj->createRoleFolder();
 
  952                         $target_rolf = $rolf->getRefId();
 
  953                         $ilLog->write(__METHOD__.
': Created new role folder with id '.$rolf->getRefId());
 
  955                 foreach($real_local as $role)
 
  957                         include_once (
"./Services/AccessControl/classes/class.ilObjRole.php");
 
  961                         $ilLog->write(__METHOD__.
': Start copying of role '.$orig->getTitle());
 
  963                         $roleObj->setTitle($orig->getTitle());
 
  964                         $roleObj->setDescription($orig->getDescription());
 
  965                         $roleObj->setImportId($orig->getImportId());
 
  970                         $ilLog->write(__METHOD__.
': Added new local role, id '.$roleObj->getId());
 
  988                 global $rbacreview,$tree,
$ilLog;
 
  990                 $new_parent = $tree->getParentId($a_ref_id);
 
  991                 $old_context_roles = $rbacreview->getParentRoleIds($a_old_parent,
false);
 
  992                 $new_context_roles = $rbacreview->getParentRoleIds($new_parent,
false);
 
  994                 $for_addition = $for_deletion = array();
 
  995                 foreach($new_context_roles as $new_role_id => $new_role)
 
  997                         if(!isset($old_context_roles[$new_role_id]))
 
  999                                 $for_addition[$new_role_id] = $new_role;
 
 1001                         elseif($new_role[
'parent'] != $old_context_roles[$new_role_id][
'parent'])
 
 1004                                 $for_deletion[$new_role_id] = $new_role;
 
 1005                                 $for_addition[$new_role_id] = $new_role;
 
 1008                 foreach($old_context_roles as $old_role_id => $old_role)
 
 1010                         if(!isset($new_context_roles[$old_role_id]))
 
 1012                                 $for_deletion[$old_role_id] = $old_role;
 
 1016                 if(!count($for_deletion) and !count($for_addition))
 
 1021                 include_once 
"Services/AccessControl/classes/class.ilRbacLog.php";
 
 1023                 if($rbac_log_active)
 
 1025                         $role_ids = array_unique(array_merge(array_keys($for_deletion), array_keys($for_addition)));
 
 1028                 foreach($nodes = $tree->getSubTree($node_data = $tree->getNodeData($a_ref_id),
true) as $node_data)
 
 1030                         $node_id = $node_data[
'child'];
 
 1032                         if($rbac_log_active)
 
 1040                         if(!$node_data[
'type'])
 
 1042                                 $ilLog->write(__METHOD__.
': No type give. Choosing next tree entry.');
 
 1048                                 $ilLog->write(__METHOD__.
': Missing subtree node_id');
 
 1052                         foreach($for_deletion as $role_id => $role_data)
 
 1054                                 if($rolf_id = $rbacreview->getRoleFolderIdOfObject($node_id))
 
 1061                         foreach($for_addition as $role_id => $role_data)
 
 1065                                         $ops = $rbacreview->getOperationsOfRole($role_id,$node_data[
'type'],$role_data[
'parent']),
 
 1070                         if($rbac_log_active)