ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilAssignedUsersTableGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
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 
43  parent::__construct($parent_obj, $parent_cmd);
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  {
97  $this->determineOffsetAndOrder();
98  $usr_data = ilUserQuery::getUserListData(
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 }
setData(array $a_data)
fillRow(array $user_row)
Fill table row.
const ANONYMOUS_USER_ID
Definition: constants.php:27
setFormAction(string $a_form_action, bool $a_multipart=false)
setEnableTitle(bool $a_enabletitle)
const SYSTEM_ROLE_ID
Definition: constants.php:29
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
const SYSTEM_USER_ID
This file contains constants for PHPStan analyis, see: https://phpstan.org/config-reference#constants...
Definition: constants.php:26
getChangeLink(int $usr_id, string $label)
static getLinkTarget( $gui, string $cmd, array $gui_params=[], array $mail_params=[], array $context_params=[])
__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)
setId(string $a_val)
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.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
getActions(string $login, int $usr_id)
setExternalSorting(bool $a_val)
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
setDefaultOrderField(string $a_defaultorderfield)
isRoleAssignmentEditable()
Check if role assignment is editable.
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setDefaultOrderDirection(string $a_defaultorderdirection)
const ANONYMOUS_ROLE_ID
Definition: constants.php:28
__construct(Container $dic, ilPlugin $plugin)
TableGUI class for role administration.
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)
addMultiCommand(string $a_cmd, string $a_text)
determineOffsetAndOrder(bool $a_omit_offset=false)
setEnableHeader(bool $a_enableheader)
setMaxCount(int $a_max_count)
set max.
setExternalSegmentation(bool $a_val)