ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilRoleAssignmentTableGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once("./Services/Table/classes/class.ilTable2GUI.php");
5
15{
16 protected $path_gui;
17 protected $factory;
18 protected $renderer;
19
23 public function __construct($a_parent_obj, $a_parent_cmd)
24 {
25 global $DIC;
26
27 $ilCtrl = $DIC['ilCtrl'];
28 $lng = $DIC['lng'];
29 $rbacsystem = $DIC['rbacsystem'];
30
31 $this->factory = $DIC->ui()->factory();
32 $this->renderer = $DIC->ui()->renderer();
33
34 $lng->loadLanguageModule('rbac');
35 $this->setId("usrroleass");
36
37 parent::__construct($a_parent_obj, $a_parent_cmd);
38
39 $this->setTitle($lng->txt("role_assignment"));
40 $this->setDefaultOrderField("title");
41 $this->setDefaultOrderDirection("asc");
42 $this->setDisableFilterHiding(true);
43 $this->addColumn("", "", "1", true);
44 $this->addColumn($this->lng->txt("role"), "title");
45 $this->addColumn($this->lng->txt("description"), "description");
46 $this->addColumn($this->lng->txt("context"), "context");
47 $this->addColumn($this->lng->txt('path'), 'path');
48 $this->initFilter();
49 $this->setEnableHeader(true);
50 $this->setRowTemplate("tpl.role_assignment_row.html", "Services/User");
51 $this->setEnableTitle(true);
52
53 if ($rbacsystem->checkAccess("edit_roleassignment", USER_FOLDER_ID)) {
54 $this->setSelectAllCheckbox("role_id[]");
55 $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
56 $this->addMultiCommand("assignSave", $lng->txt("change_assignment"));
57 }
58
59 $this->path_gui = new ilPathGUI();
60 $this->getPathGUI()->enableTextOnly(false);
61 $this->getPathGUI()->enableHideLeaf(false);
62 }
63
67 public function getPathGUI()
68 {
69 return $this->path_gui;
70 }
71
75 public function initFilter()
76 {
77 global $DIC;
78
79 $lng = $DIC['lng'];
80
81 // roles
82 $option[0] = $lng->txt('assigned_roles');
83 $option[1] = $lng->txt('all_roles');
84 $option[2] = $lng->txt('all_global_roles');
85 $option[3] = $lng->txt('all_local_roles');
86 $option[4] = $lng->txt('internal_local_roles_only');
87 $option[5] = $lng->txt('non_internal_local_roles_only');
88
89 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
90 $si = new ilSelectInputGUI($lng->txt("roles"), "role_filter");
91 $si->setOptions($option);
92 $this->addFilterItem($si);
93 $si->readFromSession();
94 $this->filter["role_filter"] = $si->getValue();
95 }
96
100 protected function fillRow($a_set)
101 {
102 if (isset($a_set['checkbox']['id'])) {
103 $this->tpl->setVariable('VAL_ID', $a_set['checkbox']['id']);
104 if ($a_set['checkbox']['disabled']) {
105 $this->tpl->setVariable('VAL_DISABLED', 'disabled="disabled"');
106 }
107 if ($a_set['checkbox']['checked']) {
108 $this->tpl->setVariable('VAL_CHECKED', 'checked="checked"');
109 }
110 }
111
112 $this->ctrl->setParameterByClass("ilobjrolegui", "ref_id", $a_set['ref_id']);
113 $this->ctrl->setParameterByClass("ilobjrolegui", "obj_id", $a_set["obj_id"]);
114
115 $this->tpl->setVariable(
116 'ROLE',
117 $this->renderer->render(
118 $this->factory->link()->standard(
119 ilObjRole::_getTranslation($a_set['title']),
120 $this->ctrl->getLinkTargetByClass(ilObjRoleGUI::class, 'perm')
121 )
122 )
123 );
124 $this->tpl->setVariable('DESCRIPTION', $a_set['description']);
125 // Add link to objector local Rores
126 $context = $a_set['context'];
127 if ($a_set['role_type'] === 'local') {
128 $context = $this->renderer->render(
129 $this->factory->link()->standard(
130 $context,
132 $a_set['ref_id'],
134 )
135 )
136 );
137 }
138 $this->tpl->setVariable('CONTEXT', $context);
139 $this->tpl->setVariable('PATH', $a_set['path']);
140 }
141
142 public function parse(int $usr_id)
143 {
144 global $DIC;
145
146 $rbacreview = $DIC->rbac()->review();
147 $tree = $DIC->repositoryTree();
148 $ilUser = $DIC->user();
149
150
151 // now get roles depending on filter settings
152 $role_list = $rbacreview->getRolesByFilter($this->filter["role_filter"], $usr_id);
153 $assigned_roles = $rbacreview->assignedRoles($usr_id);
154
155 $counter = 0;
156
157 $records = [];
158 foreach ($role_list as $role) {
159 // fetch context path of role
160 $rolf = $rbacreview->getFoldersAssignedToRole($role["obj_id"], true);
161 $ref_id = $rbacreview->getObjectReferenceOfRole($role['rol_id']);
162
163 // only list roles that are not set to status "deleted"
164 if ($rbacreview->isDeleted($rolf[0])) {
165 continue;
166 }
167
168 $context = "";
169 if ($tree->isInTree($rolf[0])) {
170 if ($rolf[0] == ROLE_FOLDER_ID) {
171 $context = $this->lng->txt("global");
172 } else {
173 $tmpPath = $tree->getPathFull($rolf[0]);
174 $context = $this->getTitleForReference($ref_id);
175 }
176 } else {
177 $context = "<b>Rolefolder " . $rolf[0] . " not found in tree! (Role " . $role["obj_id"] . ")</b>";
178 }
179
180 $disabled = false;
181 // disable checkbox for system role for the system user
182 if (
183 ($usr_id === (int) SYSTEM_USER_ID && $role["obj_id"] === SYSTEM_ROLE_ID) ||
184 (!in_array(SYSTEM_ROLE_ID, $rbacreview->assignedRoles($ilUser->getId())) && $role["obj_id"] === (int) SYSTEM_ROLE_ID)
185 ) {
186 $disabled = true;
187 }
188
189 // protected admin role
190 if ($role['obj_id'] == SYSTEM_ROLE_ID && !$rbacreview->isAssigned($ilUser->getId(), SYSTEM_ROLE_ID)) {
191 if (ilSecuritySettings::_getInstance()->isAdminRoleProtected()) {
192 $disabled = true;
193 }
194 }
195
196 if (substr($role["title"], 0, 3) == "il_") {
197 if (!$assignable) {
198 $rolf_arr = $rbacreview->getFoldersAssignedToRole($role["obj_id"], true);
199 $rolf2 = $rolf_arr[0];
200 } else {
201 $rolf2 = $rolf;
202 }
203
204 $parent_node = $tree->getNodeData($rolf2);
205
206 $role["description"] = $this->lng->txt("obj_" . $parent_node["type"]) . "&nbsp;(#" . $parent_node["obj_id"] . ")";
207 }
208
209 $role_ids[$counter] = $role["obj_id"];
210
211 $checkbox = [
212 'id' => $role['obj_id'],
213 'disabled' => $disabled,
214 'checked' => in_array($role['obj_id'], $assigned_roles)
215 ];
216
217 $title = ilObjRole::_getTranslation($role["title"]);
218
219 $records[] = [
220 "path" => $path,
221 "description" => $role["description"],
222 "context" => $context,
223 "checkbox" => $checkbox,
224 "role_type" => $role["role_type"],
225 "ref_id" => $ref_id,
226 "obj_id" => $role["obj_id"],
227 "title" => $title,
228 'path' => $this->getPathGUI()->getPath(ROOT_FOLDER_ID, $ref_id)
229 ];
230 ++$counter;
231 }
232 $this->setData($records);
233 }
234
239 protected function getTitleForReference(int $ref_id) : string
240 {
241 $type = ilObject::_lookupType($ref_id, true);
242 $obj_id = ilObject::_lookupObjId($ref_id);
244
246 $list->initItem(
247 $ref_id,
248 $obj_id,
249 $type,
250 $title
251 );
252
254 $title = $list->getTitle();
256 return (string) $title;
257 }
258}
An exception for terminatinating execution or to throw for unit testing.
static resetToDefaults()
reset to defaults
static setUseRelativeDates($a_status)
set use relative dates
static _getTranslation($a_role_title)
static _getListGUIByType( $type, $context=ilObjectListGUI::CONTEXT_REPOSITORY)
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
Creates a path for a start and endnode.
TableGUI class for role assignment in user administration.
__construct($a_parent_obj, $a_parent_cmd)
Constructor.
static _getInstance()
Get instance of ilSecuritySettings.
This class represents a selection list property in a property form.
Class ilTable2GUI.
setEnableHeader($a_enableheader)
Set Enable Header.
setDisableFilterHiding($a_val=true)
Set disable filter hiding.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
setData($a_data)
set table data @access public
setEnableTitle($a_enabletitle)
Set Enable Title.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
addColumn( $a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
const SYSTEM_ROLE_ID
Definition: constants.php:27
const USER_FOLDER_ID
Definition: constants.php:31
const SYSTEM_USER_ID
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: constants.php:24
const ROLE_FOLDER_ID
Definition: constants.php:32
const ROOT_FOLDER_ID
Definition: constants.php:30
filter()
Definition: filter.php:2
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$type