ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
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
4require_once "./Services/Object/classes/class.ilObjectGUI.php";
5include_once('./Services/Calendar/classes/class.ilDatePresentation.php');
6
19{
21
28
34 var $type;
35
42
47 function ilObjUserGUI($a_data,$a_id,$a_call_by_reference = false, $a_prepare_output = true)
48 {
49 global $ilCtrl, $lng;
50
51 define('USER_FOLDER_ID',7);
52
53 $this->type = "usr";
54 $this->ilObjectGUI($a_data,$a_id,$a_call_by_reference, false);
55 $this->usrf_ref_id =& $this->ref_id;
56
57 $this->ctrl =& $ilCtrl;
58 $this->ctrl->saveParameter($this, array('obj_id', 'letter'));
59 $this->ctrl->setParameterByClass("ilobjuserfoldergui", "letter", $_GET["letter"]);
60
61 $lng->loadLanguageModule('user');
62
63 // for gender selection. don't change this
64 // maybe deprecated
65 $this->gender = array(
66 'm' => "salutation_m",
67 'f' => "salutation_f"
68 );
69 }
70
71 function &executeCommand()
72 {
73 global $rbacsystem;
74
75 $next_class = $this->ctrl->getNextClass($this);
76 $cmd = $this->ctrl->getCmd();
77
78 $this->prepareOutput();
79
80 switch($next_class)
81 {
82 case "illearningprogressgui":
83 include_once './Services/Tracking/classes/class.ilLearningProgressGUI.php';
85 $this->ctrl->forwardCommand($new_gui);
86 break;
87
88 case "ilobjectownershipmanagementgui":
89 include_once("Services/Object/classes/class.ilObjectOwnershipManagementGUI.php");
90 $gui = new ilObjectOwnershipManagementGUI($this->object->getId());
91 $this->ctrl->forwardCommand($gui);
92 break;
93
94 default:
95 if($cmd == "" || $cmd == "view")
96 {
97 $cmd = "edit";
98 }
99 $cmd .= "Object";
100 $return = $this->$cmd();
101
102 break;
103 }
104 return $return;
105 }
106
107 /* Overwritten from base class
108 */
110 {
111 if(strtolower(get_class($this->object)) == 'ilobjuser')
112 {
113 $this->tpl->setTitle('['.$this->object->getLogin().'] '.$this->object->getTitle());
114 $this->tpl->setDescription($this->object->getLongDescription());
115 $this->tpl->setTitleIcon(ilUtil::getImagePath("icon_".$this->object->getType().".svg"), $this->lng->txt("obj_" . $this->object->getType()));
116 }
117 else
118 {
119 parent::setTitleAndDescription();
120 }
121 }
122
123
124
125 function cancelObject()
126 {
127 ilSession::clear("saved_post");
128
129 if(strtolower($_GET["baseClass"]) == 'iladministrationgui')
130 {
131 $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
132 //$return_location = $_GET["cmd_return_location"];
133 //ilUtil::redirect($this->ctrl->getLinkTarget($this,$return_location));
134 }
135 else
136 {
137 $this->ctrl->redirectByClass('ilobjcategorygui','listUsers');
138 }
139 }
140
144 function getAdminTabs(&$tabs_gui)
145 {
146 $this->getTabs($tabs_gui);
147 }
148
152 function getTabs(&$tabs_gui)
153 {
154 global $rbacsystem, $ilHelp;
155
156 $tabs_gui->clearTargets();
157
158 $ilHelp->setScreenIdComponent("usr");
159
160 if ($_GET["search"])
161 {
162 $tabs_gui->setBackTarget(
163 $this->lng->txt("search_results"),$_SESSION["usr_search_link"]);
164
165 $tabs_gui->addTarget("properties",
166 $this->ctrl->getLinkTarget($this, "edit"), array("edit","","view"), get_class($this),"",true);
167 }
168 else
169 {
170 $tabs_gui->addTarget("properties",
171 $this->ctrl->getLinkTarget($this, "edit"), array("edit","","view"), get_class($this));
172 }
173
174 $tabs_gui->addTarget("role_assignment",
175 $this->ctrl->getLinkTarget($this, "roleassignment"), array("roleassignment"), get_class($this));
176
177 // learning progress
178 include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
179 if($rbacsystem->checkAccess('read',$this->ref_id) and
182 {
183
184 $tabs_gui->addTarget('learning_progress',
185 $this->ctrl->getLinkTargetByClass('illearningprogressgui',''),
186 '',
187 array('illplistofobjectsgui','illplistofsettingsgui','illearningprogressgui','illplistofprogressgui'));
188 }
189
190 $tabs_gui->addTarget('user_ownership',
191 $this->ctrl->getLinkTargetByClass('ilobjectownershipmanagementgui',''),
192 '',
193 'ilobjectownershipmanagementgui');
194 }
195
199 function setBackTarget($a_text, $a_link)
200 {
201 $this->back_target = array("text" => $a_text,
202 "link" => $a_link);
203 }
204
210 {
211 include_once './Services/User/classes/class.ilUserDefinedFields.php';
212 $this->user_defined_fields =& ilUserDefinedFields::_getInstance();
213
214 foreach($this->user_defined_fields->getDefinitions() as $field_id => $definition)
215 {
216 if($definition['required'] and !strlen($_POST['udf'][$field_id]))
217 {
218 return false;
219 }
220 }
221 return true;
222 }
223
224
226 {
227 include_once './Services/User/classes/class.ilUserDefinedFields.php';
228 $this->user_defined_fields =& ilUserDefinedFields::_getInstance();
229
230 if($this->object->getType() == 'usr')
231 {
232 $user_defined_data = $this->object->getUserDefinedData();
233 }
234 foreach($this->user_defined_fields->getDefinitions() as $field_id => $definition)
235 {
236 $old = isset($_SESSION["error_post_vars"]["udf"][$field_id]) ?
237 $_SESSION["error_post_vars"]["udf"][$field_id] : $user_defined_data[$field_id];
238
239 if($definition['field_type'] == UDF_TYPE_TEXT)
240 {
241 $this->tpl->setCurrentBlock("field_text");
242 $this->tpl->setVariable("FIELD_NAME",'udf['.$definition['field_id'].']');
243 $this->tpl->setVariable("FIELD_VALUE",ilUtil::prepareFormOutput($old));
244 $this->tpl->parseCurrentBlock();
245 }
246 else
247 {
248 $this->tpl->setCurrentBlock("field_select");
249 $this->tpl->setVariable("SELECT_BOX",ilUtil::formSelect($old,
250 'udf['.$definition['field_id'].']',
251 $this->user_defined_fields->fieldValuesToSelectArray(
252 $definition['field_values']),
253 false,
254 true));
255 $this->tpl->parseCurrentBlock();
256 }
257 $this->tpl->setCurrentBlock("user_defined");
258
259 if($definition['required'])
260 {
261 $name = $definition['field_name']."<span class=\"asterisk\">*</span>";
262 }
263 else
264 {
265 $name = $definition['field_name'];
266 }
267 $this->tpl->setVariable("TXT_FIELD_NAME",$name);
268 $this->tpl->parseCurrentBlock();
269 }
270 return true;
271 }
272
273 function initCreate()
274 {
275 global $tpl, $rbacsystem, $rbacreview, $ilUser;
276
277 if($this->usrf_ref_id != USER_FOLDER_ID)
278 {
279 $this->tabs_gui->clearTargets();
280 }
281
282 // role selection
283 $obj_list = $rbacreview->getRoleListByObject(ROLE_FOLDER_ID);
284 $rol = array();
285 foreach ($obj_list as $obj_data)
286 {
287 // allow only 'assign_users' marked roles if called from category
288 if($this->object->getRefId() != USER_FOLDER_ID and !in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())))
289 {
290 include_once './Services/AccessControl/classes/class.ilObjRole.php';
291
292 if(!ilObjRole::_getAssignUsersStatus($obj_data['obj_id']))
293 {
294 continue;
295 }
296 }
297 // exclude anonymous role from list
298 if ($obj_data["obj_id"] != ANONYMOUS_ROLE_ID)
299 {
300 // do not allow to assign users to administrator role if current user does not has SYSTEM_ROLE_ID
301 if ($obj_data["obj_id"] != SYSTEM_ROLE_ID or in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())))
302 {
303 $rol[$obj_data["obj_id"]] = $obj_data["title"];
304 }
305 }
306 }
307
308 // raise error if there is no global role user can be assigned to
309 if(!count($rol))
310 {
311 $this->ilias->raiseError($this->lng->txt("msg_no_roles_users_can_be_assigned_to"),$this->ilias->error_obj->MESSAGE);
312 }
313
314 $keys = array_keys($rol);
315
316 // set pre defined user role to default
317 if (in_array(4,$keys))
318 {
319 $this->default_role = 4;
320 }
321 else
322 {
323 if (count($keys) > 1 and in_array(2,$keys))
324 {
325 // remove admin role as preselectable role
326 foreach ($keys as $key => $val)
327 {
328 if ($val == 2)
329 {
330 unset($keys[$key]);
331 break;
332 }
333 }
334 }
335
336 $this->default_role = array_shift($keys);
337 }
338 $this->selectable_roles = $rol;
339 }
340
344 function createObject()
345 {
346 global $tpl, $rbacsystem, $rbacreview, $ilUser;
347
348 if (!$rbacsystem->checkAccess('create_usr', $this->usrf_ref_id) and
349 !$rbacsystem->checkAccess('cat_administrate_users',$this->usrf_ref_id))
350 {
351 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
352 }
353
354 $this->initCreate();
355 $this->initForm("create");
356 return $tpl->setContent($this->form_gui->getHtml());
357 }
358
363 function saveObject()
364 {
365 global $ilAccess, $ilSetting, $tpl, $ilUser, $rbacadmin, $rbacsystem;
366
367 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
368
369 // User folder
370 if (!$rbacsystem->checkAccess('create_usr', $this->usrf_ref_id) &&
371 !$ilAccess->checkAccess('cat_administrate_users', "", $this->usrf_ref_id))
372 {
373 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
374 }
375
376 $this->initCreate();
377 $this->initForm("create");
378
379 // Manipulate form so ignore required fields are no more required. This has to be done before ilPropertyFormGUI::checkInput() is called.
380 $profileMaybeIncomplete = false;
381 if($this->form_gui->getInput('ignore_rf', false))
382 {
383 $profileMaybeIncomplete = $this->handleIgnoredRequiredFields();
384 }
385
386 if ($this->form_gui->checkInput())
387 {
388// @todo: external account; time limit check and savings
389 $role_select = $this->form_gui->getItemByPostVar('default_role');
390 if(!array_key_exists($role_select->getValue(), (array) $role_select->getOptions()))
391 {
392 $role_select->setAlert($this->lng->txt('err_invalid_form_input'));
393 ilUtil::sendFailure($this->lng->txt('err_check_input'));
394 $this->form_gui->setValuesByPost();
395 return $tpl->setContent($this->form_gui->getHtml());
396 }
397
398 // checks passed. save user
399 $userObj = $this->loadValuesFromForm();
400
401 $userObj->setPasswd($this->form_gui->getInput('passwd'),IL_PASSWD_PLAIN);
402 $userObj->setTitle($userObj->getFullname());
403 $userObj->setDescription($userObj->getEmail());
404
405 $udf = array();
406 foreach($_POST as $k => $v)
407 {
408 if (substr($k, 0, 4) == "udf_")
409 {
410 $udf[substr($k, 4)] = $v;
411 }
412 }
413 $userObj->setUserDefinedData($udf);
414
415 $userObj->create();
416
417 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
419 {
420 $userObj->setExternalAccount($_POST["ext_account"]);
421 }
422
423 // set a timestamp for last_password_change
424 // this ts is needed by ilSecuritySettings
425 $userObj->setLastPasswordChangeTS( time() );
426
427 //insert user data in table user_data
428 $userObj->saveAsNew();
429
430 // setup user preferences
431 if($this->isSettingChangeable('language'))
432 {
433 $userObj->setLanguage($_POST["language"]);
434 }
435
436 // Set disk quota
437 require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
439 {
440 // The disk quota is entered in megabytes but stored in bytes
441 $userObj->setPref("disk_quota", trim($_POST["disk_quota"]) * ilFormat::_getSizeMagnitude() * ilFormat::_getSizeMagnitude());
442 }
443
444 if($this->isSettingChangeable('skin_style'))
445 {
446 //set user skin and style
447 $sknst = explode(":", $_POST["skin_style"]);
448
449 if ($userObj->getPref("style") != $sknst[1] ||
450 $userObj->getPref("skin") != $sknst[0])
451 {
452 $userObj->setPref("skin", $sknst[0]);
453 $userObj->setPref("style", $sknst[1]);
454 }
455 }
456 if($this->isSettingChangeable('hits_per_page'))
457 {
458 $userObj->setPref("hits_per_page", $_POST["hits_per_page"]);
459 }
460 if($this->isSettingChangeable('show_users_online'))
461 {
462 $userObj->setPref("show_users_online", $_POST["show_users_online"]);
463 }
464 if($this->isSettingChangeable('hide_own_online_status'))
465 {
466 $userObj->setPref("hide_own_online_status", $_POST["hide_own_online_status"] ? 'y' : 'n');
467 }
468 if((int)$ilSetting->get('session_reminder_enabled'))
469 {
470 $userObj->setPref('session_reminder_enabled', (int)$_POST['session_reminder_enabled']);
471 }
472 $userObj->writePrefs();
473
474 //set role entries
475 $rbacadmin->assignUser($_POST["default_role"],$userObj->getId(),true);
476
477 $msg = $this->lng->txt("user_added");
478
479 $ilUser->setPref('send_info_mails', ($_POST['send_mail'] == 'y') ? 'y' : 'n');
480 $ilUser->writePrefs();
481
482 $this->object = $userObj;
483
484 if($this->isSettingChangeable('upload'))
485 {
487 }
488
489 if( $profileMaybeIncomplete )
490 {
491 include_once 'Services/User/classes/class.ilUserProfile.php';
492 if( ilUserProfile::isProfileIncomplete($this->object) )
493 {
494 $this->object->setProfileIncomplete( true );
495 $this->object->update();
496 }
497 }
498
499 // send new account mail
500 if($_POST['send_mail'] == 'y')
501 {
502 include_once('Services/Mail/classes/class.ilAccountMail.php');
503 $acc_mail = new ilAccountMail();
504 $acc_mail->useLangVariablesAsFallback(true);
505 $acc_mail->setUserPassword($_POST['passwd']);
506 $acc_mail->setUser($userObj);
507
508 if ($acc_mail->send())
509 {
510 $msg = $msg.'<br />'.$this->lng->txt('mail_sent');
511 ilUtil::sendSuccess($msg, true);
512 }
513 else
514 {
515 $msg = $msg.'<br />'.$this->lng->txt('mail_not_sent');
516 ilUtil::sendInfo($msg, true);
517 }
518 }
519 else
520 {
521 ilUtil::sendSuccess($msg, true);
522 }
523
524
525 if(strtolower($_GET["baseClass"]) == 'iladministrationgui')
526 {
527 $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
528 }
529 else
530 {
531 $this->ctrl->redirectByClass('ilobjcategorygui','listUsers');
532 }
533 }
534 else
535 {
536 $this->form_gui->setValuesByPost();
537 $tpl->setContent($this->form_gui->getHtml());
538 }
539 }
540
546 function editObject()
547 {
548 global $ilias, $rbacsystem, $rbacreview, $rbacadmin, $styleDefinition, $ilUser
550
551 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
552
553 //load ILIAS settings
554 $settings = $ilias->getAllSettings();
555
556 // User folder
557 if($this->usrf_ref_id == USER_FOLDER_ID and !$rbacsystem->checkAccess('visible,read',$this->usrf_ref_id))
558 {
559 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
560 }
561 // if called from local administration $this->usrf_ref_id is category id
562 // Todo: this has to be fixed. Do not mix user folder id and category id
563 if($this->usrf_ref_id != USER_FOLDER_ID)
564 {
565 // check if user is assigned to category
566 if(!$rbacsystem->checkAccess('cat_administrate_users',$this->object->getTimeLimitOwner()))
567 {
568 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
569 }
570 }
571
572 if($this->usrf_ref_id != USER_FOLDER_ID)
573 {
574 $this->tabs_gui->clearTargets();
575 }
576
577 // get form
578 $this->initForm("edit");
579 $this->getValues();
580 $this->showAcceptedTermsOfService();
581 $this->tpl->setContent($this->form_gui->getHTML());
582 }
583
588 protected function loadValuesFromForm($a_mode = 'create')
589 {
590 global $ilSetting,$ilUser;
591
592 switch($a_mode)
593 {
594 case 'create':
595 $user = new ilObjUser();
596 break;
597
598 case 'update':
599 $user = $this->object;
600 break;
601 }
602
603 $from = new ilDateTime($_POST['time_limit_from']['date'].' '.$_POST['time_limit_from']['time'],IL_CAL_DATETIME);
604 $user->setTimeLimitFrom($from->get(IL_CAL_UNIX));
605
606 $until = new ilDateTime($_POST['time_limit_until']['date'].' '.$_POST['time_limit_until']['time'],IL_CAL_DATETIME);
607 $user->setTimeLimitUntil($until->get(IL_CAL_UNIX));
608
609 $user->setTimeLimitUnlimited($this->form_gui->getInput('time_limit_unlimited'));
610
611 if($a_mode == 'create')
612 {
613 $user->setTimeLimitOwner($this->usrf_ref_id);
614 }
615
616 // Birthday
617 if($this->isSettingChangeable('birthday'))
618 {
619 $bd = $this->form_gui->getInput('birthday');
620 if($bd['date'])
621 {
622 $user->setBirthday($bd['date']);
623 }
624 else
625 {
626 $user->setBirthday(null);
627 }
628 }
629
630 // Login
631 $user->setLogin($this->form_gui->getInput('login'));
632
633
634 // Gender
635 if($this->isSettingChangeable('gender'))
636 {
637 $user->setGender($this->form_gui->getInput('gender'));
638 }
639
640 // Title
641 if($this->isSettingChangeable('title'))
642 {
643 $user->setUTitle($this->form_gui->getInput('title'));
644 }
645
646 // Firstname
647 if($this->isSettingChangeable('firstname'))
648 {
649 $user->setFirstname($this->form_gui->getInput('firstname'));
650 }
651 // Lastname
652 if($this->isSettingChangeable('lastname'))
653 {
654 $user->setLastname($this->form_gui->getInput('lastname'));
655 }
656 $user->setFullname();
657
658 // Institution
659 if($this->isSettingChangeable('institution'))
660 {
661 $user->setInstitution($this->form_gui->getInput('institution'));
662 }
663
664 // Department
665 if($this->isSettingChangeable('department'))
666 {
667 $user->setDepartment($this->form_gui->getInput('department'));
668 }
669 // Street
670 if($this->isSettingChangeable('street'))
671 {
672 $user->setStreet($this->form_gui->getInput('street'));
673 }
674 // City
675 if($this->isSettingChangeable('city'))
676 {
677 $user->setCity($this->form_gui->getInput('city'));
678 }
679 // Zipcode
680 if($this->isSettingChangeable('zipcode'))
681 {
682 $user->setZipcode($this->form_gui->getInput('zipcode'));
683 }
684 // Country
685 if($this->isSettingChangeable('country'))
686 {
687 $user->setCountry($this->form_gui->getInput('country'));
688 }
689 // Selected Country
690 if($this->isSettingChangeable('sel_country'))
691 {
692 $user->setSelectedCountry($this->form_gui->getInput('sel_country'));
693 }
694 // Phone Office
695 if($this->isSettingChangeable('phone_office'))
696 {
697 $user->setPhoneOffice($this->form_gui->getInput('phone_office'));
698 }
699 // Phone Home
700 if($this->isSettingChangeable('phone_home'))
701 {
702 $user->setPhoneHome($this->form_gui->getInput('phone_home'));
703 }
704 // Phone Mobile
705 if($this->isSettingChangeable('phone_mobile'))
706 {
707 $user->setPhoneMobile($this->form_gui->getInput('phone_mobile'));
708 }
709 // Fax
710 if($this->isSettingChangeable('fax'))
711 {
712 $user->setFax($this->form_gui->getInput('fax'));
713 }
714 // Matriculation
715 if($this->isSettingChangeable('matriculation'))
716 {
717 $user->setMatriculation($this->form_gui->getInput('matriculation'));
718 }
719 // Email
720 if($this->isSettingChangeable('email'))
721 {
722 $user->setEmail($this->form_gui->getInput('email'));
723 }
724 // Hobby
725 if($this->isSettingChangeable('hobby'))
726 {
727 $user->setHobby($this->form_gui->getInput('hobby'));
728 }
729 // Referral Comment
730 if($this->isSettingChangeable('referral_comment'))
731 {
732 $user->setComment($this->form_gui->getInput('referral_comment'));
733 }
734
735 // interests
736 $user->setGeneralInterests($this->form_gui->getInput('interests_general'));
737 $user->setOfferingHelp($this->form_gui->getInput('interests_help_offered'));
738 $user->setLookingForHelp($this->form_gui->getInput('interests_help_looking'));
739
740 // ClientIP
741 $user->setClientIP($this->form_gui->getInput('client_ip'));
742
743 if($this->isSettingChangeable('instant_messengers'))
744 {
745 $user->setInstantMessengerId('icq', $this->form_gui->getInput('im_icq'));
746 $user->setInstantMessengerId('yahoo', $this->form_gui->getInput('im_yahoo'));
747 $user->setInstantMessengerId('msn', $this->form_gui->getInput('im_msn'));
748 $user->setInstantMessengerId('aim', $this->form_gui->getInput('im_aim'));
749 $user->setInstantMessengerId('skype', $this->form_gui->getInput('im_skype'));
750 $user->setInstantMessengerId('jabber', $this->form_gui->getInput('im_jabber'));
751 $user->setInstantMessengerId('voip', $this->form_gui->getInput('im_voip'));
752 }
753 // Delicious
754 if($this->isSettingChangeable('delicious'))
755 {
756 $user->setDelicious($this->form_gui->getInput('delicious'));
757 }
758 // Google maps
759 $user->setLatitude($this->form_gui->getInput('latitude'));
760 $user->setLongitude($this->form_gui->getInput('longitude'));
761 $user->setLocationZoom($this->form_gui->getInput('loc_zoom'));
762
763 // External account
764 $user->setAuthMode($this->form_gui->getInput('auth_mode'));
765 $user->setExternalAccount($this->form_gui->getInput('ext_account'));
766
767 if((int) $user->getActive() != (int) $this->form_gui->getInput('active'))
768 {
769 $user->setActive($this->form_gui->getInput('active'), $ilUser->getId());
770 }
771
772 return $user;
773 }
774
775
779 public function updateObject()
780 {
781 global $tpl, $rbacsystem, $ilias, $ilUser, $ilSetting;
782
783 // User folder
784 if($this->usrf_ref_id == USER_FOLDER_ID and !$rbacsystem->checkAccess('visible,read,write',$this->usrf_ref_id))
785 {
786 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
787 }
788 // if called from local administration $this->usrf_ref_id is category id
789 // Todo: this has to be fixed. Do not mix user folder id and category id
790 if($this->usrf_ref_id != USER_FOLDER_ID)
791 {
792 // check if user is assigned to category
793 if(!$rbacsystem->checkAccess('cat_administrate_users',$this->object->getTimeLimitOwner()))
794 {
795 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
796 }
797 }
798 $this->initForm("edit");
799
800 // we do not want to store this dates, they are only printed out
801 unset($_POST['approve_date']);
802 $_POST['agree_date'] = $this->object->getAgreeDate();
803 unset($_POST['last_login']);
804
805 // Manipulate form so ignore required fields are no more required. This has to be done before ilPropertyFormGUI::checkInput() is called.
806 $profileMaybeIncomplete = false;
807 if($this->form_gui->getInput('ignore_rf', false))
808 {
809 $profileMaybeIncomplete = $this->handleIgnoredRequiredFields();
810 }
811
812 if ($this->form_gui->checkInput())
813 {
814 // @todo: external account; time limit
815 // if not allowed or empty -> do no change password
817 && trim($_POST['passwd']) != "")
818 {
819 $this->object->setPasswd($_POST['passwd'], IL_PASSWD_PLAIN);
820 }
821
822 /*
823 * reset counter for failed logins
824 * if $_POST['active'] is set to 1
825 */
826 if( $_POST['active'] == 1 )
827 {
828 ilObjUser::_resetLoginAttempts( $this->object->getId() );
829 }
830
831 #$this->object->assignData($_POST);
832 $this->loadValuesFromForm('update');
833
834 $udf = array();
835 foreach($_POST as $k => $v)
836 {
837 if (substr($k, 0, 4) == "udf_")
838 {
839 $udf[substr($k, 4)] = $v;
840 }
841 }
842 $this->object->setUserDefinedData($udf);
843
844 try
845 {
846 $this->object->updateLogin($_POST['login']);
847 }
848 catch (ilUserException $e)
849 {
850 ilUtil::sendFailure($e->getMessage());
851 $this->form_gui->setValuesByPost();
852 return $tpl->setContent($this->form_gui->getHtml());
853 }
854
855 $this->object->setTitle($this->object->getFullname());
856 $this->object->setDescription($this->object->getEmail());
857
858 if($this->isSettingChangeable('language'))
859 {
860 $this->object->setLanguage($this->form_gui->getInput('language'));
861 }
862
863 require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
865 {
866 // set disk quota
867 $this->object->setPref("disk_quota", $_POST["disk_quota"] * ilFormat::_getSizeMagnitude() * ilFormat::_getSizeMagnitude());
868 }
870 {
871 // set personal workspace disk quota
872 $this->object->setPref("wsp_disk_quota", $_POST["wsp_disk_quota"] * ilFormat::_getSizeMagnitude() * ilFormat::_getSizeMagnitude());
873 }
874
875 if($this->isSettingChangeable('skin_style'))
876 {
877 //set user skin and style
878 $sknst = explode(":", $_POST["skin_style"]);
879
880 if ($this->object->getPref("style") != $sknst[1] ||
881 $this->object->getPref("skin") != $sknst[0])
882 {
883 $this->object->setPref("skin", $sknst[0]);
884 $this->object->setPref("style", $sknst[1]);
885 }
886 }
887 if($this->isSettingChangeable('hits_per_page'))
888 {
889 $this->object->setPref("hits_per_page", $_POST["hits_per_page"]);
890 }
891 if($this->isSettingChangeable('show_users_online'))
892 {
893 $this->object->setPref("show_users_online", $_POST["show_users_online"]);
894 }
895 if($this->isSettingChangeable('hide_own_online_status'))
896 {
897 $this->object->setPref("hide_own_online_status", $_POST["hide_own_online_status"] ? 'y' : 'n');
898 }
899
900 // set a timestamp for last_password_change
901 // this ts is needed by ilSecuritySettings
902 $this->object->setLastPasswordChangeTS( time() );
903
904 global $ilSetting;
905 if((int)$ilSetting->get('session_reminder_enabled'))
906 {
907 $this->object->setPref('session_reminder_enabled', (int)$_POST['session_reminder_enabled']);
908 }
909
910 // #10054 - profile may have been completed, check below is only for incomplete
911 $this->object->setProfileIncomplete( false );
912
913 $this->update = $this->object->update();
914
915
916 // If the current user is editing its own user account,
917 // we update his preferences.
918 if ($ilUser->getId() == $this->object->getId())
919 {
920 $ilUser->readPrefs();
921 }
922 $ilUser->setPref('send_info_mails', ($_POST['send_mail'] == 'y') ? 'y' : 'n');
923 $ilUser->writePrefs();
924
925 $mail_message = $this->__sendProfileMail();
926 $msg = $this->lng->txt('saved_successfully').$mail_message;
927
928 // same personal image
929 if($this->isSettingChangeable('upload'))
930 {
932 }
933
934 if( $profileMaybeIncomplete )
935 {
936 include_once 'Services/User/classes/class.ilUserProfile.php';
937 if( ilUserProfile::isProfileIncomplete($this->object) )
938 {
939 $this->object->setProfileIncomplete( true );
940 $this->object->update();
941 }
942 }
943
944 // feedback
945 ilUtil::sendSuccess($msg,true);
946
947 if (strtolower($_GET["baseClass"]) == 'iladministrationgui')
948 {
949 $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
950 }
951 else
952 {
953 $this->ctrl->redirectByClass('ilobjcategorygui','listUsers');
954 }
955 }
956 else
957 {
958 $this->form_gui->setValuesByPost();
959 $tpl->setContent($this->form_gui->getHtml());
960 }
961 }
962
966 function getValues()
967 {
968 global $ilUser, $ilSetting;
969
970 $data = array();
971
972 // login data
973 $data["auth_mode"] = $this->object->getAuthMode();
974 $data["login"] = $this->object->getLogin();
975 //$data["passwd"] = "********";
976 //$data["passwd2"] = "********";
977 $data["ext_account"] = $this->object->getExternalAccount();
978
979 // system information
980 require_once './Services/Utilities/classes/class.ilFormat.php';
981 $data["create_date"] = ilFormat::formatDate($this->object->getCreateDate(),'datetime',true);
982 $data["owner"] = ilObjUser::_lookupLogin($this->object->getOwner());
983 $data["approve_date"] = ($this->object->getApproveDate() != "")
984 ? ilFormat::formatDate($this->object->getApproveDate(),'datetime',true)
985 : null;
986 $data["agree_date"] = ($this->object->getAgreeDate() != "")
987 ? ilFormat::formatDate($this->object->getAgreeDate(),'datetime',true)
988 : null;
989 $data["last_login"] = ($this->object->getLastLogin() != "")
990 ? ilFormat::formatDate($this->object->getLastLogin(),'datetime',true)
991 : null;
992 $data["active"] = $this->object->getActive();
993 $data["time_limit_unlimited"] = $this->object->getTimeLimitUnlimited();
994
995 $from = new ilDateTime($this->object->getTimeLimitFrom() ? $this->object->getTimeLimitFrom() : time(),IL_CAL_UNIX);
996 $data["time_limit_from"]["date"] = $from->get(IL_CAL_FKT_DATE,'Y-m-d',$ilUser->getTimeZone());
997 $data["time_limit_from"]["time"] = $from->get(IL_CAL_FKT_DATE,'H:i:s',$ilUser->getTimeZone());
998
999 $until = new ilDateTime($this->object->getTimeLimitUntil() ? $this->object->getTimeLimitUntil() : time(),IL_CAL_UNIX);
1000 $data['time_limit_until']['date'] = $until->get(IL_CAL_FKT_DATE,'Y-m-d',$ilUser->getTimeZone());
1001 $data['time_limit_until']['time'] = $until->get(IL_CAL_FKT_DATE,'H:i:s',$ilUser->getTimeZone());
1002
1003
1004 // BEGIN DiskQuota, Show disk space used
1005 require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
1007 {
1008 $data["disk_quota"] = $this->object->getDiskQuota() / ilFormat::_getSizeMagnitude() / ilFormat::_getSizeMagnitude();
1009 }
1011 {
1012 $data["wsp_disk_quota"] = $this->object->getPersonalWorkspaceDiskQuota() / ilFormat::_getSizeMagnitude() / ilFormat::_getSizeMagnitude();
1013 }
1014 // W. Randelshofer 2008-09-09: Deactivated display of disk space usage,
1015 // because determining the disk space usage may take several minutes.
1016 /*
1017 require_once "Modules/File/classes/class.ilObjFileAccess.php";
1018 require_once "Modules/HTMLLearningModule/classes/class.ilObjFileBasedLMAccess.php";
1019 require_once "Modules/ScormAicc/classes/class.ilObjSAHSLearningModuleAccess.php";
1020 require_once "Services/Mail/classes/class.ilObjMailAccess.php";
1021 require_once "Modules/Forum/classes/class.ilObjForumAccess.php";
1022 require_once "Modules/MediaCast/classes/class.ilObjMediaCastAccess.php";
1023 $data["disk_space_used"] =
1024 ilObjFileAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
1025 ilObjFileBasedLMAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
1026 ilObjSAHSLearningModuleAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
1027 ilObjMailAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
1028 ilObjForumAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>'.
1029 ilObjMediaCastAccess::_getDiskSpaceUsedBy($this->object->getId(), true).'<br>';
1030 */
1031 // END DiskQuota, Show disk space used
1032
1033 // personal data
1034 $data["gender"] = $this->object->getGender();
1035 $data["firstname"] = $this->object->getFirstname();
1036 $data["lastname"] = $this->object->getLastname();
1037 $data["title"] = $this->object->getUTitle();
1038 $data['birthday'] = $this->object->getBirthday();
1039 $data["institution"] = $this->object->getInstitution();
1040 $data["department"] = $this->object->getDepartment();
1041 $data["street"] = $this->object->getStreet();
1042 $data["city"] = $this->object->getCity();
1043 $data["zipcode"] = $this->object->getZipcode();
1044 $data["country"] = $this->object->getCountry();
1045 $data["sel_country"] = $this->object->getSelectedCountry();
1046 $data["phone_office"] = $this->object->getPhoneOffice();
1047 $data["phone_home"] = $this->object->getPhoneHome();
1048 $data["phone_mobile"] = $this->object->getPhoneMobile();
1049 $data["fax"] = $this->object->getFax();
1050 $data["email"] = $this->object->getEmail();
1051 $data["hobby"] = $this->object->getHobby();
1052 $data["referral_comment"] = $this->object->getComment();
1053
1054 // interests
1055 $data["interests_general"] = $this->object->getGeneralInterests();
1056 $data["interests_help_offered"] = $this->object->getOfferingHelp();
1057 $data["interests_help_looking"] = $this->object->getLookingForHelp();
1058
1059 // instant messengers
1060 $data["im_icq"] = $this->object->getInstantMessengerId('icq');
1061 $data["im_yahoo"] = $this->object->getInstantMessengerId('yahoo');
1062 $data["im_msn"] = $this->object->getInstantMessengerId('msn');
1063 $data["im_aim"] = $this->object->getInstantMessengerId('aim');
1064 $data["im_skype"] = $this->object->getInstantMessengerId('skype');
1065 $data["im_jabber"] = $this->object->getInstantMessengerId('jabber');
1066 $data["im_voip"] = $this->object->getInstantMessengerId('voip');
1067
1068 // other data
1069 $data["matriculation"] = $this->object->getMatriculation();
1070 $data["delicious"] = $this->object->getDelicious();
1071 $data["client_ip"] = $this->object->getClientIP();
1072
1073 // user defined fields
1074 include_once './Services/User/classes/class.ilUserDefinedFields.php';
1075 $this->user_defined_fields = ilUserDefinedFields::_getInstance();
1076 $user_defined_data = $this->object->getUserDefinedData();
1077 foreach($this->user_defined_fields->getDefinitions() as $field_id => $definition)
1078 {
1079 $data["udf_".$field_id] = $user_defined_data["f_".$field_id];
1080 }
1081
1082 // settings
1083 $data["language"] = $this->object->getLanguage();
1084 $data["skin_style"] = $this->object->skin.":".$this->object->prefs["style"];
1085 $data["hits_per_page"] = $this->object->prefs["hits_per_page"];
1086 $data["show_users_online"] = $this->object->prefs["show_users_online"];
1087 $data["hide_own_online_status"] = $this->object->prefs["hide_own_online_status"] == 'y';
1088 $data["session_reminder_enabled"] = (int)$this->object->prefs["session_reminder_enabled"];
1089
1090 $this->form_gui->setValuesByArray($data);
1091 }
1092
1096 function initForm($a_mode)
1097 {
1098 global $lng, $ilCtrl, $styleDefinition, $ilSetting, $ilClientIniFile, $ilUser;
1099
1100 $settings = $ilSetting->getAll();
1101
1102 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
1103
1104 $this->form_gui = new ilPropertyFormGUI();
1105 $this->form_gui->setFormAction($ilCtrl->getFormAction($this));
1106 if ($a_mode == "create")
1107 {
1108 $this->form_gui->setTitle($lng->txt("usr_new"));
1109 }
1110 else
1111 {
1112 $this->form_gui->setTitle($lng->txt("usr_edit"));
1113 }
1114
1115 // login data
1116 $sec_l = new ilFormSectionHeaderGUI();
1117 $sec_l->setTitle($lng->txt("login_data"));
1118 $this->form_gui->addItem($sec_l);
1119
1120 // authentication mode
1121 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
1122 $active_auth_modes = ilAuthUtils::_getActiveAuthModes();
1123 $am = new ilSelectInputGUI($lng->txt("auth_mode"), "auth_mode");
1124 $option = array();
1125 foreach ($active_auth_modes as $auth_name => $auth_key)
1126 {
1127 if ($auth_name == 'default')
1128 {
1129 $name = $this->lng->txt('auth_'.$auth_name)." (".$this->lng->txt('auth_'.ilAuthUtils::_getAuthModeName($auth_key)).")";
1130 }
1131 else
1132 {
1133 $name = $this->lng->txt('auth_'.$auth_name);
1134 }
1135 $option[$auth_name] = $name;
1136 }
1137 $am->setOptions($option);
1138 $this->form_gui->addItem($am);
1139
1140 if($a_mode == "edit")
1141 {
1142 $id = new ilNonEditableValueGUI($lng->txt("usr_id"), "id");
1143 $id->setValue($this->object->getId());
1144 $this->form_gui->addItem($id);
1145 }
1146
1147 // login
1148 $lo = new ilUserLoginInputGUI($lng->txt("login"), "login");
1149 $lo->setRequired(true);
1150 if ($a_mode == "edit")
1151 {
1152 $lo->setCurrentUserId($this->object->getId());
1153 try
1154 {
1155 include_once 'Services/Calendar/classes/class.ilDate.php';
1156
1157 $last_history_entry = ilObjUser::_getLastHistoryDataByUserId($this->object->getId());
1158 $lo->setInfo(
1159 sprintf(
1160 $this->lng->txt('usr_loginname_history_info'),
1161 ilDatePresentation::formatDate(new ilDateTime($last_history_entry[1], IL_CAL_UNIX)),
1162 $last_history_entry[0]
1163 )
1164 );
1165 }
1166 catch(ilUserException $e) { }
1167 }
1168
1169 $this->form_gui->addItem($lo);
1170
1171 // passwords
1172// @todo: do not show passwords, if there is not a single auth, that
1173// allows password setting
1174 {
1175 $pw = new ilPasswordInputGUI($lng->txt("passwd"), "passwd");
1176 $pw->setSize(32);
1177 $pw->setMaxLength(32);
1178 $pw->setValidateAuthPost("auth_mode");
1179 if ($a_mode == "create")
1180 {
1181 $pw->setRequiredOnAuth(true);
1182 }
1184 $this->form_gui->addItem($pw);
1185 }
1186 // @todo: invisible/hidden passwords
1187
1188 // external account
1189 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
1191 {
1192 $ext = new ilTextInputGUI($lng->txt("user_ext_account"), "ext_account");
1193 $ext->setSize(40);
1194 $ext->setMaxLength(250);
1195 $ext->setInfo($lng->txt("user_ext_account_desc"));
1196 $this->form_gui->addItem($ext);
1197 }
1198
1199 // login data
1200 $sec_si = new ilFormSectionHeaderGUI();
1201 $sec_si->setTitle($this->lng->txt("system_information"));
1202 $this->form_gui->addItem($sec_si);
1203
1204 // create date, approve date, agreement date, last login
1205 if ($a_mode == "edit")
1206 {
1207 $sia = array("create_date", "approve_date", "agree_date", "last_login", "owner");
1208 foreach($sia as $a)
1209 {
1210 $siai = new ilNonEditableValueGUI($lng->txt($a), $a);
1211 $this->form_gui->addItem($siai);
1212 }
1213 }
1214
1215 // active
1216 $ac = new ilCheckboxInputGUI($lng->txt("active"), "active");
1217 $ac->setChecked(true);
1218 $this->form_gui->addItem($ac);
1219
1220 // access @todo: get fields right (names change)
1221 $lng->loadLanguageModule('crs');
1222
1223 // access
1224 $radg = new ilRadioGroupInputGUI($lng->txt("time_limit"), "time_limit_unlimited");
1225 $radg->setValue(1);
1226 $op1 = new ilRadioOption($lng->txt("user_access_unlimited"), 1);
1227 $radg->addOption($op1);
1228 $op2 = new ilRadioOption($lng->txt("user_access_limited"), 0);
1229 $radg->addOption($op2);
1230
1231// $ac = new ilCheckboxInputGUI($lng->txt("time_limit"), "time_limit_unlimited");
1232// $ac->setChecked(true);
1233// $ac->setOptionTitle($lng->txt("crs_unlimited"));
1234
1235 // access.from
1236 $acfrom = new ilDateTimeInputGUI($this->lng->txt("crs_from"), "time_limit_from");
1237 $acfrom->setShowTime(true);
1238// $ac->addSubItem($acfrom);
1239 $op2->addSubItem($acfrom);
1240
1241 // access.to
1242 $acto = new ilDateTimeInputGUI($this->lng->txt("crs_to"), "time_limit_until");
1243 $acto->setShowTime(true);
1244// $ac->addSubItem($acto);
1245 $op2->addSubItem($acto);
1246
1247// $this->form_gui->addItem($ac);
1248 $this->form_gui->addItem($radg);
1249
1250 require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
1252 {
1253 $lng->loadLanguageModule("file");
1254
1255 $quota_head = new ilFormSectionHeaderGUI();
1256 $quota_head->setTitle($lng->txt("repository_disk_quota"));
1257 $this->form_gui->addItem($quota_head);
1258
1259 // disk quota
1260 $disk_quota = new ilTextInputGUI($lng->txt("disk_quota"), "disk_quota");
1261 $disk_quota->setSize(10);
1262 $disk_quota->setMaxLength(11);
1263 $disk_quota->setInfo($this->lng->txt("enter_in_mb_desc"));
1264 $this->form_gui->addItem($disk_quota);
1265
1266 if ($a_mode == "edit")
1267 {
1268 // show which disk quota is in effect, and explain why
1269 require_once 'Services/WebDAV/classes/class.ilDiskQuotaChecker.php';
1270 $dq_info = ilDiskQuotaChecker::_lookupDiskQuota($this->object->getId());
1271 if ($dq_info['user_disk_quota'] > $dq_info['role_disk_quota'])
1272 {
1273 $info_text = sprintf($lng->txt('disk_quota_is_1_instead_of_2_by_3'),
1274 ilFormat::formatSize($dq_info['user_disk_quota'],'short'),
1275 ilFormat::formatSize($dq_info['role_disk_quota'],'short'),
1276 $dq_info['role_title']);
1277 }
1278 else if (is_infinite($dq_info['role_disk_quota']))
1279 {
1280 $info_text = sprintf($lng->txt('disk_quota_is_unlimited_by_1'), $dq_info['role_title']);
1281 }
1282 else
1283 {
1284 $info_text = sprintf($lng->txt('disk_quota_is_1_by_2'),
1285 ilFormat::formatSize($dq_info['role_disk_quota'],'short'),
1286 $dq_info['role_title']);
1287 }
1288 $disk_quota->setInfo($this->lng->txt("enter_in_mb_desc").'<br>'.$info_text);
1289
1290
1291 // disk usage
1292 $du_info = ilDiskQuotaChecker::_lookupDiskUsage($this->object->getId());
1293 $disk_usage = new ilNonEditableValueGUI($lng->txt("disk_usage"), "disk_usage");
1294 if ($du_info['last_update'] === null)
1295 {
1296 $disk_usage->setValue($lng->txt('unknown'));
1297 }
1298 else
1299 {
1300 require_once './Services/Utilities/classes/class.ilFormat.php';
1301 $disk_usage->setValue(ilFormat::formatSize($du_info['disk_usage'],'short'));
1302 $info = '<table class="il_user_quota_disk_usage_overview">';
1303 // write the count and size of each object type
1304 foreach ($du_info['details'] as $detail_data)
1305 {
1306 $info .= '<tr>'.
1307 '<td class="std">'.$detail_data['count'].'</td>'.
1308 '<td class="std">'.$lng->txt($detail_data['type']).'</td>'.
1309 '<td class="std">'.ilFormat::formatSize($detail_data['size'], 'short').'</td>'.
1310 '</tr>'
1311 ;
1312 }
1313 $info .= '</table>';
1314 $info .= '<br>'.$this->lng->txt('last_update').': '.
1315 ilDatePresentation::formatDate(new ilDateTime($du_info['last_update'], IL_CAL_DATETIME));
1316 $disk_usage->setInfo($info);
1317
1318 }
1319 $this->form_gui->addItem($disk_usage);
1320
1321 // date when the last disk quota reminder was sent to the user
1322 if (true || $dq_info['last_reminder'])
1323 {
1324 $reminder = new ilNonEditableValueGUI($lng->txt("disk_quota_last_reminder_sent"), "last_reminder");
1325 $reminder->setValue(
1326 ilDatePresentation::formatDate(new ilDateTime($dq_info['last_reminder'], IL_CAL_DATETIME))
1327 );
1328 $reminder->setInfo($this->lng->txt("disk_quota_last_reminder_sent_desc"));
1329 $this->form_gui->addItem($reminder);
1330 }
1331 }
1332 }
1333
1335 {
1336 $lng->loadLanguageModule("file");
1337
1338 $quota_head = new ilFormSectionHeaderGUI();
1339 $quota_head->setTitle($lng->txt("personal_workspace_disk_quota"));
1340 $this->form_gui->addItem($quota_head);
1341
1342 // personal workspace disk quota
1343 $wsp_disk_quota = new ilTextInputGUI($lng->txt("disk_quota"), "wsp_disk_quota");
1344 $wsp_disk_quota->setSize(10);
1345 $wsp_disk_quota->setMaxLength(11);
1346 $wsp_disk_quota->setInfo($this->lng->txt("enter_in_mb_desc"));
1347 $this->form_gui->addItem($wsp_disk_quota);
1348
1349 if ($a_mode == "edit")
1350 {
1351 // show which disk quota is in effect, and explain why
1352 require_once 'Services/WebDAV/classes/class.ilDiskQuotaChecker.php';
1353 $dq_info = ilDiskQuotaChecker::_lookupPersonalWorkspaceDiskQuota($this->object->getId());
1354 if ($dq_info['user_wsp_disk_quota'] > $dq_info['role_wsp_disk_quota'])
1355 {
1356 $info_text = sprintf($lng->txt('disk_quota_is_1_instead_of_2_by_3'),
1357 ilFormat::formatSize($dq_info['user_wsp_disk_quota'],'short'),
1358 ilFormat::formatSize($dq_info['role_wsp_disk_quota'],'short'),
1359 $dq_info['role_title']);
1360 }
1361 else if (is_infinite($dq_info['role_wsp_disk_quota']))
1362 {
1363 $info_text = sprintf($lng->txt('disk_quota_is_unlimited_by_1'), $dq_info['role_title']);
1364 }
1365 else
1366 {
1367 $info_text = sprintf($lng->txt('disk_quota_is_1_by_2'),
1368 ilFormat::formatSize($dq_info['role_wsp_disk_quota'],'short'),
1369 $dq_info['role_title']);
1370 }
1371 $wsp_disk_quota->setInfo($this->lng->txt("enter_in_mb_desc").'<br>'.$info_text);
1372 }
1373
1374 // disk usage
1375 include_once "Services/DiskQuota/classes/class.ilDiskQuotaHandler.php";
1376 $du_info = ilDiskQuotaHandler::getFilesizeByTypeAndOwner($this->object->getId());
1377 $disk_usage = new ilNonEditableValueGUI($lng->txt("disk_usage"), "disk_usage");
1378 if (!sizeof($du_info))
1379 {
1380 $disk_usage->setValue($lng->txt('unknown'));
1381 }
1382 else
1383 {
1384 require_once './Services/Utilities/classes/class.ilFormat.php';
1385 $disk_usage->setValue(ilFormat::formatSize(ilDiskQuotaHandler::getFilesizeByOwner($this->object->getId())));
1386 $info = '<table class="il_user_quota_disk_usage_overview">';
1387 // write the count and size of each object type
1388 foreach ($du_info as $detail_data)
1389 {
1390 $info .= '<tr>'.
1391 '<td class="std">'.$detail_data['count'].'</td>'.
1392 '<td class="std">'.$lng->txt("obj_".$detail_data["src_type"]).'</td>'.
1393 '<td class="std">'.ilFormat::formatSize($detail_data['filesize'], 'short').'</td>'.
1394 '</tr>'
1395 ;
1396 }
1397 $info .= '</table>';
1398 $disk_usage->setInfo($info);
1399
1400 }
1401 $this->form_gui->addItem($disk_usage);
1402 }
1403
1404 // personal data
1405 if(
1406 $this->isSettingChangeable('gender') or
1407 $this->isSettingChangeable('firstname') or
1408 $this->isSettingChangeable('lastname') or
1409 $this->isSettingChangeable('title') or
1410 $this->isSettingChangeable('personal_image') or
1411 $this->isSettingChangeable('birhtday')
1412 )
1413 {
1414 $sec_pd = new ilFormSectionHeaderGUI();
1415 $sec_pd->setTitle($this->lng->txt("personal_data"));
1416 $this->form_gui->addItem($sec_pd);
1417 }
1418
1419 // gender
1420 if($this->isSettingChangeable('gender'))
1421 {
1422 $gndr = new ilRadioGroupInputGUI($lng->txt("gender"), "gender");
1423 $gndr->setRequired(isset($settings["require_gender"]) && $settings["require_gender"]);
1424 $female = new ilRadioOption($lng->txt("gender_f"), "f");
1425 $gndr->addOption($female);
1426 $male = new ilRadioOption($lng->txt("gender_m"), "m");
1427 $gndr->addOption($male);
1428 $this->form_gui->addItem($gndr);
1429 }
1430
1431 // firstname, lastname, title
1432 $fields = array("firstname" => true, "lastname" => true,
1433 "title" => isset($settings["require_title"]) && $settings["require_title"]);
1434 foreach($fields as $field => $req)
1435 {
1436 if($this->isSettingChangeable($field))
1437 {
1438 $inp = new ilTextInputGUI($lng->txt($field), $field);
1439 $inp->setSize(32);
1440 $inp->setMaxLength(32);
1441 $inp->setRequired($req);
1442 $this->form_gui->addItem($inp);
1443 }
1444 }
1445
1446 // personal image
1447 if($this->isSettingChangeable('upload'))
1448 {
1449 $pi = new ilImageFileInputGUI($lng->txt("personal_picture"), "userfile");
1450 if ($a_mode == "edit" || $a_mode == "upload")
1451 {
1452 $pi->setImage(ilObjUser::_getPersonalPicturePath($this->object->getId(), "small", true,
1453 true));
1454 }
1455 $this->form_gui->addItem($pi);
1456 }
1457
1458 if($this->isSettingChangeable('birthday'))
1459 {
1460 $birthday = new ilBirthdayInputGUI($lng->txt('birthday'), 'birthday');
1461 $birthday->setRequired(isset($settings["require_birthday"]) && $settings["require_birthday"]);
1462 $birthday->setShowEmpty(true);
1463 $birthday->setStartYear(1900);
1464 $this->form_gui->addItem($birthday);
1465 }
1466
1467
1468 // institution, department, street, city, zip code, country, phone office
1469 // phone home, phone mobile, fax, e-mail
1470 $fields = array(
1471 array("institution", 40, 80),
1472 array("department", 40, 80),
1473 array("street", 40, 40),
1474 array("city", 40, 40),
1475 array("zipcode", 10, 10),
1476 array("country", 40, 40),
1477 array("sel_country"),
1478 array("phone_office", 30, 30),
1479 array("phone_home", 30, 30),
1480 array("phone_mobile", 30, 30),
1481 array("fax", 30, 30));
1482
1483 $counter = 0;
1484 foreach ($fields as $field)
1485 {
1486 if(!$counter++ and $this->isSettingChangeable($field[0]))
1487 {
1488 // contact data
1489 $sec_cd = new ilFormSectionHeaderGUI();
1490 $sec_cd->setTitle($this->lng->txt("contact_data"));
1491 $this->form_gui->addItem($sec_cd);
1492 }
1493 if($this->isSettingChangeable($field[0]))
1494 {
1495 if ($field[0] != "sel_country")
1496 {
1497 $inp = new ilTextInputGUI($lng->txt($field[0]), $field[0]);
1498 $inp->setSize($field[1]);
1499 $inp->setMaxLength($field[2]);
1500 $inp->setRequired(isset($settings["require_".$field[0]]) &&
1501 $settings["require_".$field[0]]);
1502 $this->form_gui->addItem($inp);
1503 }
1504 else
1505 {
1506 // country selection
1507 include_once("./Services/Form/classes/class.ilCountrySelectInputGUI.php");
1508 $cs = new ilCountrySelectInputGUI($lng->txt($field[0]), $field[0]);
1509 $cs->setRequired(isset($settings["require_".$field[0]]) &&
1510 $settings["require_".$field[0]]);
1511 $this->form_gui->addItem($cs);
1512 }
1513 }
1514 }
1515
1516 // email
1517 if($this->isSettingChangeable('email'))
1518 {
1519 $em = new ilEMailInputGUI($lng->txt("email"), "email");
1520 $em->setRequired(isset($settings["require_email"]) &&
1521 $settings["require_email"]);
1522 $this->form_gui->addItem($em);
1523 }
1524
1525 // interests/hobbies
1526 if($this->isSettingChangeable('hobby'))
1527 {
1528 $hob = new ilTextAreaInputGUI($lng->txt("hobby"), "hobby");
1529 $hob->setRows(3);
1530 $hob->setCols(40);
1531 $hob->setRequired(isset($settings["require_hobby"]) &&
1532 $settings["require_hobby"]);
1533 $this->form_gui->addItem($hob);
1534 }
1535
1536 // referral comment
1537 if($this->isSettingChangeable('referral_comment'))
1538 {
1539 $rc = new ilTextAreaInputGUI($lng->txt("referral_comment"), "referral_comment");
1540 $rc->setRows(3);
1541 $rc->setCols(40);
1542 $rc->setRequired(isset($settings["require_referral_comment"]) &&
1543 $settings["require_referral_comment"]);
1544 $this->form_gui->addItem($rc);
1545 }
1546
1547
1548 // interests
1549
1550 $sh = new ilFormSectionHeaderGUI();
1551 $sh->setTitle($lng->txt("interests"));
1552 $this->form_gui->addItem($sh);
1553
1554 $multi_fields = array("interests_general", "interests_help_offered", "interests_help_looking");
1555 foreach($multi_fields as $multi_field)
1556 {
1557 if($this->isSettingChangeable($multi_field))
1558 {
1559 // see ilUserProfile
1560 $ti = new ilTextInputGUI($lng->txt($multi_field), $multi_field);
1561 $ti->setMulti(true);
1562 $ti->setMaxLength(40);
1563 $ti->setSize(40);
1564 $ti->setRequired(isset($settings["require_".$multi_field]) &&
1565 $settings["require_".$multi_field]);
1566 $this->form_gui->addItem($ti);
1567 }
1568 }
1569
1570
1571 // instant messengers
1572 if($this->isSettingChangeable('instant_messengers'))
1573 {
1574 $sec_im = new ilFormSectionHeaderGUI();
1575 $sec_im->setTitle($this->lng->txt("instant_messengers"));
1576 $this->form_gui->addItem($sec_im);
1577 }
1578
1579 // icq, yahoo, msn, aim, skype
1580 $fields = array("icq", "yahoo", "msn", "aim", "skype", "jabber", "voip");
1581 foreach ($fields as $field)
1582 {
1583 if($this->isSettingChangeable('instant_messengers'))
1584 {
1585 $im = new ilTextInputGUI($lng->txt("im_".$field), "im_".$field);
1586 $im->setSize(40);
1587 $im->setMaxLength(40);
1588 $this->form_gui->addItem($im);
1589 }
1590 }
1591
1592 // other information
1593 if($this->isSettingChangeable('user_profile_other'))
1594 {
1595 $sec_oi = new ilFormSectionHeaderGUI();
1596 $sec_oi->setTitle($this->lng->txt("user_profile_other"));
1597 $this->form_gui->addItem($sec_oi);
1598 }
1599
1600 // matriculation number
1601 if($this->isSettingChangeable('matriculation'))
1602 {
1603 $mr = new ilTextInputGUI($lng->txt("matriculation"), "matriculation");
1604 $mr->setSize(40);
1605 $mr->setMaxLength(40);
1606 $mr->setRequired(isset($settings["require_matriculation"]) &&
1607 $settings["require_matriculation"]);
1608 $this->form_gui->addItem($mr);
1609 }
1610
1611 // delicious
1612 if($this->isSettingChangeable('delicious'))
1613 {
1614 $mr = new ilTextInputGUI($lng->txt("delicious"), "delicious");
1615 $mr->setSize(40);
1616 $mr->setMaxLength(40);
1617 $mr->setRequired(isset($settings["require_delicious"]) &&
1618 $settings["require_delicious"]);
1619 $this->form_gui->addItem($mr);
1620 }
1621
1622 // client IP
1623 $ip = new ilTextInputGUI($lng->txt("client_ip"), "client_ip");
1624 $ip->setSize(40);
1625 $ip->setMaxLength(255);
1626 $ip->setInfo($this->lng->txt("current_ip")." ".$_SERVER["REMOTE_ADDR"]." <br />".
1627 '<span class="warning">'.$this->lng->txt("current_ip_alert")."</span>");
1628 $this->form_gui->addItem($ip);
1629
1630 // additional user defined fields
1631 include_once './Services/User/classes/class.ilUserDefinedFields.php';
1632 $user_defined_fields = ilUserDefinedFields::_getInstance();
1633
1634 if($this->usrf_ref_id == USER_FOLDER_ID)
1635 {
1636 $all_defs = $user_defined_fields->getDefinitions();
1637 }
1638 else
1639 {
1640 $all_defs = $user_defined_fields->getChangeableLocalUserAdministrationDefinitions();
1641 }
1642
1643 foreach($all_defs as $field_id => $definition)
1644 {
1645 if($definition['field_type'] == UDF_TYPE_TEXT) // text input
1646 {
1647 $udf = new ilTextInputGUI($definition['field_name'],
1648 "udf_".$definition['field_id']);
1649 $udf->setSize(40);
1650 $udf->setMaxLength(255);
1651 }
1652 else if($definition['field_type'] == UDF_TYPE_WYSIWYG) // text area input
1653 {
1654 $udf = new ilTextAreaInputGUI($definition['field_name'],
1655 "udf_".$definition['field_id']);
1656 $udf->setUseRte(true);
1657 }
1658 else // selection input
1659 {
1660 $udf = new ilSelectInputGUI($definition['field_name'],
1661 "udf_".$definition['field_id']);
1662 $udf->setOptions($user_defined_fields->fieldValuesToSelectArray(
1663 $definition['field_values']));
1664 }
1665 $udf->setRequired($definition['required']);
1666 $this->form_gui->addItem($udf);
1667 }
1668
1669 // settings
1670 if(
1671 $a_mode == 'create' or
1672 $this->isSettingChangeable( 'language') or
1673 $this->isSettingChangeable( 'skin_style') or
1674 $this->isSettingChangeable( 'hits_per_page') or
1675 $this->isSettingChangeable( 'hide_own_online_status')
1676 )
1677 {
1678 $sec_st = new ilFormSectionHeaderGUI();
1679 $sec_st->setTitle($this->lng->txt("settings"));
1680 $this->form_gui->addItem($sec_st);
1681 }
1682
1683 // role
1684 if ($a_mode == "create")
1685 {
1686 $role = new ilSelectInputGUI($lng->txt("default_role"),
1687 'default_role');
1688 $role->setRequired(true);
1689 $role->setValue($this->default_role);
1690 $role->setOptions($this->selectable_roles);
1691 $this->form_gui->addItem($role);
1692 }
1693
1694 // language
1695 if($this->isSettingChangeable('language'))
1696 {
1697 $lang = new ilSelectInputGUI($lng->txt("language"),
1698 'language');
1699 $languages = $lng->getInstalledLanguages();
1700 $lng->loadLanguageModule("meta");
1701 $options = array();
1702 foreach($languages as $l)
1703 {
1704 $options[$l] = $lng->txt("meta_l_".$l);
1705 }
1706 $lang->setOptions($options);
1707 $lang->setValue($ilSetting->get("language"));
1708 $this->form_gui->addItem($lang);
1709 }
1710
1711 // skin/style
1712 if($this->isSettingChangeable('skin_style'))
1713 {
1714 $sk = new ilSelectInputGUI($lng->txt("skin_style"),
1715 'skin_style');
1716 $templates = $styleDefinition->getAllTemplates();
1717
1718 include_once("./Services/Style/classes/class.ilObjStyleSettings.php");
1719
1720 $options = array();
1721 if (count($templates) > 0 && is_array ($templates))
1722 {
1723 foreach ($templates as $template)
1724 {
1725 $styleDef =& new ilStyleDefinition($template["id"]);
1726 $styleDef->startParsing();
1727 $styles = $styleDef->getStyles();
1728 foreach ($styles as $style)
1729 {
1730 if (!ilObjStyleSettings::_lookupActivatedStyle($template["id"],$style["id"]))
1731 {
1732 continue;
1733 }
1734 $options[$template["id"].":".$style["id"]] =
1735 $styleDef->getTemplateName()." / ".$style["name"];
1736 }
1737 }
1738 }
1739 $sk->setOptions($options);
1740 $sk->setValue($ilClientIniFile->readVariable("layout","skin").
1741 ":".$ilClientIniFile->readVariable("layout","style"));
1742
1743 $this->form_gui->addItem($sk);
1744 }
1745
1746 // hits per page
1747 if($this->isSettingChangeable('hits_per_page'))
1748 {
1749 $hpp = new ilSelectInputGUI($lng->txt("hits_per_page"),
1750 'hits_per_page');
1751 $options = array(10 => 10, 15 => 15, 20 => 20, 30 => 30, 40 => 40,
1752 50 => 50, 100 => 100, 9999 => $this->lng->txt("no_limit"));
1753 $hpp->setOptions($options);
1754 $hpp->setValue($ilSetting->get("hits_per_page"));
1755 $this->form_gui->addItem($hpp);
1756
1757 // users online
1758 $uo = new ilSelectInputGUI($lng->txt("users_online"),
1759 'show_users_online');
1760 $options = array(
1761 "y" => $lng->txt("users_online_show_y"),
1762 "associated" => $lng->txt("users_online_show_associated"),
1763 "n" => $lng->txt("users_online_show_n"));
1764 $uo->setOptions($options);
1765 $uo->setValue($ilSetting->get("show_users_online"));
1766 $this->form_gui->addItem($uo);
1767 }
1768
1769 // hide online status
1770 if($this->isSettingChangeable('hide_own_online_status'))
1771 {
1772 $os = new ilCheckboxInputGUI($lng->txt("hide_own_online_status"), "hide_own_online_status");
1773 $this->form_gui->addItem($os);
1774 }
1775
1776 if((int)$ilSetting->get('session_reminder_enabled'))
1777 {
1778 $cb = new ilCheckboxInputGUI($this->lng->txt('session_reminder'), 'session_reminder_enabled');
1779 $cb->setValue(1);
1780 $this->form_gui->addItem($cb);
1781 }
1782
1783 // Options
1784 if($this->isSettingChangeable('send_mail'))
1785 {
1786 $sec_op = new ilFormSectionHeaderGUI();
1787 $sec_op->setTitle($this->lng->txt("options"));
1788 $this->form_gui->addItem($sec_op);
1789 }
1790
1791 // send email
1792 $se = new ilCheckboxInputGUI($lng->txt('inform_user_mail'), 'send_mail');
1793 $se->setInfo($lng->txt('inform_user_mail_info'));
1794 $se->setValue('y');
1795 $se->setChecked(($ilUser->getPref('send_info_mails') == 'y'));
1796 $this->form_gui->addItem($se);
1797
1798 // ignore required fields
1799 $irf = new ilCheckboxInputGUI($lng->txt('ignore_required_fields'), 'ignore_rf');
1800 $irf->setInfo($lng->txt('ignore_required_fields_info'));
1801 $irf->setValue(1);
1802 $this->form_gui->addItem($irf);
1803
1804 // @todo: handle all required fields
1805
1806 // command buttons
1807 if ($a_mode == "create" || $a_mode == "save")
1808 {
1809 $this->form_gui->addCommandButton("save", $lng->txt("save"));
1810 }
1811 if ($a_mode == "edit" || $a_mode == "update")
1812 {
1813 $this->form_gui->addCommandButton("update", $lng->txt("save"));
1814 }
1815 $this->form_gui->addCommandButton("cancel", $lng->txt("cancel"));
1816 }
1817
1826 protected function isSettingChangeable($a_field)
1827 {
1828 // TODO: Allow mixed field parameter to support checks against an array of field names.
1829
1830 global $ilSetting;
1831 static $settings = null;
1832
1833
1834
1835 if($this->usrf_ref_id == USER_FOLDER_ID)
1836 {
1837 return true;
1838 }
1839
1840 if($settings == NULL)
1841 {
1842 $settings = $ilSetting->getAll();
1843 }
1844 return (bool) $settings['usr_settings_changeable_lua_'.$a_field];
1845 }
1846
1847
1848// BEGIN DiskQuota: Allow administrators to edit user picture
1855 {
1856 global $ilUser, $rbacsystem;
1857
1858 // User folder
1859 if($this->usrf_ref_id == USER_FOLDER_ID and
1860 !$rbacsystem->checkAccess('visible,read',$this->usrf_ref_id))
1861 {
1862 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
1863 }
1864 // if called from local administration $this->usrf_ref_id is category id
1865 // Todo: this has to be fixed. Do not mix user folder id and category id
1866 if($this->usrf_ref_id != USER_FOLDER_ID)
1867 {
1868 // check if user is assigned to category
1869 if(!$rbacsystem->checkAccess('cat_administrate_users',$this->object->getTimeLimitOwner()))
1870 {
1871 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
1872 }
1873 }
1874
1875 $userfile_input = $this->form_gui->getItemByPostVar("userfile");
1876
1877 if ($_FILES["userfile"]["tmp_name"] == "")
1878 {
1879 if ($userfile_input->getDeletionFlag())
1880 {
1881 $this->object->removeUserPicture();
1882 }
1883 return;
1884 }
1885 if ($_FILES["userfile"]["size"] == 0)
1886 {
1887 ilUtil::sendFailure($this->lng->txt("msg_no_file"));
1888 }
1889 else
1890 {
1891 $webspace_dir = ilUtil::getWebspaceDir();
1892 $image_dir = $webspace_dir."/usr_images";
1893 $store_file = "usr_".$this->object->getId()."."."jpg";
1894
1895 // store filename
1896 $this->object->setPref("profile_image", $store_file);
1897 $this->object->update();
1898
1899 // move uploaded file
1900 $uploaded_file = $image_dir."/upload_".$this->object->getId()."pic";
1901 if (!ilUtil::moveUploadedFile($_FILES["userfile"]["tmp_name"], $_FILES["userfile"]["name"],
1902 $uploaded_file, false))
1903 {
1904 ilUtil::sendFailure($this->lng->txt("upload_error", true));
1905 $this->ctrl->redirect($this, "showProfile");
1906 }
1907 chmod($uploaded_file, 0770);
1908
1909 // take quality 100 to avoid jpeg artefacts when uploading jpeg files
1910 // taking only frame [0] to avoid problems with animated gifs
1911 $show_file = "$image_dir/usr_".$this->object->getId().".jpg";
1912 $thumb_file = "$image_dir/usr_".$this->object->getId()."_small.jpg";
1913 $xthumb_file = "$image_dir/usr_".$this->object->getId()."_xsmall.jpg";
1914 $xxthumb_file = "$image_dir/usr_".$this->object->getId()."_xxsmall.jpg";
1915 $uploaded_file = ilUtil::escapeShellArg($uploaded_file);
1916 $show_file = ilUtil::escapeShellArg($show_file);
1917 $thumb_file = ilUtil::escapeShellArg($thumb_file);
1918 $xthumb_file = ilUtil::escapeShellArg($xthumb_file);
1919 $xxthumb_file = ilUtil::escapeShellArg($xxthumb_file);
1920
1921 if(ilUtil::isConvertVersionAtLeast("6.3.8-3"))
1922 {
1923 ilUtil::execConvert($uploaded_file . "[0] -geometry 200x200^ -gravity center -extent 200x200 -quality 100 JPEG:".$show_file);
1924 ilUtil::execConvert($uploaded_file . "[0] -geometry 100x100^ -gravity center -extent 100x100 -quality 100 JPEG:".$thumb_file);
1925 ilUtil::execConvert($uploaded_file . "[0] -geometry 75x75^ -gravity center -extent 75x75 -quality 100 JPEG:".$xthumb_file);
1926 ilUtil::execConvert($uploaded_file . "[0] -geometry 30x30^ -gravity center -extent 30x30 -quality 100 JPEG:".$xxthumb_file);
1927 }
1928 else
1929 {
1930 ilUtil::execConvert($uploaded_file . "[0] -geometry 200x200 -quality 100 JPEG:".$show_file);
1931 ilUtil::execConvert($uploaded_file . "[0] -geometry 100x100 -quality 100 JPEG:".$thumb_file);
1932 ilUtil::execConvert($uploaded_file . "[0] -geometry 75x75 -quality 100 JPEG:".$xthumb_file);
1933 ilUtil::execConvert($uploaded_file . "[0] -geometry 30x30 -quality 100 JPEG:".$xxthumb_file);
1934 }
1935 }
1936 }
1937
1942 {
1943 $webspace_dir = ilUtil::getWebspaceDir();
1944 $image_dir = $webspace_dir."/usr_images";
1945 $file = $image_dir."/usr_".$this->object->getID()."."."jpg";
1946 $thumb_file = $image_dir."/usr_".$this->object->getID()."_small.jpg";
1947 $xthumb_file = $image_dir."/usr_".$this->object->getID()."_xsmall.jpg";
1948 $xxthumb_file = $image_dir."/usr_".$this->object->getID()."_xxsmall.jpg";
1949 $upload_file = $image_dir."/upload_".$this->object->getID();
1950
1951 // remove user pref file name
1952 $this->object->setPref("profile_image", "");
1953 $this->object->update();
1954 ilUtil::sendSuccess($this->lng->txt("user_image_removed"));
1955
1956 if (@is_file($file))
1957 {
1958 unlink($file);
1959 }
1960 if (@is_file($thumb_file))
1961 {
1962 unlink($thumb_file);
1963 }
1964 if (@is_file($xthumb_file))
1965 {
1966 unlink($xthumb_file);
1967 }
1968 if (@is_file($xxthumb_file))
1969 {
1970 unlink($xxthumb_file);
1971 }
1972 if (@is_file($upload_file))
1973 {
1974 unlink($upload_file);
1975 }
1976
1977 $this->editObject();
1978 }
1979// END DiskQuota: Allow administrators to edit user picture
1980
1985/*
1986 function saveObjectOld()
1987 {
1988 global $ilias, $rbacsystem, $rbacadmin, $ilSetting;
1989
1990 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
1991
1992 //load ILIAS settings
1993 $settings = $ilias->getAllSettings();
1994
1995 // User folder
1996 if (!$rbacsystem->checkAccess('create_user', $this->usrf_ref_id) and
1997 !$rbacsystem->checkAccess('cat_administrate_users',$this->usrf_ref_id))
1998 {
1999 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
2000 }
2001
2002 // check dynamically required fields
2003 foreach ($settings as $key => $val)
2004 {
2005 if (substr($key,0,8) == "require_")
2006 {
2007 $field = substr($key,8);
2008
2009 switch($field)
2010 {
2011 case 'passwd':
2012 case 'passwd2':
2013 if(ilAuthUtils::_allowPasswordModificationByAuthMode(ilAuthUtils::_getAuthMode($_POST['Fobject']['auth_mode'])))
2014 {
2015 $require_keys[] = $field;
2016 }
2017 break;
2018 default:
2019 $require_keys[] = $field;
2020 break;
2021 }
2022 }
2023 }
2024
2025 foreach ($require_keys as $key => $val)
2026 {
2027 if (isset($settings["require_" . $val]) && $settings["require_" . $val])
2028 {
2029 if (empty($_POST["Fobject"][$val]))
2030 {
2031 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields") . ": " .
2032 $this->lng->txt($val),$this->ilias->error_obj->MESSAGE);
2033 }
2034 }
2035 }
2036
2037 if(!$this->__checkUserDefinedRequiredFields())
2038 {
2039 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields"),$this->ilias->error_obj->MESSAGE);
2040 }
2041
2042 // validate login
2043 if (!ilUtil::isLogin($_POST["Fobject"]["login"]))
2044 {
2045 $this->ilias->raiseError($this->lng->txt("login_invalid"),$this->ilias->error_obj->MESSAGE);
2046 }
2047
2048 // check loginname
2049 if (ilObjUser::_loginExists($_POST["Fobject"]["login"]))
2050 {
2051 $this->ilias->raiseError($this->lng->txt("login_exists"),$this->ilias->error_obj->MESSAGE);
2052 }
2053
2054 // Do password checks only if auth mode allows password modifications
2055 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
2056 if(ilAuthUtils::_allowPasswordModificationByAuthMode(ilAuthUtils::_getAuthMode($_POST['Fobject']['auth_mode'])))
2057 {
2058 // check passwords
2059 if ($_POST["Fobject"]["passwd"] != $_POST["Fobject"]["passwd2"])
2060 {
2061 $this->ilias->raiseError($this->lng->txt("passwd_not_match"),$this->ilias->error_obj->MESSAGE);
2062 }
2063
2064 // validate password
2065 if (!ilUtil::isPassword($_POST["Fobject"]["passwd"]))
2066 {
2067 $this->ilias->raiseError($this->lng->txt("passwd_invalid"),$this->ilias->error_obj->MESSAGE);
2068 }
2069 }
2070 if(ilAuthUtils::_needsExternalAccountByAuthMode(ilAuthUtils::_getAuthMode($_POST['Fobject']['auth_mode'])))
2071 {
2072 if(!strlen($_POST['Fobject']['ext_account']))
2073 {
2074 $this->ilias->raiseError($this->lng->txt('ext_acccount_required'),$this->ilias->error_obj->MESSAGE);
2075 }
2076 }
2077
2078 if($_POST['Fobject']['ext_account'] &&
2079 ($elogin = ilObjUser::_checkExternalAuthAccount($_POST['Fobject']['auth_mode'],$_POST['Fobject']['ext_account'])))
2080 {
2081 if($elogin != '')
2082 {
2083 $this->ilias->raiseError(
2084 sprintf($this->lng->txt("err_auth_ext_user_exists"),
2085 $_POST["Fobject"]["ext_account"],
2086 $_POST['Fobject']['auth_mode'],
2087 $elogin),
2088 $this->ilias->error_obj->MESSAGE);
2089 }
2090 }
2091
2092
2093 // The password type is not passed in the post data. Therefore we
2094 // append it here manually.
2095 include_once ('./Services/User/classes/class.ilObjUser.php');
2096 $_POST["Fobject"]["passwd_type"] = IL_PASSWD_PLAIN;
2097
2098 // validate email
2099 if (strlen($_POST['Fobject']['email']) and !ilUtil::is_email($_POST["Fobject"]["email"]))
2100 {
2101 $this->ilias->raiseError($this->lng->txt("email_not_valid"),$this->ilias->error_obj->MESSAGE);
2102 }
2103
2104 // validate time limit
2105 if ($_POST["time_limit"]["unlimited"] != 1 and
2106 ($this->__toUnix($_POST["time_limit"]["until"]) < $this->__toUnix($_POST["time_limit"]["from"])))
2107 {
2108 $this->ilias->raiseError($this->lng->txt("time_limit_not_valid"),$this->ilias->error_obj->MESSAGE);
2109 }
2110 if(!$this->ilias->account->getTimeLimitUnlimited())
2111 {
2112 if($this->__toUnix($_POST["time_limit"]["from"]) < $this->ilias->account->getTimeLimitFrom() or
2113 $this->__toUnix($_POST["time_limit"]["until"])> $this->ilias->account->getTimeLimitUntil() or
2114 $_POST['time_limit']['unlimited'])
2115 {
2116 $this->ilias->raiseError($this->lng->txt("time_limit_not_within_owners"),$this->ilias->error_obj->MESSAGE);
2117 }
2118 }
2119
2120 // TODO: check if login or passwd already exists
2121 // TODO: check length of login and passwd
2122
2123 // checks passed. save user
2124 $userObj = new ilObjUser();
2125 $userObj->assignData($_POST["Fobject"]);
2126 $userObj->setTitle($userObj->getFullname());
2127 $userObj->setDescription($userObj->getEmail());
2128
2129 $userObj->setTimeLimitOwner($this->object->getRefId());
2130 $userObj->setTimeLimitUnlimited($_POST["time_limit"]["unlimited"]);
2131 $userObj->setTimeLimitFrom($this->__toUnix($_POST["time_limit"]["from"]));
2132 $userObj->setTimeLimitUntil($this->__toUnix($_POST["time_limit"]["until"]));
2133
2134 $userObj->setUserDefinedData($_POST['udf']);
2135
2136 $userObj->create();
2137
2138 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
2139 if(ilAuthUtils::_isExternalAccountEnabled())
2140 {
2141 $userObj->setExternalAccount($_POST["Fobject"]["ext_account"]);
2142 }
2143
2144 //$user->setId($userObj->getId());
2145
2146 //insert user data in table user_data
2147 $userObj->saveAsNew();
2148
2149 // setup user preferences
2150 $userObj->setLanguage($_POST["Fobject"]["language"]);
2151
2152 //set user skin and style
2153 $sknst = explode(":", $_POST["Fobject"]["skin_style"]);
2154
2155 if ($userObj->getPref("style") != $sknst[1] ||
2156 $userObj->getPref("skin") != $sknst[0])
2157 {
2158 $userObj->setPref("skin", $sknst[0]);
2159 $userObj->setPref("style", $sknst[1]);
2160 }
2161
2162 // set hits per pages
2163 $userObj->setPref("hits_per_page", $_POST["Fobject"]["hits_per_page"]);
2164 // set show users online
2165 $userObj->setPref("show_users_online", $_POST["Fobject"]["show_users_online"]);
2166 // set hide_own_online_status
2167 $userObj->setPref("hide_own_online_status", $_POST["Fobject"]["hide_own_online_status"]);
2168
2169 $userObj->writePrefs();
2170
2171 //set role entries
2172 $rbacadmin->assignUser($_POST["Fobject"]["default_role"],$userObj->getId(),true);
2173
2174 $msg = $this->lng->txt("user_added");
2175
2176 // BEGIN DiskQuota: Remember the state of the "send info mail" checkbox
2177 global $ilUser;
2178 $ilUser->setPref('send_info_mails', ($_POST["send_mail"] != "") ? 'y' : 'n');
2179 $ilUser->writePrefs();
2180 // END DiskQuota: Remember the state of the "send info mail" checkbox
2181
2182 // send new account mail
2183 if ($_POST["send_mail"] != "")
2184 {
2185 include_once("Services/Mail/classes/class.ilAccountMail.php");
2186 $acc_mail = new ilAccountMail();
2187 $acc_mail->setUserPassword($_POST["Fobject"]["passwd"]);
2188 $acc_mail->setUser($userObj);
2189
2190 if ($acc_mail->send())
2191 {
2192 $msg = $msg."<br />".$this->lng->txt("mail_sent");
2193 }
2194 else
2195 {
2196 $msg = $msg."<br />".$this->lng->txt("mail_not_sent");
2197 }
2198 }
2199
2200 ilUtil::sendInfo($msg, true);
2201
2202 if(strtolower($_GET["baseClass"]) == 'iladministrationgui')
2203 {
2204 $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
2205 }
2206 else
2207 {
2208 $this->ctrl->redirectByClass('ilobjcategorygui','listUsers');
2209 }
2210 }
2211*/
2217 {
2218 global $ilias, $rbacsystem, $rbacadmin,$ilUser;
2219
2220 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
2221
2222 //load ILIAS settings
2223 $settings = $ilias->getAllSettings();
2224
2225 // User folder
2226 if($this->usrf_ref_id == USER_FOLDER_ID and !$rbacsystem->checkAccess('visible,read,write',$this->usrf_ref_id))
2227 {
2228 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
2229 }
2230 // if called from local administration $this->usrf_ref_id is category id
2231 // Todo: this has to be fixed. Do not mix user folder id and category id
2232 if($this->usrf_ref_id != USER_FOLDER_ID)
2233 {
2234 // check if user is assigned to category
2235 if(!$rbacsystem->checkAccess('cat_administrate_users',$this->object->getTimeLimitOwner()))
2236 {
2237 $this->ilias->raiseError($this->lng->txt("msg_no_perm_modify_user"),$this->ilias->error_obj->MESSAGE);
2238 }
2239 }
2240
2241 foreach ($_POST["Fobject"] as $key => $val)
2242 {
2243 $_POST["Fobject"][$key] = ilUtil::stripSlashes($val);
2244 }
2245
2246 // check dynamically required fields
2247 foreach ($settings as $key => $val)
2248 {
2249 $field = substr($key,8);
2250 switch($field)
2251 {
2252 case 'passwd':
2253 case 'passwd2':
2255 {
2256 $require_keys[] = $field;
2257 }
2258 break;
2259 default:
2260 $require_keys[] = $field;
2261 break;
2262
2263 }
2264 }
2265
2266 foreach ($require_keys as $key => $val)
2267 {
2268 // exclude required system and registration-only fields
2269 $system_fields = array("default_role");
2270 if (!in_array($val, $system_fields))
2271 {
2272 if (isset($settings["require_" . $val]) && $settings["require_" . $val])
2273 {
2274 if (empty($_POST["Fobject"][$val]))
2275 {
2276 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields") . ": " .
2277 $this->lng->txt($val),$this->ilias->error_obj->MESSAGE);
2278 }
2279 }
2280 }
2281 }
2282
2284 {
2285 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields"),$this->ilias->error_obj->MESSAGE);
2286 }
2287 // validate login
2288 if ($this->object->getLogin() != $_POST["Fobject"]["login"] &&
2289 !ilUtil::isLogin($_POST["Fobject"]["login"]))
2290 {
2291 $this->ilias->raiseError($this->lng->txt("login_invalid"),$this->ilias->error_obj->MESSAGE);
2292 }
2293
2294 // check loginname
2295 if (ilObjUser::_loginExists($_POST["Fobject"]["login"],$this->id))
2296 {
2297 $this->ilias->raiseError($this->lng->txt("login_exists"),$this->ilias->error_obj->MESSAGE);
2298 }
2299
2301 {
2302 if($_POST['Fobject']['passwd'] == "********" and
2303 !strlen($this->object->getPasswd()))
2304 {
2305 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields") . ": " .
2306 $this->lng->txt('password'),$this->ilias->error_obj->MESSAGE);
2307 }
2308 // check passwords
2309 if ($_POST["Fobject"]["passwd"] != $_POST["Fobject"]["passwd2"])
2310 {
2311 $this->ilias->raiseError($this->lng->txt("passwd_not_match"),$this->ilias->error_obj->MESSAGE);
2312 }
2313
2314 // validate password
2315 if (!ilUtil::isPassword($_POST["Fobject"]["passwd"]))
2316 {
2317 $this->ilias->raiseError($this->lng->txt("passwd_invalid"),$this->ilias->error_obj->MESSAGE);
2318 }
2319 }
2320 else
2321 {
2322 // Password will not be changed...
2323 $_POST['Fobject']['passwd'] = "********";
2324 }
2326 {
2327 if(!strlen($_POST['Fobject']['ext_account']))
2328 {
2329 $this->ilias->raiseError($this->lng->txt('ext_acccount_required'),$this->ilias->error_obj->MESSAGE);
2330 }
2331 }
2332 if($_POST['Fobject']['ext_account'] &&
2333 ($elogin = ilObjUser::_checkExternalAuthAccount($_POST['Fobject']['auth_mode'],$_POST['Fobject']['ext_account'])))
2334 {
2335 if($elogin != $this->object->getLogin())
2336 {
2337 $this->ilias->raiseError(
2338 sprintf($this->lng->txt("err_auth_ext_user_exists"),
2339 $_POST["Fobject"]["ext_account"],
2340 $_POST['Fobject']['auth_mode'],
2341 $elogin),
2342 $this->ilias->error_obj->MESSAGE);
2343 }
2344 }
2345
2346 // The password type is not passed with the post data. Therefore we
2347 // append it here manually.
2348 include_once ('./Services/User/classes/class.ilObjUser.php');
2349 $_POST["Fobject"]["passwd_type"] = IL_PASSWD_PLAIN;
2350
2351 // validate email
2352 if (strlen($_POST['Fobject']['email']) and !ilUtil::is_email($_POST["Fobject"]["email"]))
2353 {
2354 $this->ilias->raiseError($this->lng->txt("email_not_valid"),$this->ilias->error_obj->MESSAGE);
2355 }
2356
2357 $start = $this->__toUnix($_POST["time_limit"]["from"]);
2358 $end = $this->__toUnix($_POST["time_limit"]["until"]);
2359
2360 // validate time limit
2361 if (!$_POST["time_limit"]["unlimited"] and
2362 ( $start > $end))
2363 {
2364 $this->ilias->raiseError($this->lng->txt("time_limit_not_valid"),$this->ilias->error_obj->MESSAGE);
2365 }
2366
2367 if(!$this->ilias->account->getTimeLimitUnlimited())
2368 {
2369 if($start < $this->ilias->account->getTimeLimitFrom() or
2370 $end > $this->ilias->account->getTimeLimitUntil() or
2371 $_POST['time_limit']['unlimited'])
2372 {
2373 $_SESSION['error_post_vars'] = $_POST;
2374
2375 ilUtil::sendFailure($this->lng->txt('time_limit_not_within_owners'));
2376 $this->editObject();
2377
2378 return false;
2379 }
2380 }
2381
2382 // TODO: check length of login and passwd
2383
2384 // checks passed. save user
2385 $_POST['Fobject']['time_limit_owner'] = $this->object->getTimeLimitOwner();
2386
2387 $_POST['Fobject']['time_limit_unlimited'] = (int) $_POST['time_limit']['unlimited'];
2388 $_POST['Fobject']['time_limit_from'] = $this->__toUnix($_POST['time_limit']['from']);
2389 $_POST['Fobject']['time_limit_until'] = $this->__toUnix($_POST['time_limit']['until']);
2390
2391 if($_POST['Fobject']['time_limit_unlimited'] != $this->object->getTimeLimitUnlimited() or
2392 $_POST['Fobject']['time_limit_from'] != $this->object->getTimeLimitFrom() or
2393 $_POST['Fobject']['time_limit_until'] != $this->object->getTimeLimitUntil())
2394 {
2395 $_POST['Fobject']['time_limit_message'] = 0;
2396 }
2397 else
2398 {
2399 $_POST['Fobject']['time_limit_message'] = $this->object->getTimeLimitMessage();
2400 }
2401
2402 $this->object->assignData($_POST["Fobject"]);
2403 $this->object->setUserDefinedData($_POST['udf']);
2404
2405 try
2406 {
2407 $this->object->updateLogin($_POST['Fobject']['login']);
2408 }
2409 catch (ilUserException $e)
2410 {
2411 ilUtil::sendFailure($e->getMessage());
2412 $this->form_gui->setValuesByPost();
2413 return $tpl->setContent($this->form_gui->getHtml());
2414 }
2415
2416 $this->object->setTitle($this->object->getFullname());
2417 $this->object->setDescription($this->object->getEmail());
2418 $this->object->setLanguage($_POST["Fobject"]["language"]);
2419
2420 //set user skin and style
2421 $sknst = explode(":", $_POST["Fobject"]["skin_style"]);
2422
2423 if ($this->object->getPref("style") != $sknst[1] ||
2424 $this->object->getPref("skin") != $sknst[0])
2425 {
2426 $this->object->setPref("skin", $sknst[0]);
2427 $this->object->setPref("style", $sknst[1]);
2428 }
2429
2430 // set hits per pages
2431 $this->object->setPref("hits_per_page", $_POST["Fobject"]["hits_per_page"]);
2432 // set show users online
2433 $this->object->setPref("show_users_online", $_POST["Fobject"]["show_users_online"]);
2434 // set hide_own_online_status
2435 if ($_POST["Fobject"]["hide_own_online_status"]) {
2436 $this->object->setPref("hide_own_online_status", $_POST["Fobject"]["hide_own_online_status"]);
2437 }
2438 else {
2439 $this->object->setPref("hide_own_online_status", "n");
2440 }
2441
2442 $this->update = $this->object->update();
2443 //$rbacadmin->updateDefaultRole($_POST["Fobject"]["default_role"], $this->object->getId());
2444
2445 // BEGIN DiskQuota: Remember the state of the "send info mail" checkbox
2446 global $ilUser;
2447 $ilUser->setPref('send_info_mails', ($_POST['send_mail'] == 'y') ? 'y' : 'n');
2448 $ilUser->writePrefs();
2449 // END DiskQuota: Remember the state of the "send info mail" checkbox
2450
2451 $mail_message = $this->__sendProfileMail();
2452 $msg = $this->lng->txt('saved_successfully').$mail_message;
2453
2454 // feedback
2455 ilUtil::sendSuccess($msg,true);
2456
2457 if (strtolower($_GET["baseClass"]) == 'iladministrationgui')
2458 {
2459 $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
2460 }
2461 else
2462 {
2463 $this->ctrl->redirectByClass('ilobjcategorygui','listUsers');
2464 }
2465 }
2466
2467
2468
2475 {
2476 global $rbacsystem, $rbacadmin, $rbacreview;
2477
2478 if (!$rbacsystem->checkAccess("edit_roleassignment", $this->usrf_ref_id))
2479 {
2480 $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_role_to_user"),$this->ilias->error_obj->MESSAGE);
2481 }
2482
2483 $selected_roles = $_POST["role_id"] ? $_POST["role_id"] : array();
2484 $posted_roles = $_POST["role_id_ctrl"] ? $_POST["role_id_ctrl"] : array();
2485
2486 // prevent unassignment of system role from system user
2487 if ($this->object->getId() == SYSTEM_USER_ID and in_array(SYSTEM_ROLE_ID, $posted_roles))
2488 {
2489 array_push($selected_roles,SYSTEM_ROLE_ID);
2490 }
2491
2492 $global_roles_all = $rbacreview->getGlobalRoles();
2493 $assigned_roles_all = $rbacreview->assignedRoles($this->object->getId());
2494 $assigned_roles = array_intersect($assigned_roles_all,$posted_roles);
2495 $assigned_global_roles_all = array_intersect($assigned_roles_all,$global_roles_all);
2496 $assigned_global_roles = array_intersect($assigned_global_roles_all,$posted_roles);
2497 $posted_global_roles = array_intersect($selected_roles,$global_roles_all);
2498
2499 if ((empty($selected_roles) and count($assigned_roles_all) == count($assigned_roles))
2500 or (empty($posted_global_roles) and count($assigned_global_roles_all) == count($assigned_global_roles)))
2501 {
2502 //$this->ilias->raiseError($this->lng->txt("msg_min_one_role")."<br/>".$this->lng->txt("action_aborted"),$this->ilias->error_obj->MESSAGE);
2503 // workaround. sometimes jumps back to wrong page
2504 ilUtil::sendFailure($this->lng->txt("msg_min_one_role")."<br/>".$this->lng->txt("action_aborted"),true);
2505 $this->ctrl->redirect($this,'roleassignment');
2506 }
2507
2508 foreach (array_diff($assigned_roles,$selected_roles) as $role)
2509 {
2510 $rbacadmin->deassignUser($role,$this->object->getId());
2511 }
2512
2513 foreach (array_diff($selected_roles,$assigned_roles) as $role)
2514 {
2515 $rbacadmin->assignUser($role,$this->object->getId(),false);
2516 }
2517
2518 include_once "./Services/AccessControl/classes/class.ilObjRole.php";
2519
2520 // update object data entry (to update last modification date)
2521 $this->object->update();
2522
2523 ilUtil::sendSuccess($this->lng->txt("msg_roleassignment_changed"),true);
2524
2525 if(strtolower($_GET["baseClass"]) == 'iladministrationgui')
2526 {
2527 $this->ctrl->redirect($this,'roleassignment');
2528 }
2529 else
2530 {
2531 $this->ctrl->redirectByClass('ilobjcategorygui','listUsers');
2532 }
2533
2534 }
2535
2542 {
2543 global $rbacreview,$rbacsystem,$ilUser, $ilTabs;
2544
2545 $ilTabs->activateTab("role_assignment");
2546
2547 if (!$rbacsystem->checkAccess("edit_roleassignment", $this->usrf_ref_id))
2548 {
2549 $this->ilias->raiseError($this->lng->txt("msg_no_perm_assign_role_to_user"),$this->ilias->error_obj->MESSAGE);
2550 }
2551
2552 $_SESSION['filtered_roles'] = isset($_POST['filter']) ? $_POST['filter'] : $_SESSION['filtered_roles'];
2553
2554 if ($_SESSION['filtered_roles'] > 5)
2555 {
2556 $_SESSION['filtered_roles'] = 0;
2557 }
2558
2559 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.usr_role_assignment.html','Services/User');
2560
2561 if(false)
2562 {
2563 $this->tpl->setCurrentBlock("filter");
2564 $this->tpl->setVariable("FILTER_TXT_FILTER",$this->lng->txt('filter'));
2565 $this->tpl->setVariable("SELECT_FILTER",$this->__buildFilterSelect());
2566 $this->tpl->setVariable("FILTER_ACTION",$this->ctrl->getFormAction($this));
2567 $this->tpl->setVariable("FILTER_NAME",'roleassignment');
2568 $this->tpl->setVariable("FILTER_VALUE",$this->lng->txt('apply_filter'));
2569 $this->tpl->parseCurrentBlock();
2570 }
2571
2572 // init table
2573 include_once("./Services/User/classes/class.ilRoleAssignmentTableGUI.php");
2574 $tab = new ilRoleAssignmentTableGUI($this, "roleassignment");
2575
2576 // now get roles depending on filter settings
2577 $role_list = $rbacreview->getRolesByFilter($tab->filter["role_filter"],$this->object->getId());
2578 $assigned_roles = $rbacreview->assignedRoles($this->object->getId());
2579
2580 $counter = 0;
2581
2582 include_once ('./Services/AccessControl/classes/class.ilObjRole.php');
2583
2584 $records = array();
2585 foreach ($role_list as $role)
2586 {
2587 // fetch context path of role
2588 $rolf = $rbacreview->getFoldersAssignedToRole($role["obj_id"],true);
2589
2590 // only list roles that are not set to status "deleted"
2591 if ($rbacreview->isDeleted($rolf[0]))
2592 {
2593 continue;
2594 }
2595
2596 // build context path
2597 $path = "";
2598
2599 if ($this->tree->isInTree($rolf[0]))
2600 {
2601 if ($rolf[0] == ROLE_FOLDER_ID)
2602 {
2603 $path = $this->lng->txt("global");
2604 }
2605 else
2606 {
2607 $tmpPath = $this->tree->getPathFull($rolf[0]);
2608
2609 // count -1, to exclude the role folder itself
2610 /*for ($i = 1; $i < (count($tmpPath)-1); $i++)
2611 {
2612 if ($path != "")
2613 {
2614 $path .= " > ";
2615 }
2616
2617 $path .= $tmpPath[$i]["title"];
2618 }*/
2619
2620 $path = $tmpPath[count($tmpPath)-1]["title"];
2621 }
2622 }
2623 else
2624 {
2625 $path = "<b>Rolefolder ".$rolf[0]." not found in tree! (Role ".$role["obj_id"].")</b>";
2626 }
2627
2628 $disabled = false;
2629
2630 // disable checkbox for system role for the system user
2631 if (($this->object->getId() == SYSTEM_USER_ID and $role["obj_id"] == SYSTEM_ROLE_ID)
2632 or (!in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())) and $role["obj_id"] == SYSTEM_ROLE_ID))
2633 {
2634 $disabled = true;
2635 }
2636
2637 // protected admin role
2638 if($role['obj_id'] == SYSTEM_ROLE_ID && !$rbacreview->isAssigned($ilUser->getId(),SYSTEM_ROLE_ID))
2639 {
2640 include_once './Services/PrivacySecurity/classes/class.ilSecuritySettings.php';
2641 if(ilSecuritySettings::_getInstance()->isAdminRoleProtected())
2642 {
2643 $disabled = true;
2644 }
2645 }
2646
2647 if (substr($role["title"],0,3) == "il_")
2648 {
2649 if (!$assignable)
2650 {
2651 $rolf_arr = $rbacreview->getFoldersAssignedToRole($role["obj_id"],true);
2652 $rolf2 = $rolf_arr[0];
2653 }
2654 else
2655 {
2656 $rolf2 = $rolf;
2657 }
2658
2659 $parent_node = $this->tree->getNodeData($rolf2);
2660
2661 $role["description"] = $this->lng->txt("obj_".$parent_node["type"])."&nbsp;(#".$parent_node["obj_id"].")";
2662 }
2663
2664 $role_ids[$counter] = $role["obj_id"];
2665
2666 $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"]."\"/>";
2667 $this->ctrl->setParameterByClass("ilobjrolegui", "ref_id", $rolf[0]);
2668 $this->ctrl->setParameterByClass("ilobjrolegui", "obj_id", $role["obj_id"]);
2669 $result_set[$counter][] = $link = "<a href=\"".$this->ctrl->getLinkTargetByClass("ilobjrolegui", "perm")."\">".ilObjRole::_getTranslation($role["title"])."</a>";
2670 $title = ilObjRole::_getTranslation($role["title"]);
2671 $result_set[$counter][] = $role["description"];
2672
2673 // Add link to objector local Rores
2674 if ($role["role_type"] == "local") {
2675 // Get Object to the role
2676 $obj_id = ilRbacReview::getObjectOfRole($role["rol_id"]);
2677
2678 $obj_type = ilObject::_lookupType($obj_id);
2679
2681
2682 foreach ($ref_ids as $ref_id) {}
2683
2684 require_once("./Services/Link/classes/class.ilLink.php");
2685
2686 $result_set[$counter][] = $context = "<a href='".ilLink::_getLink($ref_id, ilObject::_lookupType($obj_id))."' target='_top'>".$path."</a>";
2687 }
2688 else
2689 {
2690 $result_set[$counter][] = $path;
2691 $context = $path;
2692 }
2693
2694 $records[] = array("path" => $path, "description" => $role["description"],
2695 "context" => $context, "checkbox" => $checkbox,
2696 "role" => $link, "title" => $title);
2697 ++$counter;
2698 }
2699
2700 if (true)
2701 {
2702 $tab->setData($records);
2703 $this->tpl->setVariable("ROLES_TABLE",$tab->getHTML());
2704 return;
2705 }
2706 }
2707
2712 {
2713 include_once("./Services/User/classes/class.ilRoleAssignmentTableGUI.php");
2714 $table_gui = new ilRoleAssignmentTableGUI($this, "roleassignment");
2715 $table_gui->writeFilterToSession(); // writes filter to session
2716 $table_gui->resetOffset(); // sets record offest to 0 (first page)
2717 $this->roleassignmentObject();
2718 }
2719
2724 {
2725 include_once("./Services/User/classes/class.ilRoleAssignmentTableGUI.php");
2726 $table_gui = new ilRoleAssignmentTableGUI($this, "roleassignment");
2727 $table_gui->resetOffset(); // sets record offest to 0 (first page)
2728 $table_gui->resetFilter(); // clears filter
2729 $this->roleassignmentObject();
2730 }
2731
2732 function __getDateSelect($a_type,$a_varname,$a_selected)
2733 {
2734 switch($a_type)
2735 {
2736 case "minute":
2737 for($i=0;$i<=60;$i++)
2738 {
2739 $days[$i] = $i < 10 ? "0".$i : $i;
2740 }
2741 return ilUtil::formSelect($a_selected,$a_varname,$days,false,true);
2742
2743 case "hour":
2744 for($i=0;$i<24;$i++)
2745 {
2746 $days[$i] = $i < 10 ? "0".$i : $i;
2747 }
2748 return ilUtil::formSelect($a_selected,$a_varname,$days,false,true);
2749
2750 case "day":
2751 for($i=1;$i<32;$i++)
2752 {
2753 $days[$i] = $i < 10 ? "0".$i : $i;
2754 }
2755 return ilUtil::formSelect($a_selected,$a_varname,$days,false,true);
2756
2757 case "month":
2758 for($i=1;$i<13;$i++)
2759 {
2760 $month[$i] = $i < 10 ? "0".$i : $i;
2761 }
2762 return ilUtil::formSelect($a_selected,$a_varname,$month,false,true);
2763
2764 case "year":
2765 if($a_selected < date('Y',time()))
2766 {
2767 $start = $a_selected;
2768 }
2769 else
2770 {
2771 $start = date('Y',time());
2772 }
2773
2774 for($i = $start;$i < date("Y",time()) + 11;++$i)
2775 {
2776 $year[$i] = $i;
2777 }
2778 return ilUtil::formSelect($a_selected,$a_varname,$year,false,true);
2779 }
2780 }
2781
2782 function __toUnix($a_time_arr)
2783 {
2784 return mktime($a_time_arr["hour"],
2785 $a_time_arr["minute"],
2786 $a_time_arr["second"],
2787 $a_time_arr["month"],
2788 $a_time_arr["day"],
2789 $a_time_arr["year"]);
2790 }
2791
2792
2793
2794
2796 {
2797 unset($_SESSION["filtered_roles"]);
2798 }
2799
2801 {
2802 $action[0] = $this->lng->txt('assigned_roles');
2803 $action[1] = $this->lng->txt('all_roles');
2804 $action[2] = $this->lng->txt('all_global_roles');
2805 $action[3] = $this->lng->txt('all_local_roles');
2806 $action[4] = $this->lng->txt('internal_local_roles_only');
2807 $action[5] = $this->lng->txt('non_internal_local_roles_only');
2808
2809 return ilUtil::formSelect($_SESSION['filtered_roles'],"filter",$action,false,true);
2810 }
2811
2813 {
2814 parent::hitsperpageObject();
2815 $this->roleassignmentObject();
2816 }
2817
2823 {
2824 global $ilLocator;
2825
2826 $ilLocator->clearItems();
2827
2828 if ($_GET["admin_mode"] == "settings") // system settings
2829 {
2830 $this->ctrl->setParameterByClass("ilobjsystemfoldergui",
2831 "ref_id", SYSTEM_FOLDER_ID);
2832 $ilLocator->addItem($this->lng->txt("administration"),
2833 $this->ctrl->getLinkTargetByClass(array("iladministrationgui", "ilobjsystemfoldergui"), ""),
2834 ilFrameTargetInfo::_getFrame("MainContent"));
2835
2836 if ($_GET['ref_id'] == USER_FOLDER_ID)
2837 {
2838 $ilLocator->addItem($this->lng->txt("obj_".ilObject::_lookupType(
2839 ilObject::_lookupObjId($_GET["ref_id"]))),
2840 $this->ctrl->getLinkTargetByClass("ilobjuserfoldergui", "view"));
2841 }
2842 elseif ($_GET['ref_id'] == ROLE_FOLDER_ID)
2843 {
2844 $ilLocator->addItem($this->lng->txt("obj_".ilObject::_lookupType(
2845 ilObject::_lookupObjId($_GET["ref_id"]))),
2846 $this->ctrl->getLinkTargetByClass("ilobjrolefoldergui", "view"));
2847 }
2848
2849 if ($_GET["obj_id"] > 0)
2850 {
2851 $ilLocator->addItem($this->object->getTitle(),
2852 $this->ctrl->getLinkTarget($this, "view"));
2853 }
2854 }
2855 else // repository administration
2856 {
2857 // ?
2858 }
2859 }
2860
2861 function showUpperIcon()
2862 {
2863 }
2864
2866 {
2867 global $ilUser,$ilias;
2868
2869 if($_POST['send_mail'] != 'y')
2870 {
2871 return '';
2872 }
2873 if(!strlen($this->object->getEmail()))
2874 {
2875 return '';
2876 }
2877
2878 // Choose language of user
2879 $usr_lang = new ilLanguage($this->object->getLanguage());
2880 $usr_lang->loadLanguageModule('crs');
2881 $usr_lang->loadLanguageModule('registration');
2882
2883 include_once "Services/Mail/classes/class.ilMimeMail.php";
2884
2885 $mmail = new ilMimeMail();
2886 $mmail->autoCheck(false);
2887 $mmail->From($ilUser->getEmail());
2888 $mmail->To($this->object->getEmail());
2889
2890 // mail subject
2891 $subject = $usr_lang->txt("profile_changed");
2892
2893
2894 // mail body
2895 $body = ($usr_lang->txt("reg_mail_body_salutation")." ".$this->object->getFullname().",\n\n");
2896
2897 $date = $this->object->getApproveDate();
2898 // Approve
2899 if((time() - strtotime($date)) < 10)
2900 {
2901 $body .= ($usr_lang->txt('reg_mail_body_approve')."\n\n");
2902 }
2903 else
2904 {
2905 $body .= ($usr_lang->txt('reg_mail_body_profile_changed')."\n\n");
2906 }
2907
2908 // Append login info only if password has been chacnged
2909 if($_POST['passwd'] != '********')
2910 {
2911 $body .= $usr_lang->txt("reg_mail_body_text2")."\n".
2912 ILIAS_HTTP_PATH."/login.php?client_id=".$ilias->client_id."\n".
2913 $usr_lang->txt("login").": ".$this->object->getLogin()."\n".
2914 $usr_lang->txt("passwd").": ".$_POST['passwd']."\n\n";
2915 }
2916 $body .= ($usr_lang->txt("reg_mail_body_text3")."\n");
2917 $body .= $this->object->getProfileAsString($usr_lang);
2918
2919 $mmail->Subject($subject);
2920 $mmail->Body($body);
2921 $mmail->Send();
2922
2923
2924 return "<br/>".$this->lng->txt("mail_sent");
2925 }
2926
2930 public static function _goto($a_target)
2931 {
2932 global $ilUser, $ilCtrl;
2933
2934 // #10888
2935 if($a_target == md5("usrdelown"))
2936 {
2937 if($ilUser->getId() != ANONYMOUS_USER_ID &&
2938 $ilUser->hasDeletionFlag())
2939 {
2940 $ilCtrl->setTargetScript("ilias.php");
2941 $ilCtrl->initBaseClass("ilpersonaldesktopgui");
2942 $ilCtrl->redirectByClass(array("ilpersonaldesktopgui", "ilpersonalsettingsgui"), "deleteOwnAccount3");
2943 }
2944 exit("This account is not flagged for deletion."); // #12160
2945 }
2946
2947 if (substr($a_target, 0, 1) == "n")
2948 {
2949 $a_target = ilObjUser::_lookupId(ilUtil::stripSlashes(substr($a_target, 1)));
2950 }
2951
2952 $_GET["cmd"] = "view";
2953 $_GET["user_id"] = (int) $a_target;
2954 $_GET["baseClass"] = "ilPublicUserProfileGUI";
2955 $_GET["cmdClass"] = "ilpublicuserprofilegui";
2956 include("ilias.php");
2957 exit;
2958 }
2959
2968 protected function handleIgnoredRequiredFields()
2969 {
2970 $profileMaybeIncomplete = false;
2971
2972 require_once 'Services/User/classes/class.ilUserProfile.php';
2973
2974 foreach( ilUserProfile::getIgnorableRequiredSettings() as $fieldName )
2975 {
2976 $elm = $this->form_gui->getItemByPostVar($fieldName);
2977
2978 if( !$elm ) continue;
2979
2980 if( $elm->getRequired() )
2981 {
2982 $profileMaybeIncomplete = true;
2983
2984 // Flag as optional
2985 $elm->setRequired( false );
2986 }
2987 }
2988
2989 include_once 'Services/User/classes/class.ilUserDefinedFields.php';
2990 $user_defined_fields = ilUserDefinedFields::_getInstance();
2991 foreach($user_defined_fields->getDefinitions() as $field_id => $definition)
2992 {
2993 $elm = $this->form_gui->getItemByPostVar('udf_'.$definition['field_id']);
2994
2995 if( !$elm ) continue;
2996
2997 if( $elm->getRequired() && $definition['changeable'] && $definition['required'] && $definition['visible'] )
2998 {
2999 $profileMaybeIncomplete = true;
3000
3001 // Flag as optional
3002 $elm->setRequired( false );
3003 }
3004 }
3005
3006 return $profileMaybeIncomplete;
3007 }
3008
3012 protected function showAcceptedTermsOfService()
3013 {
3017 $agree_date = $this->form_gui->getItemByPostVar('agree_date');
3018 if($agree_date && $agree_date->getValue())
3019 {
3020 $this->lng->loadLanguageModule('tos');
3021 require_once 'Services/TermsOfService/classes/class.ilTermsOfServiceHelper.php';
3026 if($entity->getId())
3027 {
3028 $show_agreement_text = new ilCheckboxInputGUI($this->lng->txt('tos_show_signed_text'), 'tos_show_signed_text');
3029
3030 $agreement_lang = new ilNonEditableValueGUI($this->lng->txt('language'), '');
3031 $agreement_lang->setValue($this->lng->txt('meta_l_' . $entity->getIso2LanguageCode()));
3032 $show_agreement_text->addSubItem($agreement_lang);
3033
3034 require_once 'Services/TermsOfService/classes/form/class.ilTermsOfServiceSignedDocumentFormElementGUI.php';
3035 $agreement_document = new ilTermsOfServiceSignedDocumentFormElementGUI($this->lng->txt('tos_agreement_document'), '', $entity);
3036 $show_agreement_text->addSubItem($agreement_document);
3037 $agree_date->addSubItem($show_agreement_text);
3038 }
3039 }
3040 else if($agree_date)
3041 {
3042 $agree_date->setValue($this->lng->txt('tos_not_accepted_yet'));
3043 }
3044 }
3045} // END class.ilObjUserGUI
3046?>
print $file
$_GET["client_id"]
const IL_CAL_UNIX
const IL_CAL_DATETIME
const IL_CAL_FKT_DATE
const USER_FOLDER_ID
Class ilObjUserFolder.
const IL_PASSWD_PLAIN
const UDF_TYPE_WYSIWYG
const UDF_TYPE_TEXT
Class ilAccountMail.
static _allowPasswordModificationByAuthMode($a_auth_mode)
Allow password modification.
_getAuthMode($a_auth_mode, $a_db_handler='')
static _isExternalAccountEnabled()
Check if an external account name is required.
static _needsExternalAccountByAuthMode($a_auth_mode)
Check if chosen auth mode needs an external account entry.
static _getAuthModeName($a_auth_key)
This class represents a text property in a property form.
This class represents a checkbox property in a property form.
This class represents a selection list property in a property form.
static formatDate(ilDateTime $date)
Format a date @access public.
This class represents a date/time property in a property form.
@classDescription Date and time handling
static _lookupDiskUsage($a_user_id)
Gets the disk usage info for the specified user account.
static _lookupPersonalWorkspaceDiskQuota($a_user_id)
static _lookupDiskQuota($a_user_id)
Gets the disk quota info for the specified user account.
static getFilesizeByTypeAndOwner($a_owner_id)
Get current storage size for owner (grouped by type)
static getFilesizeByOwner($a_owner_id)
Get current storage size for owner.
This class represents a email property in a property form.
This class represents a section header in a property form.
formatDate($a_date, $a_mode="datetime", $a_omit_seconds=false, $a_relative=TRUE)
format a date according to the user language shortcut for Format::fmtDateTime @access public
static _getSizeMagnitude()
Returns the magnitude used for size units.
static formatSize($size, $a_mode='short', $a_lng=null)
Returns the specified file size value in a human friendly form.
static _getFrame($a_class, $a_type='')
Get content frame name.
This class represents an image file property in a property form.
language handling
Class ilObjUserTrackingGUI.
this class encapsulates the PHP mail() function.
This class represents a non editable value in a property form.
_getAssignUsersStatus($a_role_id)
_getTranslation($a_role_title)
_lookupActivatedStyle($a_skin, $a_style)
lookup if a style is activated
Class ilObjUserGUI.
initForm($a_mode)
Init user form.
saveObject()
save user data @access public
setBackTarget($a_text, $a_link)
set back tab target
__getDateSelect($a_type, $a_varname, $a_selected)
editObject()
Display user edit form.
getAdminTabs(&$tabs_gui)
admin and normal tabs are equal for roles
& executeCommand()
execute command
handleIgnoredRequiredFields()
Handles ignored required fields by changing the required flag of form elements.
applyFilterObject()
Apply filter.
static _goto($a_target)
Goto user profile screen.
addAdminLocatorItems()
should be overwritten to add object specific items (repository items are preloaded)
__toUnix($a_time_arr)
resetFilterObject()
Reset filter.
updateObject()
Update user.
getTabs(&$tabs_gui)
get tabs
ilObjUserGUI($a_data, $a_id, $a_call_by_reference=false, $a_prepare_output=true)
Constructor @access public.
roleassignmentObject()
display roleassignment panel
uploadUserPictureObject()
upload user image
loadValuesFromForm($a_mode='create')
removeUserPictureObject()
remove user image
createObject()
Display user create form.
getValues()
Get values from user object and put them into form.
assignSaveObject()
assign users to role
setTitleAndDescription()
called by prepare output
isSettingChangeable($a_field)
Check if setting is visible This is the case when called from user folder.
updateObjectOld()
save user data @access public
__checkUserDefinedRequiredFields()
display user create form
static _enabledLearningProgress()
check wether learing progress is enabled or not
static _enabledUserRelatedData()
check wether user related tracking is enabled or not
static _resetLoginAttempts($a_usr_id)
static _getLastHistoryDataByUserId($a_usr_id)
Returns the last used loginname and the changedate of the passed user_id.
static _getPersonalPicturePath($a_usr_id, $a_size="small", $a_force_pic=false, $a_prevent_no_photo_image=false)
Get path to personal picture.
_lookupLogin($a_user_id)
lookup login
static _lookupId($a_user_str)
lookup id by login
static _loginExists($a_login, $a_user_id=0)
check if a login name already exists You may exclude a user from the check by giving his user id as 2...
static _checkExternalAuthAccount($a_auth, $a_account)
check whether external account and authentication method matches with a user
Class ilObjectGUI Basic methods of all Output classes.
ilObjectGUI($a_data, $a_id=0, $a_call_by_reference=true, $a_prepare_output=true)
Constructor @access public.
prepareOutput()
prepare output
Class ilObjectOwnershipManagementGUI.
static _lookupObjId($a_id)
static _getAllReferences($a_id)
get all reference ids of object
static _lookupType($a_id, $a_reference=false)
lookup object type
This class represents a password property in a property form.
This class represents a property form user interface.
This class represents a property in a property form.
This class represents an option in a radio group.
getObjectOfRole($a_role_id)
Get object id of objects a role is assigned to.
TableGUI class for role assignment in user administration.
static _getInstance()
Get instance of ilSecuritySettings.
This class represents a selection list property in a property form.
static clear($a_var)
Unset a value.
parses the template.xml that defines all styles of the current template
static getCurrentAcceptanceForUser(ilObjUser $user)
This class represents a text area property in a property form.
This class represents a text property in a property form.
static _getInstance()
Get instance.
Class for user related exception handling in ILIAS.
This class represents a user login property in a property form.
static getIgnorableRequiredSettings()
Returns an array of all ignorable profiel fields.
static isProfileIncomplete($a_user, $a_include_udf=true, $a_personal_data_only=true)
Check if all required personal data fields are set.
static is_email($a_email)
This preg-based function checks whether an e-mail address is formally valid.
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
isLogin($a_login)
static isConvertVersionAtLeast($a_version)
Compare convert version numbers.
static escapeShellArg($a_arg)
static getWebspaceDir($mode="filesystem")
get webspace directory
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static execConvert($args)
execute convert command
static isPassword($a_passwd, &$customError=null)
validates a password @access public
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static getPasswordRequirementsInfo()
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
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.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
$_POST['username']
Definition: cron.php:12
< a tabindex="-1" style="border-style: none;" href="#" title="Refresh Image" onclick="document.getElementById('siimage').src = './securimage_show.php?sid=' + Math.random(); this.blur(); return false">< img src="./images/refresh.png" alt="Reload Image" height="32" width="32" onclick="this.blur()" align="bottom" border="0"/></a >< br/>< strong > Enter Code *if($_SERVER['REQUEST_METHOD']=='POST' &&@ $_POST['do']=='contact') $_SESSION['ctform']['success']
exit
Definition: login.php:54
redirection script todo: (a better solution should control the processing via a xml file)
global $ilSetting
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35
$records
Definition: simple_test.php:17
$path
Definition: index.php:22
if(!is_array($argv)) $options
global $ilUser
Definition: imgupload.php:15