ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilAssignedUsersTableGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use ILIAS\UI\Factory as UIFactory;
23use ILIAS\UI\Component\Link\Standard as StandardLink;
24
31{
32 public function __construct(
33 object $parent_obj,
34 string $parent_cmd,
35 private UIFactory $ui_factory,
36 private Renderer $ui_renderer,
37 private int $role_id,
38 private bool $role_assignment_editable = true,
39 private bool $is_administration_context = false
40 ) {
41 $this->setId('rbac_ua_' . $role_id);
42
44
45 $this->addColumn('', '', '1', true);
46 $this->addColumn($this->lng->txt('login'), 'login', '29%');
47 $this->addColumn($this->lng->txt('firstname'), 'firstname', '29%');
48 $this->addColumn($this->lng->txt('lastname'), 'lastname', '29%');
49 $this->addColumn($this->lng->txt('actions'), '', '13%');
50
51 $this->setExternalSorting(true);
52 $this->setExternalSegmentation(true);
53 $this->setEnableHeader(true);
54 $this->setFormAction($this->ctrl->getFormAction($parent_obj, $parent_cmd));
55 $this->setRowTemplate('tpl.user_assignment_row.html', 'components/ILIAS/AccessControl');
56
57 $this->setEnableTitle(true);
58 $this->setDefaultOrderField('login');
59 $this->setDefaultOrderDirection('asc');
60
61 $this->setShowRowsSelector(true);
62
63 if ($this->role_assignment_editable) {
64 $this->addMultiCommand('deassignUser', $this->lng->txt('remove'));
65 }
66
67 $this->setSelectAllCheckbox('user_id[]');
68 $this->lng->loadLanguageModule('user');
69 $this->addMultiCommand(
70 'addToClipboard',
71 $this->lng->txt('clipboard_add_btn')
72 );
73 $this->getItems();
74 }
75
79 public function getRoleId(): int
80 {
81 return $this->role_id;
82 }
83
87 public function isRoleAssignmentEditable(): bool
88 {
89 return $this->role_assignment_editable;
90 }
91
95 public function getItems(): void
96 {
101 $this->getOffset(),
102 $this->getLimit(),
103 '',
104 '',
105 null,
106 false,
107 false,
108 0,
109 $this->getRoleId()
110 );
111 $this->setMaxCount((int) $usr_data['cnt']);
112 $this->setData((array) $usr_data['set']);
113 }
114
118 protected function fillRow(array $user_row): void
119 {
120 $this->tpl->setVariable('VAL_FIRSTNAME', $user_row['firstname']);
121 $this->tpl->setVariable('VAL_LASTNAME', $user_row['lastname']);
122
123 if ($user_row['usr_id'] !== SYSTEM_USER_ID
124 && ($user_row['usr_id'] !== ANONYMOUS_USER_ID || $this->getRoleId() !== ANONYMOUS_ROLE_ID)
125 && $this->isRoleAssignmentEditable()) {
126 $this->tpl->setVariable('ID', $user_row['usr_id']);
127 }
128
129 $actions = $this->getActions($user_row['login'], $user_row['usr_id']);
130
131 $login_entry = $user_row['login'];
132
133 if ($this->is_administration_context) {
134 $login_entry = $this->ui_renderer->render(
135 $this->getChangeLink($user_row['usr_id'], $user_row['login'])
136 );
137 }
138
139 $this->tpl->setVariable('VAL_LOGIN', $login_entry);
140
141 $actions_dropdown = $this->ui_factory->dropdown()->standard($actions)
142 ->withLabel($this->lng->txt('actions'));
143
144 $this->tpl->setVariable(
145 'VAL_ACTIONS',
146 $this->ui_renderer->render($actions_dropdown)
147 );
148 }
149
154 private function getActions(string $login, int $usr_id): array
155 {
156 $actions = [];
157
158 $actions[] = $this->getContactLink($login);
159
160 if ($this->is_administration_context) {
161 $actions[] = $this->getChangeLink($usr_id, $this->lng->txt('edit'));
162 }
163
164 if (($this->getRoleId() !== SYSTEM_ROLE_ID || $usr_id !== SYSTEM_USER_ID)
165 && ($this->getRoleId() !== ANONYMOUS_ROLE_ID || $usr_id !== ANONYMOUS_USER_ID)
166 && $this->isRoleAssignmentEditable()) {
167 $actions[] = $this->getLeaveLink($usr_id);
168 }
169
170 return $actions;
171 }
172
173 private function getContactLink(string $login): StandardLink
174 {
175 $contact_link = ilMailFormCall::getLinkTarget(
176 $this->getParentObject(),
177 $this->getParentCmd(),
178 ['fr' => rawurlencode(base64_encode($this->ctrl->getLinkTarget(
179 $this->getParentObject(),
180 'userassignment',
181 '',
182 false,
183 false
184 )))
185 ],
186 ['type' => 'new', 'rcp_to' => $login]
187 );
188
189 return $this->ui_factory->link()->standard(
190 $this->lng->txt('message'),
191 $contact_link
192 );
193 }
194
195 private function getChangeLink(int $usr_id, string $label): StandardLink
196 {
197 $this->ctrl->setParameterByClass('ilobjusergui', 'ref_id', 7);
198 $this->ctrl->setParameterByClass('ilobjusergui', 'obj_id', $usr_id);
199 $change_link = $this->ctrl->getLinkTargetByClass(['iladministrationgui', 'ilobjusergui'], 'view');
200 return $this->ui_factory->link()->standard(
201 $label,
202 $change_link
203 );
204 }
205
206 private function getLeaveLink(int $usr_id): StandardLink
207 {
208 $this->ctrl->setParameter($this->getParentObject(), 'user_id', $usr_id);
209 $link_leave = $this->ctrl->getLinkTarget($this->getParentObject(), 'deassignUser');
210
211 return $this->ui_factory->link()->standard(
212 $this->lng->txt('remove'),
213 $link_leave
214 );
215 }
216}
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
TableGUI class for role administration.
getChangeLink(int $usr_id, string $label)
isRoleAssignmentEditable()
Check if role assignment is editable.
__construct(object $parent_obj, string $parent_cmd, private UIFactory $ui_factory, private Renderer $ui_renderer, private int $role_id, private bool $role_assignment_editable=true, private bool $is_administration_context=false)
getActions(string $login, int $usr_id)
fillRow(array $user_row)
Fill table row.
static getLinkTarget( $gui, string $cmd, array $gui_params=[], array $mail_params=[], array $context_params=[])
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
determineOffsetAndOrder(bool $a_omit_offset=false)
setExternalSegmentation(bool $a_val)
setEnableTitle(bool $a_enabletitle)
addMultiCommand(string $a_cmd, string $a_text)
setFormAction(string $a_form_action, bool $a_multipart=false)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
setEnableHeader(bool $a_enableheader)
setDefaultOrderField(string $a_defaultorderfield)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
setExternalSorting(bool $a_val)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setId(string $a_val)
setDefaultOrderDirection(string $a_defaultorderdirection)
setData(array $a_data)
Set table data.
setMaxCount(int $a_max_count)
set max.
static getUserListData(string $a_order_field, string $a_order_dir, int $a_offset, int $a_limit, string $a_string_filter="", string $a_activation_filter="", ?ilDateTime $a_last_login_filter=null, bool $a_limited_access_filter=false, bool $a_no_courses_filter=false, int $a_course_group_filter=0, int $a_role_filter=0, ?array $a_user_folder_filter=null, ?array $a_additional_fields=null, ?array $a_user_filter=null, string $a_first_letter="", string $a_authentication_filter="")
Get data for user administration list.
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
const SYSTEM_ROLE_ID
Definition: constants.php:29
const ANONYMOUS_ROLE_ID
Definition: constants.php:28
const SYSTEM_USER_ID
This file contains constants for PHPStan analyis, see: https://phpstan.org/config-reference#constants...
Definition: constants.php:26
const ANONYMOUS_USER_ID
Definition: constants.php:27
An entity that renders components to a string output.
Definition: Renderer.php:31
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc