00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 define ("IL_EXTRACT_ROLES", 1);
00025 define ("IL_USER_IMPORT", 2);
00026 define ("IL_VERIFY", 3);
00027
00028 define ("IL_FAIL_ON_CONFLICT", 1);
00029 define ("IL_UPDATE_ON_CONFLICT", 2);
00030 define ("IL_IGNORE_ON_CONFLICT", 3);
00031
00032 define ("IL_IMPORT_SUCCESS", 1);
00033 define ("IL_IMPORT_WARNING", 2);
00034 define ("IL_IMPORT_FAILURE", 3);
00035
00036 define ("IL_USER_MAPPING_LOGIN", 1);
00037 define ("IL_USER_MAPPING_ID", 2);
00038
00039 require_once("classes/class.ilSaxParser.php");
00040
00050 class ilUserImportParser extends ilSaxParser
00051 {
00052 var $time_limit_set = false;
00053 var $time_limit_owner_set = false;
00054
00058 var $updateLookAndSkin = false;
00059 var $folder_id;
00060 var $roles;
00065 var $action;
00074 var $protocol;
00084 var $logins;
00085
00093 var $conflict_rule;
00094
00095
00101 var $send_mail;
00102
00164 var $error_level;
00165
00169 var $currPasswordType;
00173 var $currPassword;
00177 var $currActive;
00181 var $userCount;
00182
00188 var $user_mapping;
00189
00196 var $mapping_mode;
00197
00205 var $localRoleCache;
00206
00211 var $personalPicture;
00212
00216 var $ilincdata;
00217
00221 var $skin;
00222
00226 var $style;
00227
00231 var $userStyles;
00232
00236 var $hideSkin;
00237
00241 var $disableSkin;
00242
00248 var $user_id;
00249
00259 function ilUserImportParser($a_xml_file, $a_mode = IL_USER_IMPORT, $a_conflict_rule = IL_FAIL_ON_CONFLICT)
00260 {
00261 global $lng, $tree, $ilias;
00262
00263 $this->roles = array();
00264 $this->mode = $a_mode;
00265 $this->conflict_rule = $a_conflict_rule;
00266 $this->error_level = IL_IMPORT_SUCCESS;
00267 $this->protocol = array();
00268 $this->logins = array();
00269 $this->userCount = 0;
00270 $this->localRoleCache = array();
00271 $this->ilincdata = array();
00272 $this->send_mail = false;
00273 $this->mapping_mode = IL_USER_MAPPING_LOGIN;
00274 include_once "./classes/class.ilObjUser.php";
00275 $this->userStyles = ilObjUser::_getAllUserAssignedStyles();
00276 $settings = $ilias->getAllSettings();
00277 if ($settings["usr_settings_hide_skin_style"] == 1)
00278 {
00279 $this->hideSkin = TRUE;
00280 }
00281 else
00282 {
00283 $this->hideSkin = FALSE;
00284 }
00285 if ($settings["usr_settings_disable_skin_style"] == 1)
00286 {
00287 $this->disableSkin = TRUE;
00288 }
00289 else
00290 {
00291 $this->disableSkin = FALSE;
00292 }
00293
00294 include_once("classes/class.ilAccountMail.php");
00295 $this->acc_mail = new ilAccountMail();
00296
00297 parent::ilSaxParser($a_xml_file);
00298 }
00299
00305 function setFolderId($a_folder_id)
00306 {
00307 $this->folder_id = $a_folder_id;
00308 }
00309
00310 function getFolderId()
00311 {
00312 return $this->folder_id;
00313 }
00314
00320 function setHandlers($a_xml_parser)
00321 {
00322 xml_set_object($a_xml_parser,$this);
00323 xml_set_element_handler($a_xml_parser,'handlerBeginTag','handlerEndTag');
00324 xml_set_character_data_handler($a_xml_parser,'handlerCharacterData');
00325 }
00326
00330 function startParsing()
00331 {
00332 parent::startParsing();
00333 }
00334
00340 function setRoleAssignment($a_assign)
00341 {
00342 $this->role_assign = $a_assign;
00343 }
00344
00352 function buildTag ($type, $name, $attr="")
00353 {
00354 $tag = "<";
00355
00356 if ($type == "end")
00357 $tag.= "/";
00358
00359 $tag.= $name;
00360
00361 if (is_array($attr))
00362 {
00363 while (list($k,$v) = each($attr))
00364 $tag.= " ".$k."=\"$v\"";
00365 }
00366
00367 $tag.= ">";
00368
00369 return $tag;
00370 }
00371
00375 function handlerBeginTag($a_xml_parser, $a_name, $a_attribs)
00376 {
00377 switch ($this->mode)
00378 {
00379 case IL_EXTRACT_ROLES :
00380 $this->extractRolesBeginTag($a_xml_parser, $a_name, $a_attribs);
00381 break;
00382 case IL_USER_IMPORT :
00383 $this->importBeginTag($a_xml_parser, $a_name, $a_attribs);
00384 break;
00385 case IL_VERIFY :
00386 $this->verifyBeginTag($a_xml_parser, $a_name, $a_attribs);
00387 break;
00388 }
00389
00390 $this->cdata = "";
00391 }
00392
00396 function extractRolesBeginTag($a_xml_parser, $a_name, $a_attribs)
00397 {
00398 switch($a_name)
00399 {
00400 case "Role":
00401
00402 $this->current_role_id = $a_attribs["Id"];
00403 if ($internal_id = ilUtil::__extractId($this->current_role_id, IL_INST_ID))
00404 {
00405 $this->current_role_id = $internal_id;
00406 }
00407 $this->current_role_type = $a_attribs["Type"];
00408
00409 break;
00410 }
00411 }
00415 function importBeginTag($a_xml_parser, $a_name, $a_attribs)
00416 {
00417 global $ilias;
00418 switch($a_name)
00419 {
00420 case "Role":
00421 $this->current_role_id = $a_attribs["Id"];
00422 if ($internal_id = ilUtil::__extractId($this->current_role_id, IL_INST_ID))
00423 {
00424 $this->current_role_id = $internal_id;
00425 }
00426 $this->current_role_type = $a_attribs["Type"];
00427 $this->current_role_action = (is_null($a_attribs["Action"])) ? "Assign" : $a_attribs["Action"];
00428 break;
00429
00430 case "PersonalPicture":
00431 $this->personalPicture = array(
00432 "encoding" => $a_attribs["encoding"],
00433 "imagetype" => $a_attribs["imagetype"],
00434 "content" => ""
00435 );
00436 break;
00437
00438 case "Look":
00439 $this->skin = $a_attribs["Skin"];
00440 $this->style = $a_attribs["Style"];
00441 break;
00442
00443 case "User":
00444 $this->time_limit_set = false;
00445 $this->time_limit_owner_set = false;
00446 $this->updateLookAndSkin = false;
00447 $this->skin = "";
00448 $this->style = "";
00449 $this->personalPicture = null;
00450 $this->userCount++;
00451 $this->userObj = new ilObjUser();
00452
00453
00454 $this->udf_data = array();
00455
00456
00457 $this->user_id = -1;
00458 if (!is_null($a_attribs["Id"]) && $this->getUserMappingMode() == IL_USER_MAPPING_ID)
00459 {
00460 if (is_numeric($a_attribs["Id"]))
00461 {
00462 $this->user_id = $a_attribs["Id"];
00463 }
00464 elseif ($id = ilUtil::__extractId ($a_attribs["Id"], IL_INST_ID))
00465 {
00466 $this->user_id = $id;
00467 }
00468 }
00469
00470 $this->userObj->setPref("skin",
00471 $ilias->ini->readVariable("layout","skin"));
00472 $this->userObj->setPref("style",
00473 $ilias->ini->readVariable("layout","style"));
00474
00475 $this->userObj->setLanguage($a_attribs["Language"]);
00476 $this->userObj->setImportId($a_attribs["Id"]);
00477 $this->action = (is_null($a_attribs["Action"])) ? "Insert" : $a_attribs["Action"];
00478 $this->currPassword = null;
00479 $this->currPasswordType = null;
00480 $this->currActive = null;
00481 break;
00482
00483 case "Password":
00484 $this->currPasswordType = $a_attribs["Type"];
00485 break;
00486 case "AuthMode":
00487 if (array_key_exists("type", $a_attribs))
00488 {
00489 switch ($a_attribs["type"])
00490 {
00491 case "default":
00492 case "local":
00493 case "ldap":
00494 case "radius":
00495 case "shibboleth":
00496 case "script":
00497 case "cas":
00498 case "soap":
00499 $this->userObj->setAuthMode($a_attribs["type"]);
00500 break;
00501 default:
00502 $this->logFailure($this->userObj->getLogin(),
00503 sprintf($lng->txt("usrimport_xml_element_inapplicable"),"AuthMode",$a_attribs["type"]));
00504 break;
00505 }
00506 }
00507 else
00508 {
00509 $this->logFailure($this->userObj->getLogin(),
00510 sprintf($lng->txt("usrimport_xml_element_inapplicable"),"AuthMode",$a_attribs["type"]));
00511 }
00512 break;
00513
00514 case 'UserDefinedField':
00515 $this->tmp_udf_id = $a_attribs['Id'];
00516 $this->tmp_udf_name = $a_attribs['Name'];
00517 break;
00518 }
00519 }
00523 function verifyBeginTag($a_xml_parser, $a_name, $a_attribs)
00524 {
00525 global $lng;
00526
00527 switch($a_name)
00528 {
00529 case "Role":
00530 if (is_null($a_attribs['Id'])
00531 || $a_attribs['Id'] == "")
00532 {
00533 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_attribute_missing"),"Role","Id"));
00534 }
00535 $this->current_role_id = $a_attribs["Id"];
00536 $this->current_role_type = $a_attribs["Type"];
00537 if ($this->current_role_type != 'Global'
00538 && $this->current_role_type != 'Local')
00539 {
00540 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_attribute_missing"),"Role","Type"));
00541 }
00542 $this->current_role_action = (is_null($a_attribs["Action"])) ? "Assign" : $a_attribs["Action"];
00543 if ($this->current_role_action != "Assign"
00544 && $this->current_role_action != "Detach")
00545 {
00546 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_attribute_value_illegal"),"Role","Action",$a_attribs["Action"]));
00547 }
00548 if ($this->action == "Insert"
00549 && $this->current_role_action == "Detach")
00550 {
00551 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_attribute_value_inapplicable"),"Role","Action",$this->current_role_action,$this->action));
00552 }
00553 if ($this->action == "Delete")
00554 {
00555 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_inapplicable"),"Role","Delete"));
00556 }
00557 break;
00558
00559 case "User":
00560 $this->userCount++;
00561 $this->userObj = new ilObjUser();
00562 $this->userObj->setLanguage($a_attribs["Language"]);
00563 $this->userObj->setImportId($a_attribs["Id"]);
00564
00565
00566 $this->user_id = -1;
00567
00568 if (!is_null($a_attribs["Id"]) && $this->getUserMappingMode() == IL_USER_MAPPING_ID)
00569 {
00570 if (is_numeric($a_attribs["Id"]))
00571 {
00572 $this->user_id = $a_attribs["Id"];
00573 }
00574 elseif ($id = ilUtil::__extractId ($a_attribs["Id"], IL_INST_ID))
00575 {
00576 $this->user_id = $id;
00577 }
00578 }
00579
00580 $this->action = (is_null($a_attribs["Action"])) ? "Insert" : $a_attribs["Action"];
00581 if ($this->action != "Insert"
00582 && $this->action != "Update"
00583 && $this->action != "Delete")
00584 {
00585 $this->logFailure($this->userObj->getImportId(), sprintf($lng->txt("usrimport_xml_attribute_value_illegal"),"User","Action",$a_attribs["Action"]));
00586 }
00587 $this->currPassword = null;
00588 $this->currPasswordType = null;
00589 break;
00590
00591 case "Password":
00592 $this->currPasswordType = $a_attribs["Type"];
00593 break;
00594 case "AuthMode":
00595 if (array_key_exists("type", $a_attribs))
00596 {
00597 switch ($a_attribs["type"])
00598 {
00599 case "default":
00600 case "local":
00601 case "ldap":
00602 case "radius":
00603 case "shibboleth":
00604 case "script":
00605 case "cas":
00606 case "soap":
00607 $this->userObj->setAuthMode($a_attribs["type"]);
00608 break;
00609 default:
00610 $this->logFailure($this->userObj->getImportId(), sprintf($lng->txt("usrimport_xml_attribute_value_illegal"),"AuthMode","type",$a_attribs["type"]));
00611 break;
00612 }
00613 }
00614 else
00615 {
00616 $this->logFailure($this->userObj->getImportId(), sprintf($lng->txt("usrimport_xml_attribute_value_illegal"),"AuthMode","type",""));
00617 }
00618 break;
00619 }
00620 }
00621
00625 function handlerEndTag($a_xml_parser, $a_name)
00626 {
00627 switch ($this->mode)
00628 {
00629 case IL_EXTRACT_ROLES :
00630 $this->extractRolesEndTag($a_xml_parser, $a_name);
00631 break;
00632 case IL_USER_IMPORT :
00633 $this->importEndTag($a_xml_parser, $a_name);
00634 break;
00635 case IL_VERIFY :
00636 $this->verifyEndTag($a_xml_parser, $a_name);
00637 break;
00638 }
00639 }
00640
00644 function extractRolesEndTag($a_xml_parser, $a_name)
00645 {
00646 switch($a_name)
00647 {
00648 case "Role":
00649 $this->roles[$this->current_role_id]["name"] = $this->cdata;
00650 $this->roles[$this->current_role_id]["type"] =
00651 $this->current_role_type;
00652 break;
00653 }
00654 }
00655
00659 function getRoleObject($a_role_id)
00660 {
00661 if (array_key_exists($a_role_id, $this->localRoleCache))
00662 {
00663 return $this->localRoleCache[$a_role_id];
00664 }
00665 else
00666 {
00667 $role_obj = new ilObjRole($a_role_id, false);
00668 $role_obj->read();
00669 $this->localRoleCache[$a_role_id] = $role_obj;
00670 return $role_obj;
00671 }
00672
00673 }
00677 function getCourseMembersObjectForRole($a_role_id)
00678 {
00679 global $rbacreview, $rbacadmin, $tree;
00680
00681 if (array_key_exists($a_role_id.'_courseMembersObject', $this->localRoleCache))
00682 {
00683 return $this->localRoleCache[$a_role_id.'_courseMembersObject'];
00684 }
00685 else
00686 {
00687 $rolf_refs = $rbacreview->getFoldersAssignedToRole($a_role_id, true);
00688 $course_ref = $tree->getParentId($rolf_refs[0]);
00689 $course_obj = new ilObjCourse($course_ref, true);
00690 $crsmembers_obj = new ilCourseMembers($course_obj);
00691 $this->localRoleCache[$a_role_id.'_courseMembersObject'] = $crsmembers_obj;
00692 return $crsmembers_obj;
00693 }
00694
00695 }
00696
00700 function assignToRole($a_user_obj, $a_role_id)
00701 {
00702 require_once "classes/class.ilObjRole.php";
00703 require_once "course/classes/class.ilObjCourse.php";
00704 require_once "course/classes/class.ilCourseMembers.php";
00705
00706 global $rbacreview, $rbacadmin, $tree;
00707
00708
00709
00710 $role_obj = $this->getRoleObject($a_role_id);
00711 if (substr($role_obj->getTitle(),0,6) == 'il_crs')
00712 {
00713 $crsmembers_obj = $this->getCourseMembersObjectForRole($a_role_id);
00714
00715 switch (substr($role_obj->getTitle(),0,12))
00716 {
00717 case 'il_crs_admin' :
00718 $crs_role = $crsmembers_obj->ROLE_ADMIN;
00719 $crs_status = $crsmembers_obj->STATUS_NO_NOTIFY;
00720 break;
00721 case 'il_crs_tutor' :
00722 $crs_role = $crsmembers_obj->ROLE_TUTOR;
00723 $crs_status = $crsmembers_obj->STATUS_NO_NOTIFY;
00724 break;
00725 case 'il_crs_membe' :
00726 default :
00727 $crs_role = $crsmembers_obj->ROLE_MEMBER;
00728 $crs_status = $crsmembers_obj->STATUS_UNBLOCKED;
00729 break;
00730 }
00731
00732 if ($crsmembers_obj->isAssigned($a_user_obj->getID()))
00733 {
00734 $crsmembers_obj->update($a_user_obj->getID(), $crs_role, $crs_status, false);
00735 }
00736 else
00737 {
00738 $crsmembers_obj->add($a_user_obj, $crs_role);
00739 }
00740 }
00741
00742 else
00743 {
00744 $rbacadmin->assignUser($a_role_id, $a_user_obj->getId(), true);
00745 }
00746 }
00750 function detachFromRole($a_user_obj, $a_role_id)
00751 {
00752 require_once "classes/class.ilObjRole.php";
00753 require_once "course/classes/class.ilObjCourse.php";
00754 require_once "course/classes/class.ilCourseMembers.php";
00755
00756 global $rbacreview, $rbacadmin, $tree;
00757
00758
00759
00760 $role_obj = $this->getRoleObject($a_role_id);
00761
00762 if (substr($role_obj->getTitle(),0,6) == 'il_crs_')
00763 {
00764 $crsmembers_obj = $this->getCourseMembersObjectForRole($role_id);
00765
00766 switch (substr($role_obj->getTitle(),0,12))
00767 {
00768 case 'il_crs_membe' :
00769 if ($crsmembers_obj->isMember($a_user_obj->getId()))
00770 {
00771 $crsmembers_obj->delete($a_user_obj->getId());
00772 }
00773 break;
00774 case 'il_crs_admin' :
00775 if ($crsmembers_obj->isAdmin($a_user_obj->getId()))
00776 {
00777 $crsmembers_obj->delete($a_user_obj->getId());
00778 }
00779 break;
00780 case 'il_crs_tutor' :
00781 if ($crsmembers_obj->isTutor($a_user_obj->getId()))
00782 {
00783 $crsmembers_obj->delete($a_user_obj->getId());
00784 }
00785 break;
00786 }
00787 }
00788
00789 else
00790 {
00791 $rbacadmin->deassignUser($a_role_id, $a_user_obj->getId());
00792 }
00793 }
00794
00798 function importEndTag($a_xml_parser, $a_name)
00799 {
00800 global $ilias, $rbacadmin, $rbacreview, $ilUser, $lng, $ilSetting;
00801
00802 switch($a_name)
00803 {
00804 case "Role":
00805 $this->roles[$this->current_role_id]["name"] = $this->cdata;
00806 $this->roles[$this->current_role_id]["type"] = $this->current_role_type;
00807 $this->roles[$this->current_role_id]["action"] = $this->current_role_action;
00808 break;
00809
00810 case "PersonalPicture":
00811 switch ($this->personalPicture["encoding"])
00812 {
00813 case "Base64":
00814 $this->personalPicture["content"] = base64_decode($this->cdata);
00815 break;
00816 case "UUEncode":
00817
00818 if (version_compare(PHP_VERSION,'5','>='))
00819 {
00820 $this->personalPicture["content"] = convert_uudecode($this->cdata);
00821 }
00822 break;
00823 }
00824 break;
00825
00826 case "User":
00827
00828
00829 if ($this->user_id == -1 || $this->action=="Insert")
00830 $user_id = ilObjUser::getUserIdByLogin($this->userObj->getLogin());
00831 else
00832 $user_id = $this->user_id;
00833
00834
00835
00836
00837 switch ($this->conflict_rule)
00838 {
00839 case IL_FAIL_ON_CONFLICT :
00840
00841 break;
00842 case IL_UPDATE_ON_CONFLICT :
00843 switch ($this->action)
00844 {
00845 case "Insert" :
00846 if ($user_id)
00847 {
00848 $this->logWarning($this->userObj->getLogin(),sprintf($lng->txt("usrimport_action_replaced"),"Insert","Update"));
00849 $this->action = "Update";
00850 }
00851 break;
00852 case "Update" :
00853 if (! $user_id)
00854 {
00855 $this->logWarning($this->userObj->getLogin(),sprintf($lng->txt("usrimport_action_replaced"),"Update","Insert"));
00856 $this->action = "Insert";
00857 }
00858 break;
00859 case "Delete" :
00860 if (! $user_id)
00861 {
00862 $this->logWarning($this->userObj->getLogin(),sprintf($lng->txt("usrimport_action_ignored"),"Delete"));
00863 $this->action = "Ignore";
00864 }
00865 break;
00866 }
00867 break;
00868 case IL_IGNORE_ON_CONFLICT :
00869 switch ($this->action)
00870 {
00871 case "Insert" :
00872 if ($user_id)
00873 {
00874 $this->logWarning($this->userObj->getLogin(),sprintf($lng->txt("usrimport_action_ignored"),"Insert"));
00875 $this->action = "Ignore";
00876 }
00877 break;
00878 case "Update" :
00879 if (! $user_id)
00880 {
00881 $this->logWarning($this->userObj->getLogin(),sprintf($lng->txt("usrimport_action_ignored"),"Update"));
00882 $this->action = "Ignore";
00883 }
00884 break;
00885 case "Delete" :
00886 if (! $user_id)
00887 {
00888 $this->logWarning($this->userObj->getLogin(),sprintf($lng->txt("usrimport_action_ignored"),"Delete"));
00889 $this->action = "Ignore";
00890 }
00891 break;
00892 }
00893 break;
00894 }
00895
00896
00897
00898
00899 $am = ($this->userObj->getAuthMode() == "default" || $this->userObj->getAuthMode() == "")
00900 ? ilAuthUtils::_getAuthModeName($ilSetting->get('auth_mode'))
00901 : $this->userObj->getAuthMode();
00902 $elogin = ($this->userObj->getExternalAccount() == "")
00903 ? ""
00904 : ilObjUser::_checkExternalAuthAccount($am, $this->userObj->getExternalAccount());
00905 switch ($this->action)
00906 {
00907 case "Insert" :
00908 if ($elogin != "")
00909 {
00910 $this->logWarning($this->userObj->getLogin(),
00911 $lng->txt("usrimport_no_insert_ext_account_exists")." (".$this->userObj->getExternalAccount().")");
00912 $this->action = "Ignore";
00913 }
00914 break;
00915
00916 case "Update" :
00917 if ($elogin != "" && $elogin != $ilObjUser->getLogin())
00918 {
00919 $this->logWarning($this->userObj->getLogin(),
00920 $lng->txt("usrimport_no_update_ext_account_exists")." (".$this->userObj->getExternalAccount().")");
00921 $this->action = "Ignore";
00922 }
00923 break;
00924 }
00925
00926
00927 switch ($this->action)
00928 {
00929 case "Insert" :
00930 if ($user_id)
00931 {
00932 $this->logFailure($this->userObj->getLogin(),$lng->txt("usrimport_cant_insert"));
00933 }
00934 else
00935 {
00936
00937 if (!strlen($this->currPassword)==0)
00938 switch ($this->currPasswordType)
00939 {
00940 case "ILIAS2":
00941 $this->userObj->setPasswd($this->currPassword, IL_PASSWD_CRYPT);
00942 break;
00943
00944 case "ILIAS3":
00945 $this->userObj->setPasswd($this->currPassword, IL_PASSWD_MD5);
00946 break;
00947
00948 case "PLAIN":
00949 $this->userObj->setPasswd($this->currPassword, IL_PASSWD_PLAIN);
00950 $this->acc_mail->setUserPassword($this->currPassword);
00951 break;
00952
00953 }
00954 else
00955 {
00956
00957
00958
00959
00960 $this->userObj->setPasswd("", IL_PASSWD_MD5);
00961
00962 }
00963
00964 $this->userObj->setTitle($this->userObj->getFullname());
00965 $this->userObj->setDescription($this->userObj->getEmail());
00966
00967 if(!$this->time_limit_owner_set)
00968 {
00969 $this->userObj->setTimeLimitOwner($this->getFolderId());
00970 }
00971
00972
00973 if(!$this->time_limit_set)
00974 {
00975 $this->userObj->setTimeLimitUnlimited(1);
00976 $this->userObj->setTimeLimitMessage(0);
00977 $this->userObj->setApproveDate(date("Y-m-d H:i:s"));
00978 }
00979
00980
00981 $this->userObj->setActive($this->currActive == 'true' || is_null($this->currActive), $ilUser->getId());
00982
00983 $this->userObj->create();
00984
00985
00986 $this->userObj->saveAsNew(false);
00987
00988
00989 $this->userObj->writePrefs();
00990
00991 if (is_array($this->personalPicture))
00992 {
00993 if (strlen($this->personalPicture["content"]))
00994 {
00995 $extension = "jpg";
00996 if (preg_match("/.*(png|jpg|gif|jpeg)$/", $this->personalPicture["imagetype"], $matches))
00997 {
00998 $extension = $matches[1];
00999 }
01000 $tmp_name = $this->saveTempImage($this->personalPicture["content"], ".$extension");
01001 if (strlen($tmp_name))
01002 {
01003 ilObjUser::_uploadPersonalPicture($tmp_name, $this->userObj->getId());
01004 unlink($tmp_name);
01005 }
01006 }
01007 }
01008
01009 if ($this->ilincdata["id"]) {
01010 include_once './ilinc/classes.ilObjiLincUser.php';
01011 $ilinc_user = new ilObjiLincUser($this->userObj);
01012 $ilinc_user->setVar("id", $this->ilincdata["id"]);
01013 $ilinc_user->setVar("login", $this->ilincdata["login"]);
01014 $ilinc_user->setVar("passwd", $this->ilincdata["password"]);
01015 $ilinc_user->update();
01016 }
01017
01018
01019 foreach($this->roles as $role_id => $role)
01020 {
01021 if ($this->role_assign[$role_id])
01022 {
01023 $this->assignToRole($this->userObj, $this->role_assign[$role_id]);
01024 }
01025 }
01026
01027 if(count($this->udf_data))
01028 {
01029 include_once 'classes/class.ilUserDefinedData.php';
01030 $udd = new ilUserDefinedData($this->userObj->getId());
01031 foreach($this->udf_data as $field => $value)
01032 {
01033 $udd->set($field,$value);
01034 }
01035 $udd->update();
01036 }
01037
01038 $this->sendAccountMail();
01039 $this->logSuccess($this->userObj->getLogin(),$this->userObj->getId(), "Insert");
01040
01041 $this->acc_mail->reset();
01042 }
01043 break;
01044
01045 case "Update" :
01046 if (! $user_id)
01047 {
01048 $this->logFailure($this->userObj->getLogin(),$lng->txt("usrimport_cant_update"));
01049 }
01050 else
01051 {
01052 $updateUser = new ilObjUser($user_id);
01053 $updateUser->read();
01054 $updateUser->readPrefs();
01055 if ($this->currPassword != null)
01056 {
01057 switch ($this->currPasswordType)
01058 {
01059 case "ILIAS2":
01060 $updateUser->setPasswd($this->currPassword, IL_PASSWD_CRYPT);
01061 break;
01062
01063 case "ILIAS3":
01064 $updateUser->setPasswd($this->currPassword, IL_PASSWD_MD5);
01065 break;
01066
01067 case "PLAIN":
01068 $updateUser->setPasswd($this->currPassword, IL_PASSWD_PLAIN);
01069 $this->acc_mail->setUserPassword($this->currPassword);
01070 break;
01071 }
01072 }
01073 if (! is_null($this->userObj->getFirstname())) $updateUser->setFirstname($this->userObj->getFirstname());
01074 if (! is_null($this->userObj->getLastname())) $updateUser->setLastname($this->userObj->getLastname());
01075 if (! is_null($this->userObj->getUTitle())) $updateUser->setUTitle($this->userObj->getUTitle());
01076 if (! is_null($this->userObj->getGender())) $updateUser->setGender($this->userObj->getGender());
01077 if (! is_null($this->userObj->getEmail())) $updateUser->setEmail($this->userObj->getEmail());
01078 if (! is_null($this->userObj->getInstitution())) $updateUser->setInstitution($this->userObj->getInstitution());
01079 if (! is_null($this->userObj->getStreet())) $updateUser->setStreet($this->userObj->getStreet());
01080 if (! is_null($this->userObj->getCity())) $updateUser->setCity($this->userObj->getCity());
01081 if (! is_null($this->userObj->getZipCode())) $updateUser->setZipCode($this->userObj->getZipCode());
01082 if (! is_null($this->userObj->getCountry())) $updateUser->setCountry($this->userObj->getCountry());
01083 if (! is_null($this->userObj->getPhoneOffice())) $updateUser->setPhoneOffice($this->userObj->getPhoneOffice());
01084 if (! is_null($this->userObj->getPhoneHome())) $updateUser->setPhoneHome($this->userObj->getPhoneHome());
01085 if (! is_null($this->userObj->getPhoneMobile())) $updateUser->setPhoneMobile($this->userObj->getPhoneMobile());
01086 if (! is_null($this->userObj->getFax())) $updateUser->setFax($this->userObj->getFax());
01087 if (! is_null($this->userObj->getHobby())) $updateUser->setHobby($this->userObj->getHobby());
01088 if (! is_null($this->userObj->getComment())) $updateUser->setComment($this->userObj->getComment());
01089 if (! is_null($this->userObj->getDepartment())) $updateUser->setDepartment($this->userObj->getDepartment());
01090 if (! is_null($this->userObj->getMatriculation())) $updateUser->setMatriculation($this->userObj->getMatriculation());
01091 if (! is_null($this->currActive)) $updateUser->setActive($this->currActive == "true", $ilUser->getId());
01092 if (! is_null($this->userObj->getClientIP())) $updateUser->setClientIP($this->userObj->getClientIP());
01093 if (! is_null($this->userObj->getTimeLimitUnlimited())) $updateUser->setTimeLimitUnlimited($this->userObj->getTimeLimitUnlimited());
01094 if (! is_null($this->userObj->getTimeLimitFrom())) $updateUser->setTimeLimitFrom($this->userObj->getTimeLimitFrom());
01095 if (! is_null($this->userObj->getTimeLimitUntil())) $updateUser->setTimeLimitUntil($this->userObj->getTimeLimitUntil());
01096 if (! is_null($this->userObj->getTimeLimitMessage())) $updateUser->setTimeLimitMessage($this->userObj->getTimeLimitMessage());
01097 if (! is_null($this->userObj->getApproveDate())) $updateUser->setApproveDate($this->userObj->getApproveDate());
01098 if (! is_null($this->userObj->getLanguage())) $updateUser->setLanguage($this->userObj->getLanguage());
01099 if (! is_null($this->userObj->getExternalAccount())) $updateUser->setExternalAccount($this->userObj->getExternalAccount());
01100 if (! is_null($this->userObj->getAuthMode())) $updateUser->setAuthMode($this->userObj->getAuthMode());
01101
01102
01103 if($this->time_limit_owner_set)
01104 {
01105 $updateUser->setTimeLimitOwner($this->userObj->getTimeLimitOwner());
01106 }
01107
01108
01109 if ($this->updateLookAndSkin)
01110 {
01111 $updateUser->setPref("skin", $this->userObj->getPref("skin"));
01112 $updateUser->setPref("style", $this->userObj->getPref("style"));
01113 }
01114 $updateUser->writePrefs();
01115
01116 $updateUser->update();
01117
01118 if ($this->ilincdata["id"]) {
01119 include_once './ilinc/classes.ilObjiLincUser.php';
01120 $ilinc_user = new ilObjiLincUser($updateUser);
01121 $ilinc_user->setVar("id", $this->ilincdata["id"]);
01122 $ilinc_user->setVar("login", $this->ilincdata["login"]);
01123 $ilinc_user->setVar("passwd", $this->ilincdata["password"]);
01124 $ilinc_user->update();
01125 }
01126
01127 if(count($this->udf_data))
01128 {
01129 include_once 'classes/class.ilUserDefinedData.php';
01130 $udd = new ilUserDefinedData($updateUser->getId());
01131 foreach($this->udf_data as $field => $value)
01132 {
01133 $udd->set($field,$value);
01134 }
01135 $udd->update();
01136 }
01137
01138
01139 if (!is_null($this->userObj->getLogin()) && $this->user_id != -1)
01140 $updateUser->updateLogin($this->userObj->getLogin());
01141
01142
01143
01144 if (is_array($this->personalPicture))
01145 {
01146 if (strlen($this->personalPicture["content"]))
01147 {
01148 $extension = "jpg";
01149 if (preg_match("/.*(png|jpg|gif|jpeg)$/", $this->personalPicture["imagetype"], $matches))
01150 {
01151 $extension = $matches[1];
01152 }
01153 $tmp_name = $this->saveTempImage($this->personalPicture["content"], ".$extension");
01154 if (strlen($tmp_name))
01155 {
01156 ilObjUser::_uploadPersonalPicture($tmp_name, $this->userObj->getId());
01157 unlink($tmp_name);
01158 }
01159 }
01160 }
01161
01162
01163
01164
01165 foreach ($this->roles as $role_id => $role)
01166 {
01167 if ($this->role_assign[$role_id])
01168 {
01169 switch ($role["action"])
01170 {
01171 case "Assign" :
01172 $this->assignToRole($updateUser, $this->role_assign[$role_id]);
01173 break;
01174 case "Detach" :
01175 $this->detachFromRole($updateUser, $this->role_assign[$role_id]);
01176 break;
01177 }
01178 }
01179 }
01180 $this->logSuccess($updateUser->getLogin(), $user_id, "Update");
01181 }
01182 break;
01183 case "Delete" :
01184 if (! $user_id)
01185 {
01186 $this->logFailure($this->userObj->getLogin(),$lng->txt("usrimport_cant_delete"));
01187 }
01188 else
01189 {
01190 $deleteUser = new ilObjUser($user_id);
01191 $deleteUser->delete();
01192
01193 $this->logSuccess($this->userObj->getLogin(),$user_id, "Delete");
01194 }
01195 break;
01196 }
01197
01198
01199 $this->roles = array();
01200 break;
01201
01202 case "Login":
01203 $this->userObj->setLogin($this->cdata);
01204 break;
01205
01206 case "Password":
01207 $this->currPassword = $this->cdata;
01208 break;
01209
01210 case "Firstname":
01211 $this->userObj->setFirstname($this->cdata);
01212 break;
01213
01214 case "Lastname":
01215 $this->userObj->setLastname($this->cdata);
01216 $this->userObj->setFullname();
01217 break;
01218
01219 case "Title":
01220 $this->userObj->setUTitle($this->cdata);
01221 break;
01222
01223 case "Gender":
01224 $this->userObj->setGender($this->cdata);
01225 break;
01226
01227 case "Email":
01228 $this->userObj->setEmail($this->cdata);
01229 break;
01230
01231 case "Institution":
01232 $this->userObj->setInstitution($this->cdata);
01233 break;
01234
01235 case "Street":
01236 $this->userObj->setStreet($this->cdata);
01237 break;
01238
01239 case "City":
01240 $this->userObj->setCity($this->cdata);
01241 break;
01242
01243 case "PostalCode":
01244 $this->userObj->setZipCode($this->cdata);
01245 break;
01246
01247 case "Country":
01248 $this->userObj->setCountry($this->cdata);
01249 break;
01250
01251 case "PhoneOffice":
01252 $this->userObj->setPhoneOffice($this->cdata);
01253 break;
01254
01255 case "PhoneHome":
01256 $this->userObj->setPhoneHome($this->cdata);
01257 break;
01258
01259 case "PhoneMobile":
01260 $this->userObj->setPhoneMobile($this->cdata);
01261 break;
01262
01263 case "Fax":
01264 $this->userObj->setFax($this->cdata);
01265 break;
01266
01267 case "Hobby":
01268 $this->userObj->setHobby($this->cdata);
01269 break;
01270
01271 case "Comment":
01272 $this->userObj->setComment($this->cdata);
01273 break;
01274
01275 case "Department":
01276 $this->userObj->setDepartment($this->cdata);
01277 break;
01278
01279 case "Matriculation":
01280 $this->userObj->setMatriculation($this->cdata);
01281 break;
01282
01283 case "Active":
01284 $this->currActive = $this->cdata;
01285 break;
01286
01287 case "ClientIP":
01288 $this->userObj->setClientIP($this->cdata);
01289 break;
01290
01291 case "TimeLimitOwner":
01292 $this->time_limit_owner_set = true;
01293 $this->userObj->setTimeLimitOwner($this->cdata);
01294 break;
01295
01296 case "TimeLimitUnlimited":
01297 $this->time_limit_set = true;
01298 $this->userObj->setTimeLimitUnlimited($this->cdata);
01299 break;
01300
01301 case "TimeLimitFrom":
01302 $this->userObj->setTimeLimitFrom($this->cdata);
01303 break;
01304
01305 case "TimeLimitUntil":
01306 $this->userObj->setTimeLimitUntil($this->cdata);
01307 break;
01308
01309 case "TimeLimitMessage":
01310 $this->userObj->setTimeLimitMessage($this->cdata);
01311 break;
01312
01313 case "ApproveDate":
01314 $this->userObj->setApproveDate($this->cdata);
01315 break;
01316
01317 case "iLincID":
01318 $this->ilincdata["id"] = $this->cdata;
01319 break;
01320
01321 case "iLincLogin":
01322 $this->$ilincdata["login"] = $this->cdata;
01323 break;
01324
01325 case "iLincPasswd":
01326 $this->$ilincdata["password"] = $this->cdata;
01327
01328 break;
01329
01330 case "ExternalAccount":
01331 $this->userObj->setExternalAccount($this->cdata);
01332 break;
01333
01334 case "Look":
01335 $this->updateLookAndSkin = false;
01336 if (!$this->hideSkin)
01337 {
01338
01339 if ((strlen($this->skin) > 0) && (strlen($this->style) > 0))
01340 {
01341 if (is_array($this->userStyles))
01342 {
01343 if (in_array($this->skin . ":" . $this->style, $this->userStyles))
01344 {
01345 $this->userObj->setPref("skin", $this->skin);
01346 $this->userObj->setPref("style", $this->style);
01347 $this->updateLookAndSkin = true;
01348 }
01349 }
01350 }
01351 }
01352 break;
01353
01354 case 'UserDefinedField':
01355 include_once 'classes/class.ilUserDefinedFields.php';
01356 $udf = ilUserDefinedFields::_getInstance();
01357 if($field_id = $udf->fetchFieldIdFromImportId($this->tmp_udf_id))
01358 {
01359 $this->udf_data[$field_id] = $this->cdata;
01360 }
01361 elseif($field_id = $udf->fetchFieldIdFromName($this->tmp_udf_name))
01362 {
01363 $this->udf_data[$field_id] = $this->cdata;
01364 }
01365 break;
01366 }
01367 }
01368
01373 function saveTempImage($image_data, $filename)
01374 {
01375 $tempname = ilUtil::ilTempnam() . $filename;
01376 $fh = fopen($tempname, "wb");
01377 if ($fh == false)
01378 {
01379 return "";
01380 }
01381 $imagefile = fwrite($fh, $image_data);
01382 fclose($fh);
01383 return $tempname;
01384 }
01385
01389 function verifyEndTag($a_xml_parser, $a_name)
01390 {
01391 global $lng,$ilAccess,$ilSetting,$ilObjDataCache;
01392
01393 switch($a_name)
01394 {
01395 case "Role":
01396 $this->roles[$this->current_role_id]["name"] = $this->cdata;
01397 $this->roles[$this->current_role_id]["type"] = $this->current_role_type;
01398 $this->roles[$this->current_role_id]["action"] = $this->current_role_action;
01399 break;
01400
01401 case "User":
01402 if ($this->user_id != -1 && $this->action == "Update")
01403 $user_exists = !is_null(ilObjUser::_lookupLogin($this->user_id));
01404 else
01405 $user_exists = ilObjUser::getUserIdByLogin($this->userObj->getLogin()) != 0;
01406
01407 if (is_null($this->userObj->getLogin()))
01408 {
01409 $this->logFailure("---",sprintf($lng->txt("usrimport_xml_element_for_action_required"),"Login", "Insert"));
01410 }
01411
01412 switch ($this->action)
01413 {
01414 case "Insert" :
01415 if ($user_exists)
01416 {
01417 $this->logWarning($this->userObj->getLogin(),$lng->txt("usrimport_cant_insert"));
01418 }
01419 if (is_null($this->userObj->getGender()))
01420 {
01421 $this->logFailure($this->userObj->getLogin(),sprintf($lng->txt("usrimport_xml_element_for_action_required"),"Gender", "Insert"));
01422 }
01423 if (is_null($this->userObj->getFirstname()))
01424 {
01425 $this->logFailure($this->userObj->getLogin(),sprintf($lng->txt("usrimport_xml_element_for_action_required"),"Firstname", "Insert"));
01426 }
01427 if (is_null($this->userObj->getLastname()))
01428 {
01429 $this->logFailure($this->userObj->getLogin(),sprintf($lng->txt("usrimport_xml_element_for_action_required"),"Lastname", "Insert"));
01430 }
01431 if (count($this->roles) == 0)
01432 {
01433 $this->logFailure($this->userObj->getLogin(),sprintf($lng->txt("usrimport_xml_element_for_action_required"),"Role", "Insert"));
01434 }
01435 else
01436 {
01437 $has_global_role = false;
01438 foreach ($this->roles as $role)
01439 {
01440 if ($role['type'] == 'Global')
01441 {
01442 $has_global_role = true;
01443 break;
01444 }
01445 }
01446 if (! $has_global_role)
01447 {
01448 $this->logFailure($this->userObj->getLogin(),sprintf($lng->txt("usrimport_global_role_for_action_required"),"Insert"));
01449 }
01450 }
01451 break;
01452 case "Update" :
01453 if (! $user_exists)
01454 {
01455 $this->logWarning($this->userObj->getLogin(),$lng->txt("usrimport_cant_update"));
01456 } elseif ($this->user_id != -1 && !is_null($this->userObj->getLogin()))
01457
01458 {
01459 $someonesId = ilObjUser::_lookupId($this->userObj->getLogin());
01460
01461 if (is_numeric($someonesId ) && $someonesId != $this->user_id) {
01462 $this->logFailure($this->userObj->getLogin(), $lng->txt("usrimport_login_is_not_unique"));
01463 }
01464 }
01465 break;
01466 case "Delete" :
01467 if (! $user_exists)
01468 {
01469 $this->logWarning($this->userObj->getLogin(),$lng->txt("usrimport_cant_delete"));
01470 }
01471 break;
01472 }
01473
01474
01475 $this->roles = array();
01476 break;
01477
01478 case "Login":
01479 if (array_key_exists($this->cdata, $this->logins))
01480 {
01481 $this->logFailure($this->cdata, $lng->txt("usrimport_login_is_not_unique"));
01482 }
01483 else
01484 {
01485 $this->logins[$this->cdata] = $this->cdata;
01486 }
01487 $this->userObj->setLogin($this->cdata);
01488 break;
01489
01490 case "Password":
01491 switch ($this->currPasswordType)
01492 {
01493 case "ILIAS2":
01494 $this->userObj->setPasswd($this->cdata, IL_PASSWD_CRYPT);
01495 break;
01496
01497 case "ILIAS3":
01498 $this->userObj->setPasswd($this->cdata, IL_PASSWD_MD5);
01499 break;
01500
01501 case "PLAIN":
01502 $this->userObj->setPasswd($this->cdata, IL_PASSWD_PLAIN);
01503 $this->acc_mail->setUserPassword($this->currPassword);
01504 break;
01505
01506 default :
01507 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_attribute_value_illegal"),"Type","Password",$this->currPasswordType));
01508 break;
01509 }
01510 break;
01511
01512 case "Firstname":
01513 $this->userObj->setFirstname($this->cdata);
01514 break;
01515
01516 case "Lastname":
01517 $this->userObj->setLastname($this->cdata);
01518 $this->userObj->setFullname();
01519 break;
01520
01521 case "Title":
01522 $this->userObj->setUTitle($this->cdata);
01523 break;
01524
01525 case "Gender":
01526 if ($this->cdata != "m"
01527 && $this->cdata != "f")
01528 {
01529 $this->logFailure($this->userObj->getLogin(),
01530 sprintf($lng->txt("usrimport_xml_attribute_value_illegal"),"Gender",$this->cdata));
01531 }
01532 $this->userObj->setGender($this->cdata);
01533 break;
01534
01535 case "Email":
01536 $this->userObj->setEmail($this->cdata);
01537 break;
01538
01539 case "Institution":
01540 $this->userObj->setInstitution($this->cdata);
01541 break;
01542
01543 case "Street":
01544 $this->userObj->setStreet($this->cdata);
01545 break;
01546
01547 case "City":
01548 $this->userObj->setCity($this->cdata);
01549 break;
01550
01551 case "PostalCode":
01552 $this->userObj->setZipCode($this->cdata);
01553 break;
01554
01555 case "Country":
01556 $this->userObj->setCountry($this->cdata);
01557 break;
01558
01559 case "PhoneOffice":
01560 $this->userObj->setPhoneOffice($this->cdata);
01561 break;
01562
01563 case "PhoneHome":
01564 $this->userObj->setPhoneHome($this->cdata);
01565 break;
01566
01567 case "PhoneMobile":
01568 $this->userObj->setPhoneMobile($this->cdata);
01569 break;
01570
01571 case "Fax":
01572 $this->userObj->setFax($this->cdata);
01573 break;
01574
01575 case "Hobby":
01576 $this->userObj->setHobby($this->cdata);
01577 break;
01578
01579 case "Comment":
01580 $this->userObj->setComment($this->cdata);
01581 break;
01582
01583 case "Department":
01584 $this->userObj->setDepartment($this->cdata);
01585 break;
01586
01587 case "Matriculation":
01588 $this->userObj->setMatriculation($this->cdata);
01589 break;
01590
01591 case "ExternalAccount":
01592
01593 $am = ($this->userObj->getAuthMode() == "default" || $this->userObj->getAuthMode() == "")
01594 ? ilAuthUtils::_getAuthModeName($ilSetting->get('auth_mode'))
01595 : $this->userObj->getAuthMode();
01596 $elogin = (trim($this->cdata) == "")
01597 ? ""
01598 : ilObjUser::_checkExternalAuthAccount($am, trim($this->cdata));
01599 switch ($this->action)
01600 {
01601 case "Insert" :
01602 if ($elogin != "")
01603 {
01604 $this->logWarning($this->userObj->getLogin(),
01605 $lng->txt("usrimport_no_insert_ext_account_exists")." (".$this->cdata.")");
01606 }
01607 break;
01608
01609 case "Update" :
01610 if ($elogin != "" && $elogin != $ilObjUser->getLogin())
01611 {
01612 $this->logWarning($this->userObj->getLogin(),
01613 $lng->txt("usrimport_no_update_ext_account_exists")." (".$this->cdata.")");
01614 }
01615 break;
01616 }
01617 $this->userObj->setExternalAccount(trim($this->cdata));
01618 break;
01619
01620 case "Active":
01621 if ($this->cdata != "true"
01622 && $this->cdata != "false")
01623 {
01624 $this->logFailure($this->userObj->getLogin(),
01625 sprintf($lng->txt("usrimport_xml_element_content_illegal"),"Active",$this->cdata));
01626 }
01627 $this->currActive = $this->cdata;
01628 break;
01629 case "TimeLimitOwner":
01630 if (!preg_match("/\d+/", $this->cdata))
01631 {
01632 $this->logFailure($this->userObj->getLogin(),
01633 sprintf($lng->txt("usrimport_xml_element_content_illegal"),"TimeLimitOwner",$this->cdata));
01634 }
01635 elseif(!$ilAccess->checkAccess('cat_administrate_users','',$this->cdata))
01636 {
01637 $this->logFailure($this->userObj->getLogin(),
01638 sprintf($lng->txt("usrimport_xml_element_content_illegal"),"TimeLimitOwner",$this->cdata));
01639 }
01640 elseif($ilObjDataCache->lookupType($ilObjDataCache->lookupObjId($this->cdata)) != 'cat')
01641 {
01642 $this->logFailure($this->userObj->getLogin(),
01643 sprintf($lng->txt("usrimport_xml_element_content_illegal"),"TimeLimitOwner",$this->cdata));
01644
01645 }
01646 $this->userObj->setTimeLimitOwner($this->cdata);
01647 break;
01648 case "TimeLimitUnlimited":
01649 switch (strtolower($this->cdata))
01650 {
01651 case "true":
01652 case "1":
01653 $this->userObj->setTimeLimitUnlimited(1);
01654 break;
01655 case "false":
01656 case "0":
01657 $this->userObj->setTimeLimitUnlimited(0);
01658 break;
01659 default:
01660 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"TimeLimitUnlimited",$this->cdata));
01661 break;
01662 }
01663 break;
01664 case "TimeLimitFrom":
01665 if (!preg_match("/\d+/", $this->cdata))
01666 {
01667 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"TimeLimitFrom",$this->cdata));
01668 }
01669 $this->userObj->setTimeLimitFrom($this->cdata);
01670 break;
01671 case "TimeLimitUntil":
01672 if (!preg_match("/\d+/", $this->cdata))
01673 {
01674 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"TimeLimitUntil",$this->cdata));
01675 }
01676 $this->userObj->setTimeLimitUntil($this->cdata);
01677 break;
01678 case "TimeLimitMessage":
01679 switch (strtolower($this->cdata))
01680 {
01681 case "1":
01682 $this->userObj->setTimeLimitMessage(1);
01683 break;
01684 case "0":
01685 $this->userObj->setTimeLimitMessage(0);
01686 break;
01687 default:
01688 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"TimeLimitMessage",$this->cdata));
01689 break;
01690 }
01691 break;
01692 case "ApproveDate":
01693 if (!preg_match("/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/", $this->cdata))
01694 {
01695 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"ApproveDate",$this->cdata));
01696 }
01697 $this->userObj->setTimeLimitUntil($this->cdata);
01698 break;
01699 case "iLincID":
01700 if (!preg_match("/\d+/", $this->cdata))
01701 {
01702 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"iLincID",$this->cdata));
01703 }
01704 break;
01705 case "iLincUser":
01706 if (!preg_match("/\w+/", $this->cdata))
01707 {
01708 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"iLincUser",$this->cdata));
01709 }
01710 break;
01711 case "iLincPasswd":
01712 if (!preg_match("/\w+/", $this->cdata))
01713 {
01714 $this->logFailure($this->userObj->getLogin(), sprintf($lng->txt("usrimport_xml_element_content_illegal"),"iLincPasswd",$this->cdata));
01715 }
01716 break;
01717 }
01718 }
01719
01723 function handlerCharacterData($a_xml_parser, $a_data)
01724 {
01725
01726
01727
01728 if($a_data != "\n") $a_data = preg_replace("/\t+/"," ",$a_data);
01729
01730 if(strlen($a_data) > 0)
01731 {
01732 $this->cdata .= $a_data;
01733 }
01734 }
01735
01739 function getCollectedRoles()
01740 {
01741 return $this->roles;
01742 }
01746 function getUserCount()
01747 {
01748 return $this->userCount;
01749 }
01750
01757 function logWarning($aLogin, $aMessage)
01758 {
01759 if (! array_key_exists($aLogin, $this->protocol))
01760 {
01761 $this->protocol[$aLogin] = array();
01762 }
01763 if ($aMessage)
01764 {
01765 $this->protocol[$aLogin][] = $aMessage;
01766 }
01767 if ($this->error_level == IL_IMPORT_SUCCESS)
01768 {
01769 $this->error_level = IL_IMPORT_WARNING;
01770 }
01771 }
01778 function logFailure($aLogin, $aMessage)
01779 {
01780 if (! array_key_exists($aLogin, $this->protocol))
01781 {
01782 $this->protocol[$aLogin] = array();
01783 }
01784 if ($aMessage)
01785 {
01786 $this->protocol[$aLogin][] = $aMessage;
01787 }
01788 $this->error_level = IL_IMPORT_FAILURE;
01789 }
01790
01798 function logSuccess($aLogin, $userid, $action)
01799 {
01800 $this->user_mapping[$userid] = array("login" => $aLogin, "action" => $action, "message" => "successful");
01801 }
01802
01803
01812 function getProtocol()
01813 {
01814 return $this->protocol;
01815 }
01819 function getProtocolAsHTML($a_log_title)
01820 {
01821 global $lng;
01822
01823 $block = new ilTemplate("tpl.usr_import_log_block.html", true, true);
01824 $block->setVariable("TXT_LOG_TITLE", $a_log_title);
01825 $block->setVariable("TXT_MESSAGE_ID", $lng->txt("login"));
01826 $block->setVariable("TXT_MESSAGE_TEXT", $lng->txt("message"));
01827 foreach ($this->getProtocol() as $login => $messages)
01828 {
01829 $block->setCurrentBlock("log_row");
01830 $reason = "";
01831 foreach ($messages as $message)
01832 {
01833 if ($reason == "")
01834 {
01835 $reason = $message;
01836 }
01837 else
01838 {
01839 $reason = $reason."<br>".$message;
01840 }
01841 }
01842 $block->setVariable("MESSAGE_ID", $login);
01843 $block->setVariable("MESSAGE_TEXT", $reason);
01844 $block->parseCurrentBlock();
01845 }
01846 return $block->get();
01847 }
01848
01852 function isSuccess()
01853 {
01854 return $this->error_level == IL_IMPORT_SUCCESS;
01855 }
01856
01861 function getErrorLevel()
01862 {
01863 return $this->error_level;
01864 }
01865
01871 function getUserMapping() {
01872 return $this->user_mapping;
01873 }
01874
01878 function sendAccountMail()
01879 {
01880
01881 if ($_POST["send_mail"] != "" ||
01882 ($this->isSendMail() && $this->userObj->getEmail() != "")
01883 )
01884 {
01885 $this->acc_mail->setUser($this->userObj);
01886 $this->acc_mail->send();
01887 }
01888 }
01889
01895 function setSendMail ($value) {
01896 $this->send_mail = $value ? true: false;
01897 }
01898
01904 function isSendMail () {
01905 return $this->send_mail;
01906 }
01907
01913 function setUserMappingMode($value)
01914 {
01915 if ($value == IL_USER_MAPPING_ID || $value == IL_USER_MAPPING_LOGIN)
01916 $this->mapping_mode = $value;
01917 else die ("wrong argument using methode setUserMappingMethod in ".__FILE__);
01918 }
01919
01925 function getUserMappingMode()
01926 {
01927 return $this->mapping_mode;
01928 }
01929
01930 }
01931 ?>