39                 (isset($ilDB)) ? $this->
ilDB =& $ilDB : $this->
ilDB =& $ilias->db;
 
  104                 include_once 
"Services/Mail/classes/class.ilMail.php";
 
  107                         require_once 
'Mail/RFC822.php';
 
  109                         $parsedList = $parser->parseAddressList($a_address_list, 
"ilias", 
false, 
true);
 
  111                         foreach ($parsedList as $address)
 
  113                                 $local_part = $address->mailbox;
 
  114                                 if (strpos($local_part,
'#') !== 0 &&
 
  115                                     !($local_part{0} == 
'"' && $local_part{1} == 
"#"))
 
  122                                 $local_part = substr($local_part, 1);
 
  126                                 if( $local_part{0} == 
'#' && $local_part{strlen($local_part) - 1} == 
'"' )
 
  128                                         $local_part = substr($local_part, 1);
 
  129                                         $local_part = substr($local_part, 0, strlen($local_part) - 1);
 
  132                                 if (substr($local_part,0,8) == 
'il_role_')
 
  134                                         $role_id = substr($local_part,8);
 
  135                                         $query = 
"SELECT t.tree ".
 
  137                                                 "JOIN tree t ON t.child = fa.parent ".
 
  138                                                 "WHERE fa.rol_id = ".$this->ilDB->quote($role_id,
'integer').
" ".
 
  139                                                 "AND fa.assign = 'y' ".
 
  141                                         $r = $ilDB->query(
$query);
 
  142                                         if ($r->numRows() > 0)
 
  144                                                 $role_ids[] = $role_id;
 
  150                                 $domain = $address->host;
 
  151                                 if (strpos($domain,
'[') == 0 && strrpos($domain,
']'))
 
  153                                         $domain = substr($domain,1,strlen($domain) - 2);
 
  155                                 if (strlen($local_part) == 0)
 
  157                                         $local_part = $domain;
 
  158                                         $address->host = 
'ilias';
 
  162                                 if (strtolower($address->host) == 
'ilias')
 
  165                                         $query = 
"SELECT dat.obj_id ".
 
  166                                                 "FROM object_data dat ".
 
  167                                                 "JOIN rbac_fa fa ON fa.rol_id = dat.obj_id ".
 
  168                                                 "JOIN tree t ON t.child = fa.parent ".
 
  169                                                 "WHERE dat.title =".$this->ilDB->quote($local_part,
'text').
" ".
 
  170                                                 "AND dat.type = 'role' ".
 
  171                                                 "AND fa.assign = 'y' ".
 
  177                                         $query = 
"SELECT rdat.obj_id ".
 
  178                                                 "FROM object_data odat ".
 
  179                                                 "JOIN object_reference oref ON oref.obj_id = odat.obj_id ".
 
  180                                                 "JOIN tree otree ON otree.child = oref.ref_id ".
 
  181                                                 "JOIN tree rtree ON rtree.parent = otree.child ".
 
  182                                                 "JOIN rbac_fa rfa ON rfa.parent = rtree.child ".
 
  183                                                 "JOIN object_data rdat ON rdat.obj_id = rfa.rol_id ".
 
  184                                                 "WHERE odat.title = ".$this->ilDB->quote($domain,
'text').
" ".
 
  185                                                 "AND otree.tree = 1 AND rtree.tree = 1 ".
 
  186                                                 "AND rfa.assign = 'y' ".
 
  187                                                 "AND rdat.title LIKE ".
 
  188                                                         $this->
ilDB->
quote(
'%'.preg_replace(
'/([_%])/',
'\\\\$1',$local_part).
'%',
'text');
 
  190                                 $r = $ilDB->query(
$query);
 
  195                                         $role_ids[] = 
$row->obj_id;
 
  201                                 if ($count == 0 && strtolower($address->host) == 
'ilias')
 
  203                                         $q = 
"SELECT dat.obj_id ".
 
  204                                                 "FROM object_data dat ".
 
  205                                                 "JOIN object_reference ref ON ref.obj_id = dat.obj_id ".
 
  206                                                 "JOIN tree t ON t.child = ref.ref_id ".
 
  207                                                 "WHERE dat.title = ".$this->ilDB->quote($domain ,
'text').
" ".
 
  208                                                 "AND dat.type = 'role' ".
 
  214                                                 $role_ids[] = 
$row->obj_id;
 
  225                         $titles = explode(
',', $a_address_list);
 
  228                         foreach ($titles as 
$title)
 
  230                                 if (strlen($inList) > 0)
 
  234                                 $title = trim($title);
 
  235                                 if (strpos($title,
'#') == 0) 
 
  237                                         $titleList .= $this->
ilDB->
quote(substr($title, 1));
 
  240                         if (strlen($titleList) > 0)
 
  242                                 $q = 
"SELECT obj_id ".
 
  244                                         "WHERE title IN (".$titleList.
") ".
 
  249                                         $role_ids[] = 
