Exemplo n.º 1
0
 public static function applyAccessLimits(ilObjUser $user, $code)
 {
     include_once './Services/Registration/classes/class.ilRegistrationCode.php';
     $code_data = ilRegistrationCode::getCodeData($code);
     if ($code_data["alimit"]) {
         switch ($code_data["alimit"]) {
             case "absolute":
                 $end = new ilDateTime($code_data['alimitdt'], IL_CAL_DATE);
                 //$user->setTimeLimitFrom(time());
                 $user->setTimeLimitUntil($end->get(IL_CAL_UNIX));
                 $user->setTimeLimitUnlimited(0);
                 break;
             case "relative":
                 $rel = unserialize($code_data["alimitdt"]);
                 include_once './Services/Calendar/classes/class.ilDateTime.php';
                 $end = new ilDateTime(time(), IL_CAL_UNIX);
                 if ($rel['y'] > 0) {
                     $end->increment(IL_CAL_YEAR, $rel['y']);
                 }
                 if ($rel['m'] > 0) {
                     $end->increment(IL_CAL_MONTH, $rel['m']);
                 }
                 if ($rel['d'] > 0) {
                     $end->increment(IL_CAL_DAY, $rel['d']);
                 }
                 //$user->setTimeLimitFrom(time());
                 $user->setTimeLimitUntil($end->get(IL_CAL_UNIX));
                 $user->setTimeLimitUnlimited(0);
                 break;
             case 'unlimited':
                 $user->setTimeLimitUnlimited(1);
                 break;
         }
     } else {
         $user->setTimeLimitUnlimited(1);
     }
 }
 protected function __createUser($a_role)
 {
     global $ilSetting, $rbacadmin;
     $this->userObj = new ilObjUser();
     include_once "./Services/User/classes/class.ilUserProfile.php";
     $up = new ilUserProfile();
     $up->setMode(ilUserProfile::MODE_REGISTRATION);
     $map = array();
     $up->skipGroup("preferences");
     $up->skipGroup("settings");
     $up->skipGroup("instant_messengers");
     $up->skipField("password");
     $up->skipField("birthday");
     $up->skipField("upload");
     foreach ($up->getStandardFields() as $k => $v) {
         if ($v["method"]) {
             $method = "set" . substr($v["method"], 3);
             if (method_exists($this->userObj, $method)) {
                 if ($k != "username") {
                     $k = "usr_" . $k;
                 }
                 $field_obj = $this->form->getItemByPostVar($k);
                 if ($field_obj) {
                     $this->userObj->{$method}($this->form->getInput($k));
                 }
             }
         }
     }
     $this->userObj->setFullName();
     $birthday_obj = $this->form->getItemByPostVar("usr_birthday");
     if ($birthday_obj) {
         $birthday = $this->form->getInput("usr_birthday");
         $birthday = $birthday["date"];
         // when birthday was not set, array will not be substituted with string by ilBirthdayInputGui
         if (!is_array($birthday)) {
             $this->userObj->setBirthday($birthday);
         }
     }
     // messenger
     $map = array("icq", "yahoo", "msn", "aim", "skype", "jabber", "voip");
     foreach ($map as $client) {
         $field = "usr_im_" . $client;
         $field_obj = $this->form->getItemByPostVar($field);
         if ($field_obj) {
             $this->userObj->setInstantMessengerId($client, $this->form->getInput($field));
         }
     }
     $this->userObj->setTitle($this->userObj->getFullname());
     $this->userObj->setDescription($this->userObj->getEmail());
     if ($this->registration_settings->passwordGenerationEnabled()) {
         $password = ilUtil::generatePasswords(1);
         $password = $password[0];
     } else {
         $password = $this->form->getInput("usr_password");
     }
     $this->userObj->setPasswd($password);
     // Set user defined data
     include_once './Services/User/classes/class.ilUserDefinedFields.php';
     $user_defined_fields =& ilUserDefinedFields::_getInstance();
     $defs = $user_defined_fields->getRegistrationDefinitions();
     $udf = array();
     foreach ($_POST as $k => $v) {
         if (substr($k, 0, 4) == "udf_") {
             $f = substr($k, 4);
             $udf[$f] = $v;
         }
     }
     $this->userObj->setUserDefinedData($udf);
     $this->userObj->setTimeLimitOwner(7);
     $this->code_was_used = false;
     if ($this->code_enabled) {
         // #10853 - could be optional
         $code = $this->form->getInput('usr_registration_code');
         if ($code) {
             // set code to used
             include_once './Services/Registration/classes/class.ilRegistrationCode.php';
             ilRegistrationCode::useCode($code);
             $this->code_was_used = true;
         }
     }
     // something went wrong with the form validation
     if (!$a_role) {
         global $ilias;
         $ilias->raiseError("Invalid role selection in registration" . ", IP: " . $_SERVER["REMOTE_ADDR"], $ilias->error_obj->FATAL);
     }
     if ($this->registration_settings->getAccessLimitation()) {
         include_once 'Services/Registration/classes/class.ilRegistrationRoleAccessLimitations.php';
         $access_limitations_obj = new ilRegistrationRoleAccessLimitations();
         $access_limit_mode = $access_limitations_obj->getMode($a_role);
         if ($access_limit_mode == 'absolute') {
             $access_limit = $access_limitations_obj->getAbsolute($a_role);
             $this->userObj->setTimeLimitUnlimited(0);
             $this->userObj->setTimeLimitUntil($access_limit);
         } elseif ($access_limit_mode == 'relative') {
             $rel_d = (int) $access_limitations_obj->getRelative($a_role, 'd');
             $rel_m = (int) $access_limitations_obj->getRelative($a_role, 'm');
             $rel_y = (int) $access_limitations_obj->getRelative($a_role, 'y');
             $access_limit = $rel_d * 86400 + $rel_m * 2592000 + $rel_y * 31536000 + time();
             $this->userObj->setTimeLimitUnlimited(0);
             $this->userObj->setTimeLimitUntil($access_limit);
         } else {
             $this->userObj->setTimeLimitUnlimited(1);
             $this->userObj->setTimeLimitUntil(time());
         }
     } else {
         $this->userObj->setTimeLimitUnlimited(1);
         $this->userObj->setTimeLimitUntil(time());
     }
     $this->userObj->setTimeLimitFrom(time());
     $this->userObj->create();
     if ($this->registration_settings->getRegistrationType() == IL_REG_DIRECT || $this->registration_settings->getRegistrationType() == IL_REG_CODES || $this->code_was_used) {
         $this->userObj->setActive(1, 0);
     } else {
         if ($this->registration_settings->getRegistrationType() == IL_REG_ACTIVATION) {
             $this->userObj->setActive(0, 0);
         } else {
             $this->userObj->setActive(0, 0);
         }
     }
     $this->userObj->updateOwner();
     // set a timestamp for last_password_change
     // this ts is needed by the ACCOUNT_SECURITY_MODE_CUSTOMIZED
     // in ilSecuritySettings
     $this->userObj->setLastPasswordChangeTS(time());
     //insert user data in table user_data
     $this->userObj->saveAsNew();
     // store acceptance of user agreement
     $this->userObj->writeAccepted();
     // setup user preferences
     $this->userObj->setLanguage($this->form->getInput('usr_language'));
     $hits_per_page = $ilSetting->get("hits_per_page");
     if ($hits_per_page < 10) {
         $hits_per_page = 10;
     }
     $this->userObj->setPref("hits_per_page", $hits_per_page);
     $show_online = $ilSetting->get("show_users_online");
     if ($show_online == "") {
         $show_online = "y";
     }
     $this->userObj->setPref("show_users_online", $show_online);
     $this->userObj->writePrefs();
     $rbacadmin->assignUser((int) $a_role, $this->userObj->getId(), true);
     return $password;
 }
 /**
  * Init filter
  */
 function initFilter()
 {
     global $lng, $rbacreview, $ilUser, $ilObjDataCache;
     include_once "./Services/Registration/classes/class.ilRegistrationCode.php";
     // code
     include_once "./Services/Form/classes/class.ilTextInputGUI.php";
     $ti = new ilTextInputGUI($lng->txt("registration_code"), "query");
     $ti->setMaxLength(ilRegistrationCode::CODE_LENGTH);
     $ti->setSize(20);
     $ti->setSubmitFormOnEnter(true);
     $this->addFilterItem($ti);
     $ti->readFromSession();
     $this->filter["code"] = $ti->getValue();
     // role
     $this->role_map = array();
     foreach ($rbacreview->getGlobalRoles() as $role_id) {
         if (!in_array($role_id, array(SYSTEM_ROLE_ID, ANONYMOUS_ROLE_ID))) {
             $this->role_map[$role_id] = $ilObjDataCache->lookupTitle($role_id);
         }
     }
     include_once "./Services/Form/classes/class.ilSelectInputGUI.php";
     include_once './Services/AccessControl/classes/class.ilObjRole.php';
     $options = array("" => $this->lng->txt("registration_roles_all")) + $this->role_map;
     $si = new ilSelectInputGUI($this->lng->txt("role"), "role");
     $si->setOptions($options);
     $this->addFilterItem($si);
     $si->readFromSession();
     $this->filter["role"] = $si->getValue();
     // access limitation
     $options = array("" => $this->lng->txt("registration_codes_access_limitation_all"), "unlimited" => $this->lng->txt("reg_access_limitation_none"), "absolute" => $this->lng->txt("reg_access_limitation_mode_absolute"), "relative" => $this->lng->txt("reg_access_limitation_mode_relative"));
     $si = new ilSelectInputGUI($this->lng->txt("reg_access_limitations"), "alimit");
     $si->setOptions($options);
     $this->addFilterItem($si);
     $si->readFromSession();
     $this->filter["alimit"] = $si->getValue();
     // generated
     include_once "./Services/Form/classes/class.ilSelectInputGUI.php";
     $options = array("" => $this->lng->txt("registration_generated_all"));
     foreach ((array) ilRegistrationCode::getGenerationDates() as $date) {
         $options[$date] = ilDatePresentation::formatDate(new ilDateTime($date, IL_CAL_UNIX));
     }
     $si = new ilSelectInputGUI($this->lng->txt("registration_generated"), "generated");
     $si->setOptions($options);
     $this->addFilterItem($si);
     $si->readFromSession();
     $this->filter["generated"] = $si->getValue();
 }
 protected function __createUser($a_role)
 {
     /**
      * @var $ilSetting ilSetting
      * @var $rbacadmin ilRbacAdmin
      * @var $lng       ilLanguage
      */
     global $ilSetting, $rbacadmin, $lng;
     // something went wrong with the form validation
     if (!$a_role) {
         global $ilias;
         $ilias->raiseError("Invalid role selection in registration" . ", IP: " . $_SERVER["REMOTE_ADDR"], $ilias->error_obj->FATAL);
     }
     $this->userObj = new ilObjUser();
     include_once "./Services/User/classes/class.ilUserProfile.php";
     $up = new ilUserProfile();
     $up->setMode(ilUserProfile::MODE_REGISTRATION);
     $map = array();
     $up->skipGroup("preferences");
     $up->skipGroup("settings");
     $up->skipGroup("instant_messengers");
     $up->skipField("password");
     $up->skipField("birthday");
     $up->skipField("upload");
     foreach ($up->getStandardFields() as $k => $v) {
         if ($v["method"]) {
             $method = "set" . substr($v["method"], 3);
             if (method_exists($this->userObj, $method)) {
                 if ($k != "username") {
                     $k = "usr_" . $k;
                 }
                 $field_obj = $this->form->getItemByPostVar($k);
                 if ($field_obj) {
                     $this->userObj->{$method}($this->form->getInput($k));
                 }
             }
         }
     }
     $this->userObj->setFullName();
     $birthday_obj = $this->form->getItemByPostVar("usr_birthday");
     if ($birthday_obj) {
         $birthday = $this->form->getInput("usr_birthday");
         $birthday = $birthday["date"];
         // when birthday was not set, array will not be substituted with string by ilBirthdayInputGui
         if (!is_array($birthday)) {
             $this->userObj->setBirthday($birthday);
         }
     }
     // messenger
     $map = array("icq", "yahoo", "msn", "aim", "skype", "jabber", "voip");
     foreach ($map as $client) {
         $field = "usr_im_" . $client;
         $field_obj = $this->form->getItemByPostVar($field);
         if ($field_obj) {
             $this->userObj->setInstantMessengerId($client, $this->form->getInput($field));
         }
     }
     $this->userObj->setTitle($this->userObj->getFullname());
     $this->userObj->setDescription($this->userObj->getEmail());
     if ($this->registration_settings->passwordGenerationEnabled()) {
         $password = ilUtil::generatePasswords(1);
         $password = $password[0];
     } else {
         $password = $this->form->getInput("usr_password");
     }
     $this->userObj->setPasswd($password);
     // Set user defined data
     include_once './Services/User/classes/class.ilUserDefinedFields.php';
     $user_defined_fields =& ilUserDefinedFields::_getInstance();
     $defs = $user_defined_fields->getRegistrationDefinitions();
     $udf = array();
     foreach ($_POST as $k => $v) {
         if (substr($k, 0, 4) == "udf_") {
             $f = substr($k, 4);
             $udf[$f] = $v;
         }
     }
     $this->userObj->setUserDefinedData($udf);
     $this->userObj->setTimeLimitOwner(7);
     $access_limit = null;
     $this->code_was_used = false;
     if ($this->code_enabled) {
         $code_local_roles = $code_has_access_limit = null;
         // #10853 - could be optional
         $code = $this->form->getInput('usr_registration_code');
         if ($code) {
             include_once './Services/Registration/classes/class.ilRegistrationCode.php';
             // set code to used
             ilRegistrationCode::useCode($code);
             $this->code_was_used = true;
             // handle code attached local role(s) and access limitation
             $code_data = ilRegistrationCode::getCodeData($code);
             if ($code_data["role_local"]) {
                 // need user id before we can assign role(s)
                 $code_local_roles = explode(";", $code_data["role_local"]);
             }
             if ($code_data["alimit"]) {
                 // see below
                 $code_has_access_limit = true;
                 switch ($code_data["alimit"]) {
                     case "absolute":
                         $abs = date_parse($code_data["alimitdt"]);
                         $access_limit = mktime(23, 59, 59, $abs['month'], $abs['day'], $abs['year']);
                         break;
                     case "relative":
                         $rel = unserialize($code_data["alimitdt"]);
                         $access_limit = $rel["d"] * 86400 + $rel["m"] * 2592000 + $rel["y"] * 31536000 + time();
                         break;
                 }
             }
         }
     }
     // code access limitation will override any other access limitation setting
     if (!($this->code_was_used && $code_has_access_limit) && $this->registration_settings->getAccessLimitation()) {
         include_once 'Services/Registration/classes/class.ilRegistrationRoleAccessLimitations.php';
         $access_limitations_obj = new ilRegistrationRoleAccessLimitations();
         switch ($access_limitations_obj->getMode($a_role)) {
             case 'absolute':
                 $access_limit = $access_limitations_obj->getAbsolute($a_role);
                 break;
             case 'relative':
                 $rel_d = (int) $access_limitations_obj->getRelative($a_role, 'd');
                 $rel_m = (int) $access_limitations_obj->getRelative($a_role, 'm');
                 $rel_y = (int) $access_limitations_obj->getRelative($a_role, 'y');
                 $access_limit = $rel_d * 86400 + $rel_m * 2592000 + $rel_y * 31536000 + time();
                 break;
         }
     }
     if ($access_limit) {
         $this->userObj->setTimeLimitUnlimited(0);
         $this->userObj->setTimeLimitUntil($access_limit);
     } else {
         $this->userObj->setTimeLimitUnlimited(1);
         $this->userObj->setTimeLimitUntil(time());
     }
     $this->userObj->setTimeLimitFrom(time());
     $this->userObj->create();
     if ($this->registration_settings->getRegistrationType() == IL_REG_DIRECT || $this->registration_settings->getRegistrationType() == IL_REG_CODES || $this->code_was_used) {
         $this->userObj->setActive(1, 0);
     } else {
         if ($this->registration_settings->getRegistrationType() == IL_REG_ACTIVATION) {
             $this->userObj->setActive(0, 0);
         } else {
             $this->userObj->setActive(0, 0);
         }
     }
     $this->userObj->updateOwner();
     // set a timestamp for last_password_change
     // this ts is needed by ilSecuritySettings
     $this->userObj->setLastPasswordChangeTS(time());
     $this->userObj->setIsSelfRegistered(true);
     //insert user data in table user_data
     $this->userObj->saveAsNew();
     try {
         require_once 'Services/TermsOfService/classes/class.ilTermsOfServiceSignableDocumentFactory.php';
         ilTermsOfServiceHelper::trackAcceptance($this->userObj, ilTermsOfServiceSignableDocumentFactory::getByLanguageObject($lng));
     } catch (ilTermsOfServiceNoSignableDocumentFoundException $e) {
     }
     // setup user preferences
     $this->userObj->setLanguage($this->form->getInput('usr_language'));
     $hits_per_page = $ilSetting->get("hits_per_page");
     if ($hits_per_page < 10) {
         $hits_per_page = 10;
     }
     $this->userObj->setPref("hits_per_page", $hits_per_page);
     $show_online = $ilSetting->get("show_users_online");
     if ($show_online == "") {
         $show_online = "y";
     }
     $this->userObj->setPref("show_users_online", $show_online);
     $this->userObj->writePrefs();
     $rbacadmin->assignUser((int) $a_role, $this->userObj->getId());
     // local roles from code
     if ($this->code_was_used && is_array($code_local_roles)) {
         foreach (array_unique($code_local_roles) as $local_role_obj_id) {
             // is given role (still) valid?
             if (ilObject::_lookupType($local_role_obj_id) == "role") {
                 $rbacadmin->assignUser($local_role_obj_id, $this->userObj->getId());
             }
         }
     }
     return $password;
 }
 function exportCodes()
 {
     global $ilAccess, $ilErr;
     if (!$ilAccess->checkAccess('read', '', $this->ref_id)) {
         $ilErr->raiseError($this->lng->txt("msg_no_perm_read"), $ilErr->MESSAGE);
     }
     include_once "./Services/Registration/classes/class.ilRegistrationCodesTableGUI.php";
     $utab = new ilRegistrationCodesTableGUI($this, "listCodes");
     include_once './Services/Registration/classes/class.ilRegistrationCode.php';
     $codes = ilRegistrationCode::getCodesForExport($utab->filter["code"], $utab->filter["role"], $utab->filter["generated"], $utab->filter["alimit"]);
     if (sizeof($codes)) {
         ilUtil::deliverData(implode("\r\n", $codes), "ilias_registration_codes_" . date("d-m-Y") . ".txt", "text/plain");
     } else {
         ilUtil::sendFailure($this->lng->txt("registration_export_codes_no_data"));
         $this->listCodes();
     }
 }