ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilLearningSequenceParticipantsTableGUI.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
9{
14
18 protected $current_filter = array();
19
20 public function __construct(
22 ilObjLearningSequence $ls_object,
23 ilObjUserTracking $obj_user_tracking,
24 ilPrivacySettings $privacy_settings,
26 ilAccess $access,
27 ilRbacReview $rbac_review,
28 ilSetting $settings
29 ) {
30 $this->parent_gui = $parent_gui;
31 $this->rep_object = $ls_object;
32 $this->show_learning_progress = $show_learning_progress;
33
34 $this->obj_user_tracking = $obj_user_tracking;
35 $this->privacy_settings = $privacy_settings;
36 $this->lng = $lng;
37 $this->access = $access;
38 $this->rbac_review = $rbac_review;
39 $this->settings = $settings;
40
41 $this->lng->loadLanguageModule('lso');
42 $this->lng->loadLanguageModule('trac');
43 $this->lng->loadLanguageModule('rbac');
44 $this->lng->loadLanguageModule('mmbr');
45 $this->lng->loadLanguageModule('user');
46 $this->lng->loadLanguageModule('ps');
47
48 $this->participants = $ls_object->getLSParticipants();
49
50 $this->setPrefix('participants');
51
52 $this->setId('lso_' . $this->getRepositoryObject()->getId());
53 parent::__construct($parent_gui, 'participants');
54
55 $this->initSettings();
56 $this->initForm();
57 }
58
59 protected function initForm()
60 {
61 $this->setFormName('participants');
62 $this->setDefaultOrderField('roles');
63 $this->setRowTemplate("tpl.show_participants_row.html", "Modules/LearningSequence");
64 $this->setShowRowsSelector(true);
65 $this->setSelectAllCheckbox('participants');
66
67 $this->addColumn('', 'f', "1");
68 $this->addColumn($this->lng->txt('name'), 'lastname', '20%');
69 $this->addColumn($this->lng->txt('login'), 'login');
70
71 $all_cols = $this->getSelectableColumns();
72 foreach ($this->getSelectedColumns() as $col) {
73 $this->addColumn($all_cols[$col]['txt'], $col);
74 }
75
76 if (
77 $this->obj_user_tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS) &&
79 ) {
80 $this->addColumn($this->lng->txt('first_access'), "first_access");
81 $this->addColumn($this->lng->txt('last_access'), "last_access");
82 }
83 $this->addColumn($this->lng->txt('completed_steps'), "completed_steps");
84 $this->addColumn($this->lng->txt('last_visited_step'), "last_visited_step");
85 $this->addColumn($this->lng->txt('lso_notification'), 'notification');
86 $this->addColumn($this->lng->txt(''), 'optional');
87
88 $this->enable('sort');
89 $this->enable('header');
90 $this->enable('numinfo');
91 $this->enable('select_all');
92
93 $this->initFilter();
94
95 $this->addMultiCommand('editParticipants', $this->lng->txt('edit'));
96 $this->addMultiCommand('confirmDeleteParticipants', $this->lng->txt('remove'));
97 $this->addMultiCommand('sendMailToSelectedUsers', $this->lng->txt('mmbr_btn_mail_selected_users'));
98 $this->addMultiCommand('addToClipboard', $this->lng->txt('clipboard_add_btn'));
99 $this->addCommandButton('updateParticipantsStatus', $this->lng->txt('save'));
100 }
101
102 public function fillRow($set)
103 {
104 $this->tpl->setVariable('VAL_ID', $set['usr_id']);
105 $this->tpl->setVariable('VAL_NAME', $set['lastname'] . ', ' . $set['firstname']);
106 $this->tpl->setVariable('VAL_LOGIN', $set['login']);
107
108 if (
109 !$this->access->checkAccessOfUser($set['usr_id'], 'read', '', $this->getRepositoryObject()->getRefId()) &&
110 is_array($info = $this->access->getInfo())
111 ) {
112 $this->tpl->setCurrentBlock('access_warning');
113 $this->tpl->setVariable('PARENT_ACCESS', $info[0]['text']);
114 $this->tpl->parseCurrentBlock();
115 }
116
117 if (!ilObjUser::_lookupActive($set['usr_id'])) {
118 $this->tpl->setCurrentBlock('access_warning');
119 $this->tpl->setVariable('PARENT_ACCESS', $this->lng->txt('usr_account_inactive'));
120 $this->tpl->parseCurrentBlock();
121 }
122
123 foreach ($this->getSelectedColumns() as $field) {
124 switch ($field) {
125 case 'prtf':
126 $tmp = array();
127 if (is_array($set['prtf'])) {
128 foreach ($set['prtf'] as $prtf_url => $prtf_txt) {
129 $tmp[] = '<a href="' . $prtf_url . '">' . $prtf_txt . '</a>';
130 }
131 }
132 $this->tpl->setCurrentBlock('custom_fields');
133 $this->tpl->setVariable('VAL_CUST', (string) implode('<br />', $tmp));
134 $this->tpl->parseCurrentBlock();
135 break;
136 case 'roles':
137 $this->tpl->setCurrentBlock('custom_fields');
138 $this->tpl->setVariable('VAL_CUST', (string) $set['roles_label']);
139 $this->tpl->parseCurrentBlock();
140 break;
141 case 'org_units':
142 $this->tpl->setCurrentBlock('custom_fields');
143 $this->tpl->setVariable('VAL_CUST', (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($set['usr_id']));
144 $this->tpl->parseCurrentBlock();
145 break;
146 default:
147 $this->tpl->setCurrentBlock('custom_fields');
148 $this->tpl->setVariable('VAL_CUST', isset($set[$field]) ? (string) $set[$field] : '');
149 $this->tpl->parseCurrentBlock();
150 break;
151 }
152 }
153
154 $this->tpl->setVariable('VAL_POSTNAME', 'participants');
155 $this->tpl->setVariable('FIRST_ACCESS', $this->getFirstAccess((int) $set['usr_id']));
156 $this->tpl->setVariable('LAST_ACCESS', $this->getLastAccess((int) $set['usr_id']));
157 $this->tpl->setVariable('COMPLETED_STEPS', $this->getCompletedSteps((int) $set['usr_id']));
158 $this->tpl->setVariable('LAST_VISITED_STEP', $this->getLastVisitedStep((int) $set['usr_id']));
159
160 if ($this->getParticipants()->isAdmin($set['usr_id'])) {
161 $this->tpl->setVariable('VAL_NOTIFICATION_ID', $set['usr_id']);
162 $this->tpl->setVariable(
163 'VAL_NOTIFICATION_CHECKED',
164 $set['notification'] ? 'checked="checked"' : ''
165 );
166 }
167
168 $this->showActionLinks($set);
169 $this->tpl->setVariable('VAL_LOGIN', $set['login']);
170 }
171
172 protected function getFirstAccess(int $user_id)
173 {
174 $data = $this->getRepositoryObject()->getStateDB()->getFirstAccessFor(
175 (int) $this->getRepositoryObject()->getRefId(),
176 array($user_id)
177 );
178
179 if ($data[$user_id] === -1) {
180 return "-";
181 }
182
183 return $data[$user_id];
184 }
185
186 protected function getLastAccess(int $user_id)
187 {
188 $data = $this->getRepositoryObject()->getStateDB()->getLastAccessFor(
189 (int) $this->getRepositoryObject()->getRefId(),
190 array($user_id)
191 );
192
193 if ($data[$user_id] === -1) {
194 return "-";
195 }
196
197 return $data[$user_id];
198 }
199
200 protected function getCompletedSteps(int $user_id)
201 {
202 $passed = 0;
203 $learner_items = array();
204
205 $learner_items = $this->getRepositoryObject()->getLSLearnerItems(
206 $user_id
207 );
208
209 $completion_states = $this->rep_object->getLPCompletionStates();
210
211 foreach ($learner_items as $learner_item) {
212 if (in_array($learner_item->getLearningProgressStatus(), $completion_states)) {
213 $passed++;
214 }
215 }
216
217 return $passed . " / " . count($learner_items);
218 }
219
225 protected function getLastVisitedStep(int $user_id)
226 {
227 $data = $this->getRepositoryObject()->getStateDB()->getCurrentItemsFor(
228 (int) $this->getRepositoryObject()->getRefId(),
229 array($user_id)
230 );
231
232 if ($data[$user_id] === -1) {
233 return "-";
234 }
235
236 return $this->getTitleFor((int) $data[$user_id]);
237 }
238
239 protected function getTitleFor(int $ref_id) : string
240 {
242 }
243
244 public function parse()
245 {
246 $this->determineOffsetAndOrder(true);
247
248 $ls_participants = $this->participants->getParticipants();
249
250 $ls_participants = $this->access->filterUserIdsByRbacOrPositionOfCurrentUser(
251 'manage_members',
252 'manage_members',
253 $this->getRepositoryObject()->getRefId(),
254 $ls_participants
255 );
256
257 if (!$ls_participants) {
258 $this->setData(array());
259 return;
260 }
261
262 $lso_user_data = $this->parent_gui->readMemberData(
263 $ls_participants,
264 $this->getSelectedColumns()
265 );
266
267 $additional_fields = $this->getSelectedColumns();
268 unset($additional_fields['prtf']);
269 unset($additional_fields['roles']);
270 unset($additional_fields['org_units']);
271
272 $udf_ids = $usr_data_fields = $odf_ids = array();
273 foreach ($additional_fields as $field) {
274 if (substr($field, 0, 3) == 'udf') {
275 $udf_ids[] = substr($field, 4);
276 continue;
277 }
278
279 if (substr($field, 0, 3) == 'odf') {
280 $odf_ids[] = substr($field, 4);
281 continue;
282 }
283
284 $usr_data_fields[] = $field;
285 }
286
288 $this->getOrderField(),
289 $this->getOrderDirection(),
290 0,
291 9999,
292 $this->current_filter['login'],
293 '',
294 null,
295 false,
296 false,
297 0,
298 0,
299 null,
300 $usr_data_fields,
301 $ls_participants
302 );
303
304 $user_data = array();
305 $filtered_user_ids = array();
306 $local_roles = $this->parent_gui->getLocalRoles();
307
308 foreach ($usr_data['set'] as $ud) {
309 $user_id = $ud['usr_id'];
310
311 if ($this->current_filter['roles']) {
312 if (!$this->rbac_review->isAssigned($user_id, $this->current_filter['roles'])) {
313 continue;
314 }
315 }
316
317 if ($this->current_filter['org_units']) {
318 $org_unit = $this->current_filter['org_units'];
319 $title = ilObjectFactory::getInstanceByRefId($org_unit)->getTitle();
320 $user_units = (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($user_id);
321 if (strpos($user_units, $title) === false) {
322 continue;
323 }
324 }
325
326 $filtered_user_ids[] = $user_id;
327 $user_data[$user_id] = array_merge($ud, (array) $lso_user_data[$user_id]);
328
329 $roles = array();
330 foreach ($local_roles as $role_id => $role_name) {
331 if ($this->rbac_review->isAssigned($user_id, $role_id)) {
332 $roles[] = $role_name;
333 }
334 }
335
336 $user_data[$user_id]['name'] = $user_data[$user_id]['lastname'] . ', ' . $user_data[$user_id]['firstname'];
337 $user_data[$user_id]['roles_label'] = implode('<br />', $roles);
338 $user_data[$user_id]['roles'] = $this->participants->setRoleOrderPosition($user_id);
339 }
340
341 // Custom user data fields
342 if ($udf_ids) {
343 $data = ilUserDefinedData::lookupData($ls_participants, $udf_ids);
344 foreach ($data as $usr_id => $fields) {
345 if (!$this->checkAcceptance($usr_id)) {
346 continue;
347 }
348
349 foreach ($fields as $field_id => $value) {
350 $user_data[$usr_id]['udf_' . $field_id] = $value;
351 }
352 }
353 }
354
355 $user_data = ilUtil::sortArray(
356 $user_data,
357 'name',
358 $this->getOrderDirection()
359 );
360
361 return $this->setData($user_data);
362 }
363
364 public function getSelectableColumns()
365 {
366 $ef = $this->getExportFieldsInfo();
367 $columns = array();
368 $columns = $ef->getSelectableFieldsInfo(
369 $this->getRepositoryObject()->getId()
370 );
371
372 if ($this->settings->get('user_portfolios')) {
373 $columns['prtf'] = array(
374 'txt' => $this->lng->txt('obj_prtf'),
375 'default' => false
376 );
377 }
378
379 $columns = array_merge(
380 array(
381 'roles' => array(
382 'txt' => $this->lng->txt('objs_role'),
383 'default' => true
384 )
385 ),
386 array(
387 'org_units' => array(
388 'txt' => $this->lng->txt("org_units"),
389 'default' => false
390 )
391 ),
393 );
394
395 return $columns;
396 }
397
398 protected function getExportFieldsInfo()
399 {
401 $this->getRepositoryObject()->getType()
402 );
403 }
404}
if(! $in) $columns
Definition: Utf8Test.php:45
An exception for terminatinating execution or to throw for unit testing.
Class ilAccessHandler.
static _getInstanceByType($a_type)
Get Singleton Instance.
language handling
GUI class for learning sequence membership features.
__construct(ilLearningSequenceMembershipGUI $parent_gui, ilObjLearningSequence $ls_object, ilObjUserTracking $obj_user_tracking, ilPrivacySettings $privacy_settings, ilLanguage $lng, ilAccess $access, ilRbacReview $rbac_review, ilSetting $settings)
getLastVisitedStep(int $user_id)
Different to the concept we decide to use the title of the object instead of its actually number in t...
Class ilObjLearningSequence.
static _enabledLearningProgress()
check wether learing progress is enabled or not
static _lookupActive($a_usr_id)
Check user account active.
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
showActionLinks($a_set)
show edit links
checkAcceptance($a_usr_id)
Check acceptance.
Singleton class that stores all privacy settings.
class ilRbacReview Contains Review functions of core Rbac.
ILIAS Setting Class.
getSelectedColumns()
Get selected columns.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setPrefix($a_prefix)
set prefix for sort and offset fields (if you have two or more tables on a page that you want to sort...
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
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.
getId()
Get element id.
setData($a_data)
set table data @access public
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
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.
setFormName($a_formname="")
Set Form name.
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
getOrderDirection()
Get order direction.
enable($a_module_name)
enables particular modules of table
static lookupData($a_user_ids, $a_field_ids)
Lookup data.
static getUserListData( $a_order_field, $a_order_dir, $a_offset, $a_limit, $a_string_filter="", $a_activation_filter="", $a_last_login_filter=null, $a_limited_access_filter=false, $a_no_courses_filter=false, $a_course_group_filter=0, $a_role_filter=0, $a_user_folder_filter=null, $a_additional_fields='', $a_user_filter=null, $a_first_letter="", $a_authentication_filter=null)
Get data for user administration list.
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
$info
Definition: index.php:5
settings()
Definition: settings.php:2