ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilObjUserGUI.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 require_once "./Services/Object/classes/class.ilObjectGUI.php";
5 
18 {
20  protected $uiFactory;
21 
23  protected $uiRenderer;
24 
25  public $ilCtrl;
26 
32  public $gender;
33 
39  public $type;
40 
46  public $user_ref_id;
47 
57  public function __construct(
58  $a_data,
59  $a_id,
60  $a_call_by_reference = false,
61  $a_prepare_output = true,
62  ILIAS\UI\Factory $uiFactory = null,
63  ILIAS\UI\Renderer $uiRenderer = null
64  ) {
65  global $DIC;
66 
67  if (null === $uiFactory) {
68  $uiFactory = $DIC->ui()->factory();
69  }
70  $this->uiFactory = $uiFactory;
71 
72  if (null === $uiRenderer) {
73  $uiRenderer = $DIC->ui()->renderer();
74  }
75  $this->uiRenderer = $uiRenderer;
76 
77  $ilCtrl = $DIC['ilCtrl'];
78  $lng = $DIC['lng'];
79 
80  define('USER_FOLDER_ID', 7);
81 
82  $this->type = "usr";
83  parent::__construct($a_data, $a_id, $a_call_by_reference, false);
84  $this->usrf_ref_id = &$this->ref_id;
85 
86  $this->ctrl = $ilCtrl;
87  $this->ctrl->saveParameter($this, array('obj_id', 'letter'));
88  $this->ctrl->setParameterByClass("ilobjuserfoldergui", "letter", $_GET["letter"]);
89  $this->ctrl->setContext($this->object->getId(), 'usr');
90  $lng->loadLanguageModule('user');
91 
92  // for gender selection. don't change this
93  // maybe deprecated
94  $this->gender = array(
95  'n' => "salutation_n",
96  'm' => "salutation_m",
97  'f' => "salutation_f",
98  );
99  }
100 
101  public function executeCommand()
102  {
103  global $DIC;
104 
105  $rbacsystem = $DIC['rbacsystem'];
106 
107  $next_class = $this->ctrl->getNextClass($this);
108  $cmd = $this->ctrl->getCmd();
109 
110  $this->prepareOutput();
111 
112  switch ($next_class) {
113  case "illearningprogressgui":
114  include_once './Services/Tracking/classes/class.ilLearningProgressGUI.php';
116  $this->ctrl->forwardCommand($new_gui);
117  break;
118 
119  case "ilobjectownershipmanagementgui":
120  include_once("Services/Object/classes/class.ilObjectOwnershipManagementGUI.php");
121  $gui = new ilObjectOwnershipManagementGUI($this->object->getId());
122  $this->ctrl->forwardCommand($gui);
123  break;
124 
125  default:
126  if ($cmd == "" || $cmd == "view") {
127  $cmd = "edit";
128  }
129  $cmd .= "Object";
130  $return = $this->$cmd();
131 
132  break;
133  }
134  return $return;
135  }
136 
137  /* Overwritten from base class
138  */
139  public function setTitleAndDescription()
140  {
141  if (strtolower(get_class($this->object)) == 'ilobjuser') {
142  $this->tpl->setTitle('[' . $this->object->getLogin() . '] ' . $this->object->getTitle());
143  $this->tpl->setDescription($this->object->getLongDescription());
144  $this->tpl->setTitleIcon(ilUtil::getImagePath("icon_" . $this->object->getType() . ".svg"), $this->lng->txt("obj_" . $this->object->getType()));
145  } else {
146  parent::setTitleAndDescription();
147  }
148  }
149 
150 
151 
152  public function cancelObject()
153  {
154  ilSession::clear("saved_post");
155 
156  if (strtolower($_GET["baseClass"]) == 'iladministrationgui') {
157  $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
158  //$return_location = $_GET["cmd_return_location"];
159  //ilUtil::redirect($this->ctrl->getLinkTarget($this,$return_location));
160  } else {
161  $this->ctrl->redirectByClass('ilobjcategorygui', 'listUsers');
162  }
163  }
164 
168  public function getAdminTabs()
169  {
170  $this->getTabs();
171  }
172 
176  public function getTabs()
177  {
178  global $DIC;
179 
180  $rbacsystem = $DIC['rbacsystem'];
181  $ilHelp = $DIC['ilHelp'];
182 
183  $this->tabs_gui->clearTargets();
184 
185  $ilHelp->setScreenIdComponent("usr");
186 
187  if ($_GET["search"]) {
188  $this->tabs_gui->setBackTarget(
189  $this->lng->txt("search_results"),
190  $_SESSION["usr_search_link"]
191  );
192 
193  $this->tabs_gui->addTarget(
194  "properties",
195  $this->ctrl->getLinkTarget($this, "edit"),
196  array("edit","","view"),
197  get_class($this),
198  "",
199  true
200  );
201  } else {
202  $this->tabs_gui->addTarget(
203  "properties",
204  $this->ctrl->getLinkTarget($this, "edit"),
205  array("edit","","view"),
206  get_class($this)
207  );
208  }
209 
210  $this->tabs_gui->addTarget(
211  "role_assignment",
212  $this->ctrl->getLinkTarget($this, "roleassignment"),
213  array("roleassignment"),
214  get_class($this)
215  );
216 
217  // learning progress
218  include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
219  if ($rbacsystem->checkAccess('read', $this->ref_id) and
222  $this->tabs_gui->addTarget(
223  'learning_progress',
224  $this->ctrl->getLinkTargetByClass('illearningprogressgui', ''),
225  '',
226  array('illplistofobjectsgui','illplistofsettingsgui','illearningprogressgui','illplistofprogressgui')
227  );
228  }
229 
230  $this->tabs_gui->addTarget(
231  'user_ownership',
232  $this->ctrl->getLinkTargetByClass('ilobjectownershipmanagementgui', ''),
233  '',
234  'ilobjectownershipmanagementgui'
235  );
236  }
237 
241  public function setBackTarget($a_text, $a_link)
242  {
243  $this->back_target = array("text" => $a_text,
244  "link" => $a_link);
245  }
246 
252  {
253  include_once './Services/User/classes/class.ilUserDefinedFields.php';
254  $this->user_defined_fields = &ilUserDefinedFields::_getInstance();
255 
256  foreach ($this->user_defined_fields->getDefinitions() as $field_id => $definition) {
257  if ($definition['required'] and !strlen($_POST['udf'][$field_id])) {
258  return false;
259  }
260  }
261  return true;
262  }
263 
264 
265  public function __showUserDefinedFields()
266  {
267  include_once './Services/User/classes/class.ilUserDefinedFields.php';
268  $this->user_defined_fields = &ilUserDefinedFields::_getInstance();
269 
270  if ($this->object->getType() == 'usr') {
271  $user_defined_data = $this->object->getUserDefinedData();
272  }
273  foreach ($this->user_defined_fields->getDefinitions() as $field_id => $definition) {
274  $old = isset($_SESSION["error_post_vars"]["udf"][$field_id]) ?
275  $_SESSION["error_post_vars"]["udf"][$field_id] : $user_defined_data[$field_id];
276 
277  if ($definition['field_type'] == UDF_TYPE_TEXT) {
278  $this->tpl->setCurrentBlock("field_text");
279  $this->tpl->setVariable("FIELD_NAME", 'udf[' . $definition['field_id'] . ']');
280  $this->tpl->setVariable("FIELD_VALUE", ilUtil::prepareFormOutput($old));
281  $this->tpl->parseCurrentBlock();
282  } else {
283  $this->tpl->setCurrentBlock("field_select");
284  $this->tpl->setVariable("SELECT_BOX", ilUtil::formSelect(
285  $old,
286  'udf[' . $definition['field_id'] . ']',
287  $this->user_defined_fields->fieldValuesToSelectArray(
288  $definition['field_values']
289  ),
290  false,
291  true
292  ));
293  $this->tpl->parseCurrentBlock();
294  }
295  $this->tpl->setCurrentBlock("user_defined");
296 
297  if ($definition['required']) {
298  $name = $definition['field_name'] . "<span class=\"asterisk\">*</span>";
299  } else {
300  $name = $definition['field_name'];
301  }
302  $this->tpl->setVariable("TXT_FIELD_NAME", $name);
303  $this->tpl->parseCurrentBlock();
304  }
305  return true;
306  }
307 
308  public function initCreate()
309  {
310  global $DIC;
311 
312  $tpl = $DIC['tpl'];
313  $rbacsystem = $DIC['rbacsystem'];
314  $rbacreview = $DIC['rbacreview'];
315  $ilUser = $DIC['ilUser'];
316 
317  if ($this->usrf_ref_id != USER_FOLDER_ID) {
318  $this->tabs_gui->clearTargets();
319  }
320 
321  // role selection
322  $obj_list = $rbacreview->getRoleListByObject(ROLE_FOLDER_ID);
323  $rol = array();
324  foreach ($obj_list as $obj_data) {
325  // allow only 'assign_users' marked roles if called from category
326  if ($this->object->getRefId() != USER_FOLDER_ID and !in_array(SYSTEM_ROLE_ID, $rbacreview->assignedRoles($ilUser->getId()))) {
327  include_once './Services/AccessControl/classes/class.ilObjRole.php';
328 
329  if (!ilObjRole::_getAssignUsersStatus($obj_data['obj_id'])) {
330  continue;
331  }
332  }
333  // exclude anonymous role from list
334  if ($obj_data["obj_id"] != ANONYMOUS_ROLE_ID) {
335  // do not allow to assign users to administrator role if current user does not has SYSTEM_ROLE_ID
336  if ($obj_data["obj_id"] != SYSTEM_ROLE_ID or in_array(SYSTEM_ROLE_ID, $rbacreview->assignedRoles($ilUser->getId()))) {
337  $rol[$obj_data["obj_id"]] = $obj_data["title"];
338  }
339  }
340  }
341 
342  // raise error if there is no global role user can be assigned to
343  if (!count($rol)) {
344  $this->ilias->raiseError($this->lng->txt("msg_no_roles_users_can_be_assigned_to"), $this->ilias->error_obj->MESSAGE);
345  }
346 
347  $keys = array_keys($rol);
348 
349  // set pre defined user role to default
350  if (in_array(4, $keys)) {
351  $this->default_role = 4;
352  } else {
353  if (count($keys) > 1 and in_array(2, $keys)) {
354  // remove admin role as preselectable role
355  foreach ($keys as $key => $val) {
356  if ($val == 2) {
357  unset($keys[$key]);
358  break;
359  }
360  }
361  }
362 
363  $this->default_role = array_shift($keys);
364  }
365  $this->selectable_roles = $rol;
366  }
367 
371  public function createObject()
372  {
373  global $DIC;
374 
375  $tpl = $DIC['tpl'];
376  $rbacsystem = $DIC['rbacsystem'];
377  $rbacreview = $DIC['rbacreview'];
378  $ilUser = $DIC['ilUser'];
379 
380  if (!$rbacsystem->checkAccess('create_usr', $this->usrf_ref_id) and
381  !$rbacsystem->checkAccess('cat_administrate_users', $this->usrf_ref_id)) {
382  $this->ilias->raiseError($this->lng->txt("permission_denied"), $this->ilias->error_obj->MESSAGE);
383  }
384 
385  $this->initCreate();
386  $this->initForm("create");
387  return $tpl->setContent($this->form_gui->getHtml());
388  }
389 
394  public function saveObject()
395  {
396  global $DIC;
397 
398  $ilAccess = $DIC['ilAccess'];
399  $ilSetting = $DIC['ilSetting'];
400  $tpl = $DIC['tpl'];
401  $ilUser = $DIC['ilUser'];
402  $rbacadmin = $DIC['rbacadmin'];
403  $rbacsystem = $DIC['rbacsystem'];
404 
405  include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
406 
407  // User folder
408  if (!$rbacsystem->checkAccess('create_usr', $this->usrf_ref_id) &&
409  !$ilAccess->checkAccess('cat_administrate_users', "", $this->usrf_ref_id)) {
410  $this->ilias->raiseError($this->lng->txt("permission_denied"), $this->ilias->error_obj->MESSAGE);
411  }
412 
413  $this->initCreate();
414  $this->initForm("create");
415 
416  // Manipulate form so ignore required fields are no more required. This has to be done before ilPropertyFormGUI::checkInput() is called.
417  $profileMaybeIncomplete = false;
418  if ($this->form_gui->getInput('ignore_rf', false)) {
419  $profileMaybeIncomplete = $this->handleIgnoredRequiredFields();
420  }
421 
422  if ($this->form_gui->checkInput()) {
423  // @todo: external account; time limit check and savings
424 
425  // checks passed. save user
426  $userObj = $this->loadValuesFromForm();
427 
428  $userObj->setPasswd($this->form_gui->getInput('passwd'), IL_PASSWD_PLAIN);
429  $userObj->setTitle($userObj->getFullname());
430  $userObj->setDescription($userObj->getEmail());
431 
432  $udf = array();
433  foreach ($_POST as $k => $v) {
434  if (substr($k, 0, 4) == "udf_") {
435  $udf[substr($k, 4)] = $v;
436  }
437  }
438  $userObj->setUserDefinedData($udf);
439 
440  $userObj->create();
441 
442  include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
444  $userObj->setExternalAccount($_POST["ext_account"]);
445  }
446 
447  // set a timestamp for last_password_change
448  // this ts is needed by ilSecuritySettings
449  $userObj->setLastPasswordChangeTS(time());
450 
451  //insert user data in table user_data
452  $userObj->saveAsNew();
453 
454  // setup user preferences
455  if ($this->isSettingChangeable('language')) {
456  $userObj->setLanguage($_POST["language"]);
457  }
458 
459  // Set disk quota
460  require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
462  // The disk quota is entered in megabytes but stored in bytes
463  $userObj->setPref("disk_quota", ilUtil::MB2Bytes($_POST["disk_quota"]));
464  }
465 
466  if ($this->isSettingChangeable('skin_style')) {
467  //set user skin and style
468  $sknst = explode(":", $_POST["skin_style"]);
469 
470  if ($userObj->getPref("style") != $sknst[1] ||
471  $userObj->getPref("skin") != $sknst[0]) {
472  $userObj->setPref("skin", $sknst[0]);
473  $userObj->setPref("style", $sknst[1]);
474  }
475  }
476  if ($this->isSettingChangeable('hits_per_page')) {
477  $userObj->setPref("hits_per_page", $_POST["hits_per_page"]);
478  }
479  /*if($this->isSettingChangeable('show_users_online'))
480  {
481  $userObj->setPref("show_users_online", $_POST["show_users_online"]);
482  }*/
483  if ($this->isSettingChangeable('hide_own_online_status')) {
484  $userObj->setPref("hide_own_online_status", $_POST["hide_own_online_status"]);
485  }
486  if ($this->isSettingChangeable('bs_allow_to_contact_me')) {
487  $userObj->setPref('bs_allow_to_contact_me', $_POST['bs_allow_to_contact_me'] ? 'y' : 'n');
488  }
489  if ($this->isSettingChangeable('chat_osc_accept_msg')) {
490  $userObj->setPref('chat_osc_accept_msg', $_POST['chat_osc_accept_msg'] ? 'y' : 'n');
491  }
492  if ((int) $ilSetting->get('session_reminder_enabled')) {
493  $userObj->setPref('session_reminder_enabled', (int) $_POST['session_reminder_enabled']);
494  }
495  $userObj->writePrefs();
496 
497  //set role entries
498  $rbacadmin->assignUser($_POST["default_role"], $userObj->getId(), true);
499 
500  $msg = $this->lng->txt("user_added");
501 
502  $ilUser->setPref('send_info_mails', ($_POST['send_mail'] == 'y') ? 'y' : 'n');
503  $ilUser->writePrefs();
504 
505  $this->object = $userObj;
506 
507  if ($this->isSettingChangeable('upload')) {
508  $this->uploadUserPictureObject();
509  }
510 
511  if ($profileMaybeIncomplete) {
512  include_once 'Services/User/classes/class.ilUserProfile.php';
513  if (ilUserProfile::isProfileIncomplete($this->object)) {
514  $this->object->setProfileIncomplete(true);
515  $this->object->update();
516  }
517  }
518 
519  // send new account mail
520  if ($_POST['send_mail'] == 'y') {
521  include_once('Services/Mail/classes/class.ilAccountMail.php');
522  $acc_mail = new ilAccountMail();
523  $acc_mail->useLangVariablesAsFallback(true);
524  $acc_mail->setAttachConfiguredFiles(true);
525  $acc_mail->setUserPassword($_POST['passwd']);
526  $acc_mail->setUser($userObj);
527 
528  if ($acc_mail->send()) {
529  $msg = $msg . '<br />' . $this->lng->txt('mail_sent');
530  ilUtil::sendSuccess($msg, true);
531  } else {
532  $msg = $msg . '<br />' . $this->lng->txt('mail_not_sent');
533  ilUtil::sendInfo($msg, true);
534  }
535  } else {
536  ilUtil::sendSuccess($msg, true);
537  }
538 
539 
540  if (strtolower($_GET["baseClass"]) == 'iladministrationgui') {
541  $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
542  } else {
543  $this->ctrl->redirectByClass('ilobjcategorygui', 'listUsers');
544  }
545  } else {
546  $this->form_gui->setValuesByPost();
547  $tpl->setContent($this->form_gui->getHtml());
548  }
549  }
550 
556  public function editObject()
557  {
558  global $ilias, $rbacsystem, $rbacreview, $rbacadmin, $styleDefinition, $ilUser
560 
561  include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
562 
563  //load ILIAS settings
564  $settings = $ilias->getAllSettings();
565 
566  // User folder
567  if ($this->usrf_ref_id == USER_FOLDER_ID and !$rbacsystem->checkAccess('visible,read', $this->usrf_ref_id)) {
568  $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"), $this->ilias->error_obj->MESSAGE);
569  }
570  // if called from local administration $this->usrf_ref_id is category id
571  // Todo: this has to be fixed. Do not mix user folder id and category id
572  if ($this->usrf_ref_id != USER_FOLDER_ID) {
573  // check if user is assigned to category
574  if (!$rbacsystem->checkAccess('cat_administrate_users', $this->object->getTimeLimitOwner())) {
575  $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"), $this->ilias->error_obj->MESSAGE);
576  }
577  }
578 
579  if ($this->usrf_ref_id != USER_FOLDER_ID) {
580  $this->tabs_gui->clearTargets();
581  }
582 
583  // get form
584  $this->initForm("edit");
585  $this->getValues();
586  $this->showAcceptedTermsOfService();
587  $this->tpl->setContent($this->form_gui->getHTML());
588  }
589 
594  protected function loadValuesFromForm($a_mode = 'create')
595  {
596  global $DIC;
597 
598  $ilSetting = $DIC['ilSetting'];
599  $ilUser = $DIC['ilUser'];
600 
601  switch ($a_mode) {
602  case 'create':
603  $user = new ilObjUser();
604  break;
605 
606  case 'update':
608  break;
609  }
610 
611  $from = $this->form_gui->getItemByPostVar('time_limit_from')->getDate();
612  $user->setTimeLimitFrom($from
613  ? $from->get(IL_CAL_UNIX)
614  : null);
615 
616  $until = $this->form_gui->getItemByPostVar('time_limit_until')->getDate();
617  $user->setTimeLimitUntil($until
618  ? $until->get(IL_CAL_UNIX)
619  : null);
620 
621  $user->setTimeLimitUnlimited($this->form_gui->getInput('time_limit_unlimited'));
622 
623  if ($a_mode == 'create') {
624  $user->setTimeLimitOwner($this->usrf_ref_id);
625  }
626 
627  // Birthday
628  if ($this->isSettingChangeable('birthday')) {
629  $bd = $this->form_gui->getItemByPostVar('birthday');
630  $bd = $bd->getDate();
631  $user->setBirthday($bd
632  ? $bd->get(IL_CAL_DATE)
633  : null);
634  }
635 
636  // Login
637  $user->setLogin($this->form_gui->getInput('login'));
638 
639 
640  // Gender
641  if ($this->isSettingChangeable('gender')) {
642  $user->setGender($this->form_gui->getInput('gender'));
643  }
644 
645  // Title
646  if ($this->isSettingChangeable('title')) {
647  $user->setUTitle($this->form_gui->getInput('title'));
648  }
649 
650  // Firstname
651  if ($this->isSettingChangeable('firstname')) {
652  $user->setFirstname($this->form_gui->getInput('firstname'));
653  }
654  // Lastname
655  if ($this->isSettingChangeable('lastname')) {
656  $user->setLastname($this->form_gui->getInput('lastname'));
657  }
658  $user->setFullname();
659 
660  // Institution
661  if ($this->isSettingChangeable('institution')) {
662  $user->setInstitution($this->form_gui->getInput('institution'));
663  }
664 
665  // Department
666  if ($this->isSettingChangeable('department')) {
667  $user->setDepartment($this->form_gui->getInput('department'));
668  }
669  // Street
670  if ($this->isSettingChangeable('street')) {
671  $user->setStreet($this->form_gui->getInput('street'));
672  }
673  // City
674  if ($this->isSettingChangeable('city')) {
675  $user->setCity($this->form_gui->getInput('city'));
676  }
677  // Zipcode
678  if ($this->isSettingChangeable('zipcode')) {
679  $user->setZipcode($this->form_gui->getInput('zipcode'));
680  }
681  // Country
682  if ($this->isSettingChangeable('country')) {
683  $user->setCountry($this->form_gui->getInput('country'));
684  }
685  // Selected Country
686  if ($this->isSettingChangeable('sel_country')) {
687  $user->setSelectedCountry($this->form_gui->getInput('sel_country'));
688  }
689  // Phone Office
690  if ($this->isSettingChangeable('phone_office')) {
691  $user->setPhoneOffice($this->form_gui->getInput('phone_office'));
692  }
693  // Phone Home
694  if ($this->isSettingChangeable('phone_home')) {
695  $user->setPhoneHome($this->form_gui->getInput('phone_home'));
696  }
697  // Phone Mobile
698  if ($this->isSettingChangeable('phone_mobile')) {
699  $user->setPhoneMobile($this->form_gui->getInput('phone_mobile'));
700  }
701  // Fax
702  if ($this->isSettingChangeable('fax')) {
703  $user->setFax($this->form_gui->getInput('fax'));
704  }
705  // Matriculation
706  if ($this->isSettingChangeable('matriculation')) {
707  $user->setMatriculation($this->form_gui->getInput('matriculation'));
708  }
709  // Email
710  if ($this->isSettingChangeable('email')) {
711  $user->setEmail($this->form_gui->getInput('email'));
712  }
713  // Second Email
714  if ($this->isSettingChangeable('second_email')) {
715  $user->setSecondEmail($this->form_gui->getInput('second_email'));
716  }
717  // Hobby
718  if ($this->isSettingChangeable('hobby')) {
719  $user->setHobby($this->form_gui->getInput('hobby'));
720  }
721  // Referral Comment
722  if ($this->isSettingChangeable('referral_comment')) {
723  $user->setComment($this->form_gui->getInput('referral_comment'));
724  }
725 
726  // interests
727  $user->setGeneralInterests($this->form_gui->getInput('interests_general'));
728  $user->setOfferingHelp($this->form_gui->getInput('interests_help_offered'));
729  $user->setLookingForHelp($this->form_gui->getInput('interests_help_looking'));
730 
731  // ClientIP
732  $user->setClientIP($this->form_gui->getInput('client_ip'));
733 
734  // Google maps
735  $user->setLatitude($this->form_gui->getInput('latitude'));
736  $user->setLongitude($this->form_gui->getInput('longitude'));
737  $user->setLocationZoom($this->form_gui->getInput('loc_zoom'));
738 
739  // External account
740  $user->setAuthMode($this->form_gui->getInput('auth_mode'));
741  $user->setExternalAccount($this->form_gui->getInput('ext_account'));
742 
743  if ((int) $user->getActive() != (int) $this->form_gui->getInput('active')) {
744  $user->setActive($this->form_gui->getInput('active'), $ilUser->getId());
745  }
746 
747  return $user;
748  }
749 
750 
754  public function updateObject()
755  {
756  global $DIC;
757 
758  $tpl = $DIC['tpl'];
759  $rbacsystem = $DIC['rbacsystem'];
760  $ilias = $DIC['ilias'];
761  $ilUser = $DIC['ilUser'];
762  $ilSetting = $DIC['ilSetting'];
763 
764  // User folder
765  if ($this->usrf_ref_id == USER_FOLDER_ID and !$rbacsystem->checkAccess('visible,read,write', $this->usrf_ref_id)) {
766  $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"), $this->ilias->error_obj->MESSAGE);
767  }
768  // if called from local administration $this->usrf_ref_id is category id
769  // Todo: this has to be fixed. Do not mix user folder id and category id
770  if ($this->usrf_ref_id != USER_FOLDER_ID) {
771  // check if user is assigned to category
772  if (!$rbacsystem->checkAccess('cat_administrate_users', $this->object->getTimeLimitOwner())) {
773  $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"), $this->ilias->error_obj->MESSAGE);
774  }
775  }
776  $this->initForm("edit");
777 
778  // we do not want to store this dates, they are only printed out
779  unset($_POST['approve_date']);
780  $_POST['agree_date'] = $this->object->getAgreeDate();
781  unset($_POST['last_login']);
782 
783  // Manipulate form so ignore required fields are no more required. This has to be done before ilPropertyFormGUI::checkInput() is called.
784  $profileMaybeIncomplete = false;
785  if ($this->form_gui->getInput('ignore_rf', false)) {
786  $profileMaybeIncomplete = $this->handleIgnoredRequiredFields();
787  }
788 
789  if ($this->form_gui->checkInput()) {
790  // @todo: external account; time limit
791  // if not allowed or empty -> do no change password
793  && trim($_POST['passwd']) != "") {
794  $this->object->setPasswd($_POST['passwd'], IL_PASSWD_PLAIN);
795  }
796 
797  /*
798  * reset counter for failed logins
799  * if $_POST['active'] is set to 1
800  */
801  if ($_POST['active'] == 1) {
802  ilObjUser::_resetLoginAttempts($this->object->getId());
803  }
804 
805  #$this->object->assignData($_POST);
806  $this->loadValuesFromForm('update');
807 
808  $udf = array();
809  foreach ($_POST as $k => $v) {
810  if (substr($k, 0, 4) == "udf_") {
811  $udf[substr($k, 4)] = $v;
812  }
813  }
814  $this->object->setUserDefinedData($udf);
815 
816  try {
817  $this->object->updateLogin($_POST['login']);
818  } catch (ilUserException $e) {
819  ilUtil::sendFailure($e->getMessage());
820  $this->form_gui->setValuesByPost();
821  return $tpl->setContent($this->form_gui->getHtml());
822  }
823 
824  $this->object->setTitle($this->object->getFullname());
825  $this->object->setDescription($this->object->getEmail());
826 
827  if ($this->isSettingChangeable('language')) {
828  $this->object->setLanguage($this->form_gui->getInput('language'));
829  }
830 
831  require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
833  // set disk quota
834  $this->object->setPref("disk_quota", ilUtil::MB2Bytes($_POST["disk_quota"]));
835  }
837  // set personal workspace disk quota
838  $this->object->setPref("wsp_disk_quota", ilUtil::MB2Bytes($_POST["wsp_disk_quota"]));
839  }
840 
841  if ($this->isSettingChangeable('skin_style')) {
842  //set user skin and style
843  $sknst = explode(":", $_POST["skin_style"]);
844 
845  if ($this->object->getPref("style") != $sknst[1] ||
846  $this->object->getPref("skin") != $sknst[0]) {
847  $this->object->setPref("skin", $sknst[0]);
848  $this->object->setPref("style", $sknst[1]);
849  }
850  }
851  if ($this->isSettingChangeable('hits_per_page')) {
852  $this->object->setPref("hits_per_page", $_POST["hits_per_page"]);
853  }
854  /*if($this->isSettingChangeable('show_users_online'))
855  {
856  $this->object->setPref("show_users_online", $_POST["show_users_online"]);
857  }*/
858  if ($this->isSettingChangeable('hide_own_online_status')) {
859  $this->object->setPref("hide_own_online_status", $_POST["hide_own_online_status"]);
860  }
861  if ($this->isSettingChangeable('bs_allow_to_contact_me')) {
862  $this->object->setPref('bs_allow_to_contact_me', $_POST['bs_allow_to_contact_me'] ? 'y' : 'n');
863  }
864  if ($this->isSettingChangeable('chat_osc_accept_msg')) {
865  $this->object->setPref('chat_osc_accept_msg', $_POST['chat_osc_accept_msg'] ? 'y' : 'n');
866  }
867 
868  // set a timestamp for last_password_change
869  // this ts is needed by ilSecuritySettings
870  $this->object->setLastPasswordChangeTS(time());
871 
872  global $DIC;
873 
874  $ilSetting = $DIC['ilSetting'];
875  if ((int) $ilSetting->get('session_reminder_enabled')) {
876  $this->object->setPref('session_reminder_enabled', (int) $_POST['session_reminder_enabled']);
877  }
878 
879  // #10054 - profile may have been completed, check below is only for incomplete
880  $this->object->setProfileIncomplete(false);
881 
882  $this->update = $this->object->update();
883 
884 
885  // If the current user is editing its own user account,
886  // we update his preferences.
887  if ($ilUser->getId() == $this->object->getId()) {
888  $ilUser->readPrefs();
889  }
890  $ilUser->setPref('send_info_mails', ($_POST['send_mail'] == 'y') ? 'y' : 'n');
891  $ilUser->writePrefs();
892 
893  $mail_message = $this->__sendProfileMail();
894  $msg = $this->lng->txt('saved_successfully') . $mail_message;
895 
896  // same personal image
897  if ($this->isSettingChangeable('upload')) {
898  $this->uploadUserPictureObject();
899  }
900 
901  if ($profileMaybeIncomplete) {
902  include_once 'Services/User/classes/class.ilUserProfile.php';
903  if (ilUserProfile::isProfileIncomplete($this->object)) {
904  $this->object->setProfileIncomplete(true);
905  $this->object->update();
906  }
907  }
908 
909  // feedback
910  ilUtil::sendSuccess($msg, true);
911 
912  if (strtolower($_GET["baseClass"]) == 'iladministrationgui') {
913  $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
914  } else {
915  $this->ctrl->redirectByClass('ilobjcategorygui', 'listUsers');
916  }
917  } else {
918  $this->form_gui->setValuesByPost();
919  $tpl->setContent($this->form_gui->getHtml());
920  }
921  }
922 
926  public function getValues()
927  {
928  global $DIC;
929 
930  $ilUser = $DIC['ilUser'];
931  $ilSetting = $DIC['ilSetting'];
932 
933  $data = array();
934 
935  // login data
936  $data["auth_mode"] = $this->object->getAuthMode();
937  $data["login"] = $this->object->getLogin();
938  //$data["passwd"] = "********";
939  //$data["passwd2"] = "********";
940  $data["ext_account"] = $this->object->getExternalAccount();
941 
942  // system information
943  $data["create_date"] = ilDatePresentation::formatDate(new ilDateTime($this->object->getCreateDate(), IL_CAL_DATETIME));
944  $data["owner"] = ilObjUser::_lookupLogin($this->object->getOwner());
945  $data["approve_date"] = ($this->object->getApproveDate() != "")
946  ? ilDatePresentation::formatDate(new ilDateTime($this->object->getApproveDate(), IL_CAL_DATETIME))
947  : null;
948  $data["agree_date"] = ($this->object->getAgreeDate() != "")
949  ? ilDatePresentation::formatDate(new ilDateTime($this->object->getAgreeDate(), IL_CAL_DATETIME))
950  : null;
951  $data["last_login"] = ($this->object->getLastLogin() != "")
952  ? ilDatePresentation::formatDate(new ilDateTime($this->object->getLastLogin(), IL_CAL_DATETIME))
953  : null;
954  $data["active"] = $this->object->getActive();
955  $data["time_limit_unlimited"] = $this->object->getTimeLimitUnlimited();
956 
957  $data["time_limit_from"] = $this->object->getTimeLimitFrom()
958  ? new ilDateTime($this->object->getTimeLimitFrom(), IL_CAL_UNIX)
959  : null;
960  $data["time_limit_until"] = $this->object->getTimeLimitUntil()
961  ? new ilDateTime($this->object->getTimeLimitUntil(), IL_CAL_UNIX)
962  : null;
963 
964 
965  // BEGIN DiskQuota, Show disk space used
966  require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
968  $data["disk_quota"] = ilUtil::Bytes2MB($this->object->getDiskQuota());
969  }
971  $data["wsp_disk_quota"] = ilUtil::Bytes2MB($this->object->getPersonalWorkspaceDiskQuota());
972  }
973  // W. Randelshofer 2008-09-09: Deactivated display of disk space usage,
974  // because determining the disk space usage may take several minutes.
975  /*
976  require_once "Modules/File/classes/class.ilObjFileAccess.php";
977  require_once "Modules/HTMLLearningModule/classes/class.ilObjFileBasedLMAccess.php";
978  require_once "Modules/ScormAicc/classes/class.ilObjSAHSLearningModuleAccess.php";
979  require_once "Services/Mail/classes/class.ilObjMailAccess.php";
980  require_once "Modules/Forum/classes/class.ilObjForumAccess.php";
981  require_once "Modules/MediaCast/classes/class.ilObjMediaCastAccess.php";
982  $data["disk_space_used"] =
983  ilObjFileAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
984  ilObjFileBasedLMAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
985  ilObjSAHSLearningModuleAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
986  ilObjMailAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
987  ilObjForumAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
988  ilObjMediaCastAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>';
989  */
990  // END DiskQuota, Show disk space used
991 
992  // personal data
993  $data["gender"] = $this->object->getGender();
994  $data["firstname"] = $this->object->getFirstname();
995  $data["lastname"] = $this->object->getLastname();
996  $data["title"] = $this->object->getUTitle();
997  $data['birthday'] = $this->object->getBirthday()
998  ? new ilDate($this->object->getBirthday(), IL_CAL_DATE)
999  : null;
1000  $data["institution"] = $this->object->getInstitution();
1001  $data["department"] = $this->object->getDepartment();
1002  $data["street"] = $this->object->getStreet();
1003  $data["city"] = $this->object->getCity();
1004  $data["zipcode"] = $this->object->getZipcode();
1005  $data["country"] = $this->object->getCountry();
1006  $data["sel_country"] = $this->object->getSelectedCountry();
1007  $data["phone_office"] = $this->object->getPhoneOffice();
1008  $data["phone_home"] = $this->object->getPhoneHome();
1009  $data["phone_mobile"] = $this->object->getPhoneMobile();
1010  $data["fax"] = $this->object->getFax();
1011  $data["email"] = $this->object->getEmail();
1012  $data["second_email"] = $this->object->getSecondEmail();
1013  $data["hobby"] = $this->object->getHobby();
1014  $data["referral_comment"] = $this->object->getComment();
1015 
1016  // interests
1017  $data["interests_general"] = $this->object->getGeneralInterests();
1018  $data["interests_help_offered"] = $this->object->getOfferingHelp();
1019  $data["interests_help_looking"] = $this->object->getLookingForHelp();
1020 
1021  // other data
1022  $data["matriculation"] = $this->object->getMatriculation();
1023  $data["client_ip"] = $this->object->getClientIP();
1024 
1025  // user defined fields
1026  include_once './Services/User/classes/class.ilUserDefinedFields.php';
1027  $this->user_defined_fields = ilUserDefinedFields::_getInstance();
1028  $user_defined_data = $this->object->getUserDefinedData();
1029  foreach ($this->user_defined_fields->getDefinitions() as $field_id => $definition) {
1030  $data["udf_" . $field_id] = $user_defined_data["f_" . $field_id];
1031  }
1032 
1033  // settings
1034  $data["language"] = $this->object->getLanguage();
1035  $data["skin_style"] = $this->object->skin . ":" . $this->object->prefs["style"];
1036  $data["hits_per_page"] = $this->object->prefs["hits_per_page"];
1037  //$data["show_users_online"] = $this->object->prefs["show_users_online"];
1038  $data["hide_own_online_status"] = $this->object->prefs["hide_own_online_status"];
1039  $data['bs_allow_to_contact_me'] = $this->object->prefs['bs_allow_to_contact_me'] == 'y';
1040  $data['chat_osc_accept_msg'] = $this->object->prefs['chat_osc_accept_msg'] == 'y';
1041  $data["session_reminder_enabled"] = (int) $this->object->prefs["session_reminder_enabled"];
1042 
1043  $data["send_mail"] = ($this->object->prefs['send_info_mails'] == 'y');
1044 
1045 
1046  $this->form_gui->setValuesByArray($data);
1047  }
1048 
1052  public function initForm($a_mode)
1053  {
1054  global $DIC;
1055 
1056  $lng = $DIC['lng'];
1057  $ilCtrl = $DIC['ilCtrl'];
1058  $styleDefinition = $DIC['styleDefinition'];
1059  $ilSetting = $DIC['ilSetting'];
1060  $ilClientIniFile = $DIC['ilClientIniFile'];
1061  $ilUser = $DIC['ilUser'];
1062 
1063  $settings = $ilSetting->getAll();
1064 
1065  include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
1066 
1067  $this->form_gui = new ilPropertyFormGUI();
1068  $this->form_gui->setFormAction($ilCtrl->getFormAction($this));
1069  if ($a_mode == "create") {
1070  $this->form_gui->setTitle($lng->txt("usr_new"));
1071  } else {
1072  $this->form_gui->setTitle($lng->txt("usr_edit"));
1073  }
1074 
1075  // login data
1076  $sec_l = new ilFormSectionHeaderGUI();
1077  $sec_l->setTitle($lng->txt("login_data"));
1078  $this->form_gui->addItem($sec_l);
1079 
1080  // authentication mode
1081  include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
1082  $active_auth_modes = ilAuthUtils::_getActiveAuthModes();
1083  $am = new ilSelectInputGUI($lng->txt("auth_mode"), "auth_mode");
1084  $option = array();
1085  foreach ($active_auth_modes as $auth_name => $auth_key) {
1086  if ($auth_name == 'default') {
1087  $name = $this->lng->txt('auth_' . $auth_name) . " (" . $this->lng->txt('auth_' . ilAuthUtils::_getAuthModeName($auth_key)) . ")";
1088  } else {
1089  // begin-patch ldap_multiple
1090  #$name = $this->lng->txt('auth_'.$auth_name);
1091  include_once './Services/Authentication/classes/class.ilAuthUtils.php';
1092  $name = ilAuthUtils::getAuthModeTranslation($auth_key, $auth_name);
1093  // end-patch ldap_multiple
1094  }
1095  $option[$auth_name] = $name;
1096  }
1097  $am->setOptions($option);
1098  $this->form_gui->addItem($am);
1099 
1100  if ($a_mode == "edit") {
1101  $id = new ilNonEditableValueGUI($lng->txt("usr_id"), "id");
1102  $id->setValue($this->object->getId());
1103  $this->form_gui->addItem($id);
1104  }
1105 
1106  // login
1107  $lo = new ilUserLoginInputGUI($lng->txt("login"), "login");
1108  $lo->setRequired(true);
1109  if ($a_mode == "edit") {
1110  $lo->setCurrentUserId($this->object->getId());
1111  try {
1112  include_once 'Services/Calendar/classes/class.ilDate.php';
1113 
1114  $last_history_entry = ilObjUser::_getLastHistoryDataByUserId($this->object->getId());
1115  $lo->setInfo(
1116  sprintf(
1117  $this->lng->txt('usr_loginname_history_info'),
1118  ilDatePresentation::formatDate(new ilDateTime($last_history_entry[1], IL_CAL_UNIX)),
1119  $last_history_entry[0]
1120  )
1121  );
1122  } catch (ilUserException $e) {
1123  }
1124  }
1125 
1126  $this->form_gui->addItem($lo);
1127 
1128  // passwords
1129  // @todo: do not show passwords, if there is not a single auth, that
1130  // allows password setting
1131  {
1132  $pw = new ilPasswordInputGUI($lng->txt("passwd"), "passwd");
1133  $pw->setUseStripSlashes(false);
1134  $pw->setSize(32);
1135  $pw->setMaxLength(80); // #17221
1136  $pw->setValidateAuthPost("auth_mode");
1137  if ($a_mode == "create") {
1138  $pw->setRequiredOnAuth(true);
1139  }
1140  $pw->setInfo(ilUtil::getPasswordRequirementsInfo());
1141  $this->form_gui->addItem($pw);
1142  }
1143  // @todo: invisible/hidden passwords
1144 
1145  // external account
1146  include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
1148  $ext = new ilTextInputGUI($lng->txt("user_ext_account"), "ext_account");
1149  $ext->setSize(40);
1150  $ext->setMaxLength(250);
1151  $ext->setInfo($lng->txt("user_ext_account_desc"));
1152  $this->form_gui->addItem($ext);
1153  }
1154 
1155  // login data
1156  $sec_si = new ilFormSectionHeaderGUI();
1157  $sec_si->setTitle($this->lng->txt("system_information"));
1158  $this->form_gui->addItem($sec_si);
1159 
1160  // create date, approve date, agreement date, last login
1161  if ($a_mode == "edit") {
1162  $sia = array("create_date", "approve_date", "agree_date", "last_login", "owner");
1163  foreach ($sia as $a) {
1164  $siai = new ilNonEditableValueGUI($lng->txt($a), $a);
1165  $this->form_gui->addItem($siai);
1166  }
1167  }
1168 
1169  // active
1170  $ac = new ilCheckboxInputGUI($lng->txt("active"), "active");
1171  $ac->setChecked(true);
1172  $this->form_gui->addItem($ac);
1173 
1174  // access @todo: get fields right (names change)
1175  $lng->loadLanguageModule('crs');
1176 
1177  // access
1178  $radg = new ilRadioGroupInputGUI($lng->txt("time_limit"), "time_limit_unlimited");
1179  $radg->setValue(1);
1180  $op1 = new ilRadioOption($lng->txt("user_access_unlimited"), 1);
1181  $radg->addOption($op1);
1182  $op2 = new ilRadioOption($lng->txt("user_access_limited"), 0);
1183  $radg->addOption($op2);
1184 
1185  // $ac = new ilCheckboxInputGUI($lng->txt("time_limit"), "time_limit_unlimited");
1186  // $ac->setChecked(true);
1187  // $ac->setOptionTitle($lng->txt("crs_unlimited"));
1188 
1189  // access.from
1190  $acfrom = new ilDateTimeInputGUI($this->lng->txt("crs_from"), "time_limit_from");
1191  $acfrom->setRequired(true);
1192  $acfrom->setShowTime(true);
1193  // $ac->addSubItem($acfrom);
1194  $op2->addSubItem($acfrom);
1195 
1196  // access.to
1197  $acto = new ilDateTimeInputGUI($this->lng->txt("crs_to"), "time_limit_until");
1198  $acto->setRequired(true);
1199  $acto->setShowTime(true);
1200  // $ac->addSubItem($acto);
1201  $op2->addSubItem($acto);
1202 
1203  // $this->form_gui->addItem($ac);
1204  $this->form_gui->addItem($radg);
1205 
1206  require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
1208  $lng->loadLanguageModule("file");
1209 
1210  $quota_head = new ilFormSectionHeaderGUI();
1211  $quota_head->setTitle($lng->txt("repository_disk_quota"));
1212  $this->form_gui->addItem($quota_head);
1213 
1214  // disk quota
1215  $disk_quota = new ilTextInputGUI($lng->txt("disk_quota"), "disk_quota");
1216  $disk_quota->setSize(10);
1217  $disk_quota->setMaxLength(11);
1218  $disk_quota->setInfo($this->lng->txt("enter_in_mb_desc"));
1219  $this->form_gui->addItem($disk_quota);
1220 
1221  if ($a_mode == "edit") {
1222  // show which disk quota is in effect, and explain why
1223  require_once 'Services/WebDAV/classes/class.ilDiskQuotaChecker.php';
1224  $dq_info = ilDiskQuotaChecker::_lookupDiskQuota($this->object->getId());
1225  if ($dq_info['user_disk_quota'] > $dq_info['role_disk_quota']) {
1226  $info_text = sprintf(
1227  $lng->txt('disk_quota_is_1_instead_of_2_by_3'),
1228  ilUtil::formatSize($dq_info['user_disk_quota'], 'short'),
1229  ilUtil::formatSize($dq_info['role_disk_quota'], 'short'),
1230  $dq_info['role_title']
1231  );
1232  } elseif (is_infinite($dq_info['role_disk_quota'])) {
1233  $info_text = sprintf($lng->txt('disk_quota_is_unlimited_by_1'), $dq_info['role_title']);
1234  } else {
1235  $info_text = sprintf(
1236  $lng->txt('disk_quota_is_1_by_2'),
1237  ilUtil::formatSize($dq_info['role_disk_quota'], 'short'),
1238  $dq_info['role_title']
1239  );
1240  }
1241  $disk_quota->setInfo($this->lng->txt("enter_in_mb_desc") . '<br>' . $info_text);
1242 
1243 
1244  // disk usage
1245  $du_info = ilDiskQuotaChecker::_lookupDiskUsage($this->object->getId());
1246  $disk_usage = new ilNonEditableValueGUI($lng->txt("disk_usage"), "disk_usage");
1247  if ($du_info['last_update'] === null) {
1248  $disk_usage->setValue($lng->txt('unknown'));
1249  } else {
1250  $disk_usage->setValue(ilUtil::formatSize($du_info['disk_usage'], 'short'));
1251  $info = '<table class="il_user_quota_disk_usage_overview">';
1252  // write the count and size of each object type
1253  foreach ($du_info['details'] as $detail_data) {
1254  $info .= '<tr>' .
1255  '<td class="std">' . $detail_data['count'] . '</td>' .
1256  '<td class="std">' . $lng->txt($detail_data['type']) . '</td>' .
1257  '<td class="std">' . ilUtil::formatSize($detail_data['size'], 'short') . '</td>' .
1258  '</tr>'
1259  ;
1260  }
1261  $info .= '</table>';
1262  $info .= '<br>' . $this->lng->txt('last_update') . ': ' .
1263  ilDatePresentation::formatDate(new ilDateTime($du_info['last_update'], IL_CAL_DATETIME));
1264  $disk_usage->setInfo($info);
1265  }
1266  $this->form_gui->addItem($disk_usage);
1267 
1268  // date when the last disk quota reminder was sent to the user
1269  if (true || $dq_info['last_reminder']) {
1270  $reminder = new ilNonEditableValueGUI($lng->txt("disk_quota_last_reminder_sent"), "last_reminder");
1271  $reminder->setValue(
1272  ilDatePresentation::formatDate(new ilDateTime($dq_info['last_reminder'], IL_CAL_DATETIME))
1273  );
1274  $reminder->setInfo($this->lng->txt("disk_quota_last_reminder_sent_desc"));
1275  $this->form_gui->addItem($reminder);
1276  }
1277  }
1278  }
1279 
1281  $lng->loadLanguageModule("file");
1282 
1283  $quota_head = new ilFormSectionHeaderGUI();
1284  $quota_head->setTitle($lng->txt("personal_workspace_disk_quota"));
1285  $this->form_gui->addItem($quota_head);
1286 
1287  // personal workspace disk quota
1288  $wsp_disk_quota = new ilTextInputGUI($lng->txt("disk_quota"), "wsp_disk_quota");
1289  $wsp_disk_quota->setSize(10);
1290  $wsp_disk_quota->setMaxLength(11);
1291  $wsp_disk_quota->setInfo($this->lng->txt("enter_in_mb_desc"));
1292  $this->form_gui->addItem($wsp_disk_quota);
1293 
1294  if ($a_mode == "edit") {
1295  // show which disk quota is in effect, and explain why
1296  require_once 'Services/WebDAV/classes/class.ilDiskQuotaChecker.php';
1297  $dq_info = ilDiskQuotaChecker::_lookupPersonalWorkspaceDiskQuota($this->object->getId());
1298  if ($dq_info['user_wsp_disk_quota'] > $dq_info['role_wsp_disk_quota']) {
1299  $info_text = sprintf(
1300  $lng->txt('disk_quota_is_1_instead_of_2_by_3'),
1301  ilUtil::formatSize($dq_info['user_wsp_disk_quota'], 'short'),
1302  ilUtil::formatSize($dq_info['role_wsp_disk_quota'], 'short'),
1303  $dq_info['role_title']
1304  );
1305  } elseif (is_infinite($dq_info['role_wsp_disk_quota'])) {
1306  $info_text = sprintf($lng->txt('disk_quota_is_unlimited_by_1'), $dq_info['role_title']);
1307  } else {
1308  $info_text = sprintf(
1309  $lng->txt('disk_quota_is_1_by_2'),
1310  ilUtil::formatSize($dq_info['role_wsp_disk_quota'], 'short'),
1311  $dq_info['role_title']
1312  );
1313  }
1314  $wsp_disk_quota->setInfo($this->lng->txt("enter_in_mb_desc") . '<br>' . $info_text);
1315  }
1316 
1317  // disk usage
1318  include_once "Services/DiskQuota/classes/class.ilDiskQuotaHandler.php";
1319  $du_info = ilDiskQuotaHandler::getFilesizeByTypeAndOwner($this->object->getId());
1320  $disk_usage = new ilNonEditableValueGUI($lng->txt("disk_usage"), "disk_usage");
1321  if (!sizeof($du_info)) {
1322  $disk_usage->setValue($lng->txt('unknown'));
1323  } else {
1324  $disk_usage->setValue(ilUtil::formatSize(ilDiskQuotaHandler::getFilesizeByOwner($this->object->getId())));
1325  $info = '<table class="il_user_quota_disk_usage_overview">';
1326  // write the count and size of each object type
1327  foreach ($du_info as $detail_data) {
1328  $info .= '<tr>' .
1329  '<td class="std">' . $detail_data['count'] . '</td>' .
1330  '<td class="std">' . $lng->txt("obj_" . $detail_data["src_type"]) . '</td>' .
1331  '<td class="std">' . ilUtil::formatSize($detail_data['filesize'], 'short') . '</td>' .
1332  '</tr>'
1333  ;
1334  }
1335  $info .= '</table>';
1336  $disk_usage->setInfo($info);
1337  }
1338  $this->form_gui->addItem($disk_usage);
1339  }
1340 
1341  // personal data
1342  if (
1343  $this->isSettingChangeable('gender') or
1344  $this->isSettingChangeable('firstname') or
1345  $this->isSettingChangeable('lastname') or
1346  $this->isSettingChangeable('title') or
1347  $this->isSettingChangeable('personal_image') or
1348  $this->isSettingChangeable('birhtday')
1349  ) {
1350  $sec_pd = new ilFormSectionHeaderGUI();
1351  $sec_pd->setTitle($this->lng->txt("personal_data"));
1352  $this->form_gui->addItem($sec_pd);
1353  }
1354 
1355  // gender
1356  if ($this->isSettingChangeable('gender')) {
1357  $gndr = new ilRadioGroupInputGUI($lng->txt("salutation"), "gender");
1358  $gndr->setRequired(isset($settings["require_gender"]) && $settings["require_gender"]);
1359  $neutral = new ilRadioOption($lng->txt("salutation_n"), "n");
1360  $gndr->addOption($neutral);
1361  $female = new ilRadioOption($lng->txt("salutation_f"), "f");
1362  $gndr->addOption($female);
1363  $male = new ilRadioOption($lng->txt("salutation_m"), "m");
1364  $gndr->addOption($male);
1365  $this->form_gui->addItem($gndr);
1366  }
1367 
1368  // firstname, lastname, title
1369  $fields = array("firstname" => true, "lastname" => true,
1370  "title" => isset($settings["require_title"]) && $settings["require_title"]);
1371  foreach ($fields as $field => $req) {
1372  if ($this->isSettingChangeable($field)) {
1373  // #18795
1374  $caption = ($field == "title")
1375  ? "person_title"
1376  : $field;
1377  $inp = new ilTextInputGUI($lng->txt($caption), $field);
1378  $inp->setSize(32);
1379  $inp->setMaxLength(32);
1380  $inp->setRequired($req);
1381  $this->form_gui->addItem($inp);
1382  }
1383  }
1384 
1385  // personal image
1386  if ($this->isSettingChangeable('upload')) {
1387  $pi = new ilImageFileInputGUI($lng->txt("personal_picture"), "userfile");
1388  if ($a_mode == "edit" || $a_mode == "upload") {
1389  $pi->setImage(ilObjUser::_getPersonalPicturePath(
1390  $this->object->getId(),
1391  "small",
1392  true,
1393  true
1394  ));
1395  }
1396  $this->form_gui->addItem($pi);
1397  }
1398 
1399  if ($this->isSettingChangeable('birthday')) {
1400  $birthday = new ilBirthdayInputGUI($lng->txt('birthday'), 'birthday');
1401  $birthday->setRequired(isset($settings["require_birthday"]) && $settings["require_birthday"]);
1402  $this->form_gui->addItem($birthday);
1403  }
1404 
1405 
1406  // institution, department, street, city, zip code, country, phone office
1407  // phone home, phone mobile, fax, e-mail
1408  $fields = array(
1409  array("institution", 40, 80),
1410  array("department", 40, 80),
1411  array("street", 40, 40),
1412  array("city", 40, 40),
1413  array("zipcode", 10, 10),
1414  array("country", 40, 40),
1415  array("sel_country"),
1416  array("phone_office", 30, 30),
1417  array("phone_home", 30, 30),
1418  array("phone_mobile", 30, 30),
1419  array("fax", 30, 30));
1420 
1421  $counter = 0;
1422  foreach ($fields as $field) {
1423  if (!$counter++ and $this->isSettingChangeable($field[0])) {
1424  // contact data
1425  $sec_cd = new ilFormSectionHeaderGUI();
1426  $sec_cd->setTitle($this->lng->txt("contact_data"));
1427  $this->form_gui->addItem($sec_cd);
1428 
1429  // org units
1430  if ($a_mode == "edit") {
1431  $orgus = new ilNonEditableValueGUI($lng->txt('objs_orgu'), 'org_units');
1432  $orgus->setValue($this->object->getOrgUnitsRepresentation());
1433  $this->form_gui->addItem($orgus);
1434  }
1435  }
1436  if ($this->isSettingChangeable($field[0])) {
1437  if ($field[0] != "sel_country") {
1438  $inp = new ilTextInputGUI($lng->txt($field[0]), $field[0]);
1439  $inp->setSize($field[1]);
1440  $inp->setMaxLength($field[2]);
1441  $inp->setRequired(isset($settings["require_" . $field[0]]) &&
1442  $settings["require_" . $field[0]]);
1443  $this->form_gui->addItem($inp);
1444  } else {
1445  // country selection
1446  include_once("./Services/Form/classes/class.ilCountrySelectInputGUI.php");
1447  $cs = new ilCountrySelectInputGUI($lng->txt($field[0]), $field[0]);
1448  $cs->setRequired(isset($settings["require_" . $field[0]]) &&
1449  $settings["require_" . $field[0]]);
1450  $this->form_gui->addItem($cs);
1451  }
1452  }
1453  }
1454 
1455  // email
1456  if ($this->isSettingChangeable('email')) {
1457  $em = new ilEMailInputGUI($lng->txt("email"), "email");
1458  $em->setRequired(isset($settings["require_email"]) &&
1459  $settings["require_email"]);
1460  $this->form_gui->addItem($em);
1461  }
1462 
1463  // second email
1464  if ($this->isSettingChangeable('second_email')) {
1465  $em = new ilEMailInputGUI($lng->txt("second_email"), "second_email");
1466 
1467  $this->form_gui->addItem($em);
1468  }
1469 
1470  // interests/hobbies
1471  if ($this->isSettingChangeable('hobby')) {
1472  $hob = new ilTextAreaInputGUI($lng->txt("hobby"), "hobby");
1473  $hob->setRows(3);
1474  $hob->setCols(40);
1475  $hob->setRequired(isset($settings["require_hobby"]) &&
1476  $settings["require_hobby"]);
1477  $this->form_gui->addItem($hob);
1478  }
1479 
1480  // referral comment
1481  if ($this->isSettingChangeable('referral_comment')) {
1482  $rc = new ilTextAreaInputGUI($lng->txt("referral_comment"), "referral_comment");
1483  $rc->setRows(3);
1484  $rc->setCols(40);
1485  $rc->setRequired(isset($settings["require_referral_comment"]) &&
1486  $settings["require_referral_comment"]);
1487  $this->form_gui->addItem($rc);
1488  }
1489 
1490 
1491  // interests
1492 
1493  $sh = new ilFormSectionHeaderGUI();
1494  $sh->setTitle($lng->txt("interests"));
1495  $this->form_gui->addItem($sh);
1496 
1497  $multi_fields = array("interests_general", "interests_help_offered", "interests_help_looking");
1498  foreach ($multi_fields as $multi_field) {
1499  if ($this->isSettingChangeable($multi_field)) {
1500  // see ilUserProfile
1501  $ti = new ilTextInputGUI($lng->txt($multi_field), $multi_field);
1502  $ti->setMulti(true);
1503  $ti->setMaxLength(40);
1504  $ti->setSize(40);
1505  $ti->setRequired(isset($settings["require_" . $multi_field]) &&
1506  $settings["require_" . $multi_field]);
1507  $this->form_gui->addItem($ti);
1508  }
1509  }
1510 
1511 
1512  // other information
1513  if ($this->isSettingChangeable('user_profile_other')) {
1514  $sec_oi = new ilFormSectionHeaderGUI();
1515  $sec_oi->setTitle($this->lng->txt("user_profile_other"));
1516  $this->form_gui->addItem($sec_oi);
1517  }
1518 
1519  // matriculation number
1520  if ($this->isSettingChangeable('matriculation')) {
1521  $mr = new ilTextInputGUI($lng->txt("matriculation"), "matriculation");
1522  $mr->setSize(40);
1523  $mr->setMaxLength(40);
1524  $mr->setRequired(isset($settings["require_matriculation"]) &&
1525  $settings["require_matriculation"]);
1526  $this->form_gui->addItem($mr);
1527  }
1528 
1529  // client IP
1530  $ip = new ilTextInputGUI($lng->txt("client_ip"), "client_ip");
1531  $ip->setSize(40);
1532  $ip->setMaxLength(255);
1533  $ip->setInfo($this->lng->txt("current_ip") . " " . $_SERVER["REMOTE_ADDR"] . " <br />" .
1534  '<span class="warning">' . $this->lng->txt("current_ip_alert") . "</span>");
1535  $this->form_gui->addItem($ip);
1536 
1537  // additional user defined fields
1538  include_once './Services/User/classes/class.ilUserDefinedFields.php';
1539  $user_defined_fields = ilUserDefinedFields::_getInstance();
1540 
1541  if ($this->usrf_ref_id == USER_FOLDER_ID) {
1542  $all_defs = $user_defined_fields->getDefinitions();
1543  } else {
1544  $all_defs = $user_defined_fields->getChangeableLocalUserAdministrationDefinitions();
1545  }
1546 
1547  foreach ($all_defs as $field_id => $definition) {
1548  include_once './Services/User/classes/class.ilCustomUserFieldsHelper.php';
1549  $f_property = ilCustomUserFieldsHelper::getInstance()->getFormPropertyForDefinition($definition, true);
1550  if ($f_property instanceof ilFormPropertyGUI) {
1551  $this->form_gui->addItem($f_property);
1552  }
1553  }
1554 
1555  // settings
1556  if (
1557  $a_mode == 'create' or
1558  $this->isSettingChangeable('language') or
1559  $this->isSettingChangeable('skin_style') or
1560  $this->isSettingChangeable('hits_per_page') or
1561  $this->isSettingChangeable('hide_own_online_status') or
1562  $this->isSettingChangeable('bs_allow_to_contact_me') or
1563  $this->isSettingChangeable('chat_osc_accept_msg')
1564  ) {
1565  $sec_st = new ilFormSectionHeaderGUI();
1566  $sec_st->setTitle($this->lng->txt("settings"));
1567  $this->form_gui->addItem($sec_st);
1568  }
1569 
1570  // role
1571  if ($a_mode == "create") {
1572  $role = new ilSelectInputGUI(
1573  $lng->txt("default_role"),
1574  'default_role'
1575  );
1576  $role->setRequired(true);
1577  $role->setValue($this->default_role);
1578  $role->setOptions($this->selectable_roles);
1579  $this->form_gui->addItem($role);
1580  }
1581 
1582  // language
1583  if ($this->isSettingChangeable('language')) {
1584  $lang = new ilSelectInputGUI(
1585  $lng->txt("language"),
1586  'language'
1587  );
1588  $languages = $lng->getInstalledLanguages();
1589  $lng->loadLanguageModule("meta");
1590  $options = array();
1591  foreach ($languages as $l) {
1592  $options[$l] = $lng->txt("meta_l_" . $l);
1593  }
1594  $lang->setOptions($options);
1595  $lang->setValue($ilSetting->get("language"));
1596  $this->form_gui->addItem($lang);
1597  }
1598 
1599  // skin/style
1600  if ($this->isSettingChangeable('skin_style')) {
1601  $sk = new ilSelectInputGUI(
1602  $lng->txt("skin_style"),
1603  'skin_style'
1604  );
1608  $skins = $styleDefinition->getAllSkins();
1609 
1610  $options = array();
1611  if (is_array($skins)) {
1612  $sk = new ilSelectInputGUI($this->lng->txt("skin_style"), "skin_style");
1613 
1614  $options = array();
1615  foreach ($skins as $skin) {
1616  foreach ($skin->getStyles() as $style) {
1617  include_once("./Services/Style/System/classes/class.ilSystemStyleSettings.php");
1618  if (!ilSystemStyleSettings::_lookupActivatedStyle($skin->getId(), $style->getId())) {
1619  continue;
1620  }
1621 
1622  $options[$skin->getId() . ":" . $style->getId()] = $skin->getName() . " / " . $style->getName();
1623  }
1624  }
1625  }
1626  $sk->setOptions($options);
1627  $sk->setValue($ilClientIniFile->readVariable("layout", "skin") .
1628  ":" . $ilClientIniFile->readVariable("layout", "style"));
1629 
1630  $this->form_gui->addItem($sk);
1631  }
1632 
1633  // hits per page
1634  if ($this->isSettingChangeable('hits_per_page')) {
1635  $hpp = new ilSelectInputGUI(
1636  $lng->txt("hits_per_page"),
1637  'hits_per_page'
1638  );
1639  $options = array(10 => 10, 15 => 15, 20 => 20, 30 => 30, 40 => 40,
1640  50 => 50, 100 => 100, 9999 => $this->lng->txt("no_limit"));
1641  $hpp->setOptions($options);
1642  $hpp->setValue($ilSetting->get("hits_per_page"));
1643  $this->form_gui->addItem($hpp);
1644 
1645  // users online
1646  /*$uo = new ilSelectInputGUI($lng->txt("users_online"),
1647  'show_users_online');
1648  $options = array(
1649  "y" => $lng->txt("users_online_show_y"),
1650  "associated" => $lng->txt("users_online_show_associated"),
1651  "n" => $lng->txt("users_online_show_n"));
1652  $uo->setOptions($options);
1653  $uo->setValue($ilSetting->get("show_users_online"));
1654  $this->form_gui->addItem($uo);*/
1655  }
1656 
1657  // hide online status
1658  if ($this->isSettingChangeable('hide_own_online_status')) {
1659  $lng->loadLanguageModule("awrn");
1660 
1661  $default = ($ilSetting->get('hide_own_online_status') == "n")
1662  ? $this->lng->txt("user_awrn_show")
1663  : $this->lng->txt("user_awrn_hide");
1664 
1665  $options = array(
1666  "" => $this->lng->txt("user_awrn_default")." (".$default.")",
1667  "n" => $this->lng->txt("user_awrn_show"),
1668  "y" => $this->lng->txt("user_awrn_hide"));
1669  $os = new ilSelectInputGUI($lng->txt("awrn_user_show"), "hide_own_online_status");
1670  $os->setOptions($options);
1671  $os->setDisabled($ilSetting->get("usr_settings_disable_hide_own_online_status"));
1672  $os->setInfo($lng->txt("awrn_hide_from_awareness_info"));
1673  $this->form_gui->addItem($os);
1674 
1675 
1676  //$os = new ilCheckboxInputGUI($lng->txt("awrn_hide_from_awareness"), "hide_own_online_status");
1677  //$this->form_gui->addItem($os);
1678  }
1679 
1680  // allow to contact me
1681  if ($this->isSettingChangeable('bs_allow_to_contact_me')) {
1682  $lng->loadLanguageModule('buddysystem');
1683  $os = new ilCheckboxInputGUI($lng->txt('buddy_allow_to_contact_me'), 'bs_allow_to_contact_me');
1684  if ($a_mode == 'create') {
1685  $os->setChecked(ilUtil::yn2tf($ilSetting->get('bs_allow_to_contact_me', 'n')));
1686  }
1687  $this->form_gui->addItem($os);
1688  }
1689  if ($this->isSettingChangeable('chat_osc_accept_msg')) {
1690  $lng->loadLanguageModule('chatroom');
1691  $chat_osc_acm = new ilCheckboxInputGUI($lng->txt('chat_osc_accept_msg'), 'chat_osc_accept_msg');
1692  if ($a_mode == 'create') {
1693  $chat_osc_acm->setChecked(ilUtil::yn2tf($ilSetting->get('chat_osc_accept_msg', 'n')));
1694  }
1695  $this->form_gui->addItem($chat_osc_acm);
1696  }
1697 
1698  if ((int) $ilSetting->get('session_reminder_enabled')) {
1699  $cb = new ilCheckboxInputGUI($this->lng->txt('session_reminder'), 'session_reminder_enabled');
1700  $cb->setValue(1);
1701  $this->form_gui->addItem($cb);
1702  }
1703 
1704  // Options
1705  if ($this->isSettingChangeable('send_mail')) {
1706  $sec_op = new ilFormSectionHeaderGUI();
1707  $sec_op->setTitle($this->lng->txt("options"));
1708  $this->form_gui->addItem($sec_op);
1709  }
1710 
1711  // send email
1712  $se = new ilCheckboxInputGUI($lng->txt('inform_user_mail'), 'send_mail');
1713  $se->setInfo($lng->txt('inform_user_mail_info'));
1714  $se->setValue('y');
1715  $se->setChecked(($ilUser->getPref('send_info_mails') == 'y'));
1716  $this->form_gui->addItem($se);
1717 
1718  // ignore required fields
1719  $irf = new ilCheckboxInputGUI($lng->txt('ignore_required_fields'), 'ignore_rf');
1720  $irf->setInfo($lng->txt('ignore_required_fields_info'));
1721  $irf->setValue(1);
1722  $this->form_gui->addItem($irf);
1723 
1724  // @todo: handle all required fields
1725 
1726  // command buttons
1727  if ($a_mode == "create" || $a_mode == "save") {
1728  $this->form_gui->addCommandButton("save", $lng->txt("save"));
1729  }
1730  if ($a_mode == "edit" || $a_mode == "update") {
1731  $this->form_gui->addCommandButton("update", $lng->txt("save"));
1732  }
1733  $this->form_gui->addCommandButton("cancel", $lng->txt("cancel"));
1734  }
1735 
1744  protected function isSettingChangeable($a_field)
1745  {
1746  // TODO: Allow mixed field parameter to support checks against an array of field names.
1747 
1748  global $DIC;
1749 
1750  $ilSetting = $DIC['ilSetting'];
1751  static $settings = null;
1752 
1753 
1754 
1755  if ($this->usrf_ref_id == USER_FOLDER_ID) {
1756  return true;
1757  }
1758 
1759  if ($settings == null) {
1760  $settings = $ilSetting->getAll();
1761  }
1762  return (bool) $settings['usr_settings_changeable_lua_' . $a_field];
1763  }
1764 
1765 
1766  // BEGIN DiskQuota: Allow administrators to edit user picture
1772  public function uploadUserPictureObject()
1773  {
1774  global $DIC;
1775 
1776  $ilUser = $DIC['ilUser'];
1777  $rbacsystem = $DIC['rbacsystem'];
1778 
1779  // User folder
1780  if ($this->usrf_ref_id == USER_FOLDER_ID and
1781  !$rbacsystem->checkAccess('visible,read', $this->usrf_ref_id)) {
1782  $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"), $this->ilias->error_obj->MESSAGE);
1783  }
1784  // if called from local administration $this->usrf_ref_id is category id
1785  // Todo: this has to be fixed. Do not mix user folder id and category id
1786  if ($this->usrf_ref_id != USER_FOLDER_ID) {
1787  // check if user is assigned to category
1788  if (!$rbacsystem->checkAccess('cat_administrate_users', $this->object->getTimeLimitOwner())) {
1789  $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"), $this->ilias->error_obj->MESSAGE);
1790  }
1791  }
1792 
1793  $userfile_input = $this->form_gui->getItemByPostVar("userfile");
1794 
1795  if ($_FILES["userfile"]["tmp_name"] == "") {
1796  if ($userfile_input->getDeletionFlag()) {
1797  $this->object->removeUserPicture();
1798  }
1799  return;
1800  }
1801  if ($_FILES["userfile"]["size"] == 0) {
1802  ilUtil::sendFailure($this->lng->txt("msg_no_file"));
1803  } else {
1804  $webspace_dir = ilUtil::getWebspaceDir();
1805  $image_dir = $webspace_dir . "/usr_images";
1806  $store_file = "usr_" . $this->object->getId() . "." . "jpg";
1807 
1808  // store filename
1809  $this->object->setPref("profile_image", $store_file);
1810  $this->object->update();
1811 
1812  // move uploaded file
1813  $pi = pathinfo($_FILES["userfile"]["name"]);
1814  $uploaded_file = $image_dir . "/upload_" . $this->object->getId() . "." . $pi["extension"];
1815  if (!ilUtil::moveUploadedFile(
1816  $_FILES["userfile"]["tmp_name"],
1817  $_FILES["userfile"]["name"],
1818  $uploaded_file,
1819  false
1820  )) {
1821  ilUtil::sendFailure($this->lng->txt("upload_error", true));
1822  $this->ctrl->redirect($this, "showProfile");
1823  }
1824  chmod($uploaded_file, 0770);
1825 
1826  // take quality 100 to avoid jpeg artefacts when uploading jpeg files
1827  // taking only frame [0] to avoid problems with animated gifs
1828  $show_file = "$image_dir/usr_" . $this->object->getId() . ".jpg";
1829  $thumb_file = "$image_dir/usr_" . $this->object->getId() . "_small.jpg";
1830  $xthumb_file = "$image_dir/usr_" . $this->object->getId() . "_xsmall.jpg";
1831  $xxthumb_file = "$image_dir/usr_" . $this->object->getId() . "_xxsmall.jpg";
1832  $uploaded_file = ilUtil::escapeShellArg($uploaded_file);
1833  $show_file = ilUtil::escapeShellArg($show_file);
1834  $thumb_file = ilUtil::escapeShellArg($thumb_file);
1835  $xthumb_file = ilUtil::escapeShellArg($xthumb_file);
1836  $xxthumb_file = ilUtil::escapeShellArg($xxthumb_file);
1837 
1838  if (ilUtil::isConvertVersionAtLeast("6.3.8-3")) {
1839  ilUtil::execConvert($uploaded_file . "[0] -geometry 200x200^ -gravity center -extent 200x200 -quality 100 JPEG:" . $show_file);
1840  ilUtil::execConvert($uploaded_file . "[0] -geometry 100x100^ -gravity center -extent 100x100 -quality 100 JPEG:" . $thumb_file);
1841  ilUtil::execConvert($uploaded_file . "[0] -geometry 75x75^ -gravity center -extent 75x75 -quality 100 JPEG:" . $xthumb_file);
1842  ilUtil::execConvert($uploaded_file . "[0] -geometry 30x30^ -gravity center -extent 30x30 -quality 100 JPEG:" . $xxthumb_file);
1843  } else {
1844  ilUtil::execConvert($uploaded_file . "[0] -geometry 200x200 -quality 100 JPEG:" . $show_file);
1845  ilUtil::execConvert($uploaded_file . "[0] -geometry 100x100 -quality 100 JPEG:" . $thumb_file);
1846  ilUtil::execConvert($uploaded_file . "[0] -geometry 75x75 -quality 100 JPEG:" . $xthumb_file);
1847  ilUtil::execConvert($uploaded_file . "[0] -geometry 30x30 -quality 100 JPEG:" . $xxthumb_file);
1848  }
1849  }
1850  }
1851 
1855  public function removeUserPictureObject()
1856  {
1857  $webspace_dir = ilUtil::getWebspaceDir();
1858  $image_dir = $webspace_dir . "/usr_images";
1859  $file = $image_dir . "/usr_" . $this->object->getID() . "." . "jpg";
1860  $thumb_file = $image_dir . "/usr_" . $this->object->getID() . "_small.jpg";
1861  $xthumb_file = $image_dir . "/usr_" . $this->object->getID() . "_xsmall.jpg";
1862  $xxthumb_file = $image_dir . "/usr_" . $this->object->getID() . "_xxsmall.jpg";
1863  $upload_file = $image_dir . "/upload_" . $this->object->getID();
1864 
1865  // remove user pref file name
1866  $this->object->setPref("profile_image", "");
1867  $this->object->update();
1868  ilUtil::sendSuccess($this->lng->txt("user_image_removed"));
1869 
1870  if (@is_file($file)) {
1871  unlink($file);
1872  }
1873  if (@is_file($thumb_file)) {
1874  unlink($thumb_file);
1875  }
1876  if (@is_file($xthumb_file)) {
1877  unlink($xthumb_file);
1878  }
1879  if (@is_file($xxthumb_file)) {
1880  unlink($xxthumb_file);
1881  }
1882  if (@is_file($upload_file)) {
1883  unlink($upload_file);
1884  }
1885 
1886  $this->editObject();
1887  }
1888  // END DiskQuota: Allow administrators to edit user picture
1889 
1895  public function assignSaveObject()
1896  {
1897  global $DIC;
1898 
1899  $rbacsystem = $DIC['rbacsystem'];
1900  $rbacadmin = $DIC['rbacadmin'];
1901  $rbacreview = $DIC['rbacreview'];
1902 
1903  if (!$rbacsystem->checkAccess("edit_roleassignment", $this->usrf_ref_id)) {
1904  $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_role_to_user"), $this->ilias->error_obj->MESSAGE);
1905  }
1906 
1907  $selected_roles = $_POST["role_id"] ? $_POST["role_id"] : array();
1908  $posted_roles = $_POST["role_id_ctrl"] ? $_POST["role_id_ctrl"] : array();
1909 
1910  // prevent unassignment of system role from system user
1911  if ($this->object->getId() == SYSTEM_USER_ID and in_array(SYSTEM_ROLE_ID, $posted_roles)) {
1912  array_push($selected_roles, SYSTEM_ROLE_ID);
1913  }
1914 
1915  $global_roles_all = $rbacreview->getGlobalRoles();
1916  $assigned_roles_all = $rbacreview->assignedRoles($this->object->getId());
1917  $assigned_roles = array_intersect($assigned_roles_all, $posted_roles);
1918  $assigned_global_roles_all = array_intersect($assigned_roles_all, $global_roles_all);
1919  $assigned_global_roles = array_intersect($assigned_global_roles_all, $posted_roles);
1920  $posted_global_roles = array_intersect($selected_roles, $global_roles_all);
1921 
1922  if ((empty($selected_roles) and count($assigned_roles_all) == count($assigned_roles))
1923  or (empty($posted_global_roles) and count($assigned_global_roles_all) == count($assigned_global_roles))) {
1924  //$this->ilias->raiseError($this->lng->txt("msg_min_one_role")."<br/>".$this->lng->txt("action_aborted"),$this->ilias->error_obj->MESSAGE);
1925  // workaround. sometimes jumps back to wrong page
1926  ilUtil::sendFailure($this->lng->txt("msg_min_one_role") . "<br/>" . $this->lng->txt("action_aborted"), true);
1927  $this->ctrl->redirect($this, 'roleassignment');
1928  }
1929 
1930  foreach (array_diff($assigned_roles, $selected_roles) as $role) {
1931  $rbacadmin->deassignUser($role, $this->object->getId());
1932  }
1933 
1934  foreach (array_diff($selected_roles, $assigned_roles) as $role) {
1935  $rbacadmin->assignUser($role, $this->object->getId(), false);
1936  }
1937 
1938  include_once "./Services/AccessControl/classes/class.ilObjRole.php";
1939 
1940  // update object data entry (to update last modification date)
1941  $this->object->update();
1942 
1943  ilUtil::sendSuccess($this->lng->txt("msg_roleassignment_changed"), true);
1944 
1945  if (strtolower($_GET["baseClass"]) == 'iladministrationgui') {
1946  $this->ctrl->redirect($this, 'roleassignment');
1947  } else {
1948  $this->ctrl->redirectByClass('ilobjcategorygui', 'listUsers');
1949  }
1950  }
1951 
1957  public function roleassignmentObject()
1958  {
1959  global $DIC;
1960 
1961  $rbacreview = $DIC['rbacreview'];
1962  $rbacsystem = $DIC['rbacsystem'];
1963  $ilUser = $DIC['ilUser'];
1964  $ilTabs = $DIC['ilTabs'];
1965 
1966  $ilTabs->activateTab("role_assignment");
1967 
1968  if (!$rbacsystem->checkAccess("edit_roleassignment", $this->usrf_ref_id)) {
1969  $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_role_to_user"), $this->ilias->error_obj->MESSAGE);
1970  }
1971 
1972  $_SESSION['filtered_roles'] = isset($_POST['filter']) ? $_POST['filter'] : $_SESSION['filtered_roles'];
1973 
1974  if ($_SESSION['filtered_roles'] > 5) {
1975  $_SESSION['filtered_roles'] = 0;
1976  }
1977 
1978  $this->tpl->addBlockfile('ADM_CONTENT', 'adm_content', 'tpl.usr_role_assignment.html', 'Services/User');
1979 
1980  if (false) {
1981  $this->tpl->setCurrentBlock("filter");
1982  $this->tpl->setVariable("FILTER_TXT_FILTER", $this->lng->txt('filter'));
1983  $this->tpl->setVariable("SELECT_FILTER", $this->__buildFilterSelect());
1984  $this->tpl->setVariable("FILTER_ACTION", $this->ctrl->getFormAction($this));
1985  $this->tpl->setVariable("FILTER_NAME", 'roleassignment');
1986  $this->tpl->setVariable("FILTER_VALUE", $this->lng->txt('apply_filter'));
1987  $this->tpl->parseCurrentBlock();
1988  }
1989 
1990  // init table
1991  include_once("./Services/User/classes/class.ilRoleAssignmentTableGUI.php");
1992  $tab = new ilRoleAssignmentTableGUI($this, "roleassignment");
1993 
1994  // now get roles depending on filter settings
1995  $role_list = $rbacreview->getRolesByFilter($tab->filter["role_filter"], $this->object->getId());
1996  $assigned_roles = $rbacreview->assignedRoles($this->object->getId());
1997 
1998  $counter = 0;
1999 
2000  include_once('./Services/AccessControl/classes/class.ilObjRole.php');
2001 
2002  $records = array();
2003  foreach ($role_list as $role) {
2004  // fetch context path of role
2005  $rolf = $rbacreview->getFoldersAssignedToRole($role["obj_id"], true);
2006 
2007  // only list roles that are not set to status "deleted"
2008  if ($rbacreview->isDeleted($rolf[0])) {
2009  continue;
2010  }
2011 
2012  // build context path
2013  $path = "";
2014 
2015  if ($this->tree->isInTree($rolf[0])) {
2016  if ($rolf[0] == ROLE_FOLDER_ID) {
2017  $path = $this->lng->txt("global");
2018  } else {
2019  $tmpPath = $this->tree->getPathFull($rolf[0]);
2020 
2021  // count -1, to exclude the role folder itself
2022  /*for ($i = 1; $i < (count($tmpPath)-1); $i++)
2023  {
2024  if ($path != "")
2025  {
2026  $path .= " > ";
2027  }
2028 
2029  $path .= $tmpPath[$i]["title"];
2030  }*/
2031 
2032  $path = $tmpPath[count($tmpPath) - 1]["title"];
2033  }
2034  } else {
2035  $path = "<b>Rolefolder " . $rolf[0] . " not found in tree! (Role " . $role["obj_id"] . ")</b>";
2036  }
2037 
2038  $disabled = false;
2039 
2040  // disable checkbox for system role for the system user
2041  if (($this->object->getId() == SYSTEM_USER_ID and $role["obj_id"] == SYSTEM_ROLE_ID)
2042  or (!in_array(SYSTEM_ROLE_ID, $rbacreview->assignedRoles($ilUser->getId())) and $role["obj_id"] == SYSTEM_ROLE_ID)) {
2043  $disabled = true;
2044  }
2045 
2046  // protected admin role
2047  if ($role['obj_id'] == SYSTEM_ROLE_ID && !$rbacreview->isAssigned($ilUser->getId(), SYSTEM_ROLE_ID)) {
2048  include_once './Services/PrivacySecurity/classes/class.ilSecuritySettings.php';
2049  if (ilSecuritySettings::_getInstance()->isAdminRoleProtected()) {
2050  $disabled = true;
2051  }
2052  }
2053 
2054  if (substr($role["title"], 0, 3) == "il_") {
2055  if (!$assignable) {
2056  $rolf_arr = $rbacreview->getFoldersAssignedToRole($role["obj_id"], true);
2057  $rolf2 = $rolf_arr[0];
2058  } else {
2059  $rolf2 = $rolf;
2060  }
2061 
2062  $parent_node = $this->tree->getNodeData($rolf2);
2063 
2064  $role["description"] = $this->lng->txt("obj_" . $parent_node["type"]) . "&nbsp;(#" . $parent_node["obj_id"] . ")";
2065  }
2066 
2067  $role_ids[$counter] = $role["obj_id"];
2068 
2069  $result_set[$counter][] = $checkbox = ilUtil::formCheckBox(in_array($role["obj_id"], $assigned_roles), "role_id[]", $role["obj_id"], $disabled) . "<input type=\"hidden\" name=\"role_id_ctrl[]\" value=\"" . $role["obj_id"] . "\"/>";
2070  $this->ctrl->setParameterByClass("ilobjrolegui", "ref_id", $rolf[0]);
2071  $this->ctrl->setParameterByClass("ilobjrolegui", "obj_id", $role["obj_id"]);
2072  $result_set[$counter][] = $link = "<a href=\"" . $this->ctrl->getLinkTargetByClass("ilobjrolegui", "perm") . "\">" . ilObjRole::_getTranslation($role["title"]) . "</a>";
2073  $title = ilObjRole::_getTranslation($role["title"]);
2074  $result_set[$counter][] = $role["description"];
2075 
2076  // Add link to objector local Rores
2077  if ($role["role_type"] == "local") {
2078  // Get Object to the role
2079  $obj_id = $rbacreview->getObjectOfRole($role["rol_id"]);
2080 
2081  $obj_type = ilObject::_lookupType($obj_id);
2082 
2084 
2085  foreach ($ref_ids as $ref_id) {
2086  }
2087 
2088  require_once("./Services/Link/classes/class.ilLink.php");
2089 
2090  $result_set[$counter][] = $context = "<a href='" . ilLink::_getLink($ref_id, ilObject::_lookupType($obj_id)) . "' target='_top'>" . $path . "</a>";
2091  } else {
2092  $result_set[$counter][] = $path;
2093  $context = $path;
2094  }
2095 
2096  $records[] = array("path" => $path, "description" => $role["description"],
2097  "context" => $context, "checkbox" => $checkbox,
2098  "role" => $link, "title" => $title);
2099  ++$counter;
2100  }
2101 
2102  if (true) {
2103  $tab->setData($records);
2104  $this->tpl->setVariable("ROLES_TABLE", $tab->getHTML());
2105  return;
2106  }
2107  }
2108 
2112  public function applyFilterObject()
2113  {
2114  include_once("./Services/User/classes/class.ilRoleAssignmentTableGUI.php");
2115  $table_gui = new ilRoleAssignmentTableGUI($this, "roleassignment");
2116  $table_gui->writeFilterToSession(); // writes filter to session
2117  $table_gui->resetOffset(); // sets record offest to 0 (first page)
2118  $this->roleassignmentObject();
2119  }
2120 
2124  public function resetFilterObject()
2125  {
2126  include_once("./Services/User/classes/class.ilRoleAssignmentTableGUI.php");
2127  $table_gui = new ilRoleAssignmentTableGUI($this, "roleassignment");
2128  $table_gui->resetOffset(); // sets record offest to 0 (first page)
2129  $table_gui->resetFilter(); // clears filter
2130  $this->roleassignmentObject();
2131  }
2132 
2133  public function __getDateSelect($a_type, $a_varname, $a_selected)
2134  {
2135  switch ($a_type) {
2136  case "minute":
2137  for ($i = 0;$i <= 60;$i++) {
2138  $days[$i] = $i < 10 ? "0" . $i : $i;
2139  }
2140  return ilUtil::formSelect($a_selected, $a_varname, $days, false, true);
2141 
2142  case "hour":
2143  for ($i = 0;$i < 24;$i++) {
2144  $days[$i] = $i < 10 ? "0" . $i : $i;
2145  }
2146  return ilUtil::formSelect($a_selected, $a_varname, $days, false, true);
2147 
2148  case "day":
2149  for ($i = 1;$i < 32;$i++) {
2150  $days[$i] = $i < 10 ? "0" . $i : $i;
2151  }
2152  return ilUtil::formSelect($a_selected, $a_varname, $days, false, true);
2153 
2154  case "month":
2155  for ($i = 1;$i < 13;$i++) {
2156  $month[$i] = $i < 10 ? "0" . $i : $i;
2157  }
2158  return ilUtil::formSelect($a_selected, $a_varname, $month, false, true);
2159 
2160  case "year":
2161  if ($a_selected < date('Y', time())) {
2162  $start = $a_selected;
2163  } else {
2164  $start = date('Y', time());
2165  }
2166 
2167  for ($i = $start;$i < date("Y", time()) + 11;++$i) {
2168  $year[$i] = $i;
2169  }
2170  return ilUtil::formSelect($a_selected, $a_varname, $year, false, true);
2171  }
2172  }
2173 
2174  public function __toUnix($a_time_arr)
2175  {
2176  return mktime(
2177  $a_time_arr["hour"],
2178  $a_time_arr["minute"],
2179  $a_time_arr["second"],
2180  $a_time_arr["month"],
2181  $a_time_arr["day"],
2182  $a_time_arr["year"]
2183  );
2184  }
2185 
2186 
2187 
2188 
2189  public function __unsetSessionVariables()
2190  {
2191  unset($_SESSION["filtered_roles"]);
2192  }
2193 
2194  public function __buildFilterSelect()
2195  {
2196  $action[0] = $this->lng->txt('assigned_roles');
2197  $action[1] = $this->lng->txt('all_roles');
2198  $action[2] = $this->lng->txt('all_global_roles');
2199  $action[3] = $this->lng->txt('all_local_roles');
2200  $action[4] = $this->lng->txt('internal_local_roles_only');
2201  $action[5] = $this->lng->txt('non_internal_local_roles_only');
2202 
2203  return ilUtil::formSelect($_SESSION['filtered_roles'], "filter", $action, false, true);
2204  }
2205 
2206  public function hitsperpageObject()
2207  {
2208  parent::hitsperpageObject();
2209  $this->roleassignmentObject();
2210  }
2211 
2216  public function addAdminLocatorItems($a_do_not_add_object = false)
2217  {
2218  global $DIC;
2219 
2220  $ilLocator = $DIC['ilLocator'];
2221 
2222  $ilLocator->clearItems();
2223 
2224  if ($_GET["admin_mode"] == "settings") { // system settings
2225  $this->ctrl->setParameterByClass(
2226  "ilobjsystemfoldergui",
2227  "ref_id",
2228  SYSTEM_FOLDER_ID
2229  );
2230  $ilLocator->addItem(
2231  $this->lng->txt("administration"),
2232  $this->ctrl->getLinkTargetByClass(array("iladministrationgui", "ilobjsystemfoldergui"), ""),
2233  ilFrameTargetInfo::_getFrame("MainContent")
2234  );
2235 
2236  if ($_GET['ref_id'] == USER_FOLDER_ID) {
2237  $ilLocator->addItem(
2238  $this->lng->txt("obj_" . ilObject::_lookupType(
2239  ilObject::_lookupObjId($_GET["ref_id"])
2240  )),
2241  $this->ctrl->getLinkTargetByClass("ilobjuserfoldergui", "view")
2242  );
2243  } elseif ($_GET['ref_id'] == ROLE_FOLDER_ID) {
2244  $ilLocator->addItem(
2245  $this->lng->txt("obj_" . ilObject::_lookupType(
2246  ilObject::_lookupObjId($_GET["ref_id"])
2247  )),
2248  $this->ctrl->getLinkTargetByClass("ilobjrolefoldergui", "view")
2249  );
2250  }
2251 
2252  if ($_GET["obj_id"] > 0) {
2253  $ilLocator->addItem(
2254  $this->object->getTitle(),
2255  $this->ctrl->getLinkTarget($this, "view")
2256  );
2257  }
2258  } else { // repository administration
2259  // ?
2260  }
2261  }
2262 
2263  public function showUpperIcon()
2264  {
2265  }
2266 
2267  public function __sendProfileMail()
2268  {
2269  global $DIC;
2270 
2271  $ilUser = $DIC['ilUser'];
2272  $ilias = $DIC['ilias'];
2273 
2274  if ($_POST['send_mail'] != 'y') {
2275  return '';
2276  }
2277  if (!strlen($this->object->getEmail())) {
2278  return '';
2279  }
2280 
2281  // Choose language of user
2282  $usr_lang = new ilLanguage($this->object->getLanguage());
2283  $usr_lang->loadLanguageModule('crs');
2284  $usr_lang->loadLanguageModule('registration');
2285 
2286  include_once "Services/Mail/classes/class.ilMimeMail.php";
2287 
2289  $senderFactory = $GLOBALS['DIC']["mail.mime.sender.factory"];
2290 
2291  $mmail = new ilMimeMail();
2292  $mmail->From($senderFactory->system());
2293  $mmail->To(ilMailOptions::getExternalEmailsByUser($this->object));
2294 
2295  // mail subject
2296  $subject = $usr_lang->txt("profile_changed");
2297 
2298 
2299  // mail body
2300  $body = ($usr_lang->txt("reg_mail_body_salutation") . " " . $this->object->getFullname() . ",\n\n");
2301 
2302  $date = $this->object->getApproveDate();
2303  // Approve
2304  if ((time() - strtotime($date)) < 10) {
2305  $body .= ($usr_lang->txt('reg_mail_body_approve') . "\n\n");
2306  } else {
2307  $body .= ($usr_lang->txt('reg_mail_body_profile_changed') . "\n\n");
2308  }
2309 
2310  // Append login info only if password has been chacnged
2311  if ($_POST['passwd'] != '') {
2312  $body .= $usr_lang->txt("reg_mail_body_text2") . "\n" .
2313  ILIAS_HTTP_PATH . "/login.php?client_id=" . $ilias->client_id . "\n" .
2314  $usr_lang->txt("login") . ": " . $this->object->getLogin() . "\n" .
2315  $usr_lang->txt("passwd") . ": " . $_POST['passwd'] . "\n\n";
2316  }
2317  $body .= ($usr_lang->txt("reg_mail_body_text3") . "\n");
2318  $body .= $this->object->getProfileAsString($usr_lang);
2319 
2320  $mmail->Subject($subject, true);
2321  $mmail->Body($body);
2322  $mmail->Send();
2323 
2324 
2325  return "<br/>" . $this->lng->txt("mail_sent");
2326  }
2327 
2331  public static function _goto($a_target)
2332  {
2333  global $DIC;
2334 
2335  $ilUser = $DIC['ilUser'];
2336  $ilCtrl = $DIC['ilCtrl'];
2337 
2338  // #10888
2339  if ($a_target == md5("usrdelown")) {
2340  if ($ilUser->getId() != ANONYMOUS_USER_ID &&
2341  $ilUser->hasDeletionFlag()) {
2342  $ilCtrl->initBaseClass("ilpersonaldesktopgui");
2343  $ilCtrl->redirectByClass(array("ilpersonaldesktopgui", "ilpersonalsettingsgui"), "deleteOwnAccount3");
2344  }
2345  exit("This account is not flagged for deletion."); // #12160
2346  }
2347 
2348  // badges
2349  if (substr($a_target, -4) == "_bdg") {
2350  $_GET["baseClass"] = "ilPersonalDesktopGUI";
2351  $_GET["cmd"] = "jumpToBadges";
2352  include("ilias.php");
2353  exit();
2354  }
2355 
2356  if ('registration' == $a_target) {
2357  $_GET["baseClass"] = 'ilStartUpGUI';
2358  $ilCtrl->redirectByClass(array('ilStartUpGUI', 'ilAccountRegistrationGUI'), '');
2359  } elseif ('nameassist' == $a_target) {
2360  $_GET["baseClass"] = 'ilStartUpGUI';
2361  $ilCtrl->redirectByClass(array('ilStartUpGUI', 'ilPasswordAssistanceGUI'), 'showUsernameAssistanceForm');
2362  } elseif ('pwassist' == $a_target) {
2363  $_GET["baseClass"] = 'ilStartUpGUI';
2364  $ilCtrl->redirectByClass(array('ilStartUpGUI', 'ilPasswordAssistanceGUI'), '');
2365  } elseif ('agreement' == $a_target) {
2366  if ($ilUser->getId() > 0 && !$ilUser->isAnonymous()) {
2367  $ilCtrl->setTargetScript('ilias.php');
2368  $ilCtrl->initBaseClass('ilpersonaldesktopgui');
2369  $ilCtrl->redirectByClass(array('ilpersonaldesktopgui', 'ilpersonalprofilegui'), 'showUserAgreement');
2370  } else {
2371  $_GET['baseClass'] = 'ilStartUpGUI';
2372  $ilCtrl->setTargetScript('ilias.php');
2373  $ilCtrl->redirectByClass(array('ilStartUpGUI'), 'showTermsOfService');
2374  }
2375  }
2376 
2377  if (substr($a_target, 0, 1) == "n") {
2378  $a_target = ilObjUser::_lookupId(ilUtil::stripSlashes(substr($a_target, 1)));
2379  }
2380 
2381  if (strpos($a_target, 'contact_approved') !== false) {
2382  $_GET['cmd'] = 'approveContactRequest';
2383  } elseif (strpos($a_target, 'contact_ignored') !== false) {
2384  $_GET['cmd'] = 'ignoreContactRequest';
2385  } else {
2386  $_GET['cmd'] = 'view';
2387  }
2388 
2389  $_GET["user_id"] = (int) $a_target;
2390  $_GET["baseClass"] = "ilPublicUserProfileGUI";
2391  $_GET["cmdClass"] = "ilpublicuserprofilegui";
2392  include("ilias.php");
2393  exit;
2394  }
2395 
2404  protected function handleIgnoredRequiredFields()
2405  {
2406  $profileMaybeIncomplete = false;
2407 
2408  require_once 'Services/User/classes/class.ilUserProfile.php';
2409 
2410  foreach (ilUserProfile::getIgnorableRequiredSettings() as $fieldName) {
2411  $elm = $this->form_gui->getItemByPostVar($fieldName);
2412 
2413  if (!$elm) {
2414  continue;
2415  }
2416 
2417  if ($elm->getRequired()) {
2418  $profileMaybeIncomplete = true;
2419 
2420  // Flag as optional
2421  $elm->setRequired(false);
2422  }
2423  }
2424 
2425  include_once 'Services/User/classes/class.ilUserDefinedFields.php';
2426  $user_defined_fields = ilUserDefinedFields::_getInstance();
2427  foreach ($user_defined_fields->getDefinitions() as $field_id => $definition) {
2428  $elm = $this->form_gui->getItemByPostVar('udf_' . $definition['field_id']);
2429 
2430  if (!$elm) {
2431  continue;
2432  }
2433 
2434  if ($elm->getRequired() && $definition['changeable'] && $definition['required'] && $definition['visible']) {
2435  $profileMaybeIncomplete = true;
2436 
2437  // Flag as optional
2438  $elm->setRequired(false);
2439  }
2440  }
2441 
2442  return $profileMaybeIncomplete;
2443  }
2444 
2448  protected function showAcceptedTermsOfService()
2449  {
2451  $agreeDate = $this->form_gui->getItemByPostVar('agree_date');
2452  if ($agreeDate && $agreeDate->getValue()) {
2453  $this->lng->loadLanguageModule('tos');
2454  $helper = new \ilTermsOfServiceHelper();
2455 
2456  $entity = $helper->getCurrentAcceptanceForUser($this->object);
2457  if ($entity->getId()) {
2458  $modal = $this->uiFactory
2459  ->modal()
2460  ->lightbox([
2461  $this->uiFactory->modal()->lightboxTextPage($entity->getText(), $entity->getTitle())
2462  ]);
2463 
2464  $titleLink = $this->uiFactory
2465  ->button()
2466  ->shy($entity->getTitle(), '#')
2467  ->withOnClick($modal->getShowSignal());
2468 
2469  $agreementDocument = new ilNonEditableValueGUI(
2470  $this->lng->txt('tos_agreement_document'),
2471  '',
2472  true
2473  );
2474  $agreementDocument->setValue($this->uiRenderer->render([$titleLink, $modal]));
2475  $agreeDate->addSubItem($agreementDocument);
2476  }
2477  } elseif ($agreeDate) {
2478  $agreeDate->setValue($this->lng->txt('tos_not_accepted_yet'));
2479  }
2480  }
2481 } // END class.ilObjUserGUI
static isConvertVersionAtLeast($a_version)
Compare convert version numbers.
static _lookupLogin($a_user_id)
lookup login
static isProfileIncomplete($a_user, $a_include_udf=true, $a_personal_data_only=true)
Check if all required personal data fields are set.
Class for user related exception handling in ILIAS.
__construct( $a_data, $a_id, $a_call_by_reference=false, $a_prepare_output=true, ILIAS\UI\Factory $uiFactory=null, ILIAS\UI\Renderer $uiRenderer=null)
ilObjUserGUI constructor.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
This class represents an option in a radio group.
getAdminTabs()
admin and normal tabs are equal for roles
addAdminLocatorItems($a_do_not_add_object=false)
should be overwritten to add object specific items (repository items are preloaded) ...
$path
Definition: aliased.php:25
assignSaveObject()
assign users to role
const IL_PASSWD_PLAIN
$style
Definition: example_012.php:70
getValues()
Get values from user object and put them into form.
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
$context
Definition: webdav.php:25
Class Factory.
createObject()
Display user create form.
const IL_CAL_DATETIME
static _getInstance()
Get instance.
$_SESSION["AccountId"]
This class represents a selection list property in a property form.
This class represents a property form user interface.
handleIgnoredRequiredFields()
Handles ignored required fields by changing the required flag of form elements.
$action
global $DIC
Definition: saml.php:7
This class represents a selection list property in a property form.
$_GET["client_id"]
loadValuesFromForm($a_mode='create')
This class represents a section header in a property form.
uploadUserPictureObject()
upload user image
Class BaseForm.
removeUserPictureObject()
remove user image
static MB2Bytes($a_value)
static _lookupPersonalWorkspaceDiskQuota($a_user_id)
if(!array_key_exists('StateId', $_REQUEST)) $id
This class represents a user login property in a property form.
static _getLastHistoryDataByUserId($a_usr_id)
Returns the last used loginname and the changedate of the passed user_id.
static _lookupId($a_user_str)
Lookup id by login.
This class represents a checkbox property in a property form.
static getIgnorableRequiredSettings()
Returns an array of all ignorable profiel fields.
$from
static _getActiveAuthModes()
static _lookupActivatedStyle($a_skin, $a_style)
lookup if a style is activated
static getAuthModeTranslation($a_auth_key, $auth_name='')
This class represents a email property in a property form.
const IL_CAL_UNIX
$keys
$req
Definition: getUserInfo.php:20
$records
Definition: simple_test.php:22
Class ilObjectOwnershipManagementGUI.
static _resetLoginAttempts($a_usr_id)
static _getAuthMode($a_auth_mode, $a_db_handler='')
static _getAuthModeName($a_auth_key)
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date public.
static _getAssignUsersStatus($a_role_id)
static _getAllReferences($a_id)
get all reference ids of object
static _goto($a_target)
Goto user profile screen.
static getPasswordRequirementsInfo()
infotext for ilPasswordInputGUI setInfo()
static getExternalEmailsByUser(ilObjUser $user, ilMailOptions $mail_options=null)
__toUnix($a_time_arr)
static _allowPasswordModificationByAuthMode($a_auth_mode)
Allow password modification.
This class represents a date/time property in a property form.
$start
Definition: bench.php:8
setInfo($a_info)
Set Information Text.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$a_type
Definition: workflow.php:92
setChecked($a_checked)
Set Checked.
static _enabledUserRelatedData()
check wether user related tracking is enabled or not
isSettingChangeable($a_field)
Check if setting is visible This is the case when called from user folder.
prepareOutput($a_show_subobjects=true)
prepare output
static _enabledLearningProgress()
check wether learing progress is enabled or not
__checkUserDefinedRequiredFields()
display user create form
This class represents a property in a property form.
Class for single dates.
setUseStripSlashes($a_stat)
En/disable use of stripslashes.
static execConvert($args)
execute convert command
Class ilMimeMail.
setImage($a_image)
Set Image.
__getDateSelect($a_type, $a_varname, $a_selected)
resetFilterObject()
Reset filter.
static _lookupDiskQuota($a_user_id)
Gets the disk quota info for the specified user account.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
Class ilObjectGUI Basic methods of all Output classes.
static _lookupObjId($a_id)
setValue($a_value)
Set Value.
static Bytes2MB($a_value)
setSize($a_size)
Set Size.
const UDF_TYPE_TEXT
This class represents a text property in a property form.
Date and time handling
This class represents a password property in a property form.
$ilUser
Definition: imgupload.php:18
redirection script todo: (a better solution should control the processing via a xml file) ...
static clear($a_var)
Unset a value.
editObject()
Display user edit form.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static _isExternalAccountEnabled()
Check if an external account name is required.
setOptions($a_options)
Set Options.
static getFilesizeByOwner($a_owner_id)
Get current storage size for owner.
static _getTranslation($a_role_title)
static _lookupType($a_id, $a_reference=false)
lookup object type
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
$default
Definition: build.php:20
update($pash, $contents, Config $config)
This class represents an image file property in a property form.
exit
Definition: backend.php:16
static _lookupDiskUsage($a_user_id)
Gets the disk usage info for the specified user account.
const IL_CAL_DATE
static _getFrame($a_class, $a_type='')
Get content frame name.
static formSelect( $selected, $varname, $options, $multiple=false, $direct_text=false, $size="0", $style_class="", $attribs="", $disabled=false)
Builds a select form field with options and shows the selected option first.
TableGUI class for role assignment in user administration.
This class represents a non editable value in a property form.
setMulti($a_multi, $a_sortable=false, $a_addremove=true)
Set Multi.
global $l
Definition: afr.php:30
This class represents a property in a property form.
global $ilSetting
Definition: privfeed.php:17
static escapeShellArg($a_arg)
applyFilterObject()
Apply filter.
This class represents a text area property in a property form.
loadLanguageModule($a_module)
saveObject()
save user data public
Class ilAccountMail.
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349
$i
Definition: disco.tpl.php:19
const USER_FOLDER_ID
Class ilObjUserFolder.
This class represents a text property in a property form.
language handling
static formatSize($size, $a_mode='short', $a_lng=null)
Returns the specified file size value in a human friendly form.
setBackTarget($a_text, $a_link)
set back tab target
updateObject()
Update user.
$languages
Definition: cssgen2.php:34
static yn2tf($a_yn)
convert "y"/"n" to true/false
Class ilObjUserGUI.
$info
Definition: index.php:5
static getWebspaceDir($mode="filesystem")
get webspace directory
static _getInstance()
Get instance of ilSecuritySettings.
$key
Definition: croninfo.php:18
Class ilObjUserTrackingGUI.
$_POST["username"]
setRequired($a_required)
Set Required.
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
roleassignmentObject()
display roleassignment panel
static getFilesizeByTypeAndOwner($a_owner_id)
Get current storage size for owner (grouped by type)