$row->obj_id;
 
  324                 include_once 
"Services/Mail/classes/class.ilMail.php";
 
  328                         $query = 
"SELECT rdat.title role_title,odat.title object_title, ".
 
  329                                 " oref.ref_id object_ref ".
 
  330                                 "FROM object_data rdat ".
 
  331                                 "JOIN rbac_fa fa ON fa.rol_id = rdat.obj_id ".
 
  332                                 "JOIN tree rtree ON rtree.child = fa.parent ".
 
  333                                 "JOIN object_reference oref ON oref.ref_id = rtree.parent ".
 
  334                                 "JOIN object_data odat ON odat.obj_id = oref.obj_id ".
 
  335                                 "WHERE rdat.obj_id = ".$this->ilDB->quote($a_role_id,
'integer').
" ".
 
  336                                 "AND fa.assign = 'y' ";
 
  337                         $r = $ilDB->query(
$query);
 
  338                         if (!
$row = $ilDB->fetchObject($r))
 
  343                         $object_title = 
$row->object_title;
 
  344                         $object_ref = 
$row->object_ref;
 
  345                         $role_title = 
$row->role_title;
 
  351                         $domain = $object_title;
 
  352                         $local_part = $role_title;
 
  356                         $q = 
"SELECT COUNT(DISTINCT dat.obj_id) count ".
 
  357                                 "FROM object_data dat ".
 
  358                                 "JOIN object_reference ref ON ref.obj_id = dat.obj_id ".
 
  359                                 "JOIN tree ON tree.child = ref.ref_id ".
 
  360                                 "WHERE title = ".$this->ilDB->quote($object_title,
'text').
" ".
 
  361                                 "AND tree.tree = 1 ";
 
  374                         if ($domain != null && preg_match(
'/[\[\]\\]|[\x00-\x1f]|[\x28-\x29]/',$domain))
 
  381                         if ($domain != null && 
 
  382                                         (preg_match(
'/[()<>@,;:\\".\[\]]/',$domain) || 
 
  383                                         preg_match(
'/[^\x21-\x8f]/',$domain))
 
  386                                 $domain = 
'['.$domain.
']';
 
  392                         if (strpos($role_title, 
'il_') === 0 && $domain != null)
 
  394                                 $unambiguous_role_title = $role_title;
 
  396                                 $pos = strpos($role_title, 
'_', 3) + 1;
 
  397                                 $local_part = substr(
 
  400                                         strrpos($role_title, 
'_') - $pos
 
  405                                 $unambiguous_role_title = 
'il_role_'.$a_role_id;
 
  414                                 $q = 
"SELECT COUNT(DISTINCT dat.obj_id) count ".
 
  415                                         "FROM object_data dat ".
 
  416                                         "JOIN object_reference ref ON ref.obj_id = dat.obj_id ".
 
  417                                         "JOIN tree ON tree.child = ref.ref_id ".
 
  418                                         "WHERE title = ".$this->ilDB->quote($local_part,
'text').
" ".
 
  419                                         "AND tree.tree = 1 ";
 
  423                                 $q = 
"SELECT COUNT(rd.obj_id) count ".
 
  424                                          "FROM object_data rd ".
 
  425                                          "JOIN rbac_fa fa ON rd.obj_id = fa.rol_id ".
 
  426                                          "JOIN tree t ON t.child = fa.parent ". 
 
  427                                          "WHERE fa.assign = 'y' ".
 
  428                                          "AND t.parent = ".$this->ilDB->quote($object_ref,
'integer').
" ".
 
  429                                          "AND rd.title LIKE ".$this->ilDB->quote(
 
  430                                                 '%'.preg_replace(
'/([_%])/',
'\\\\$1', $local_part).
'%',
'text').
" ";
 
  440                                 $local_part = $unambiguous_role_title;
 
  446                         if (preg_match(
'/[\\"\x00-\x1f]/',$local_part)) 
 
  448                                 $local_part = $unambiguous_role_title;
 
  453                         $local_part = 
'#'.$local_part;
 
  456                         if (preg_match(
'/[()<>@,;:.\[\]\x20]/',$local_part))
 
  458                                 $local_part = 
'"'.$local_part.
'"';
 
  461                         $mailbox = ($domain == null) ?
 
  463                                         $local_part.
'@'.$domain;
 
  467                                 if (substr($role_title,0,3) == 
'il_')
 
  469                                         $phrase = $lng->txt(substr($role_title, 0, strrpos($role_title,
'_')));
 
  473                                         $phrase = $role_title;
 
  479                                 $phrase = preg_replace(
'/\s\s+/', 
' ', $phrase);
 
  480                                 $phrase = preg_replace(
'/[()<>@,;:\\".\[\]]/', 
'', $phrase);
 
  482                                 $mailbox = $phrase.
' <'.$mailbox.
'>';
 
  489                         $q = 
"SELECT title ".
 
  491                                 "WHERE obj_id = ".$this->ilDB->quote($a_role_id ,
'integer');
 
  496                                 return '#'.$row->title;
 
  519                         $message = get_class($this).
"::roleExists(): No title given!";
 
  520                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  523                 $clause = ($a_id) ? 
" AND obj_id != ".$ilDB->quote($a_id).
" " : 
"";
 
  525                 $q = 
"SELECT DISTINCT(obj_id) obj_id FROM object_data ".
 
  526                          "WHERE title =".$ilDB->quote($a_title).
" ".
 
  527                          "AND type IN('role','rolt')".
 
  554                 if (!isset($a_path) or !is_array($a_path))
 
  556                         $message = get_class($this).
"::getParentRoles(): No path given or wrong datatype!";
 
  557                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  560                 $parent_roles = array();
 
  561                 $role_hierarchy = array();
 
  565         $in = $ilDB->in(
't.parent',$a_path,
false,
'integer');
 
  567         $q = 
"SELECT t.child,t.depth FROM tree t ".
 
  568              "JOIN object_reference r ON r.ref_id = t.child ".
 
  569              "JOIN object_data o ON o.obj_id = r.obj_id ".
 
  571              "AND o.type= ".$ilDB->quote(
'rolf',
'text').
" ".
 
  572              "ORDER BY t.depth ASC";
 
  578                 $role_rows = array();
 
  582                         $depth = (
$row->child == ROLE_FOLDER_ID ? 0 : 
$row->depth);
 
  583                         $role_rows[$depth][
'child'] = 
$row->child;
 
  585                 ksort($role_rows,SORT_NUMERIC);
 
  587                 foreach($role_rows as 
$row)
 
  590             foreach ($roles as $role)
 
  592                 $id = $role[
"obj_id"];
 
  593                 $role[
"parent"] = $row[
'child'];
 
  594                 $parent_roles[$id] = $role;
 
  596                 if (!array_key_exists($role[
'obj_id'],$role_hierarchy))
 
  598                     $role_hierarchy[$id] = $row[
'child'];
 
  602                 if (!$a_keep_protected)
 
  606                 return $parent_roles;
 
  621                 if (!isset($a_endnode_id))
 
  624                         $message = get_class($this).
"::getParentRoleIds(): No node_id (ref_id) given!";
 
  625                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  630                 $pathIds  = $tree->getPathId($a_endnode_id);
 
  633                 $pathIds[0] = SYSTEM_FOLDER_ID;
 
  635                 #return $this->getParentRoles($a_endnode_id,$a_templates,$a_keep_protected); 
  650                 if (!isset($a_ref_id) or !isset($a_templates))
 
  652                         $message = get_class($this).
"::getRoleListByObject(): Missing parameter!".
 
  653                                            "ref_id: ".$a_ref_id.
 
  654                                            "tpl_flag: ".$a_templates;
 
  655                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  658                 $role_list = array();
 
  662                 $query = 
"SELECT * FROM object_data ".
 
  663                          "JOIN rbac_fa ON obj_id = rol_id ".
 
  665                          "AND object_data.obj_id = rbac_fa.rol_id ".
 
  666                          "AND rbac_fa.parent = ".$ilDB->quote($a_ref_id,
'integer').
" ";
 
  669                 while (
$row = $ilDB->fetchAssoc(
$res))
 
  691                 $role_list = array();
 
  695                 $query = 
"SELECT * FROM object_data ".
 
  696                          "JOIN rbac_fa ON obj_id = rol_id ".
 
  698                          "AND rbac_fa.assign = 'y' ";
 
  701                 while (
$row = $ilDB->fetchAssoc(
$res))
 
  723                 $role_list = array();
 
  726                 $query = 
"SELECT fa.*, dat.* ".
 
  728                         "JOIN tree node ON node.tree = root.tree ".
 
  729                         "AND node.lft > root.lft AND node.rgt < root.rgt ".
 
  730                         "JOIN object_reference ref ON ref.ref_id = node.child ".
 
  731                         "JOIN rbac_fa fa ON fa.parent = ref.ref_id ".
 
  732                         "JOIN object_data dat ON dat.obj_id = fa.rol_id ".
 
  733                         "WHERE root.child = ".$this->ilDB->quote(
$ref_id,
'integer').
" ".
 
  734                         "AND root.tree = 1 ".
 
  735                         "AND fa.assign = 'y' ".
 
  736                         "ORDER BY dat.title";
 
  739                 while(
$row = $ilDB->fetchAssoc(
$res))
 
  759                 $query = 
"SELECT fa.*, rd.* ".
 
  760                          "FROM object_data rd ".
 
  761                          "JOIN rbac_fa fa ON rd.obj_id = fa.rol_id ".
 
  762                          "JOIN tree t ON t.child = fa.parent ". 
 
  763                          "WHERE fa.assign = 'y' ".
 
  764                          "AND t.parent = ".$this->ilDB->quote($a_ref_id,
'integer').
" " 
  767                 while(
$row = $ilDB->fetchAssoc(
$res))
 
  769                         $roles_data[] = 
$row;
 
  771                 return $roles_data ? $roles_data : array();
 
  784                 if ($a_templates === 
true)
 
  786                         $where = 
"WHERE ".$ilDB->in(
'object_data.type',array(
'role',
'rolt'),
false,
'text').
" ";
 
  790                         $where = 
"WHERE ".$ilDB->in(
'object_data.type',array(
'role'),
false,
'text').
" ";
 
  809                 foreach ($a_role_list as $key => $val)
 
  812                         if ($val[
"type"] == 
"rolt")
 
  814                                 $a_role_list[$key][
"role_type"] = 
"template";
 
  818                                 if ($val[
"assign"] == 
"y")
 
  820                                         if ($val[
"parent"] == ROLE_FOLDER_ID)
 
  822                                                 $a_role_list[$key][
"role_type"] = 
"global";
 
  826                                                 $a_role_list[$key][
"role_type"] = 
"local";
 
  831                                         $a_role_list[$key][
"role_type"] = 
"linked";
 
  835                         if ($val[
"protected"] == 
"y")
 
  837                                 $a_role_list[$key][
"protected"] = 
true;
 
  841                                 $a_role_list[$key][
"protected"] = 
false;
 
  859                 $ilBench->start(
"RBAC", 
"review_assignedUsers");
 
  861                 if (!isset($a_rol_id))
 
  863                         $message = get_class($this).
"::assignedUsers(): No role_id given!";
 
  864                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
  867         $result_arr = array();
 
  869         if ($a_fields !== NULL and is_array($a_fields))
 
  871             if (count($a_fields) == 0)
 
  877                 if (($usr_id_field = array_search(
"usr_id",$a_fields)) !== 
false)
 
  878                     unset($a_fields[$usr_id_field]);
 
  880                 $select = implode(
",",$a_fields).
",usr_data.usr_id";
 
  881                 $select = addslashes($select);
 
  884                 $query = 
"SELECT ".$select.
" FROM usr_data ".
 
  885                  "LEFT JOIN rbac_ua ON usr_data.usr_id = rbac_ua.usr_id ".
 
  886                  "WHERE rbac_ua.rol_id =".$ilDB->quote($a_rol_id,
'integer');
 
  888             while(
$row = $ilDB->fetchAssoc(
$res))
 
  890                 $result_arr[] = 
$row;
 
  895                     $query = 
"SELECT usr_id FROM rbac_ua WHERE rol_id= ".$ilDB->quote($a_rol_id,
'integer');
 
  898             while(
$row = $ilDB->fetchAssoc(
$res))
 
  900                 array_push($result_arr,
$row[
"usr_id"]);
 
  904                 $ilBench->stop(
"RBAC", 
"review_assignedUsers");
 
  921             $ilDB->setLimit(1,0);
 
  922             $query = 
"SELECT usr_id FROM rbac_ua WHERE ".
 
  923                     "rol_id= ".$ilDB->quote($a_role_id,
'integer').
" ".
 
  924                     "AND usr_id= ".$ilDB->quote($a_usr_id);
 
  927         return $res->numRows() == 1;
 
  945             $ilDB->setLimit(1,0);
 
  946             $query = 
"SELECT usr_id FROM rbac_ua WHERE ".
 
  947                     $ilDB->in(
'rol_id',$a_role_ids,
false,
'integer').
 
  948                     " AND usr_id= ".$ilDB->quote($a_usr_id);
 
  951         return $ilDB->numRows(
$res) == 1;
 
  966                 $query = 
"SELECT rol_id FROM rbac_ua WHERE usr_id = ".$ilDB->quote($a_usr_id,
'integer');
 
  969                 while(
$row = $ilDB->fetchObject(
$res))
 
  971                         $role_arr[] = 
$row->rol_id;
 
  973                 return $role_arr ? $role_arr : array();
 
  984                 $query = 
"SELECT ua.rol_id FROM rbac_ua ua ".
 
  985                         "JOIN rbac_fa fa ON ua.rol_id = fa.rol_id ".
 
  986                         "WHERE usr_id = ".$ilDB->quote($a_usr_id,
'integer').
' '.
 
  987                         "AND parent = ".$ilDB->quote(ROLE_FOLDER_ID).
" ".
 
  991                 while(
$row = $ilDB->fetchObject(
$res))
 
  993                         $role_arr[] = 
$row->rol_id;
 
  995                 return $role_arr ? $role_arr : array();
 
 1009                 $ilBench->start(
"RBAC", 
"review_isAssignable");
 
 1012                 if ($a_rol_id == SYSTEM_ROLE_ID)
 
 1014                         $ilBench->stop(
"RBAC", 
"review_isAssignable");
 
 1018                 if (!isset($a_rol_id) or !isset($a_ref_id))
 
 1020                         $message = get_class($this).
"::isAssignable(): Missing parameter!".
 
 1021                                            " role_id: ".$a_rol_id.
" ,ref_id: ".$a_ref_id;
 
 1022                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
 1024                 $query = 
"SELECT * FROM rbac_fa ".
 
 1025                          "WHERE rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ".
 
 1026                          "AND parent = ".$ilDB->quote($a_ref_id,
'integer').
" ";
 
 1030                 $ilBench->stop(
"RBAC", 
"review_isAssignable");
 
 1031                 return $row->assign == 
'y' ? 
true : 
false;
 
 1041                 $query = 
"SELECT * FROM rbac_fa WHERE rol_id = ".$ilDB->quote($a_role_id,
'integer').
' '.
 
 1042                         "AND assign = ".$ilDB->quote(
'y',
'text');
 
 1044                 return $res->numRows() > 1;
 
 1061                 if (!isset($a_rol_id))
 
 1063                         $message = get_class($this).
"::getFoldersAssignedToRole(): No role_id given!";
 
 1064                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
 1069                         $where = 
" AND assign ='y'";
 
 1072                 $query = 
"SELECT DISTINCT parent FROM rbac_fa ".
 
 1073                          "WHERE rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ".$where.
" ";
 
 1076                 while(
$row = $ilDB->fetchObject(
$res))
 
 1078                         $folders[] = 
$row->parent;
 
 1080                 return $folders ? $folders : array();
 
 1095                 $ilBench->start(
"RBAC", 
"review_getRolesOfRoleFolder");
 
 1097                 if (!isset($a_ref_id))
 
 1099                         $message = get_class($this).
"::getRolesOfRoleFolder(): No ref_id given!";
 
 1100                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
 1104                 if ($a_nonassignable === 
false)
 
 1106                         $and = 
" AND assign='y'";
 
 1109                 $query = 
"SELECT rol_id FROM rbac_fa ".
 
 1110                          "WHERE parent = ".$ilDB->quote($a_ref_id,
'integer').
" ".
 
 1114                 while(
$row = $ilDB->fetchObject(
$res))
 
 1116                         $rol_id[] = 
$row->rol_id;
 
 1119                 $ilBench->stop(
"RBAC", 
"review_getRolesOfRoleFolder");
 
 1121                 return $rol_id ? $rol_id : array();
 
 1143                         $ga[] = array(
'obj_id'          => $role_id,
 
 1144                                                   'role_type'   => 
'global');
 
 1146                 return $ga ? $ga : array();
 
 1156                 include_once 
'./Services/AccessControl/classes/class.ilObjRole.php';
 
 1162                                 $ga[] = array(
'obj_id' => $role_id,
 
 1163                                                           'role_type' => 
'global');
 
 1166                 return $ga ? $ga : array();
 
 1178                 $query = 
"SELECT DISTINCT parent FROM rbac_fa";
 
 1182                 while(
$row = $ilDB->fetchObject(
$res))
 
 1184                         $parent[] = 
$row->parent;
 
 1199                 $ilBench->start(
"RBAC", 
"review_getRoleFolderOfObject");
 
 1201                 if (!isset($a_ref_id))
 
 1204                         $message = get_class($this).
"::getRoleFolderOfObject(): No ref_id given!";
 
 1205                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
 1207                 $childs = $tree->getChildsByType($a_ref_id,
"rolf");
 
 1209                 $ilBench->stop(
"RBAC", 
"review_getRoleFolderOfObject");
 
 1211                 return $childs[0] ? $childs[0] : array();
 
 1223                 return $rolf[
'ref_id'];
 
 1235                 $query = 
'SELECT * FROM rbac_operations ORDER BY ops_id ';
 
 1237                 while(
$row = $ilDB->fetchObject(
$res))
 
 1239                         $ops[] = array(
'ops_id' => 
$row->ops_id,
 
 1240                                                    'operation' => 
$row->operation,
 
 1241                                                    'description' => 
$row->description);
 
 1244                 return $ops ? $ops : array();
 
 1256                 $query = 
'SELECT * FROM rbac_operations WHERE ops_id = '.$ilDB->quote($ops_id,
'integer');
 
 1258                 while(
$row = $ilDB->fetchObject(
$res))
 
 1260                         $ops = array(
'ops_id' => 
$row->ops_id,
 
 1261                                                  'operation' => 
$row->operation,
 
 1262                                                  'description' => 
$row->description);
 
 1265                 return $ops ? $ops : array();
 
 1282                         $a_parent = ROLE_FOLDER_ID;
 
 1285                 $query = 
"SELECT ops_id,type FROM rbac_templates ".
 
 1286                         "WHERE rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ".
 
 1287                         "AND parent = ".$ilDB->quote($a_parent,
'integer');
 
 1290                 while (
$row = $ilDB->fetchObject(
$res))
 
 1292                         $ops_arr[
$row->type][] = 
$row->ops_id;
 
 1294                 return (array) $ops_arr;
 
 1307                 $query = 
'SELECT * FROM rbac_pa '.
 
 1308                         'WHERE ref_id = '.$ilDB->quote($a_ref_id,
'integer').
' '.
 
 1309                         'AND rol_id = '.$ilDB->quote($a_role_id,
'integer').
' ';
 
 1314                         return unserialize(
$row[
'ops_id']);
 
 1333                 if (!isset($a_rol_id) or !isset($a_type))
 
 1335                         $message = get_class($this).
"::getOperationsOfRole(): Missing Parameter!".
 
 1336                                            "role_id: ".$a_rol_id.
 
 1338                                            "parent_id: ".$a_parent;
 
 1339                         $ilLog->logStack(
"Missing parameter! ");
 
 1340                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
 1348                         $a_parent = ROLE_FOLDER_ID;
 
 1351                 $query = 
"SELECT ops_id FROM rbac_templates ".
 
 1352                          "WHERE type =".$ilDB->quote($a_type,
'text').
" ".
 
 1353                          "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ".
 
 1354                          "AND parent = ".$ilDB->quote($a_parent,
'integer');
 
 1356                 while (
$row = $ilDB->fetchObject(
$res))
 
 1358                         $ops_arr[] = 
$row->ops_id;
 
 1368                 $query = 
"SELECT * FROM rbac_pa ".
 
 1369                         "WHERE rol_id = ".$ilDB->quote($a_role_id,
'integer').
" ".
 
 1370                         "AND ref_id = ".$ilDB->quote($a_ref_id,
'integer').
" ";
 
 1373                 while(
$row = $ilDB->fetchObject(
$res))
 
 1375                         $ops = unserialize(
$row->ops_id);
 
 1378                 return $ops ? $ops : array();
 
 1391                 if (!isset($a_typ_id))
 
 1393                         $message = get_class($this).
"::getOperationsOnType(): No type_id given!";
 
 1394                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
 1397                 #$query = "SELECT * FROM rbac_ta WHERE typ_id = ".$ilDB->quote($a_typ_id,'integer'); 
 1399                 $query = 
'SELECT * FROM rbac_ta ta JOIN rbac_operations o ON ta.ops_id = o.ops_id '.
 
 1400                         'WHERE typ_id = '.$ilDB->quote($a_typ_id,
'integer').
' '.
 
 1401                         'ORDER BY op_order';
 
 1405                 while(
$row = $ilDB->fetchObject(
$res))
 
 1407                         $ops_id[] = 
$row->ops_id;
 
 1410                 return $ops_id ? $ops_id : array();
 
 1423                 $query = 
"SELECT * FROM object_data WHERE type = 'typ' AND title = ".$ilDB->quote($a_type ,
'text').
" ";
 
 1444                 if($a_class != 
'create')
 
 1446                         $condition = 
"AND class != ".$ilDB->quote(
'create',
'text');
 
 1450                         $condition = 
"AND class = ".$ilDB->quote(
'create',
'text');
 
 1453                 $query = 
"SELECT ro.ops_id FROM rbac_operations ro ".
 
 1454                         "JOIN rbac_ta rt ON  ro.ops_id = rt.ops_id ".
 
 1455                         "JOIN object_data od ON rt.typ_id = od.obj_id ".
 
 1456                         "WHERE type = ".$ilDB->quote(
'typ',
'text').
" ".
 
 1457                         "AND title = ".$ilDB->quote($a_type,
'text').
" ".
 
 1459                         "ORDER BY op_order ";
 
 1466                         $ops[] = 
$row->ops_id;
 
 1484                 $query = 
'SELECT t.parent p FROM tree t JOIN rbac_fa fa ON fa.parent = child '.
 
 1485                         'WHERE assign = '.$ilDB->quote(
'n',
'text').
' '.
 
 1486                         'AND rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' ';
 
 1490                         $query .= (
'AND '.$ilDB->in(
't.parent',(array) $a_filter,
false,
'integer'));
 
 1497                         $parent[] = 
$row->p;
 
 1512                 $q = 
"SELECT tree FROM tree WHERE child =".$ilDB->quote($a_node_id).
" ";
 
 1519                         $message = sprintf(
'%s::isDeleted(): Role folder with ref_id %s not found!',
 
 1522                         $this->log->write($message,$this->log->FATAL);
 
 1556                                 $where = 
'WHERE '.$ilDB->in(
'rbac_fa.rol_id',$this->
getGlobalRoles(),
false,
'integer').
' ';
 
 1563                                 $where = 
'WHERE '.$ilDB->in(
'rbac_fa.rol_id',$this->
getGlobalRoles(),
true,
'integer');
 
 1568                                 $where = 
"WHERE object_data.type = 'rolt'";
 
 1578                                 $where = 
'WHERE '.$ilDB->in(
'rbac_fa.rol_id',$this->
assignedRoles($a_user_id),
false,
'integer').
' ';
 
 1584                 $query = 
"SELECT * FROM object_data ".
 
 1585                          "JOIN rbac_fa ON obj_id = rol_id ".
 
 1587                          "AND rbac_fa.assign = ".$ilDB->quote($assign,
'text').
" ";
 
 1590                 while(
$row = $ilDB->fetchAssoc(
$res))
 
 1592             $prefix = (substr(
$row[
"title"],0,3) == 
"il_") ? 
true : 
false;
 
 1595             if ($a_filter == 4 and !$prefix)
 
 1601                         if ($a_filter == 5 and $prefix)
 
 1606                         $row[
"desc"] = 
$row[
"description"];
 
 1613                 return $roles ? $roles : array();
 
 1621                 $q = 
"SELECT obj_id FROM object_data ".
 
 1622                          "WHERE title=".$ilDB->quote($a_type ,
'text').
" AND type='typ'";
 
 1623                 $r = $ilDB->query($q);
 
 1626                 return $row->obj_id;
 
 1642                 if(!count($operations))
 
 1647                 $query = 
'SELECT ops_id FROM rbac_operations '.
 
 1648                         'WHERE '.$ilDB->in(
'operation',$operations,
false,
'text');
 
 1651                 while(
$row = $ilDB->fetchObject(
$res))
 
 1653                         $ops_ids[] = 
$row->ops_id;
 
 1655                 return $ops_ids ? $ops_ids : array();
 
 1669                 if (!isset($a_operation))
 
 1671                         $message = 
"perm::getOperationId(): No operation given!";
 
 1672                         $ilErr->raiseError($message,$ilErr->WARNING);   
 
 1676         if (! is_array(self::$_opsCache)) {
 
 1677             self::$_opsCache = array();
 
 1679             $q = 
"SELECT ops_id, operation FROM rbac_operations";
 
 1680             $r = $ilDB->query($q);
 
 1683                 self::$_opsCache[
$row->operation] = 
$row->ops_id;
 
 1688         if (array_key_exists($a_operation, self::$_opsCache)) {
 
 1689             return self::$_opsCache[$a_operation];
 
 1703                 $operations = array();
 
 1704                 foreach($a_type_arr as $type)
 
 1706                         $operations[] = (
'create_'.$type);
 
 1709                 if(!count($operations))
 
 1714                 $query = 
'SELECT ops_id, operation FROM rbac_operations '.
 
 1715                         'WHERE '.$ilDB->in(
'operation',$operations,
false,
'text');
 
 1720                 while(
$row = $ilDB->fetchObject(
$res))
 
 1722                         $type_arr = explode(
'_', 
$row->operation);
 
 1723                         $type = $type_arr[1];
 
 1725                         $ops_ids[$type] = 
$row->ops_id;
 
 1743                 if (!isset($a_ref_id))
 
 1745                         $message = get_class($this).
"::getLinkedRolesOfRoleFolder(): No ref_id given!";
 
 1746                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
 
 1749                 $and = 
" AND assign='n'";
 
 1751                 $query = 
"SELECT rol_id FROM rbac_fa ".
 
 1752                          "WHERE parent = ".$ilDB->quote($a_ref_id,
'integer').
" ".
 
 1755                 while(
$row = $ilDB->fetchObject(
$res))
 
 1757                         $rol_id[] = 
$row->rol_id;
 
 1760                 return $rol_id ? $rol_id : array();
 
 1768                 $query = 
"SELECT protected FROM rbac_fa ".
 
 1769                          "WHERE rol_id = ".$ilDB->quote($a_role_id,
'integer').
" ".
 
 1770                          "AND parent = ".$ilDB->quote($a_ref_id,
'integer').
" ";
 
 1781                 #vd('refId',$a_ref_id,'parent roles',$a_parent_roles,'role-hierarchy',$a_role_hierarchy); 
 1783                 global $rbacsystem,$ilUser,
$log;
 
 1785                 if (in_array(SYSTEM_ROLE_ID,$this->
assignedRoles($ilUser->getId())))
 
 1791                         $leveladmin = 
false;
 
 1793                 #vd("RoleHierarchy",$a_role_hierarchy); 
 1794                 foreach ($a_role_hierarchy as $role_id => $rolf_id)
 
 1797                         #echo "<br/>ROLF: ".$rolf_id." ROLE_ID: ".$role_id." (".$a_parent_roles[$role_id]['title'].") "; 
 1800                         if ($leveladmin == 
true)
 
 1802                                 $a_parent_roles[$role_id][
'protected'] = 
false;
 
 1806                         if ($a_parent_roles[$role_id][
'protected'] == 
true)
 
 1808                                 $arr_lvl_roles_user = array_intersect($this->
assignedRoles($ilUser->getId()),array_keys($a_role_hierarchy,$rolf_id));
 
 1810                                 #vd("intersection",$arr_lvl_roles_user); 
 1812                                 foreach ($arr_lvl_roles_user as $lvl_role_id)
 
 1814                                         #echo "<br/>level_role: ".$lvl_role_id; 
 1815                                         #echo "<br/>a_ref_id: ".$a_ref_id; 
 1820                                         if ($rbacsystem->checkPermission($a_ref_id,$lvl_role_id,
'edit_permission'))
 
 1822                                                 #echo "<br />Permission granted"; 
 1825                                                 $a_parent_roles[$role_id][
'protected'] = 
false;
 
 1834                 return $a_parent_roles;
 
 1855                         $query = sprintf(
'SELECT * FROM rbac_operations '.
 
 1856                                 'JOIN rbac_ta ON rbac_operations.ops_id = rbac_ta.ops_id '.
 
 1857                                 'JOIN object_data ON rbac_ta.typ_id = object_data.obj_id '.
 
 1858                                 'WHERE object_data.title = %s '.
 
 1859                                 'AND object_data.type = %s '.
 
 1860                                 'ORDER BY op_order ASC',
 
 1861                                 $ilDB->quote($a_type,
'text'),
 
 1862                                 $ilDB->quote(
'typ',
'text'));
 
 1866                         $query = 
'SELECT * FROM rbac_operations ORDER BY op_order ASC';
 
 1869                 while (
$row = $ilDB->fetchAssoc(
$res))
 
 1872                                                 "ops_id"        => 
$row[
'ops_id'],
 
 1873                                                 "operation"     => 
$row[
'operation'],
 
 1874                                                 "desc"          => 
$row[
'description'],
 
 1875                                                 "class"         => 
$row[
'class'],
 
 1876                                                 "order"         => 
$row[
'op_order']
 
 1886                 foreach ($a_ops_arr as $ops)
 
 1888                         $arr[$ops[
'class']][] = array (
'ops_id' => $ops[
'ops_id'],
 
 1889                                                                                    'name'       => $ops[
'operation']
 
 1906                 $query = 
"SELECT obr.obj_id FROM rbac_fa rfa ".
 
 1907                         "JOIN tree ON rfa.parent = tree.child ".
 
 1908                         "JOIN object_reference obr ON tree.parent = obr.ref_id ".
 
 1909                         "WHERE tree.tree = 1 ".
 
 1910                         "AND assign = 'y' ".
 
 1911                         "AND rol_id = ".$ilDB->quote($a_role_id,
'integer').
" ";
 
 1913                 while(
$row = $ilDB->fetchObject(
$res))
 
 1915                         $obj_id = 
$row->obj_id;
 
 1918                 return $obj_id ? $obj_id : 0;
 
 1930                 $query = 
"SELECT tree.parent ref FROM rbac_fa fa ".
 
 1931                         "JOIN tree ON fa.parent = tree.child ".
 
 1932                         "WHERE tree.tree = 1 ".
 
 1933                         "AND assign = ".$ilDB->quote(
'y',
'text').
' '.
 
 1934                         "AND rol_id = ".$ilDB->quote($a_role_id,
'integer');
 
 1953                 if (count($rolf_list))
 
 1955                         foreach ($rolf_list as $rolf) {                 
 
 1972                 $role_list = array();
 
 1976                 $query = 
"SELECT * FROM object_data ".
 
 1977                          "JOIN rbac_fa ON object_data.obj_id = rbac_fa.rol_id ".
 
 1979                          "AND rbac_fa.assign = 'y' " .
 
 1980                          'AND '.$ilDB->in(
'object_data.obj_id',$role_ids,
false,
'integer');
 
 1983                 while(
$row = $ilDB->fetchAssoc(
$res))
 
 1985                         $row[
"desc"] = 
$row[
"description"];
 
 1987                         $role_list[] = 
$row;
 
 2002                 $query = 
'SELECT ta.typ_id, obj.title, ops.ops_id, ops.operation FROM rbac_ta ta '.
 
 2003                          'JOIN object_data obj ON obj.obj_id = ta.typ_id '.
 
 2004                          'JOIN rbac_operations ops ON ops.ops_id = ta.ops_id ';
 
 2008                 while(
$row = $ilDB->fetchObject(
$res))
 
 2010                         $info[$counter][
'typ_id'] = 
$row->typ_id;
 
 2011                         $info[$counter][
'type'] = 
$row->title;
 
 2012                         $info[$counter][
'ops_id'] = 
$row->ops_id;
 
 2013                         $info[$counter][
'operation'] = 
$row->operation;
 
 2016                 return $info ? $info : array();
 
 2032                 $query = 
'SELECT DISTINCT(parent) parent FROM rbac_fa '.
 
 2033                         'WHERE '.$ilDB->in(
'parent',$a_rolf_candidates,
false,
'integer');
 
 2035                 while(
$row = $ilDB->fetchObject(
$res))
 
 2037                         $non_empty[] = 
$row->parent;
 
 2039                 return $non_empty ? $non_empty : array();
 
 2054                 if($a_role_id == SYSTEM_ROLE_ID or $a_role_id == ANONYMOUS_ROLE_ID)