• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

classes/class.ilObjRoleGUI.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
00021         +-----------------------------------------------------------------------------+
00022 */
00023 
00024 
00035 require_once "class.ilObjectGUI.php";
00036 
00037 class ilObjRoleGUI extends ilObjectGUI
00038 {
00044         var $type;
00045 
00051         var $rolf_ref_id;
00052 
00053 
00054         var $ctrl;
00055  
00060         function ilObjRoleGUI($a_data,$a_id,$a_call_by_reference)
00061         {
00062                 global $ilCtrl;
00063 
00064                 $this->type = "role";
00065                 $this->ilObjectGUI($a_data,$a_id,$a_call_by_reference);
00066                 $this->rolf_ref_id =& $this->ref_id;
00067 
00068                 $this->ctrl =& $ilCtrl;
00069                 $this->ctrl->saveParameter($this,'obj_id');
00070         }
00071 
00072         function &executeCommand()
00073         {
00074                 global $rbacsystem;
00075 
00076                 $next_class = $this->ctrl->getNextClass($this);
00077                 $cmd = $this->ctrl->getCmd();
00078                 switch($next_class)
00079                 {
00080                         default:
00081                                 if(!$cmd)
00082                                 {
00083                                         $cmd = "view";
00084                                 }
00085                                 $cmd .= "Object";
00086                                 $this->$cmd();
00087                                         
00088                                 break;
00089                 }
00090                 return true;
00091         }
00092 
00096         function createObject()
00097         {
00098                 global $rbacsystem;
00099                 
00100                 if (!$rbacsystem->checkAccess('create_role', $this->rolf_ref_id))
00101                 {
00102                         $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00103                 }
00104 
00105                 $this->getTemplateFile("edit","role");
00106 
00107                 if ($this->rolf_ref_id == ROLE_FOLDER_ID)
00108                 {
00109                         $this->tpl->setCurrentBlock("allow_register");
00110                         $allow_register = ($_SESSION["error_post_vars"]["Fobject"]["allow_register"]) ? "checked=\"checked\"" : "";
00111                         $this->tpl->setVariable("TXT_ALLOW_REGISTER",$this->lng->txt("allow_register"));
00112                         $this->tpl->setVariable("ALLOW_REGISTER",$allow_register);
00113                         $this->tpl->parseCurrentBlock();
00114 
00115                         $this->tpl->setCurrentBlock("assign_users");
00116                         $assign_users = $_SESSION["error_post_vars"]["Fobject"]["assign_users"] ? "checked=\"checked\"" : "";
00117                         $this->tpl->setVariable("TXT_ASSIGN_USERS",$this->lng->txt("allow_assign_users"));
00118                         $this->tpl->setVariable("ASSIGN_USERS",$assign_users);
00119                         $this->tpl->parseCurrentBlock();
00120                 }
00121 
00122                 // fill in saved values in case of error
00123                 $this->tpl->setVariable("TITLE",ilUtil::prepareFormOutput($_SESSION["error_post_vars"]["Fobject"]["title"]),true);
00124                 $this->tpl->setVariable("DESC",ilUtil::stripSlashes($_SESSION["error_post_vars"]["Fobject"]["desc"]));
00125 
00126                 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt("title"));
00127                 $this->tpl->setVariable("TXT_DESC",$this->lng->txt("desc"));
00128                 $this->tpl->setVariable("FORMACTION", $this->getFormAction("save","adm_object.php?cmd=gateway&ref_id=".$this->rolf_ref_id."&new_type=".$this->type));
00129                 $this->tpl->setVariable("TXT_HEADER", $this->lng->txt($this->type."_new"));
00130                 $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
00131                 $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt($this->type."_add"));
00132                 $this->tpl->setVariable("CMD_SUBMIT", "save");
00133                 $this->tpl->setVariable("TARGET", $this->getTargetFrame("save"));
00134                 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00135         }
00136 
00142         function saveObject()
00143         {
00144                 global $rbacsystem, $rbacadmin, $rbacreview;
00145 
00146                 // check for create role permission
00147                 if (!$rbacsystem->checkAccess("create_role",$this->rolf_ref_id))
00148                 {
00149                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_create_role"),$this->ilias->error_obj->MESSAGE);
00150                 }
00151 
00152                 // check required fields
00153                 if (empty($_POST["Fobject"]["title"]))
00154                 {
00155                         $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields"),$this->ilias->error_obj->MESSAGE);
00156                 }
00157 
00158                 // check if role title is unique
00159                 if ($rbacreview->roleExists($_POST["Fobject"]["title"]))
00160                 {
00161                         $this->ilias->raiseError($this->lng->txt("msg_role_exists1")." '".ilUtil::stripSlashes($_POST["Fobject"]["title"])."' ".
00162                                                                          $this->lng->txt("msg_role_exists2"),$this->ilias->error_obj->MESSAGE);
00163                 }
00164                 
00165                 // check if role title has il_ prefix
00166                 if (substr($_POST["Fobject"]["title"],0,3) == "il_")
00167                 {
00168                         $this->ilias->raiseError($this->lng->txt("msg_role_reserved_prefix"),$this->ilias->error_obj->MESSAGE);
00169                 }               
00170 
00171                 // save
00172                 include_once("./classes/class.ilObjRole.php");
00173                 $roleObj = new ilObjRole();
00174                 //$roleObj->assignData($_POST["Fobject"]);
00175                 $roleObj->setTitle(ilUtil::stripSlashes($_POST["Fobject"]["title"]));
00176                 $roleObj->setDescription(ilUtil::stripSlashes($_POST["Fobject"]["desc"]));
00177                 $roleObj->setAllowRegister($_POST["Fobject"]["allow_register"]);
00178                 $roleObj->toggleAssignUsersStatus($_POST["Fobject"]["assign_users"]);
00179                 $roleObj->create();
00180                 $rbacadmin->assignRoleToFolder($roleObj->getId(), $this->rolf_ref_id,'y');
00181                 
00182                 sendInfo($this->lng->txt("role_added"),true);
00183 
00184                 ilUtil::redirect("adm_object.php?ref_id=".$this->rolf_ref_id);
00185         }
00186 
00192         function permObject()
00193         {
00194                 global $rbacadmin, $rbacreview, $rbacsystem,$objDefinition;
00195 
00196 
00197                 #$to_filter = $objDefinition->getSubobjectsToFilter();
00198 
00199                 if (!$rbacsystem->checkAccess('visible,write',$this->rolf_ref_id))
00200                 {
00201                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_perm"),$this->ilias->error_obj->MESSAGE);
00202                         exit();
00203                 }
00204 
00205                 // build array with all rbac object types
00206                 $q = "SELECT ta.typ_id,obj.title,ops.ops_id,ops.operation FROM rbac_ta AS ta ".
00207                          "LEFT JOIN object_data AS obj ON obj.obj_id=ta.typ_id ".
00208                          "LEFT JOIN rbac_operations AS ops ON ops.ops_id=ta.ops_id";
00209                 $r = $this->ilias->db->query($q);
00210 
00211                 while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT))
00212                 {
00213                         // FILTER SUBOJECTS OF adm OBJECT
00214                         #if(in_array($row->title,$to_filter))
00215                         #{
00216                         #       continue;
00217                         #}
00218                         $rbac_objects[$row->typ_id] = array("obj_id"    => $row->typ_id,
00219                                                                                             "type"              => $row->title
00220                                                                                                 );
00221 
00222                         $rbac_operations[$row->typ_id][$row->ops_id] = array(
00223                                                                                                                                 "ops_id"        => $row->ops_id,
00224                                                                                                                                 "title"         => $row->operation,
00225                                                                                                                                 "name"          => $this->lng->txt($row->title."_".$row->operation)
00226                                                                                                                            );
00227                 }
00228                         
00229                 foreach ($rbac_objects as $key => $obj_data)
00230                 {
00231                         $rbac_objects[$key]["name"] = $this->lng->txt("obj_".$obj_data["type"]);
00232                         $rbac_objects[$key]["ops"] = $rbac_operations[$key];
00233                 }
00234 
00235 
00236                 // for local roles display only the permissions settings for allowed subobjects
00237                 if ($this->rolf_ref_id != ROLE_FOLDER_ID)
00238                 {
00239                         // first get object in question (parent of role folder object)
00240                         $parent_data = $this->tree->getParentNodeData($this->rolf_ref_id);
00241                         // get allowed subobject of object
00242                         $subobj_data = $this->objDefinition->getSubObjects($parent_data["type"]);
00243                         
00244                         // remove not allowed object types from array but keep the type definition of object itself
00245                         foreach ($rbac_objects as $key => $obj_data)
00246                         {
00247                                 if (!$subobj_data[$obj_data["type"]] and $parent_data["type"] != $obj_data["type"])
00248                                 {
00249                                         unset($rbac_objects[$key]);
00250                                 }
00251                         }
00252                 } // end if local roles
00253                 
00254                 // now sort computed result
00255                 sort($rbac_objects);
00256                         
00257                 foreach ($rbac_objects as $key => $obj_data)
00258                 {
00259                         sort($rbac_objects[$key]["ops"]);
00260                 }
00261                 
00262                 // sort by (translated) name of object type
00263                 $rbac_objects = ilUtil::sortArray($rbac_objects,"name","asc");
00264 
00265                 // BEGIN CHECK_PERM
00266                 $global_roles_all = $rbacreview->getGlobalRoles();
00267                 $global_roles_user = array_intersect($_SESSION["RoleId"],$global_roles_all);
00268                 
00269                 // is this role a global role?
00270                 if (in_array($this->object->getId(),$global_roles_all))
00271                 {
00272                         $global_role = true;
00273                 }
00274                 else
00275                 {
00276                         $global_role = false;
00277                 }
00278 
00279                 foreach ($rbac_objects as $key => $obj_data)
00280                 {
00281                         $allowed_ops_on_type = array();
00282 
00283                         foreach ($global_roles_user as $role_id)
00284                         {
00285                                 $allowed_ops_on_type = array_merge($allowed_ops_on_type,$rbacreview->getOperationsOfRole($role_id,$obj_data["type"]));
00286                         }
00287                                 
00288                         $allowed_ops_on_type = array_unique($allowed_ops_on_type);
00289                                 
00290                         $arr_selected = $rbacreview->getOperationsOfRole($this->object->getId(), $obj_data["type"], $this->rolf_ref_id);
00291                         $arr_checked = array_intersect($arr_selected,array_keys($rbac_operations[$obj_data["obj_id"]]));
00292 
00293                         foreach ($rbac_operations[$obj_data["obj_id"]] as $operation)
00294                         {
00295                                 // check all boxes for system role
00296                                 if ($this->object->getId() == SYSTEM_ROLE_ID)
00297                                 {
00298                                         $checked = true;
00299                                         $disabled = true;
00300                                 }
00301                                 else
00302                                 {
00303                                         $checked = in_array($operation["ops_id"],$arr_checked);
00304 
00305                                         // for global roles only allow to set those permission the current user is granted himself except SYSTEM_ROLE_ID !!
00306                                         if (!in_array(SYSTEM_ROLE_ID,$_SESSION["RoleId"]) and $global_role == true and 
00307                                                 !in_array($operation["ops_id"],$allowed_ops_on_type))
00308                                         {
00309                                                 $disabled = true;
00310                                         }
00311                                         else
00312                                         {
00313                                                 $disabled = false;
00314                                         }
00315                                 }
00316 
00317                                 // Es wird eine 2-dim Post Variable �bergeben: perm[rol_id][ops_id]
00318                                 $box = ilUtil::formCheckBox($checked,"template_perm[".$obj_data["type"]."][]",$operation["ops_id"],$disabled);
00319                                 $output["perm"][$obj_data["obj_id"]][$operation["ops_id"]] = $box;
00320                         }
00321                 }
00322                 // END CHECK_PERM
00323 
00324                 $output["col_anz"] = count($rbac_objects);
00325                 $output["txt_save"] = $this->lng->txt("save");
00326                 $output["check_bottom"] = ilUtil::formCheckBox(0,"recursive",1);
00327                 $output["message_table"] = $this->lng->txt("change_existing_objects");
00328 
00329 
00330 /************************************/
00331 /*              adopt permissions form          */
00332 /************************************/
00333 
00334                 $output["message_middle"] = $this->lng->txt("adopt_perm_from_template");
00335 
00336                 // send message for system role
00337                 if ($this->object->getId() == SYSTEM_ROLE_ID)
00338                 {
00339                         $output["adopt"] = array();
00340                         $output["sysrole_msg"] = $this->lng->txt("msg_sysrole_not_editable");
00341                 }
00342                 else
00343                 {
00344                         // BEGIN ADOPT_PERMISSIONS
00345                         $parent_role_ids = $rbacreview->getParentRoleIds($this->rolf_ref_id,true);
00346 
00347                         // sort output for correct color changing
00348                         ksort($parent_role_ids);
00349 
00350                         foreach ($parent_role_ids as $key => $par)
00351                         {
00352                                 if ($par["obj_id"] != SYSTEM_ROLE_ID)
00353                                 {
00354                                         $radio = ilUtil::formRadioButton(0,"adopt",$par["obj_id"]);
00355                                         $output["adopt"][$key]["css_row_adopt"] = ilUtil::switchColor($key, "tblrow1", "tblrow2");
00356                                         $output["adopt"][$key]["check_adopt"] = $radio;
00357                                         $output["adopt"][$key]["type"] = ($par["type"] == 'role' ? 'Role' : 'Template');
00358                                         $output["adopt"][$key]["role_name"] = $par["title"];
00359                                 }
00360                         }
00361 
00362                         $output["formaction_adopt"] = "adm_object.php?cmd=adoptPermSave&ref_id=".$this->rolf_ref_id."&obj_id=".$this->object->getId();
00363                         // END ADOPT_PERMISSIONS
00364                 }
00365 
00366                 $output["formaction"] = "adm_object.php?cmd=permSave&ref_id=".$this->rolf_ref_id."&obj_id=".$this->object->getId();
00367 
00368                 $this->data = $output;
00369 
00370 
00371 /************************************/
00372 /*                      generate output                 */
00373 /************************************/
00374 
00375                 $this->tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
00376                 $this->tpl->addBlockFile("LOCATOR", "locator", "tpl.locator.html");
00377                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.adm_perm_role.html");
00378 
00379                 foreach ($rbac_objects as $obj_data)
00380                 {
00381                         // BEGIN object_operations
00382                         $this->tpl->setCurrentBlock("object_operations");
00383 
00384                         foreach ($obj_data["ops"] as $operation)
00385                         {
00386                                 $css_row = ilUtil::switchColor($key, "tblrow1", "tblrow2");
00387                                 $this->tpl->setVariable("CSS_ROW",$css_row);
00388                                 $this->tpl->setVariable("PERMISSION",$operation["name"]);
00389                                 if (substr($operation["title"], 0, 7) == "create_")
00390                                 {
00391                                         if ($this->objDefinition->getDevMode(substr($operation["title"], 7, strlen($operation["title"]) -7)))
00392                                         {
00393                                                 $this->tpl->setVariable("TXT_NOT_IMPL", "(".$this->lng->txt("not_implemented_yet").")");
00394                                         }
00395                                 }
00396                                 $this->tpl->setVariable("CHECK_PERMISSION",$this->data["perm"][$obj_data["obj_id"]][$operation["ops_id"]]);
00397                                 $this->tpl->parseCurrentBlock();
00398                         } // END object_operations
00399 
00400                         // BEGIN object_type
00401                         $this->tpl->setCurrentBlock("object_type");
00402                         $this->tpl->setVariable("TXT_OBJ_TYPE",$obj_data["name"]);
00403                         if ($this->objDefinition->getDevMode($obj_data["type"]))
00404                         {
00405                                 $this->tpl->setVariable("TXT_NOT_IMPL", "(".$this->lng->txt("not_implemented_yet").")");
00406                         }
00407                         $this->tpl->parseCurrentBlock();
00408                         // END object_type
00409                 }
00410 
00411                 // don't display adopt permissions form for system role
00412                 if ($this->object->getId() != SYSTEM_ROLE_ID)
00413                 {
00414                         // BEGIN ADOPT PERMISSIONS
00415                         foreach ($this->data["adopt"] as $key => $value)
00416                         {
00417                                 $this->tpl->setCurrentBlock("ADOPT_PERM_ROW");
00418                                 $this->tpl->setVariable("CSS_ROW_ADOPT",$value["css_row_adopt"]);
00419                                 $this->tpl->setVariable("CHECK_ADOPT",$value["check_adopt"]);
00420                                 $this->tpl->setVariable("TYPE",$value["type"]);
00421                                 $this->tpl->setVariable("ROLE_NAME",$value["role_name"]);
00422                                 $this->tpl->parseCurrentBlock();
00423                         }
00424                         
00425                         $this->tpl->setCurrentBlock("ADOPT_PERM_FORM");
00426                         $this->tpl->setVariable("MESSAGE_MIDDLE",$this->data["message_middle"]);
00427                         $this->tpl->setVariable("FORMACTION_ADOPT",$this->data["formaction_adopt"]);
00428                         $this->tpl->parseCurrentBlock();
00429                         // END ADOPT PERMISSIONS
00430                 
00431                         $this->tpl->setCurrentBlock("tblfooter_recursive");
00432                         $this->tpl->setVariable("COL_ANZ",3);
00433                         $this->tpl->setVariable("CHECK_BOTTOM",$this->data["check_bottom"]);
00434                         $this->tpl->setVariable("MESSAGE_TABLE",$this->data["message_table"]);
00435                         $this->tpl->parseCurrentBlock();
00436 
00437                         $this->tpl->setCurrentBlock("tblfooter_standard");
00438                         $this->tpl->setVariable("COL_ANZ_PLUS",4);
00439                         $this->tpl->setVariable("TXT_SAVE",$this->data["txt_save"]);
00440                         $this->tpl->parseCurrentBlock();
00441                 }
00442                 else
00443                 {
00444                         // display form buttons not for system role
00445                         $this->tpl->setCurrentBlock("tblfooter_sysrole");
00446                         $this->tpl->setVariable("COL_ANZ_SYS",3);
00447                         $this->tpl->parseCurrentBlock();
00448 
00449                         // display sysrole_msg
00450                         $this->tpl->setCurrentBlock("sysrole_msg");
00451                         $this->tpl->setVariable("TXT_SYSROLE_MSG",$this->data["sysrole_msg"]);
00452                         $this->tpl->parseCurrentBlock();
00453                 }
00454                 
00455                 $this->tpl->setCurrentBlock("adm_content");
00456                 $this->tpl->setVariable("TBL_TITLE_IMG",ilUtil::getImagePath("icon_".$this->object->getType()."_b.gif"));
00457                 $this->tpl->setVariable("TBL_TITLE_IMG_ALT",$this->lng->txt($this->object->getType()));
00458                 $this->tpl->setVariable("TBL_HELP_IMG",ilUtil::getImagePath("icon_help.gif"));
00459                 $this->tpl->setVariable("TBL_HELP_LINK","tbl_help.php");
00460                 $this->tpl->setVariable("TBL_HELP_IMG_ALT",$this->lng->txt("help"));
00461                 $this->tpl->setVariable("TBL_TITLE",$this->object->getTitle());
00462                         
00463                 $this->tpl->setVariable("TXT_PERMISSION",$this->data["txt_permission"]);
00464                 $this->tpl->setVariable("FORMACTION",$this->data["formaction"]);
00465                 $this->tpl->parseCurrentBlock();
00466         }
00467 
00473         function permSaveObject()
00474         {
00475                 global $rbacsystem, $rbacadmin, $rbacreview,$objDefinition;
00476 
00477                 // SET TEMPLATE PERMISSIONS
00478                 if (!$rbacsystem->checkAccess('write', $this->rolf_ref_id))
00479                 {
00480                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_perm"),$this->ilias->error_obj->MESSAGE);
00481                 }
00482 
00483                 #$to_filter = $objDefinition->getSubobjectsToFilter();
00484 
00485                 // first safe permissions that were disabled in HTML form due to missing lack of permissions of user who changed it
00486                 // TODO: move this following if-code into an extra function. this part is also used in $this->permObject !!
00487                 if (!in_array(SYSTEM_ROLE_ID,$_SESSION["RoleId"]))
00488                 {
00489                         // build array with all rbac object types
00490                         $q = "SELECT ta.typ_id,obj.title,ops.ops_id,ops.operation FROM rbac_ta AS ta ".
00491                                  "LEFT JOIN object_data AS obj ON obj.obj_id=ta.typ_id ".
00492                                  "LEFT JOIN rbac_operations AS ops ON ops.ops_id=ta.ops_id";
00493                         $r = $this->ilias->db->query($q);
00494         
00495                         while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT))
00496                         {
00497                                 // FILTER SUBOJECTS OF adm OBJECT
00498                                 #if(in_array($row->title,$to_filter))
00499                                 #{
00500                                 #       continue;
00501                                 #}
00502 
00503                                 $rbac_objects[$row->typ_id] = array("obj_id"    => $row->typ_id,
00504                                                                                                     "type"              => $row->title
00505                                                                                                         );
00506         
00507                                 $rbac_operations[$row->typ_id][$row->ops_id] = array(
00508                                                                                                                                         "ops_id"        => $row->ops_id,
00509                                                                                                                                         "title"         => $row->operation,
00510                                                                                                                                         "name"          => $this->lng->txt($row->title."_".$row->operation)
00511                                                                                                                                    );
00512                         }
00513                                 
00514                         foreach ($rbac_objects as $key => $obj_data)
00515                         {
00516                                 $rbac_objects[$key]["name"] = $this->lng->txt("obj_".$obj_data["type"]);
00517                                 $rbac_objects[$key]["ops"] = $rbac_operations[$key];
00518                         }
00519         
00520                         $global_roles_all = $rbacreview->getGlobalRoles();
00521                         $global_roles_user = array_intersect($_SESSION["RoleId"],$global_roles_all);
00522                         
00523                         foreach ($rbac_objects as $key => $obj_data)
00524                         {
00525                                 $allowed_ops_on_type = array();
00526         
00527                                 foreach ($global_roles_user as $role_id)
00528                                 {
00529                                         $allowed_ops_on_type = array_merge($allowed_ops_on_type,$rbacreview->getOperationsOfRole($role_id,$obj_data["type"]));
00530                                 }
00531                                         
00532                                 $allowed_ops_on_type = array_unique($allowed_ops_on_type);
00533                                         
00534                                 $arr_previous = $rbacreview->getOperationsOfRole($this->object->getId(), $obj_data["type"], $this->rolf_ref_id);
00535                                 $arr_missing = array_diff($arr_previous,$allowed_ops_on_type);
00536                                 
00537                                 $_POST["template_perm"][$obj_data["type"]] = array_merge($_POST["template_perm"][$obj_data["type"]],$arr_missing);
00538                                 
00539                                 // remove empty types
00540                                 if (empty($_POST["template_perm"][$obj_data["type"]]))
00541                                 {
00542                                         unset($_POST["template_perm"][$obj_data["type"]]);
00543                                 }
00544                         }
00545                 } // END TODO: move!!!
00546 
00547                 // delete all template entries
00548                 $rbacadmin->deleteRolePermission($this->object->getId(), $this->rolf_ref_id);
00549 
00550                 if (empty($_POST["template_perm"]))
00551                 {
00552                         $_POST["template_perm"] = array();
00553                 }
00554 
00555                 foreach ($_POST["template_perm"] as $key => $ops_array)
00556                 {
00557                         // sets new template permissions
00558                         $rbacadmin->setRolePermission($this->object->getId(), $key, $ops_array, $this->rolf_ref_id);
00559                 }
00560 
00561                 // update object data entry (to update last modification date)
00562                 $this->object->update();
00563 
00564                 // CHANGE ALL EXISTING OBJECT UNDER PARENT NODE OF ROLE FOLDER
00565                 // BUT DON'T CHANGE PERMISSIONS OF SUBTREE OBJECTS IF INHERITANCE WAS STOPPED
00566                 if ($_POST["recursive"])
00567                 {
00568                         // IF ROLE IS A GLOBAL ROLE START AT ROOT
00569                         if ($this->rolf_ref_id == ROLE_FOLDER_ID)
00570                         {
00571                                 $node_id = ROOT_FOLDER_ID;
00572                         }
00573                         else
00574                         {
00575                                 $node_id = $this->tree->getParentId($this->rolf_ref_id);
00576                         }
00577 
00578                         // GET ALL SUBNODES
00579                         $node_data = $this->tree->getNodeData($node_id);
00580                         $subtree_nodes = $this->tree->getSubTree($node_data);
00581 
00582                         // GET ALL OBJECTS THAT CONTAIN A ROLE FOLDER
00583                         $all_parent_obj_of_rolf = $rbacreview->getObjectsWithStopedInheritance($this->object->getId());
00584 
00585                         // DELETE ACTUAL ROLE FOLDER FROM ARRAY
00586                         if ($this->rolf_ref_id == ROLE_FOLDER_ID)
00587                         {
00588                                 $key = array_keys($all_parent_obj_of_rolf,SYSTEM_FOLDER_ID);
00589                         }
00590                         else
00591                         {
00592                                 $key = array_keys($all_parent_obj_of_rolf,$node_id);
00593                         }
00594 
00595                         unset($all_parent_obj_of_rolf[$key[0]]);
00596 
00597                         $check = false;
00598 
00599                         foreach ($subtree_nodes as $node)
00600                         {
00601                                 if (!$check)
00602                                 {
00603                                         if (in_array($node["child"],$all_parent_obj_of_rolf))
00604                                         {
00605                                                 $lft = $node["lft"];
00606                                                 $rgt = $node["rgt"];
00607                                                 $check = true;
00608                                                 continue;
00609                                         }
00610 
00611                                         $valid_nodes[] = $node;
00612                                 }
00613                                 else
00614                                 {
00615                                         if (($node["lft"] > $lft) && ($node["rgt"] < $rgt))
00616                                         {
00617                                                 continue;
00618                                         }
00619                                         else
00620                                         {
00621                                                 $check = false;
00622                                                 $valid_nodes[] = $node;
00623                                         }
00624                                 }
00625                         }
00626 
00627                         // prepare arrays for permission settings below
00628                         foreach ($valid_nodes as $key => $node)
00629                         {
00630                                 #if(!in_array($node["type"],$to_filter))
00631                                 {
00632                                         $node_ids[] = $node["child"];
00633                                         $valid_nodes[$key]["perms"] = $_POST["template_perm"][$node["type"]];
00634                                 }
00635                         }
00636                         
00637                         // FIRST REVOKE PERMISSIONS FROM ALL VALID OBJECTS
00638                         $rbacadmin->revokePermissionList($node_ids,$this->object->getId());
00639 
00640                         // NOW SET ALL PERMISSIONS
00641                         foreach ($valid_nodes as $node)
00642                         {
00643                                 if (is_array($node["perms"]))
00644                                 {
00645                                         $rbacadmin->grantPermission($this->object->getId(),$node["perms"],$node["child"]);
00646                                 }
00647                         }
00648                 }// END IF RECURSIVE
00649                 
00650 
00651 
00652                 sendinfo($this->lng->txt("saved_successfully"),true);
00653 
00654                 ilUtil::redirect("adm_object.php?ref_id=".$this->rolf_ref_id."&obj_id=".$this->object->getId()."&cmd=perm");
00655         }
00656 
00657 
00663         function adoptPermSaveObject()
00664         {
00665                 global $rbacadmin, $rbacsystem, $rbacreview;
00666 
00667                 if (!$rbacsystem->checkAccess('write',$this->rolf_ref_id))
00668                 {
00669                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_perm"),$this->ilias->error_obj->MESSAGE);
00670                 }
00671                 elseif ($this->object->getId() == $_POST["adopt"])
00672                 {
00673                         sendInfo($this->lng->txt("msg_perm_adopted_from_itself"),true);
00674                 }
00675                 else
00676                 {
00677                         $rbacadmin->deleteRolePermission($this->object->getId(), $this->rolf_ref_id);
00678                         $parentRoles = $rbacreview->getParentRoleIds($this->rolf_ref_id,true);
00679                         $rbacadmin->copyRolePermission($_POST["adopt"],$parentRoles[$_POST["adopt"]]["parent"],
00680                                                                                    $this->rolf_ref_id,$this->object->getId());          
00681 
00682                         // update object data entry (to update last modification date)
00683                         $this->object->update();
00684 
00685                         // send info
00686                         $obj_data =& $this->ilias->obj_factory->getInstanceByObjId($_POST["adopt"]);
00687                         sendInfo($this->lng->txt("msg_perm_adopted_from1")." '".$obj_data->getTitle()."'.<br/>".$this->lng->txt("msg_perm_adopted_from2"),true);
00688                 }
00689 
00690                 ilUtil::redirect("adm_object.php?ref_id=".$this->rolf_ref_id."&obj_id=".$this->object->getId()."&cmd=perm");
00691         }
00692 
00698         function assignSaveObject()
00699         {
00700         $this->assignUserObject();
00701     }
00702 
00708         function assignUserObject()
00709         {
00710         global $rbacsystem, $rbacadmin, $rbacreview;
00711 
00712                 if (!$rbacsystem->checkAccess("edit_userassignment", $this->rolf_ref_id))
00713                 {
00714                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_user_to_role"),$this->ilias->error_obj->MESSAGE);
00715                 }
00716 
00717                 if (!$rbacreview->isAssignable($this->object->getId(),$this->rolf_ref_id))
00718                 {
00719                         $this->ilias->raiseError($this->lng->txt("err_role_not_assignable"),$this->ilias->error_obj->MESSAGE);
00720                 }
00721 
00722                 if (!$rbacsystem->checkAccess('write',$this->rolf_ref_id))
00723                 {
00724                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_perm"),$this->ilias->error_obj->MESSAGE);
00725                 }
00726 
00727                 if (!isset($_POST["user"]))
00728                 {
00729                         sendInfo($this->lng->txt("no_checkbox"));
00730                         $this->searchObject();
00731 
00732                         return false;
00733                 }
00734                 
00735                 $selected_users = $_POST["user"];
00736                 $assigned_users_all = $rbacreview->assignedUsers($this->object->getId());
00737                                 
00738                 // users to assign
00739                 $assigned_users_new = array_diff($selected_users,array_intersect($selected_users,$assigned_users_all));
00740                 
00741                 // selected users all already assigned. stop
00742         if (count($assigned_users_new) == 0)
00743                 {
00744                         sendInfo($this->lng->txt("msg_selected_users_already_assigned"));
00745                         $this->searchObject();
00746                         
00747                         return false;
00748                 }
00749 
00750 //      var_dump("<pre>",$assigned_users_all,$selected_users,$assigned_users_new,$online_users_all,$online_affected_users,"</pre>");exit;
00751 
00752                 // assign new users
00753         foreach ($assigned_users_new as $user)
00754                 {
00755                         $rbacadmin->assignUser($this->object->getId(),$user,false);
00756         }
00757         
00758         // update session for newly assigned users online
00759         $this->object->_updateSessionRoles($assigned_users_new);
00760 
00761         // update object data entry (to update last modification date)
00762                 $this->object->update();
00763 
00764                 sendInfo($this->lng->txt("msg_userassignment_changed"),true);
00765                 ilUtil::redirect("adm_object.php?ref_id=".$this->rolf_ref_id."&obj_id=".$this->object->getId()."&cmd=userassignment&sort_by=".$_GET["sort_by"]."&sort_order=".$_GET["sort_order"]."&offset=".$_GET["offset"]);
00766         }
00767         
00773         function deassignUserObject()
00774         {
00775         global $rbacsystem, $rbacadmin, $rbacreview;
00776 
00777                 if (!$rbacsystem->checkAccess("edit_userassignment", $this->rolf_ref_id))
00778                 {
00779                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_user_to_role"),$this->ilias->error_obj->MESSAGE);
00780                 }
00781 
00782                 if (!$rbacsystem->checkAccess('write',$this->rolf_ref_id))
00783                 {
00784                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_perm"),$this->ilias->error_obj->MESSAGE);
00785                 }
00786                 
00787         $selected_users = ($_POST["user_id"]) ? $_POST["user_id"] : array($_GET["user_id"]);
00788 
00789                 if ($selected_users[0]=== NULL)
00790                 {
00791                         $this->ilias->raiseError($this->lng->txt("no_checkbox"),$this->ilias->error_obj->MESSAGE);
00792                 }
00793 
00794                 // prevent unassignment of system user from system role
00795                 if ($this->object->getId() == SYSTEM_ROLE_ID)
00796                 {
00797             if ($admin = array_search(SYSTEM_USER_ID,$selected_users) !== false)
00798                             unset($selected_users[$admin]);
00799                 }
00800 //var_dump("<pre>",SYSTEM_USER_ID,$admin,$_POST,$_GET,$selected_users,"</pre>");exit;
00801 
00802                 // check for each user if the current role is his last global role before deassigning him
00803                 $last_role = array();
00804                 $global_roles = $rbacreview->getGlobalRoles();
00805                 
00806                 foreach ($selected_users as $user)
00807                 {
00808                         $assigned_roles = $rbacreview->assignedRoles($user);
00809                         $assigned_global_roles = array_intersect($assigned_roles,$global_roles);
00810 
00811                         if (count($assigned_roles) == 1 or (count($assigned_global_roles) == 1 and in_array($this->object->getId(),$assigned_global_roles)))
00812                         {
00813                                 $userObj = $this->ilias->obj_factory->getInstanceByObjId($user);
00814                                 $last_role[$user] = $userObj->getFullName();
00815                                 unset($userObj);
00816                         }
00817                 }
00818 
00819                 // raise error if last role was taken from a user...
00820                 if (count($last_role) > 0)
00821                 {
00822                         $user_list = implode(", ",$last_role);
00823                         $this->ilias->raiseError($this->lng->txt("msg_is_last_role").": ".$user_list."<br/>".$this->lng->txt("msg_min_one_role")."<br/>".$this->lng->txt("action_aborted"),$this->ilias->error_obj->MESSAGE);
00824                 }
00825                 
00826                 // ... else perform deassignment
00827                 foreach ($selected_users as $user)
00828         {
00829                         $rbacadmin->deassignUser($this->object->getId(),$user);
00830                 }
00831 
00832         // update session for newly assigned users online
00833         $this->object->_updateSessionRoles($selected_users);
00834 
00835         // update object data entry (to update last modification date)
00836                 $this->object->update();
00837 
00838                 sendInfo($this->lng->txt("msg_userassignment_changed"),true);
00839                 ilUtil::redirect("adm_object.php?ref_id=".$this->rolf_ref_id."&obj_id=".$this->object->getId()."&cmd=userassignment&sort_by=".$_GET["sort_by"]."&sort_order=".$_GET["sort_order"]."&offset=".$_GET["offset"]);
00840         }
00841         
00847         function updateObject()
00848         {
00849                 global $rbacsystem, $rbacreview;
00850 
00851                 // check write access
00852                 if (!$rbacsystem->checkAccess("write", $this->rolf_ref_id))
00853                 {
00854                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_role"),$this->ilias->error_obj->MESSAGE);
00855                 }
00856 
00857                 if (substr($this->object->getTitle(),0,3) != "il_")
00858                 {
00859                         // check required fields
00860                         if (empty($_POST["Fobject"]["title"]))
00861                         {
00862                                 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields"),$this->ilias->error_obj->MESSAGE);
00863                         }
00864         
00865                         // check if role title has il_ prefix
00866                         if (substr($_POST["Fobject"]["title"],0,3) == "il_")
00867                         {
00868                                 $this->ilias->raiseError($this->lng->txt("msg_role_reserved_prefix"),$this->ilias->error_obj->MESSAGE);
00869                         }
00870         
00871                         // check if role title is unique
00872                         if ($rbacreview->roleExists($_POST["Fobject"]["title"],$this->object->getId()))
00873                         {
00874                                 $this->ilias->raiseError($this->lng->txt("msg_role_exists1")." '".ilUtil::stripSlashes($_POST["Fobject"]["title"])."' ".
00875                                                                                  $this->lng->txt("msg_role_exists2"),$this->ilias->error_obj->MESSAGE);
00876                         }
00877 
00878                         // update
00879                         $this->object->setTitle(ilUtil::stripSlashes($_POST["Fobject"]["title"]));
00880                 }
00881 
00882                 $this->object->setDescription(ilUtil::stripSlashes($_POST["Fobject"]["desc"]));
00883                 $this->object->setAllowRegister($_POST["Fobject"]["allow_register"]);
00884                 $this->object->toggleAssignUsersStatus($_POST["Fobject"]["assign_users"]);
00885                 $this->object->update();
00886                 
00887                 sendInfo($this->lng->txt("saved_successfully"),true);
00888 
00889                 ilUtil::redirect("adm_object.php?ref_id=".$this->rolf_ref_id);
00890         }
00891         
00897         function editObject()
00898         {
00899                 global $rbacsystem, $rbacreview;
00900 
00901                 if (!$rbacsystem->checkAccess("write", $this->rolf_ref_id))
00902                 {
00903                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
00904                 }
00905 
00906                 $this->getTemplateFile("edit");
00907 
00908                 if ($_SESSION["error_post_vars"])
00909                 {
00910                         // fill in saved values in case of error
00911                         if (substr($this->object->getTitle(),0,3) != "il_")
00912                         {
00913                                 $this->tpl->setVariable("TITLE",ilUtil::prepareFormOutput($_SESSION["error_post_vars"]["Fobject"]["title"]),true);
00914                         }
00915                 
00916                         $this->tpl->setVariable("DESC",ilUtil::stripSlashes($_SESSION["error_post_vars"]["Fobject"]["desc"]));
00917                         $allow_register = ($_SESSION["error_post_vars"]["Fobject"]["allow_register"]) ? "checked=\"checked\"" : "";
00918                         $assign_users = ($_SESSION["error_post_vars"]["Fobject"]["assign_users"]) ? "checked=\"checked\"" : "";
00919                 }
00920                 else
00921                 {
00922                         if (substr($this->object->getTitle(),0,3) != "il_")
00923                         {
00924                                 $this->tpl->setVariable("TITLE",ilUtil::prepareFormOutput($this->object->getTitle()));
00925                         }
00926 
00927                         $this->tpl->setVariable("DESC",ilUtil::stripSlashes($this->object->getDescription()));
00928                         $allow_register = ($this->object->getAllowRegister()) ? "checked=\"checked\"" : "";
00929                         $assign_users = $this->object->getAssignUsersStatus() ? "checked=\"checked\"" : "";
00930 
00931                 }
00932 
00933                 $obj_str = "&obj_id=".$this->obj_id;
00934 
00935                 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt("title"));
00936                 $this->tpl->setVariable("TXT_DESC",$this->lng->txt("desc"));
00937                 
00938                 // exclude allow register option for anonymous role, system role and all local roles
00939                 $global_roles = $rbacreview->getGlobalRoles();
00940 
00941                 $this->tpl->setVariable("FORMACTION", $this->getFormAction("update","adm_object.php?cmd=gateway&ref_id=".$this->rolf_ref_id.$obj_str));
00942                 $this->tpl->setVariable("TXT_HEADER", $this->lng->txt($this->object->getType()."_edit"));
00943                 $this->tpl->setVariable("TARGET", $this->getTargetFrame("update"));
00944                 $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
00945                 $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("save"));
00946                 $this->tpl->setVariable("CMD_SUBMIT", "update");
00947                 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00948                 
00949                 if (substr($this->object->getTitle(),0,3) == "il_")
00950                 {
00951                         $this->tpl->setVariable("SHOW_TITLE",$this->object->getTitle());
00952                 }
00953 
00954                 if ($this->object->getId() != ANONYMOUS_ROLE_ID and 
00955                         $this->object->getId() != SYSTEM_ROLE_ID and 
00956                         in_array($this->object->getId(),$global_roles))
00957                 {
00958                         $this->tpl->setCurrentBlock("allow_register");
00959                         $this->tpl->setVariable("TXT_ALLOW_REGISTER",$this->lng->txt("allow_register"));
00960                         $this->tpl->setVariable("ALLOW_REGISTER",$allow_register);
00961                         $this->tpl->parseCurrentBlock();
00962 
00963                         $this->tpl->setCurrentBlock("assign_users");
00964                         $this->tpl->setVariable("TXT_ASSIGN_USERS",$this->lng->txt('allow_assign_users'));
00965                         $this->tpl->setVariable("ASSIGN_USERS",$assign_users);
00966                         $this->tpl->parseCurrentBlock();
00967                 }
00968         }
00969         
00973         function userassignmentObject()
00974         {
00975                 global $rbacreview, $rbacsystem;
00976                 
00977                 if (!$rbacsystem->checkAccess("edit_userassignment", $this->rolf_ref_id))
00978                 {
00979                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_user_to_role"),$this->ilias->error_obj->MESSAGE);
00980                 }
00981 
00982                 $assigned_users = $rbacreview->assignedUsers($this->object->getId(),array("login","firstname","lastname","usr_id"));
00983 
00984                 //if current user is admin he is able to add new members to group
00985                 $val_contact = "<img src=\"".ilUtil::getImagePath("icon_pencil_b.gif")."\" alt=\"".$this->lng->txt("role_user_send_mail")."\" title=\"".$this->lng->txt("role_user_send_mail")."\" border=\"0\" vspace=\"0\"/>";
00986                 $val_change = "<img src=\"".ilUtil::getImagePath("icon_change_b.gif")."\" alt=\"".$this->lng->txt("role_user_edit")."\" title=\"".$this->lng->txt("role_user_edit")."\" border=\"0\" vspace=\"0\"/>";
00987                 $val_leave = "<img src=\"".ilUtil::getImagePath("icon_group_out_b.gif")."\" alt=\"".$this->lng->txt("role_user_deassign")."\" title=\"".$this->lng->txt("role_user_deassign")."\" border=\"0\" vspace=\"0\"/>";
00988 
00989                 $counter = 0;
00990 
00991                 foreach ($assigned_users as $user)
00992                 {
00993                         $link_contact = "mail_new.php?type=new&rcp_to=".$user["login"];
00994                         $link_change = "adm_object.php?ref_id=7&obj_id=".$user["usr_id"]."&cmd=edit";
00995                         $link_leave = $this->ctrl->getLinkTarget($this,"deassignUser")."&user_id=".$user["usr_id"];
00996 
00997             $member_functions = "";
00998 
00999             // exclude root/admin role and anon/anon
01000             if ($this->object->getId() != ANONYMOUS_ROLE_ID or $user["usr_id"] != ANONYMOUS_USER_ID)
01001                         {
01002                 //build function
01003                 $member_functions = "<a href=\"".$link_contact."\">".$val_contact."</a>";
01004                 $member_functions .= "<a href=\"".$link_change."\">".$val_change."</a>";
01005 
01006                 if ($this->object->getId() != SYSTEM_ROLE_ID or $user["usr_id"] != SYSTEM_USER_ID)
01007                 {
01008                     $member_functions .="<a href=\"".$link_leave."\">".$val_leave."</a>";
01009                 }
01010             }
01011 
01012                         // no check box for root/admin role and anon/anon
01013                         if (($this->object->getId() == SYSTEM_ROLE_ID and $user["usr_id"] == SYSTEM_USER_ID)
01014                 or ($this->object->getId() == ANONYMOUS_ROLE_ID and $user["usr_id"] == ANONYMOUS_USER_ID))
01015                         {
01016                 $result_set[$counter][] = "";
01017             }
01018             else
01019             {
01020                 $result_set[$counter][] = ilUtil::formCheckBox(0,"user_id[]",$user["usr_id"]);
01021             }
01022 
01023             $result_set[$counter][] = $user["login"];
01024                         $result_set[$counter][] = $user["firstname"];
01025                         $result_set[$counter][] = $user["lastname"];
01026                         $result_set[$counter][] = $member_functions;
01027 
01028                         ++$counter;
01029 
01030                         unset($member_functions);
01031                 }
01032 
01033                 return $this->__showAssignedUsersTable($result_set);
01034     }
01035         
01036         function __showAssignedUsersTable($a_result_set)
01037         {
01038         global $rbacsystem;
01039 
01040                 $actions = array("deassignUser"  => $this->lng->txt("remove"));
01041 
01042         $tbl =& $this->__initTableGUI();
01043                 $tpl =& $tbl->getTemplateObject();
01044 
01045                 $tpl->setCurrentBlock("tbl_form_header");
01046                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
01047                 $tpl->parseCurrentBlock();
01048 
01049                 $tpl->setCurrentBlock("tbl_action_row");
01050 
01051 
01052             $tpl->setCurrentBlock("plain_button");
01053                     $tpl->setVariable("PBTN_NAME","searchUserForm");
01054                     $tpl->setVariable("PBTN_VALUE",$this->lng->txt("role_add_user"));
01055                     $tpl->parseCurrentBlock();
01056                     $tpl->setCurrentBlock("plain_buttons");
01057                     $tpl->parseCurrentBlock();
01058 
01059                         $tpl->setVariable("COLUMN_COUNTS",5);
01060                         $tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.gif"));
01061 
01062             foreach ($actions as $name => $value)
01063                         {
01064                                 $tpl->setCurrentBlock("tbl_action_btn");
01065                                 $tpl->setVariable("BTN_NAME",$name);
01066                                 $tpl->setVariable("BTN_VALUE",$value);
01067                                 $tpl->parseCurrentBlock();
01068                         }
01069 
01070             $tpl->setVariable("TPLPATH",$this->tpl->tplPath);
01071 
01072 
01073                 $this->ctrl->setParameter($this,"cmd","userassignment");
01074 
01075 
01076                 // title & header columns
01077                 $tbl->setTitle($this->lng->txt("assigned_users"),"icon_usr_b.gif",$this->lng->txt("users"));
01078 
01079                 //user must be administrator
01080                 $tbl->setHeaderNames(array("",$this->lng->txt("username"),$this->lng->txt("firstname"),$this->lng->txt("lastname"),$this->lng->txt("grp_options")));
01081                 $tbl->setHeaderVars(array("","login","firstname","lastname","functions"),$this->ctrl->getParameterArray($this,"",false));
01082                 $tbl->setColumnWidth(array("","30%","30%","30%","10%"));
01083                 
01084                 $this->__setTableGUIBasicData($tbl,$a_result_set,"userassignment");
01085                 $tbl->render();
01086                 $this->tpl->setVariable("ADM_CONTENT",$tbl->tpl->get());
01087 
01088                 return true;
01089         }
01090 
01091         function &__initTableGUI()
01092         {
01093                 include_once "class.ilTableGUI.php";
01094 
01095                 return new ilTableGUI(0,false);
01096         }
01097 
01098         function __setTableGUIBasicData(&$tbl,&$result_set,$from = "")
01099         {
01100         switch($from)
01101                 {
01102                         case "group":
01103                         $order = $_GET["sort_by"] ? $_GET["sort_by"] : "title";
01104                                 break;
01105 
01106                         case "role":
01107                         $order = $_GET["sort_by"] ? $_GET["sort_by"] : "title";
01108                                 break;
01109 
01110                         default:
01111                                 // init sort_by (unfortunatly sort_by is preset with 'title')
01112                         if ($_GET["sort_by"] == "title" or empty($_GET["sort_by"]))
01113                 {
01114                     $_GET["sort_by"] = "login";
01115                 }
01116                 $order = $_GET["sort_by"];
01117                                 break;
01118                 }
01119 
01120                 $tbl->setOrderColumn($order);
01121                 $tbl->setOrderDirection($_GET["sort_order"]);
01122                 $tbl->setOffset($_GET["offset"]);
01123                 $tbl->setLimit($_GET["limit"]);
01124                 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
01125                 $tbl->setData($result_set);
01126         }
01127 
01128         function searchUserFormObject()
01129         {
01130                 global $rbacsystem;
01131 
01132                 if (!$rbacsystem->checkAccess("edit_userassignment", $this->rolf_ref_id))
01133                 {
01134                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_user_to_role"),$this->ilias->error_obj->MESSAGE);
01135                 }
01136 
01137                 $this->lng->loadLanguageModule('search');
01138 
01139                 $this->tpl->addBlockFile("ADM_CONTENT","adm_content","tpl.role_users_search.html");
01140 
01141                 $this->tpl->setVariable("F_ACTION",$this->ctrl->getFormAction($this));
01142                 $this->tpl->setVariable("SEARCH_ASSIGN_USR",$this->lng->txt("role_search_users"));
01143                 $this->tpl->setVariable("SEARCH_SEARCH_TERM",$this->lng->txt("search_search_term"));
01144                 $this->tpl->setVariable("SEARCH_VALUE",$_SESSION["role_search_str"] ? $_SESSION["role_search_str"] : "");
01145                 $this->tpl->setVariable("SEARCH_FOR",$this->lng->txt("exc_search_for"));
01146                 $this->tpl->setVariable("SEARCH_ROW_TXT_USER",$this->lng->txt("exc_users"));
01147                 $this->tpl->setVariable("SEARCH_ROW_TXT_ROLE",$this->lng->txt("exc_roles"));
01148                 $this->tpl->setVariable("SEARCH_ROW_TXT_GROUP",$this->lng->txt("exc_groups"));
01149                 $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt("cancel"));
01150                 $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("search"));
01151 
01152         $usr = ($_POST["search_for"] == "usr" || $_POST["search_for"] == "") ? 1 : 0;
01153                 $grp = ($_POST["search_for"] == "grp") ? 1 : 0;
01154                 $role = ($_POST["search_for"] == "role") ? 1 : 0;
01155 
01156                 $this->tpl->setVariable("SEARCH_ROW_CHECK_USER",ilUtil::formRadioButton($usr,"search_for","usr"));
01157                 $this->tpl->setVariable("SEARCH_ROW_CHECK_ROLE",ilUtil::formRadioButton($role,"search_for","role"));
01158         $this->tpl->setVariable("SEARCH_ROW_CHECK_GROUP",ilUtil::formRadioButton($grp,"search_for","grp"));
01159 
01160                 $this->__unsetSessionVariables();
01161         }
01162 
01163         function __unsetSessionVariables()
01164         {
01165                 unset($_SESSION["role_delete_member_ids"]);
01166                 unset($_SESSION["role_delete_subscriber_ids"]);
01167                 unset($_SESSION["role_search_str"]);
01168                 unset($_SESSION["role_search_for"]);
01169                 unset($_SESSION["role_role"]);
01170                 unset($_SESSION["role_group"]);
01171                 unset($_SESSION["role_archives"]);
01172         }
01173 
01178         function cancelObject()
01179         {
01180                 $return_location = "userassignment";
01181 
01182                 sendInfo($this->lng->txt("action_aborted"),true);
01183                 ilUtil::redirect($this->ctrl->getLinkTarget($this,$return_location));
01184         }
01185 
01186         function searchObject()
01187         {
01188                 global $rbacsystem, $tree;
01189 
01190                 if (!$rbacsystem->checkAccess("edit_userassignment", $this->rolf_ref_id))
01191                 {
01192                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_user_to_role"),$this->ilias->error_obj->MESSAGE);
01193                 }
01194 
01195                 $_SESSION["role_search_str"] = $_POST["search_str"] = $_POST["search_str"] ? $_POST["search_str"] : $_SESSION["role_search_str"];
01196                 $_SESSION["role_search_for"] = $_POST["search_for"] = $_POST["search_for"] ? $_POST["search_for"] : $_SESSION["role_search_for"];
01197 
01198                 if(!isset($_POST["search_for"]) or !isset($_POST["search_str"]))
01199                 {
01200                         sendInfo($this->lng->txt("role_search_enter_search_string"));
01201                         $this->searchUserFormObject();
01202 
01203                         return false;
01204                 }
01205 
01206                 if(!count($result = $this->__search(ilUtil::stripSlashes($_POST["search_str"]),$_POST["search_for"])))
01207                 {
01208                         sendInfo($this->lng->txt("role_no_results_found"));
01209                         $this->searchUserFormObject();
01210 
01211                         return false;
01212                 }
01213 
01214                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.role_usr_selection.html");
01215                 $this->__showButton("searchUserForm",$this->lng->txt("role_new_search"));
01216 
01217                 $counter = 0;
01218                 $f_result = array();
01219 
01220                 switch($_POST["search_for"])
01221                 {
01222                 case "usr":
01223                                 foreach($result as $user)
01224                                 {
01225                                         if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($user["id"],false))
01226                                         {
01227                                                 continue;
01228                                         }
01229                                         $f_result[$counter][] = ilUtil::formCheckbox(0,"user[]",$user["id"]);
01230                                         $f_result[$counter][] = $tmp_obj->getLogin();
01231                                         $f_result[$counter][] = $tmp_obj->getFirstname();
01232                                         $f_result[$counter][] = $tmp_obj->getLastname();
01233 
01234                                         unset($tmp_obj);
01235                                         ++$counter;
01236                                 }
01237                                 $this->__showSearchUserTable($f_result);
01238 
01239                                 return true;
01240 
01241                         case "role":
01242                                 foreach($result as $role)
01243                                 {
01244                     // exclude anonymous role
01245                     if ($role["id"] == ANONYMOUS_ROLE_ID)
01246                     {
01247                         continue;
01248                     }
01249 
01250                     if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($role["id"],false))
01251                                         {
01252                                                 continue;
01253                                         }
01254 
01255                                     // exclude roles with no users assigned to
01256                     if ($tmp_obj->getCountMembers() == 0)
01257                     {
01258                         continue;
01259                     }
01260 
01261                                         $f_result[$counter][] = ilUtil::formCheckbox(0,"role[]",$role["id"]);
01262                                         $f_result[$counter][] = array($tmp_obj->getTitle(),$tmp_obj->getDescription());
01263                                         $f_result[$counter][] = $tmp_obj->getCountMembers();
01264 
01265                                         unset($tmp_obj);
01266                                         ++$counter;
01267                                 }
01268 
01269                                 $this->__showSearchRoleTable($f_result);
01270 
01271                                 return true;
01272 
01273                         case "grp":
01274                                 foreach($result as $group)
01275                                 {
01276                                         if(!$tree->isInTree($group["id"]))
01277                                         {
01278                                                 continue;
01279                                         }
01280 
01281                                         if(!$tmp_obj = ilObjectFactory::getInstanceByRefId($group["id"],false))
01282                                         {
01283                                                 continue;
01284                                         }
01285 
01286                     // exclude myself :-)
01287                     if ($tmp_obj->getId() == $this->object->getId())
01288                     {
01289                         continue;
01290                     }
01291 
01292                                         $f_result[$counter][] = ilUtil::formCheckbox(0,"group[]",$group["id"]);
01293                                         $f_result[$counter][] = array($tmp_obj->getTitle(),$tmp_obj->getDescription());
01294                                         $f_result[$counter][] = $tmp_obj->getCountMembers();
01295 
01296                                         unset($tmp_obj);
01297                                         ++$counter;
01298                                 }
01299                                 $this->__showSearchGroupTable($f_result);
01300 
01301                                 return true;
01302                 }
01303         }
01304 
01305         function __search($a_search_string,$a_search_for)
01306         {
01307                 include_once("class.ilSearch.php");
01308 
01309                 $this->lng->loadLanguageModule("content");
01310                 $search =& new ilSearch($_SESSION["AccountId"]);
01311                 $search->setPerformUpdate(false);
01312                 $search->setSearchString(ilUtil::stripSlashes($a_search_string));
01313                 $search->setCombination("and");
01314                 $search->setSearchFor(array(0 => $a_search_for));
01315                 $search->setSearchType('new');
01316 
01317                 if($search->validate($message))
01318                 {
01319                         $search->performSearch();
01320                 }
01321                 else
01322                 {
01323                         sendInfo($message,true);
01324                         $this->ctrl->redirect($this,"searchUserForm");
01325                 }
01326 
01327                 return $search->getResultByType($a_search_for);
01328         }
01329 
01330         function __showSearchUserTable($a_result_set,$a_cmd = "search")
01331         {
01332         $return_to  = "searchUserForm";
01333 
01334         if ($a_cmd == "listUsersRole" or $a_cmd == "listUsersGroup")
01335         {
01336             $return_to = "search";
01337         }
01338 
01339                 $tbl =& $this->__initTableGUI();
01340                 $tpl =& $tbl->getTemplateObject();
01341 
01342                 // SET FORMACTION
01343                 $tpl->setCurrentBlock("tbl_form_header");
01344                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
01345                 $tpl->parseCurrentBlock();
01346 
01347                 $tpl->setCurrentBlock("tbl_action_btn");
01348                 $tpl->setVariable("BTN_NAME",$return_to);
01349                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("back"));
01350                 $tpl->parseCurrentBlock();
01351 
01352                 $tpl->setCurrentBlock("tbl_action_btn");
01353                 $tpl->setVariable("BTN_NAME","assignUser");
01354                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("add"));
01355                 $tpl->parseCurrentBlock();
01356 
01357                 $tpl->setCurrentBlock("tbl_action_row");
01358                 $tpl->setVariable("COLUMN_COUNTS",4);
01359                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
01360                 $tpl->parseCurrentBlock();
01361 
01362                 $tbl->setTitle($this->lng->txt("role_header_edit_users"),"icon_usr_b.gif",$this->lng->txt("role_header_edit_users"));
01363                 $tbl->setHeaderNames(array("",
01364                                                                    $this->lng->txt("username"),
01365                                                                    $this->lng->txt("firstname"),
01366                                                                    $this->lng->txt("lastname")));
01367                 $tbl->setHeaderVars(array("",
01368                                                                   "login",
01369                                                                   "firstname",
01370                                                                   "lastname"),
01371                                                         array("ref_id" => $this->rolf_ref_id,
01372                                   "obj_id" => $this->object->getId(),
01373                                                                   "cmd" => $a_cmd,
01374                                                                   "cmdClass" => "ilobjrolegui",
01375                                                                   "cmdNode" => $_GET["cmdNode"]));
01376 
01377                 $tbl->setColumnWidth(array("","33%","33%","33%"));
01378 
01379                 $this->__setTableGUIBasicData($tbl,$a_result_set);
01380                 $tbl->render();
01381 
01382                 $this->tpl->setVariable("SEARCH_RESULT_TABLE",$tbl->tpl->get());
01383 
01384                 return true;
01385         }
01386 
01387         function __showSearchRoleTable($a_result_set)
01388         {
01389                 $tbl =& $this->__initTableGUI();
01390                 $tpl =& $tbl->getTemplateObject();
01391 
01392                 $tpl->setCurrentBlock("tbl_form_header");
01393                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
01394                 $tpl->parseCurrentBlock();
01395 
01396                 $tpl->setCurrentBlock("tbl_action_btn");
01397                 $tpl->setVariable("BTN_NAME","searchUserForm");
01398                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("back"));
01399                 $tpl->parseCurrentBlock();
01400 
01401                 $tpl->setCurrentBlock("tbl_action_btn");
01402                 $tpl->setVariable("BTN_NAME","listUsersRole");
01403                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("role_list_users"));
01404                 $tpl->parseCurrentBlock();
01405 
01406                 $tpl->setCurrentBlock("tbl_action_row");
01407                 $tpl->setVariable("COLUMN_COUNTS",4);
01408                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
01409                 $tpl->parseCurrentBlock();
01410 
01411                 $tbl->setTitle($this->lng->txt("role_header_edit_users"),"icon_usr_b.gif",$this->lng->txt("role_header_edit_users"));
01412                 $tbl->setHeaderNames(array("",
01413                                                                    $this->lng->txt("obj_role"),
01414                                                                    $this->lng->txt("role_count_users")));
01415                 $tbl->setHeaderVars(array("",
01416                                                                   "title",
01417                                                                   "nr_members"),
01418                                                         array("ref_id" => $this->rolf_ref_id,
01419                                   "obj_id" => $this->object->getId(),
01420                                                                   "cmd" => "search",
01421                                                                   "cmdClass" => "ilobjrolegui",
01422                                                                   "cmdNode" => $_GET["cmdNode"]));
01423 
01424                 $tbl->setColumnWidth(array("","80%","19%"));
01425 
01426 
01427                 $this->__setTableGUIBasicData($tbl,$a_result_set,"role");
01428                 $tbl->render();
01429 
01430                 $this->tpl->setVariable("SEARCH_RESULT_TABLE",$tbl->tpl->get());
01431 
01432                 return true;
01433         }
01434 
01435         function __showSearchGroupTable($a_result_set)
01436         {
01437         $tbl =& $this->__initTableGUI();
01438                 $tpl =& $tbl->getTemplateObject();
01439 
01440                 $tpl->setCurrentBlock("tbl_form_header");
01441                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
01442                 $tpl->parseCurrentBlock();
01443 
01444                 $tpl->setCurrentBlock("tbl_action_btn");
01445                 $tpl->setVariable("BTN_NAME","searchUserForm");
01446                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("back"));
01447                 $tpl->parseCurrentBlock();
01448 
01449                 $tpl->setCurrentBlock("tbl_action_btn");
01450                 $tpl->setVariable("BTN_NAME","listUsersGroup");
01451                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("grp_list_users"));
01452                 $tpl->parseCurrentBlock();
01453 
01454                 $tpl->setCurrentBlock("tbl_action_row");
01455                 $tpl->setVariable("COLUMN_COUNTS",4);
01456                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
01457                 $tpl->parseCurrentBlock();
01458 
01459                 $tbl->setTitle($this->lng->txt("grp_header_edit_members"),"icon_usr_b.gif",$this->lng->txt("grp_header_edit_members"));
01460                 $tbl->setHeaderNames(array("",
01461                                                                    $this->lng->txt("obj_grp"),
01462                                                                    $this->lng->txt("grp_count_members")));
01463                 $tbl->setHeaderVars(array("",
01464                                                                   "title",
01465                                                                   "nr_members"),
01466                                                         array("ref_id" => $this->rolf_ref_id,
01467                                   "obj_id" => $this->object->getId(),
01468                                                                   "cmd" => "search",
01469                                                                   "cmdClass" => "ilobjrolegui",
01470                                                                   "cmdNode" => $_GET["cmdNode"]));
01471 
01472                 $tbl->setColumnWidth(array("","80%","19%"));
01473 
01474 
01475                 $this->__setTableGUIBasicData($tbl,$a_result_set,"group");
01476                 $tbl->render();
01477 
01478                 $this->tpl->setVariable("SEARCH_RESULT_TABLE",$tbl->tpl->get());
01479 
01480                 return true;
01481         }
01482 
01483         function listUsersRoleObject()
01484         {
01485                 global $rbacsystem,$rbacreview;
01486 
01487                 $_SESSION["role_role"] = $_POST["role"] = $_POST["role"] ? $_POST["role"] : $_SESSION["role_role"];
01488 
01489                 if(!is_array($_POST["role"]))
01490                 {
01491                         sendInfo($this->lng->txt("role_no_roles_selected"));
01492                         $this->searchObject();
01493 
01494                         return false;
01495                 }
01496 
01497                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.role_usr_selection.html");
01498                 $this->__showButton("searchUserForm",$this->lng->txt("role_new_search"));
01499 
01500                 // GET ALL MEMBERS
01501                 $members = array();
01502                 foreach($_POST["role"] as $role_id)
01503                 {
01504                         $members = array_merge($rbacreview->assignedUsers($role_id),$members);
01505                 }
01506 
01507                 $members = array_unique($members);
01508 
01509                 // FORMAT USER DATA
01510                 $counter = 0;
01511                 $f_result = array();
01512                 foreach($members as $user)
01513                 {
01514                         if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($user,false))
01515                         {
01516                                 continue;
01517                         }
01518                         // TODO: exclude anonymous user
01519                         $f_result[$counter][] = ilUtil::formCheckbox(0,"user[]",$user);
01520                         $f_result[$counter][] = $tmp_obj->getLogin();
01521                         $f_result[$counter][] = $tmp_obj->getFirstname();
01522                         $f_result[$counter][] = $tmp_obj->getLastname();
01523 
01524                         unset($tmp_obj);
01525                         ++$counter;
01526                 }
01527                 $this->__showSearchUserTable($f_result,"listUsersRole");
01528 
01529                 return true;
01530         }
01531 
01532         function listUsersGroupObject()
01533         {
01534                 global $rbacsystem,$rbacreview,$tree;
01535 
01536                 $_SESSION["role_group"] = $_POST["group"] = $_POST["group"] ? $_POST["group"] : $_SESSION["role_group"];
01537 
01538                 if(!is_array($_POST["group"]))
01539                 {
01540                         sendInfo($this->lng->txt("role_no_groups_selected"));
01541                         $this->searchObject();
01542 
01543                         return false;
01544                 }
01545 
01546                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.role_usr_selection.html");
01547                 $this->__showButton("searchUserForm",$this->lng->txt("role_new_search"));
01548 
01549                 // GET ALL MEMBERS
01550                 $members = array();
01551                 foreach($_POST["group"] as $group_id)
01552                 {
01553                         if (!$tree->isInTree($group_id))
01554                         {
01555                                 continue;
01556                         }
01557                         if (!$tmp_obj = ilObjectFactory::getInstanceByRefId($group_id))
01558                         {
01559                                 continue;
01560                         }
01561 
01562                         $members = array_merge($tmp_obj->getGroupMemberIds(),$members);
01563 
01564                         unset($tmp_obj);
01565                 }
01566 
01567                 $members = array_unique($members);
01568 
01569                 // FORMAT USER DATA
01570                 $counter = 0;
01571                 $f_result = array();
01572                 foreach($members as $user)
01573                 {
01574                         if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($user,false))
01575                         {
01576                                 continue;
01577                         }
01578                         $f_result[$counter][] = ilUtil::formCheckbox(0,"user[]",$user);
01579                         $f_result[$counter][] = $tmp_obj->getLogin();
01580                         $f_result[$counter][] = $tmp_obj->getFirstname();
01581                         $f_result[$counter][] = $tmp_obj->getLastname();
01582 
01583                         unset($tmp_obj);
01584                         ++$counter;
01585                 }
01586                 $this->__showSearchUserTable($f_result,"listUsersGroup");
01587 
01588                 return true;
01589         }
01590 } // END class.ilObjRoleGUI
01591 ?>

Generated on Fri Dec 13 2013 08:00:15 for ILIAS Release_3_3_x_branch .rev 46803 by  doxygen 1.7.1