ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilUserTableGUI.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
16{
18 const MODE_LOCAL_USER = 2;
19
20 private $mode = null;
21 private $user_folder_id = 0;
22
26 function __construct($a_parent_obj, $a_parent_cmd, $a_mode = self::MODE_USER_FOLDER, $a_load_items = true)
27 {
28 global $ilCtrl, $lng, $ilAccess, $lng, $rbacsystem;
29
30 $this->user_folder_id = $a_parent_obj->object->getRefId();
31
32 $this->setMode($a_mode);
33 $this->setId("user".$this->getUserFolderId());
34
35 parent::__construct($a_parent_obj, $a_parent_cmd);
36// $this->setTitle($this->lng->txt("users"));
37
38 $this->addColumn("", "", "1", true);
39 $this->addColumn($this->lng->txt("login"), "login");
40
41 foreach ($this->getSelectedColumns() as $c)
42 {
43 $this->addColumn($this->lng->txt($c), $c);
44 }
45
46 if($this->getMode() == self::MODE_LOCAL_USER)
47 {
48 $this->addColumn($this->lng->txt('context'),'time_limit_owner');
49 $this->addColumn($this->lng->txt('role_assignment'));
50 }
51
52 $this->setShowRowsSelector(true);
53 $this->setExternalSorting(true);
54 $this->setExternalSegmentation(true);
55 $this->setEnableHeader(true);
56 $this->setFormAction($ilCtrl->getFormAction($this->parent_obj, "applyFilter"));
57 $this->setRowTemplate("tpl.user_list_row.html", "Services/User");
58 //$this->disable("footer");
59 $this->setEnableTitle(true);
60 $this->initFilter();
61 $this->setFilterCommand("applyFilter");
62 $this->setDefaultOrderField("login");
63 $this->setDefaultOrderDirection("asc");
64
65 $this->setSelectAllCheckbox("id[]");
66 $this->setTopCommands(true);
67
68
69 if($this->getMode() == self::MODE_USER_FOLDER)
70 {
71 $this->setEnableAllCommand(true);
72
73 $cmds = $a_parent_obj->getUserMultiCommands();
74 foreach($cmds as $cmd => $caption)
75 {
76 $this->addMultiCommand($cmd, $caption);
77 }
78 }
79 else
80 {
81 $this->addMultiCommand("deleteUsers", $lng->txt("delete"));
82 }
83
84 if($a_load_items)
85 {
86 $this->getItems();
87 }
88 }
89
90 protected function setMode($a_mode)
91 {
92 $this->mode = $a_mode;
93 }
94
95 protected function getMode()
96 {
97 return $this->mode;
98 }
99
100 protected function getUserFolderId()
101 {
103 }
104
105
106
114 {
115 global $lng;
116
117 include_once("./Services/User/classes/class.ilUserProfile.php");
118 $up = new ilUserProfile();
119 $up->skipGroup("preferences");
120 $up->skipGroup("interests");
121 $up->skipGroup("settings");
122
123 // default fields
124 $cols = array();
125
126 // first and last name cannot be hidden
127 $cols["firstname"] = array(
128 "txt" => $lng->txt("firstname"),
129 "default" => true);
130 $cols["lastname"] = array(
131 "txt" => $lng->txt("lastname"),
132 "default" => true);
133
134 if($this->getMode() == self::MODE_USER_FOLDER)
135 {
136 $ufs = $up->getStandardFields();
137
138 $cols["access_until"] = array(
139 "txt" => $lng->txt("access_until"),
140 "default" => true);
141 $cols["last_login"] = array(
142 "txt" => $lng->txt("last_login"),
143 "default" => true);
144
145 // #13967
146 $cols["create_date"] = array(
147 "txt" => $lng->txt("create_date"));
148 $cols["approve_date"] = array(
149 "txt" => $lng->txt("approve_date"));
150 $cols["agree_date"] = array(
151 "txt" => $lng->txt("agree_date"));
152 }
153 else
154 {
155 $ufs = $up->getLocalUserAdministrationFields();
156 }
157
158 // email should be the 1st "optional" field (can be hidden)
159 if(isset($ufs["email"]))
160 {
161 $cols["email"] = array(
162 "txt" => $lng->txt("email"),
163 "default" => true);
164 }
165
166 // other user profile fields
167 foreach ($ufs as $f => $fd)
168 {
169 if (!isset($cols[$f]) && !$fd["lists_hide"])
170 {
171 // #18795
172 $caption = $fd["lang_var"]
173 ? $fd["lang_var"]
174 : $f;
175 $cols[$f] = array(
176 "txt" => $lng->txt($caption),
177 "default" => false);
178 }
179 }
180
181 // fields that are always shown
182 unset($cols["username"]);
183
184 return $cols;
185 }
186
190 function getItems()
191 {
192 global $lng;
193//if ($GLOBALS["kk"]++ == 1) nj();
194
196
197 if($this->getMode() == self::MODE_USER_FOLDER)
198 {
199 // All accessible users
200 include_once './Services/User/classes/class.ilLocalUser.php';
201 $user_filter = ilLocalUser::_getFolderIds();
202 }
203 else
204 {
205 if($this->filter['time_limit_owner'])
206 {
207 $user_filter = array($this->filter['time_limit_owner']);
208 }
209 else
210 {
211 // All accessible users
212 include_once './Services/User/classes/class.ilLocalUser.php';
213 $user_filter = ilLocalUser::_getFolderIds();
214 }
215 }
216
217 //#13221 don't show all users if user filter is empty!
218 if(!count($user_filter))
219 {
220 $this->setMaxCount(0);
221 $this->setData(array());
222 return;
223 }
224
225 include_once("./Services/User/classes/class.ilUserQuery.php");
226
227 $additional_fields = $this->getSelectedColumns();
228 unset($additional_fields["firstname"]);
229 unset($additional_fields["lastname"]);
230 unset($additional_fields["email"]);
231 unset($additional_fields["last_login"]);
232 unset($additional_fields["access_until"]);
233 unset($additional_fields['org_units']);
234
235 $query = new ilUserQuery();
236 $query->setOrderField($this->getOrderField());
237 $query->setOrderDirection($this->getOrderDirection());
238 $query->setOffset($this->getOffset());
239 $query->setLimit($this->getLimit());
240 $query->setTextFilter($this->filter['query']);
241 $query->setActionFilter($this->filter['activation']);
242 $query->setLastLogin($this->filter['last_login']);
243 $query->setLimitedAccessFilter($this->filter['limited_access']);
244 $query->setNoCourseFilter($this->filter['no_courses']);
245 $query->setNoGroupFilter($this->filter['no_groups']);
246 $query->setCourseGroupFilter($this->filter['course_group']);
247 $query->setRoleFilter($this->filter['global_role']);
248 $query->setAdditionalFields($additional_fields);
249 $query->setUserFolder($user_filter);
250 $query->setFirstLetterLastname(ilUtil::stripSlashes($_GET['letter']));
251
252 $usr_data = $query->query();
253
254
255 if (count($usr_data["set"]) == 0 && $this->getOffset() > 0)
256 {
257 $this->resetOffset();
258 $query->setOffset($this->getOffset());
259 $usr_data = $query->query();
260 }
261
262 foreach ($usr_data["set"] as $k => $user)
263 {
264 if(in_array('org_units', $this->getSelectedColumns()))
265 {
266 $usr_data['set'][$k]['org_units'] = ilObjUser::lookupOrgUnitsRepresentation($user['usr_id']);
267 }
268
269
270 $current_time = time();
271 if ($user['active'])
272 {
273 if ($user["time_limit_unlimited"])
274 {
275 $txt_access = $lng->txt("access_unlimited");
276 $usr_data["set"][$k]["access_class"] = "smallgreen";
277 }
278 elseif ($user["time_limit_until"] < $current_time)
279 {
280 $txt_access = $lng->txt("access_expired");
281 $usr_data["set"][$k]["access_class"] = "smallred";
282 }
283 else
284 {
285 $txt_access = ilDatePresentation::formatDate(new ilDateTime($user["time_limit_until"],IL_CAL_UNIX));
286 $usr_data["set"][$k]["access_class"] = "small";
287 }
288 }
289 else
290 {
291 $txt_access = $lng->txt("inactive");
292 $usr_data["set"][$k]["access_class"] = "smallred";
293 }
294 $usr_data["set"][$k]["access_until"] = $txt_access;
295 }
296
297 $this->setMaxCount($usr_data["cnt"]);
298 $this->setData($usr_data["set"]);
299 }
300
301 public function getUserIdsForFilter()
302 {
303 if($this->getMode() == self::MODE_USER_FOLDER)
304 {
305 // All accessible users
306 include_once './Services/User/classes/class.ilLocalUser.php';
307 $user_filter = ilLocalUser::_getFolderIds();
308 }
309 else
310 {
311 if($this->filter['time_limit_owner'])
312 {
313 $user_filter = array($this->filter['time_limit_owner']);
314 }
315 else
316 {
317 // All accessible users
318 include_once './Services/User/classes/class.ilLocalUser.php';
319 $user_filter = ilLocalUser::_getFolderIds();
320 }
321 }
322
323 include_once("./Services/User/classes/class.ilUserQuery.php");
324 $query = new ilUserQuery();
325 $query->setOffset(0);
326 $query->setLimit(self::getAllCommandLimit());
327 $query->setTextFilter($this->filter['query']);
328 $query->setActionFilter($this->filter['activation']);
329 $query->setLastLogin($this->filter['last_login']);
330 $query->setLimitedAccessFilter($this->filter['limited_access']);
331 $query->setNoCourseFilter($this->filter['no_courses']);
332 $query->setNoGroupFilter($this->filter['no_groups']);
333 $query->setCourseGroupFilter($this->filter['course_group']);
334 $query->setRoleFilter($this->filter['global_role']);
335 $query->setUserFolder($user_filter);
336 $query->setFirstLetterLastname(ilUtil::stripSlashes($_GET['letter']));
337
338 if($this->getOrderField())
339 {
340 $query->setOrderField(ilUtil::stripSlashes($this->getOrderField()));
341 $query->setOrderDirection(ilUtil::stripSlashes($this->getOrderDirection()));
342 }
343
344 $usr_data = $query->query();
345
346 $user_ids = array();
347 foreach($usr_data["set"] as $item)
348 {
349 // #11632
350 if($item["usr_id"] != SYSTEM_USER_ID)
351 {
352 $user_ids[] = $item["usr_id"];
353 }
354 }
355 return $user_ids;
356 }
357
358
362 function initFilter()
363 {
364 global $lng, $rbacreview, $ilUser, $ilCtrl;
365
366
367 // Show context filter
368 if($this->getMode() == self::MODE_LOCAL_USER)
369 {
370 include_once './Services/User/classes/class.ilLocalUser.php';
371 $parent_ids = ilLocalUser::_getFolderIds();
372
373 if(count($parent_ids) > 1)
374 {
375 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
376 $co = new ilSelectInputGUI($lng->txt('context'),'time_limit_owner');
377
378 $ref_id = $this->getUserFolderId();
379
380 $opt[0] = $this->lng->txt('all_users');
381 $opt[$this->getUserFolderId()] = $lng->txt('users').' ('.ilObject::_lookupTitle(ilObject::_lookupObjId($this->getUserFolderId())).')';
382
383 foreach($parent_ids as $parent_id)
384 {
385 if($parent_id == $this->getUserFolderId())
386 {
387 continue;
388 }
389 switch($parent_id)
390 {
391 case USER_FOLDER_ID:
392 $opt[USER_FOLDER_ID] = $lng->txt('global_user');
393 break;
394
395 default:
396 $opt[$parent_id] = $lng->txt('users').' ('.ilObject::_lookupTitle(ilObject::_lookupObjId($parent_id)).')';
397 break;
398 }
399 }
400 $co->setOptions($opt);
401 $this->addFilterItem($co);
402 $co->readFromSession();
403 $this->filter['time_limit_owner'] = $co->getValue();
404 }
405 }
406
407 // User name, login, email filter
408 include_once("./Services/Form/classes/class.ilTextInputGUI.php");
409 $ul = new ilTextInputGUI($lng->txt("login")."/".$lng->txt("email")."/".
410 $lng->txt("name"), "query");
411 $ul->setDataSource($ilCtrl->getLinkTarget($this->getParentObject(),
412 "addUserAutoComplete", "", true));
413 $ul->setSize(20);
414 $ul->setSubmitFormOnEnter(true);
415 $this->addFilterItem($ul);
416 $ul->readFromSession();
417 $this->filter["query"] = $ul->getValue();
418
419 /*
420 include_once("./Services/Form/classes/class.ilTextInputGUI.php");
421 $ti = new ilTextInputGUI($lng->txt("login")."/".$lng->txt("email")."/".$lng->txt("name"), "query");
422 $ti->setMaxLength(64);
423 $ti->setSize(20);
424 $ti->setSubmitFormOnEnter(true);
425 $this->addFilterItem($ti);
426 $ti->readFromSession();
427 $this->filter["query"] = $ti->getValue();
428 */
429
430 // activation
431 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
432 $options = array(
433 "" => $lng->txt("user_all"),
434 "active" => $lng->txt("active"),
435 "inactive" => $lng->txt("inactive"),
436 );
437 $si = new ilSelectInputGUI($this->lng->txt("user_activation"), "activation");
438 $si->setOptions($options);
439 $this->addFilterItem($si);
440 $si->readFromSession();
441 $this->filter["activation"] = $si->getValue();
442
443 // limited access
444 include_once("./Services/Form/classes/class.ilCheckboxInputGUI.php");
445 $cb = new ilCheckboxInputGUI($this->lng->txt("user_limited_access"), "limited_access");
446 $this->addFilterItem($cb);
447 $cb->readFromSession();
448 $this->filter["limited_access"] = $cb->getChecked();
449
450 // last login
451 include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
452 $di = new ilDateTimeInputGUI($this->lng->txt("user_last_login_before"), "last_login");
453 $default_date = new ilDateTime(time(),IL_CAL_UNIX);
454 $default_date->increment(IL_CAL_DAY, 1);
455 $di->setDate($default_date);
456 $this->addFilterItem($di);
457 $di->readFromSession();
458 $this->filter["last_login"] = $di->getDate();
459
460 if($this->getMode() == self::MODE_USER_FOLDER)
461 {
462 // no assigned courses
463 include_once("./Services/Form/classes/class.ilCheckboxInputGUI.php");
464 $cb = new ilCheckboxInputGUI($this->lng->txt("user_no_courses"), "no_courses");
465 $this->addFilterItem($cb);
466 $cb->readFromSession();
467 $this->filter["no_courses"] = $cb->getChecked();
468
469 // no assigned groups
470 include_once("./Services/Form/classes/class.ilCheckboxInputGUI.php");
471 $ng = new ilCheckboxInputGUI($this->lng->txt("user_no_groups"), "no_groups");
472 $this->addFilterItem($ng);
473 $ng->readFromSession();
474 $this->filter['no_groups'] = $ng->getChecked();
475
476 // course/group members
477 include_once("./Services/Form/classes/class.ilRepositorySelectorInputGUI.php");
478 $rs = new ilRepositorySelectorInputGUI($lng->txt("user_member_of_course_group"), "course_group");
479 $rs->setSelectText($lng->txt("user_select_course_group"));
480 $rs->setHeaderMessage($lng->txt("user_please_select_course_group"));
481 $rs->setClickableTypes(array("crs", "grp"));
482 $this->addFilterItem($rs);
483 $rs->readFromSession();
484 $this->filter["course_group"] = $rs->getValue();
485 }
486
487 // global roles
488 $options = array(
489 "" => $lng->txt("user_any"),
490 );
491 $roles = $rbacreview->getRolesByFilter(2, $ilUser->getId());
492 foreach ($roles as $role)
493 {
494 $options[$role["rol_id"]] = $role["title"];
495 }
496 $si = new ilSelectInputGUI($this->lng->txt("user_global_role"), "global_role");
497 $si->setOptions($options);
498 $this->addFilterItem($si);
499 $si->readFromSession();
500 $this->filter["global_role"] = $si->getValue();
501 }
502
506 protected function fillRow($user)
507 {
508 global $ilCtrl, $lng;
509
510 $ilCtrl->setParameterByClass("ilobjusergui", "letter", $_GET["letter"]);
511
512 foreach ($this->getSelectedColumns() as $c)
513 {
514 if ($c == "access_until")
515 {
516 $this->tpl->setCurrentBlock("access_until");
517 $this->tpl->setVariable("VAL_ACCESS_UNTIL", $user["access_until"]);
518 $this->tpl->setVariable("CLASS_ACCESS_UNTIL", $user["access_class"]);
519 }
520 else if ($c == "last_login")
521 {
522 $this->tpl->setCurrentBlock("last_login");
523 $this->tpl->setVariable("VAL_LAST_LOGIN",
525 }
526 else if (in_array($c, array("firstname", "lastname")))
527 {
528 $this->tpl->setCurrentBlock($c);
529 $this->tpl->setVariable("VAL_".strtoupper($c), (string) $user[$c]);
530 }
531 else // all other fields
532 {
533 $this->tpl->setCurrentBlock("user_field");
534 $val = (trim($user[$c]) == "")
535 ? " "
536 : $user[$c];
537 if ($user[$c] != "")
538 {
539 switch ($c)
540 {
541 case "birthday":
543 break;
544
545 case "gender":
546 $val = $lng->txt("gender_".$user[$c]);
547 break;
548
549 case "create_date":
550 case "agree_date":
551 case "approve_date":
552 // $val = ilDatePresentation::formatDate(new ilDateTime($val,IL_CAL_DATETIME));
554 break;
555 }
556 }
557 $this->tpl->setVariable("VAL_UF", $val);
558 }
559
560 $this->tpl->parseCurrentBlock();
561 }
562
563 if ($user["usr_id"] != 6)
564 {
565 if($this->getMode() == self::MODE_USER_FOLDER or $user['time_limit_owner'] == $this->getUserFolderId())
566 {
567 $this->tpl->setCurrentBlock("checkb");
568 $this->tpl->setVariable("ID", $user["usr_id"]);
569 $this->tpl->parseCurrentBlock();
570 }
571 }
572
573 if($this->getMode() == self::MODE_USER_FOLDER or $user['time_limit_owner'] == $this->getUserFolderId())
574 {
575 $this->tpl->setVariable("VAL_LOGIN", $user["login"]);
576 $ilCtrl->setParameterByClass("ilobjusergui", "obj_id", $user["usr_id"]);
577 $this->tpl->setVariable("HREF_LOGIN",
578 $ilCtrl->getLinkTargetByClass("ilobjusergui", "view"));
579 $ilCtrl->setParameterByClass("ilobjusergui", "obj_id", "");
580 }
581 else
582 {
583 $this->tpl->setVariable('VAL_LOGIN_PLAIN',$user['login']);
584 }
585
586 if($this->getMode() == self::MODE_LOCAL_USER)
587 {
588 $this->tpl->setCurrentBlock('context');
589 $this->tpl->setVariable('VAL_CONTEXT',(string)ilObject::_lookupTitle(ilObject::_lookupObjId($user['time_limit_owner'])));
590 $this->tpl->parseCurrentBlock();
591
592 $this->tpl->setCurrentBlock('roles');
593 $ilCtrl->setParameter($this->getParentObject(),'obj_id',$user['usr_id']);
594 $this->tpl->setVariable('ROLE_LINK',$ilCtrl->getLinkTarget($this->getParentObject(),'assignRoles'));
595 $this->tpl->setVariable('TXT_ROLES',$this->lng->txt('edit'));
596 $ilCtrl->clearParameters($this->getParentObject());
597 $this->tpl->parseCurrentBlock();
598
599 }
600 }
601}
602?>
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_DATE
const IL_CAL_UNIX
const IL_CAL_DATETIME
const IL_CAL_DAY
const USER_FOLDER_ID
Class ilObjUserFolder.
This class represents a checkbox property in a property form.
static formatDate(ilDateTime $date)
Format a date @access public.
This class represents a date/time property in a property form.
@classDescription Date and time handling
Class for single dates.
static _getFolderIds()
static lookupOrgUnitsRepresentation($a_usr_id)
lokup org unit representation
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
This class represents a repository selector in a property form.
This class represents a selection list property in a property form.
Class ilTable2GUI.
getSelectedColumns()
Get selected columns.
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
setEnableHeader($a_enableheader)
Set Enable Header.
setExternalSorting($a_val)
Set external sorting.
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.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
getParentObject()
Get parent object.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
setEnableAllCommand($a_value)
Enable actions for all entries in current result.
setData($a_data)
set table data @access public
setEnableTitle($a_enabletitle)
Set Enable Title.
getLimit()
Get limit.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
resetOffset($a_in_determination=false)
Reset offset.
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.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
getOffset()
Get offset.
setExternalSegmentation($a_val)
Set external segmentation.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setFilterCommand($a_val, $a_caption=null)
Set filter command.
getOrderDirection()
Get order direction.
setMaxCount($a_max_count)
set max.
This class represents a text property in a property form.
Class ilUserProfile.
User query class.
TableGUI class for user administration.
initFilter()
Init filter.
__construct($a_parent_obj, $a_parent_cmd, $a_mode=self::MODE_USER_FOLDER, $a_load_items=true)
Constructor.
getSelectableColumns()
Get selectable columns.
getItems()
Get user items.
fillRow($user)
Fill table row.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:17
$cmd
Definition: sahs_server.php:35
$ref_id
Definition: sahs_server.php:39
if(!is_array($argv)) $options
$ilUser
Definition: imgupload.php:18