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 
4 include_once("./Services/Table/classes/class.ilTable2GUI.php");
5 
16 {
17  const MODE_USER_FOLDER = 1;
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  {
102  return $this->user_folder_id;
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 
195  $this->determineOffsetAndOrder();
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",
524  ilDatePresentation::formatDate(new ilDateTime($user['last_login'],IL_CAL_DATETIME)));
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 ?>
setExternalSorting($a_val)
Set external sorting.
setDataSource($href, $a_delimiter=null)
set datasource link for js autocomplete
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
User query class.
const IL_CAL_DATETIME
This class represents a selection list property in a property form.
$_GET["client_id"]
setExternalSegmentation($a_val)
Set external segmentation.
$cmd
Definition: sahs_server.php:35
resetOffset($a_in_determination=false)
Reset offset.
Class ilUserProfile.
getSelectableColumns()
Get selectable columns.
This class represents a checkbox property in a property form.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
static _lookupTitle($a_id)
lookup object title
const IL_CAL_UNIX
setDate(ilDateTime $a_date=NULL)
set date E.g $dt_form->setDate(new ilDateTime(time(),IL_CAL_UTC)); or $dt_form->setDate(new ilDateTim...
getOrderDirection()
Get order direction.
getParentObject()
Get parent object.
setId($a_val)
Set id.
This class represents a date/time property in a property form.
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
static lookupOrgUnitsRepresentation($a_usr_id)
lokup org unit representation
TableGUI class for user administration.
const IL_CAL_DAY
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
Class ilTable2GUI.
Class for single dates.
initFilter()
Init filter.
if(!is_array($argv)) $options
getOffset()
Get offset.
This class represents a repository selector in a property form.
static _lookupObjId($a_id)
addMultiCommand($a_cmd, $a_text)
Add Command button.
This class represents a text property in a property form.
static formatDate(ilDateTime $date)
Format a date public.
Date and time handling
$ilUser
Definition: imgupload.php:18
getSelectedColumns()
Get selected columns.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
setOptions($a_options)
Set Options.
setEnableAllCommand($a_value)
Enable actions for all entries in current result.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
const IL_CAL_DATE
__construct($a_parent_obj, $a_parent_cmd, $a_mode=self::MODE_USER_FOLDER, $a_load_items=true)
Constructor.
fillRow($user)
Fill table row.
$ref_id
Definition: sahs_server.php:39
global $lng
Definition: privfeed.php:17
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
const USER_FOLDER_ID
Class ilObjUserFolder.
setEnableHeader($a_enableheader)
Set Enable Header.
getLimit()
Get limit.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
static _getFolderIds()
setMaxCount($a_max_count)
set max.
setEnableTitle($a_enabletitle)
Set Enable Title.
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.
getItems()
Get user items.
setFilterCommand($a_val, $a_caption=null)
Set filter command.