ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilUserProfile.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 // mjansen@databay.de essential for mail constants, do not remove this include
5 include_once 'Services/Mail/classes/class.ilMailOptions.php';
6 
16 {
17  const MODE_DESKTOP = 1;
18  const MODE_REGISTRATION = 2;
19 
20  private static $mode = self::MODE_DESKTOP;
21 
22  // this array should be used in all places where user data is tackled
23  // in the future: registration, personal profile, user administration
24  // public profile, user import/export
25  // for now this is not implemented yet. Please list places, that already use it:
26  //
27  // - personal profile
28  // - (global) standard user profile fields settings
29  //
30  // the following attributes are defined (can be extended if needed):
31  // - input: input type
32  // standard inputs: text, radio, selection, textarea
33  // special inputs: login
34  // - input dependend attributes
35  // - maxlength, sizte for text
36  // - values array for radio
37  // - cols/rows for text areas
38  // - options array for selections
39  // - method: ilObjUser get-method, e.g. getFirstname
40  // - group: group id (id is also used as lang_var for sub headers in forms
41  // - lang_var: if key should not be used as lang var, this overwrites the usage in forms
42  // - settings property related attributes, settingsproperties are ("visible", "changeable",
43  // "searchable", "required", "export", "course_export" and "registration")
44  // - <settingsproperty>_hide: hide this property in settings (not implemented)
45  // - <settingsproperty>_fix_value: property has a fix value (cannot be changed)
46  private static $user_field = array(
47  "username" => array(
48  "input" => "login",
49  "maxlength" => 190,
50  "size" => 190,
51  "method" => "getLogin",
52  "course_export_fix_value" => 1,
53  "group_export_fix_value" => 1,
54  "changeable_hide" => true,
55  "required_hide" => true,
56  "group" => "personal_data"),
57  "password" => array(
58  "input" => "password",
59  "required_hide" => true,
60  "visib_reg_hide" => true,
61  'visib_lua_fix_value' => 0,
62  "course_export_hide" => true,
63  "export_hide" => false,
64  "group_export_hide" => true,
65  "lists_hide" => true,
66  "group" => "personal_data"),
67  "firstname" => array(
68  "input" => "text",
69  "maxlength" => 32,
70  "size" => 40,
71  "method" => "getFirstname",
72  "required_fix_value" => 1,
73  "visib_reg_fix_value" => 1,
74  'visib_lua_fix_value' => 1,
75  "course_export_fix_value" => 1,
76  "group_export_fix_value" => 1,
77  "group" => "personal_data"),
78  "lastname" => array(
79  "input" => "text",
80  "maxlength" => 32,
81  "size" => 40,
82  "method" => "getLastname",
83  "required_fix_value" => 1,
84  "visib_reg_fix_value" => 1,
85  'visib_lua_fix_value' => 1,
86  "course_export_fix_value" => 1,
87  "group_export_fix_value" => 1,
88  "group" => "personal_data"),
89  "title" => array(
90  "input" => "text",
91  "lang_var" => "person_title",
92  "maxlength" => 32,
93  "size" => 40,
94  "method" => "getUTitle",
95  "group" => "personal_data"),
96  "birthday" => array(
97  "input" => "birthday",
98  "lang_var" => "birthday",
99  "maxlength" => 32,
100  "size" => 40,
101  "method" => "getBirthday",
102  "group" => "personal_data"),
103  "gender" => array(
104  "input" => "radio",
105  "values" => array("n" => "salutation_n", "f" => "salutation_f", "m" => "salutation_m"),
106  "method" => "getGender",
107  "group" => "personal_data"),
108  "upload" => array(
109  "input" => "picture",
110  "required_hide" => true,
111  "visib_reg_hide" => true,
112  "course_export_hide" => true,
113  "group_export_hide" => true,
114  "lists_hide" => true,
115  "lang_var" => "personal_picture",
116  "group" => "personal_data"),
117  "roles" => array(
118  "input" => "roles",
119  "changeable_hide" => true,
120  "required_hide" => true,
121  "visib_reg_hide" => true,
122  "export_hide" => true,
123  "course_export_hide" => true,
124  "group_export_hide" => true,
125  "lists_hide" => true,
126  "group" => "personal_data"),
127  "interests_general" => array(
128  "input" => "multitext",
129  "maxlength" => 40,
130  "size" => 40,
131  "method" => "getGeneralInterests",
132  "course_export_hide" => true,
133  "group_export_hide" => true,
134  "lists_hide" => true,
135  "group" => "interests"),
136  "interests_help_offered" => array(
137  "input" => "multitext",
138  "maxlength" => 40,
139  "size" => 40,
140  "method" => "getOfferingHelp",
141  "course_export_hide" => true,
142  "group_export_hide" => true,
143  "lists_hide" => true,
144  "group" => "interests"),
145  "interests_help_looking" => array(
146  "input" => "multitext",
147  "maxlength" => 40,
148  "size" => 40,
149  "method" => "getLookingForHelp",
150  "course_export_hide" => true,
151  "group_export_hide" => true,
152  "lists_hide" => true,
153  "group" => "interests"),
154  "org_units" => array(
155  "input" => "noneditable",
156  "lang_var" => "objs_orgu",
157  "required_hide" => true,
158  "visib_reg_hide" => true,
159  "course_export_hide" => false,
160  "group_export_hide" => false,
161  "export_hide" => true,
162  "changeable_hide" => true,
163  "changeable_fix_value" => 0,
164  "changeable_lua_hide" => true,
165  "changeable_lua_fix_value" => 0,
166  "method" => "getOrgUnitsRepresentation",
167  "group" => "contact_data"),
168  "institution" => array(
169  "input" => "text",
170  "maxlength" => 80,
171  "size" => 40,
172  "method" => "getInstitution",
173  "group" => "contact_data"),
174  "department" => array(
175  "input" => "text",
176  "maxlength" => 80,
177  "size" => 40,
178  "method" => "getDepartment",
179  "group" => "contact_data"),
180  "street" => array(
181  "input" => "text",
182  "maxlength" => 40,
183  "size" => 40,
184  "method" => "getStreet",
185  "group" => "contact_data"),
186  "zipcode" => array(
187  "input" => "text",
188  "maxlength" => 10,
189  "size" => 10,
190  "method" => "getZipcode",
191  "group" => "contact_data"),
192  "city" => array(
193  "input" => "text",
194  "maxlength" => 40,
195  "size" => 40,
196  "method" => "getCity",
197  "group" => "contact_data"),
198  "country" => array(
199  "input" => "text",
200  "maxlength" => 40,
201  "size" => 40,
202  "method" => "getCountry",
203  "group" => "contact_data"),
204  "sel_country" => array(
205  "input" => "sel_country",
206  "method" => "getSelectedCountry",
207  "group" => "contact_data"),
208  "phone_office" => array(
209  "input" => "text",
210  "maxlength" => 40,
211  "size" => 40,
212  "method" => "getPhoneOffice",
213  "group" => "contact_data"),
214  "phone_home" => array(
215  "input" => "text",
216  "maxlength" => 40,
217  "size" => 40,
218  "method" => "getPhoneHome",
219  "group" => "contact_data"),
220  "phone_mobile" => array(
221  "input" => "text",
222  "maxlength" => 40,
223  "size" => 40,
224  "method" => "getPhoneMobile",
225  "group" => "contact_data"),
226  "fax" => array(
227  "input" => "text",
228  "maxlength" => 40,
229  "size" => 40,
230  "method" => "getFax",
231  "group" => "contact_data"),
232  "email" => array(
233  "input" => "email",
234  "maxlength" => 40,
235  "size" => 40,
236  "method" => "getEmail",
237  "group" => "contact_data"),
238  "second_email" => array(
239  "input" => "second_email",
240  "maxlength" => 40,
241  "size" => 40,
242  "method" => "getSecondEmail",
243  "group" => "contact_data"),
244  "hobby" => array(
245  "input" => "textarea",
246  "rows" => 3,
247  "cols" => 45,
248  "method" => "getHobby",
249  "lists_hide" => true,
250  "group" => "contact_data"),
251  "referral_comment" => array(
252  "input" => "textarea",
253  "rows" => 3,
254  "cols" => 45,
255  "method" => "getComment",
256  "course_export_hide" => true,
257  "group_export_hide" => true,
258  "lists_hide" => true,
259  "group" => "contact_data"),
260  "matriculation" => array(
261  "input" => "text",
262  "maxlength" => 40,
263  "size" => 40,
264  "method" => "getMatriculation",
265  "group" => "other"),
266  "language" => array(
267  "input" => "language",
268  "method" => "getLanguage",
269  "required_hide" => true,
270  "visib_reg_hide" => true,
271  "course_export_hide" => true,
272  "group_export_hide" => true,
273  "group" => "settings"),
274  "skin_style" => array(
275  "input" => "skinstyle",
276  "required_hide" => true,
277  "visib_reg_hide" => true,
278  "course_export_hide" => true,
279  "group_export_hide" => true,
280  "group" => "settings"),
281  "hits_per_page" => array(
282  "input" => "hitsperpage",
283  "default" => 10,
284  "options" => array(
285  10 => 10, 15 => 15, 20 => 20, 30 => 30, 40 => 40,
286  50 => 50, 100 => 100, 9999 => 9999),
287  "required_hide" => true,
288  "visib_reg_hide" => true,
289  "course_export_hide" => true,
290  "group_export_hide" => true,
291  "group" => "settings"),
292  /*"show_users_online" => array(
293  "input" => "selection",
294  "default" => "y",
295  "options" => array(
296  "y" => "users_online_show_short_y",
297  "associated" => "users_online_show_short_associated",
298  "n" => "users_online_show_short_n"),
299  "required_hide" => true,
300  "visib_reg_hide" => true,
301  "course_export_hide" => true,
302  "group_export_hide" => true,
303  "group" => "settings"),*/
304  "hide_own_online_status" => array(
305  "input" => "selection",
306  "lang_var" => "awrn_user_show",
307  "required_hide" => true,
308  "visib_reg_hide" => true,
309  "course_export_hide" => true,
310  "group_export_hide" => true,
311  "group" => "settings",
312  "default" => "y",
313  "options" => array(
314  "y" => "user_awrn_hide",
315  "n" => "user_awrn_show"
316  )),
317  "bs_allow_to_contact_me" => array(
318  "input" => "selection",
319  "lang_var" => "buddy_allow_to_contact_me",
320  "required_hide" => true,
321  "visib_reg_hide" => true,
322  "course_export_hide" => true,
323  "group_export_hide" => true,
324  "group" => "settings",
325  "default" => "y",
326  "options" => array(
327  "n" => "buddy_allow_to_contact_me_no",
328  "y" => "buddy_allow_to_contact_me_yes"
329  )
330  ),
331  "chat_osc_accept_msg" => array(
332  "input" => "selection",
333  "lang_var" => "chat_osc_accept_msg",
334  "required_hide" => true,
335  "visib_reg_hide" => true,
336  "course_export_hide" => true,
337  "group_export_hide" => true,
338  "group" => "settings",
339  "default" => "y",
340  "options" => array(
341  "n" => "chat_osc_accepts_messages_no",
342  "y" => "chat_osc_accepts_messages_yes"
343  )
344  ),
345  "preferences" => array(
346  "visible_fix_value" => 1,
347  "changeable_fix_value" => 1,
348  "required_hide" => true,
349  "visib_reg_hide" => true,
350  "course_export_hide" => true,
351  "group_export_hide" => true,
352  "group" => "preferences"),
353  "mail_incoming_mail" => array(
354  "input" => "selection",
355  "default" => "y",
356  "options" => array(
357  ilMailOptions::INCOMING_LOCAL => "mail_incoming_local",
358  ilMailOptions::INCOMING_EMAIL => "mail_incoming_smtp",
359  ilMailOptions::INCOMING_BOTH => "mail_incoming_both"),
360  "required_hide" => true,
361  "visib_reg_hide" => true,
362  "course_export_hide" => true,
363  "group_export_hide" => true,
364  "export_hide" => true,
365  "search_hide" => true,
366  "group" => "settings")
367 
368  );
369 
373  public function __construct()
374  {
375  global $DIC;
376 
377  $lng = $DIC['lng'];
378 
379  $this->skip_groups = array();
380  $this->skip_fields = array();
381 
382  // for hide me from awareness tool text
383  // not nicest workaround, but better than using common block
384  $lng->loadLanguageModule("awrn");
385  $lng->loadLanguageModule("buddysystem");
386  }
387 
391  public function getStandardFields()
392  {
393  $fields = array();
394  foreach (self::$user_field as $f => $p) {
395  // skip hidden groups
396  if (in_array($p["group"], $this->skip_groups) ||
397  in_array($f, $this->skip_fields)) {
398  continue;
399  }
400  $fields[$f] = $p;
401  }
402  return $fields;
403  }
404 
410  {
411  global $DIC;
412 
413  $ilSetting = $DIC['ilSetting'];
414 
415  $settings = $ilSetting->getAll();
416 
417  $fields = array();
418  foreach ($this->getStandardFields() as $field => $info) {
419  if ($ilSetting->get('usr_settings_visib_lua_' . $field, 1)) {
420  $fields[$field] = $info;
421  } elseif ($info['visib_lua_fix_value']) {
422  $fields[$field] = $info;
423  }
424  }
425  return $fields;
426  }
427 
428 
432  public function skipGroup($a_group)
433  {
434  $this->skip_groups[] = $a_group;
435  }
436 
440  public function skipField($a_field)
441  {
442  $this->skip_fields[] = $a_field;
443  }
444 
448  public function addStandardFieldsToForm($a_form, $a_user = null, array $custom_fields = null)
449  {
450  global $DIC;
451 
452  $ilSetting = $DIC['ilSetting'];
453  $lng = $DIC['lng'];
454  $rbacreview = $DIC['rbacreview'];
455  $ilias = $DIC['ilias'];
456 
457  // custom registration settings
458  if (self::$mode == self::MODE_REGISTRATION) {
459  include_once 'Services/Registration/classes/class.ilRegistrationSettings.php';
460  $registration_settings = new ilRegistrationSettings();
461 
462  self::$user_field["username"]["group"] = "login_data";
463  self::$user_field["password"]["group"] = "login_data";
464  self::$user_field["language"]["default"] = $lng->lang_key;
465 
466  // different position for role
467  $roles = self::$user_field["roles"];
468  unset(self::$user_field["roles"]);
469  self::$user_field["roles"] = $roles;
470  self::$user_field["roles"]["group"] = "settings";
471  }
472 
473  $fields = $this->getStandardFields();
474  $current_group = "";
475  $custom_fields_done = false;
476  foreach ($fields as $f => $p) {
477  // next group? -> diplay subheader
478  if (($p["group"] != $current_group) &&
480  if (is_array($custom_fields) && !$custom_fields_done) {
481  // should be appended to "other" or at least before "settings"
482  if ($current_group == "other" || $p["group"] == "settings") {
483  // add "other" subheader
484  if ($current_group != "other") {
485  $sh = new ilFormSectionHeaderGUI();
486  $sh->setTitle($lng->txt("other"));
487  $a_form->addItem($sh);
488  }
489  foreach ($custom_fields as $custom_field) {
490  $a_form->addItem($custom_field);
491  }
492  $custom_fields_done = true;
493  }
494  }
495 
496  $sh = new ilFormSectionHeaderGUI();
497  $sh->setTitle($lng->txt($p["group"]));
498  $a_form->addItem($sh);
499  $current_group = $p["group"];
500  }
501 
502  $m = "";
503  if (isset($p["method"])) {
504  $m = $p["method"];
505  }
506 
507  $lv = (isset($p["lang_var"]) && $p["lang_var"] != "")
508  ? $p["lang_var"]
509  : $f;
510 
511  switch ($p["input"]) {
512  case "login":
513  if ((int) $ilSetting->get('allow_change_loginname') || self::$mode == self::MODE_REGISTRATION) {
514  $val = new ilTextInputGUI($lng->txt('username'), 'username');
515  if ($a_user) {
516  $val->setValue($a_user->getLogin());
517  }
518  $val->setMaxLength($p['maxlength']);
519  $val->setSize(255);
520  $val->setRequired(true);
521  } else {
522  // user account name
523  $val = new ilNonEditableValueGUI($lng->txt("username"), 'ne_un');
524  if ($a_user) {
525  $val->setValue($a_user->getLogin());
526  }
527  }
528  $a_form->addItem($val);
529  break;
530 
531  case "text":
533  $ti = new ilTextInputGUI($lng->txt($lv), "usr_" . $f);
534  if ($a_user) {
535  $ti->setValue($a_user->$m());
536  }
537  $ti->setMaxLength($p["maxlength"]);
538  $ti->setSize($p["size"]);
539  $ti->setRequired($ilSetting->get("require_" . $f));
540  if (!$ti->getRequired() || $ti->getValue()) {
541  $ti->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
542  }
543  $a_form->addItem($ti);
544  }
545  break;
546 
547  case "sel_country":
549  include_once("./Services/Form/classes/class.ilCountrySelectInputGUI.php");
550  $ci = new ilCountrySelectInputGUI($lng->txt($lv), "usr_" . $f);
551  if ($a_user) {
552  $ci->setValue($a_user->$m());
553  }
554  $ci->setRequired($ilSetting->get("require_" . $f));
555  if (!$ci->getRequired() || $ci->getValue()) {
556  $ci->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
557  }
558  $a_form->addItem($ci);
559  }
560  break;
561 
562  case "birthday":
564  $bi = new ilBirthdayInputGUI($lng->txt($lv), "usr_" . $f);
565  include_once "./Services/Calendar/classes/class.ilDateTime.php";
566  $date = null;
567  if ($a_user && strlen($a_user->$m())) {
568  $date = new ilDateTime($a_user->$m(), IL_CAL_DATE);
569  $bi->setDate($date);
570  }
571  $bi->setRequired($ilSetting->get("require_" . $f));
572  if (!$bi->getRequired() || $date) {
573  $bi->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
574  }
575  $a_form->addItem($bi);
576  }
577  break;
578 
579  case "radio":
581  $rg = new ilRadioGroupInputGUI($lng->txt($lv), "usr_" . $f);
582  if ($a_user) {
583  $rg->setValue($a_user->$m());
584  }
585  foreach ($p["values"] as $k => $v) {
586  $op = new ilRadioOption($lng->txt($v), $k);
587  $rg->addOption($op);
588  }
589  $rg->setRequired($ilSetting->get("require_" . $f));
590  if (!$rg->getRequired() || $rg->getValue()) {
591  $rg->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
592  }
593  $a_form->addItem($rg);
594  }
595  break;
596 
597  case "picture":
598  if (ilUserProfile::userSettingVisible("upload") && $a_user) {
599  $ii = new ilImageFileInputGUI($lng->txt("personal_picture"), "userfile");
600  $ii->setDisabled($ilSetting->get("usr_settings_disable_upload"));
601 
602  $upload = $a_form->getFileUpload("userfile");
603  if ($upload["name"]) {
604  $ii->setPending($upload["name"]);
605  } else {
606  $im = ilObjUser::_getPersonalPicturePath(
607  $a_user->getId(),
608  "small",
609  true,
610  true
611  );
612  if ($im != "") {
613  $ii->setImage($im);
614  $ii->setAlt($lng->txt("personal_picture"));
615  }
616  }
617 
618  $a_form->addItem($ii);
619  }
620  break;
621 
622  case "roles":
623  if (self::$mode == self::MODE_DESKTOP) {
624  if (ilUserProfile::userSettingVisible("roles")) {
625  $global_roles = $rbacreview->getGlobalRoles();
626  foreach ($global_roles as $role_id) {
627  if (in_array($role_id, $rbacreview->assignedRoles($a_user->getId()))) {
628  $roleObj = $ilias->obj_factory->getInstanceByObjId($role_id);
629  $role_names .= $roleObj->getTitle() . ", ";
630  unset($roleObj);
631  }
632  }
633  $dr = new ilNonEditableValueGUI($lng->txt("default_roles"), "ne_dr");
634  $dr->setValue(substr($role_names, 0, -2));
635  $a_form->addItem($dr);
636  }
637  } elseif (self::$mode == self::MODE_REGISTRATION) {
638  if ($registration_settings->roleSelectionEnabled()) {
639  include_once("./Services/AccessControl/classes/class.ilObjRole.php");
640  $options = array();
641  foreach (ilObjRole::_lookupRegisterAllowed() as $role) {
642  $options[$role["id"]] = $role["title"];
643  }
644  // registration form validation will take care of missing field / value
645  if ($options) {
646  if (sizeof($options) > 1) {
647  $ta = new ilSelectInputGUI($lng->txt('default_role'), "usr_" . $f);
648  $ta->setOptions($options);
649  $ta->setRequired($ilSetting->get("require_" . $f));
650  if (!$ta->getRequired()) {
651  $ta->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
652  }
653  }
654  // no need for select if only 1 option
655  else {
656  $ta = new ilHiddenInputGUI("usr_" . $f);
657  $ta->setValue(array_shift(array_keys($options)));
658  }
659  $a_form->addItem($ta);
660  }
661  }
662  }
663  break;
664 
665  case "email":
667  $em = new ilEMailInputGUI($lng->txt($lv), "usr_" . $f);
668  if ($a_user) {
669  $em->setValue($a_user->$m());
670  }
671  $em->setRequired($ilSetting->get("require_" . $f));
672  if (!$em->getRequired() || $em->getValue()) {
673  $em->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
674  }
675  if (self::MODE_REGISTRATION == self::$mode) {
676  $em->setRetype(true);
677  }
678  $a_form->addItem($em);
679  }
680  break;
681  case "second_email":
683  $em = new ilEMailInputGUI($lng->txt($lv), "usr_" . $f);
684  if ($a_user) {
685  $em->setValue($a_user->$m());
686  }
687  $em->setRequired($ilSetting->get("require_" . $f));
688  if (!$em->getRequired() || $em->getValue()) {
689  $em->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
690  }
691  if (self::MODE_REGISTRATION == self::$mode) {
692  $em->setRetype(true);
693  }
694  $a_form->addItem($em);
695  }
696  break;
697  case "textarea":
699  $ta = new ilTextAreaInputGUI($lng->txt($lv), "usr_" . $f);
700  if ($a_user) {
701  $ta->setValue($a_user->$m());
702  }
703  $ta->setRows($p["rows"]);
704  $ta->setCols($p["cols"]);
705  $ta->setRequired($ilSetting->get("require_" . $f));
706  if (!$ta->getRequired() || $ta->getValue()) {
707  $ta->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
708  }
709  $a_form->addItem($ta);
710  }
711  break;
712 
713  case "password":
714  if (self::$mode == self::MODE_REGISTRATION) {
715  if (!$registration_settings->passwordGenerationEnabled()) {
716  $ta = new ilPasswordInputGUI($lng->txt($lv), "usr_" . $f);
717  $ta->setUseStripSlashes(false);
718  $ta->setRequired(true);
719  $ta->setInfo(ilUtil::getPasswordRequirementsInfo());
720  // $ta->setDisabled($ilSetting->get("usr_settings_disable_".$f));
721  } else {
722  $ta = new ilNonEditableValueGUI($lng->txt($lv));
723  $ta->setValue($lng->txt("reg_passwd_via_mail"));
724  }
725  $a_form->addItem($ta);
726  }
727  break;
728 
729  case "language":
731  $ta = new ilSelectInputGUI($lng->txt($lv), "usr_" . $f);
732  if ($a_user) {
733  $ta->setValue($a_user->$m());
734  }
735  $options = array();
736  $lng->loadLanguageModule("meta");
737  foreach ($lng->getInstalledLanguages() as $lang_key) {
738  $options[$lang_key] = $lng->txt("meta_l_" . $lang_key);
739  }
740  asort($options); // #9728
741  $ta->setOptions($options);
742  $ta->setRequired($ilSetting->get("require_" . $f));
743  if (!$ta->getRequired() || $ta->getValue()) {
744  $ta->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
745  }
746  $a_form->addItem($ta);
747  }
748  break;
749 
750  case "multitext":
752  $ti = new ilTextInputGUI($lng->txt($lv), "usr_" . $f);
753  $ti->setMulti(true);
754  if ($a_user) {
755  $ti->setValue($a_user->$m());
756  }
757  $ti->setMaxLength($p["maxlength"]);
758  $ti->setSize($p["size"]);
759  $ti->setRequired($ilSetting->get("require_" . $f));
760  if (!$ti->getRequired() || $ti->getValue()) {
761  $ti->setDisabled($ilSetting->get("usr_settings_disable_" . $f));
762  }
763  if ($this->ajax_href) {
764  // add field to ajax call
765  $ti->setDataSource($this->ajax_href . "&f=" . $f);
766  }
767  $a_form->addItem($ti);
768  }
769  break;
770  case "noneditable":
771  if (self::$mode == self::MODE_DESKTOP && ilUserProfile::userSettingVisible($f)) {
772  $ne = new ilNonEditableValueGUI($lng->txt($lv));
773  $ne->setValue($a_user->$m());
774  $a_form->addItem($ne);
775  }
776  break;
777  }
778  }
779 
780  // append custom fields as "other"
781  if (is_array($custom_fields) && !$custom_fields_done) {
782  // add "other" subheader
783  if ($current_group != "other") {
784  $sh = new ilFormSectionHeaderGUI();
785  $sh->setTitle($lng->txt("other"));
786  $a_form->addItem($sh);
787  }
788  foreach ($custom_fields as $custom_field) {
789  $a_form->addItem($custom_field);
790  }
791  }
792  }
793 
794  public function setAjaxCallback($a_href)
795  {
796  $this->ajax_href = $a_href;
797  }
798 
802  public static function userSettingVisible($a_setting)
803  {
804  global $DIC;
805 
806  $ilSetting = $DIC['ilSetting'];
807 
808  if (self::$mode == self::MODE_DESKTOP) {
809  return ($ilSetting->get("usr_settings_hide_" . $a_setting) != 1);
810  } else {
811  if (isset(self::$user_field[$a_setting]["visib_reg_hide"]) && self::$user_field[$a_setting]["visib_reg_hide"] === true) {
812  return true;
813  }
814  return ($ilSetting->get("usr_settings_visib_reg_" . $a_setting, "1") || $ilSetting->get("require_" . $a_setting, "0"));
815  }
816  }
817 
818  public static function setMode($mode)
819  {
820  global $DIC;
821 
822  $lng = $DIC['lng'];
823 
824  if (in_array($mode, array(self::MODE_DESKTOP, self::MODE_REGISTRATION))) {
825  self::$mode = $mode;
826  return true;
827  }
828  return false;
829  }
830 
839  public static function isProfileIncomplete($a_user, $a_include_udf = true, $a_personal_data_only = true)
840  {
841  global $DIC;
842 
843  $ilSetting = $DIC['ilSetting'];
844 
845  // standard fields
846  foreach (self::$user_field as $field => $definition) {
847  // only if visible in personal data
848  if ($a_personal_data_only && $ilSetting->get("usr_settings_hide_" . $field)) {
849  continue;
850  }
851 
852  if ($ilSetting->get("require_" . $field) && $definition["method"]) {
853  $value = $a_user->{$definition["method"]}();
854  if ($value == "") {
855  return true;
856  }
857  }
858  }
859 
860  // custom fields
861  if ($a_include_udf) {
862  $user_defined_data = $a_user->getUserDefinedData();
863 
864  include_once './Services/User/classes/class.ilUserDefinedFields.php';
865  $user_defined_fields = ilUserDefinedFields::_getInstance();
866  foreach ($user_defined_fields->getRequiredDefinitions() as $field => $definition) {
867  // only if visible in personal data
868  if ($a_personal_data_only && !$definition["visible"]) {
869  continue;
870  }
871 
872  if (!$user_defined_data["f_" . $field]) {
873  ilLoggerFactory::getLogger('user')->info('Profile is incomplete due to missing required udf.');
874  return true;
875  }
876  }
877  }
878 
879  return false;
880  }
881 
892  protected static function isEditableByUser($setting)
893  {
899  global $DIC;
900 
901  $ilSetting = $DIC['ilSetting'];
902 
903  // Not visible in personal data or not changeable
904  if ($ilSetting->get('usr_settings_hide_' . $setting) == 1 ||
905  $ilSetting->get('usr_settings_disable_' . $setting) == 1) {
906  // User has no chance to edit this field
907  return false;
908  }
909 
910  return true;
911  }
912 
922  public static function getIgnorableRequiredSettings()
923  {
929  global $DIC;
930 
931  $ilSetting = $DIC['ilSetting'];
932 
933  $ignorableSettings = array();
934 
935  foreach (self::$user_field as $field => $definition) {
936  // !!!username and password must not be ignored!!!
937  if ('username' == $field ||
938  'password' == $field) {
939  continue;
940  }
941 
942  // Field is not required -> continue
943  if (!$ilSetting->get('require_' . $field)) {
944  continue;
945  }
946 
947  if (self::isEditableByUser($field)) {
948  $ignorableSettings[] = $field;
949  }
950  }
951 
952  return $ignorableSettings;
953  }
954 }
static isProfileIncomplete($a_user, $a_include_udf=true, $a_personal_data_only=true)
Check if all required personal data fields are set.
setValue($a_value)
Set Value.
This class represents an option in a radio group.
static _getInstance()
Get instance.
getLocalUserAdministrationFields()
Get visible fields in local user administration.
This class represents a selection list property in a property form.
static _lookupRegisterAllowed()
get all roles that are activated in user registration
global $DIC
Definition: saml.php:7
This class represents a selection list property in a property form.
getStandardFields()
Get standard user fields array.
This class represents a section header in a property form.
__construct()
Constructor.
static userSettingVisible($a_setting)
Checks whether user setting is visible.
setValue($a_value)
Set Value.
Class ilUserProfile.
static getIgnorableRequiredSettings()
Returns an array of all ignorable profiel fields.
This class represents a email property in a property form.
skipField($a_field)
Skip a field.
static getPasswordRequirementsInfo()
infotext for ilPasswordInputGUI setInfo()
static isEditableByUser($setting)
Returns whether a profile setting is editable by an user in the profile gui.
This class represents a hidden form property in a property form.
This class represents a property in a property form.
setUseStripSlashes($a_stat)
En/disable use of stripslashes.
$lng
setValue($a_value)
Set Value.
This class represents a text property in a property form.
Date and time handling
This class represents a password property in a property form.
setOptions($a_options)
Set Options.
static setMode($mode)
This class represents an image file property in a property form.
const IL_CAL_DATE
This class represents a non editable value in a property form.
setMulti($a_multi, $a_sortable=false, $a_addremove=true)
Set Multi.
global $ilSetting
Definition: privfeed.php:17
setDate($a_date, $a_format)
Set date.
This class represents a text area property in a property form.
setDisabled($a_disabled)
This class represents a text property in a property form.
static getLogger($a_component_id)
Get component logger.
addStandardFieldsToForm($a_form, $a_user=null, array $custom_fields=null)
Add standard fields to form.
$info
Definition: index.php:5
setValue($a_value)
Set Value.
skipGroup($a_group)
Skip a group.