/**
  * Save user account settings
  * @return 
  */
 public function saveGeneralSettingsObject()
 {
     global $ilUser, $ilSetting;
     $this->initFormGeneralSettings();
     if ($this->form->checkInput()) {
         $valid = true;
         if (!strlen($this->form->getInput('loginname_change_blocking_time'))) {
             $valid = false;
             $this->form->getItemByPostVar('loginname_change_blocking_time')->setAlert($this->lng->txt('loginname_change_blocking_time_invalidity_info'));
         }
         include_once './Services/PrivacySecurity/classes/class.ilSecuritySettings.php';
         $security = ilSecuritySettings::_getInstance();
         // account security settings
         $security->setPasswordCharsAndNumbersEnabled((bool) $_POST["password_chars_and_numbers_enabled"]);
         $security->setPasswordSpecialCharsEnabled((bool) $_POST["password_special_chars_enabled"]);
         $security->setPasswordMinLength((int) $_POST["password_min_length"]);
         $security->setPasswordMaxLength((int) $_POST["password_max_length"]);
         $security->setPasswordNumberOfUppercaseChars((int) $_POST['password_ucase_chars_num']);
         $security->setPasswordNumberOfLowercaseChars((int) $_POST['password_lowercase_chars_num']);
         $security->setPasswordMaxAge((int) $_POST["password_max_age"]);
         $security->setLoginMaxAttempts((int) $_POST["login_max_attempts"]);
         $security->setPreventionOfSimultaneousLogins((bool) $_POST['ps_prevent_simultaneous_logins']);
         $security->setPasswordChangeOnFirstLoginEnabled((bool) $_POST['password_change_on_first_login_enabled']);
         $security->setPasswordMustNotContainLoginnameStatus((int) $_POST['password_must_not_contain_loginame']);
         if (!$security->validate($this->form)) {
             $valid = false;
         }
         if ($valid) {
             $security->save();
             include_once './Services/User/classes/class.ilUserAccountSettings.php';
             ilUserAccountSettings::getInstance()->enableLocalUserAdministration($this->form->getInput('lua'));
             ilUserAccountSettings::getInstance()->restrictUserAccess($this->form->getInput('lrua'));
             ilUserAccountSettings::getInstance()->update();
             // TODO: move to user account settings
             $save_blocking_time_in_seconds = (int) $ilSetting->get('loginname_change_blocking_time') * 86400;
             $ilSetting->set('allow_change_loginname', (int) $this->form->getInput('allow_change_loginname'));
             $ilSetting->set('create_history_loginname', (int) $this->form->getInput('create_history_loginname'));
             $ilSetting->set('reuse_of_loginnames', (int) $this->form->getInput('reuse_of_loginnames'));
             $ilSetting->set('loginname_change_blocking_time', (int) $save_blocking_time_in_seconds);
             $ilSetting->set('user_adm_alpha_nav', (int) $this->form->getInput('user_adm_alpha_nav'));
             $ilSetting->set('user_reactivate_code', (int) $this->form->getInput('user_reactivate_code'));
             $ilSetting->set('user_delete_own_account', (int) $this->form->getInput('user_own_account'));
             $ilSetting->set('user_delete_own_account_email', $this->form->getInput('user_own_account_email'));
             $ilSetting->set("passwd_auto_generate", $this->form->getInput("passwd_auto_generate"));
             $ilSetting->set("password_assistance", $this->form->getInput("password_assistance"));
             // BEGIN SESSION SETTINGS
             $ilSetting->set('session_handling_type', (int) $this->form->getInput('session_handling_type'));
             if ($this->form->getInput('session_handling_type') == ilSession::SESSION_HANDLING_FIXED) {
                 $ilSetting->set('session_reminder_enabled', $this->form->getInput('session_reminder_enabled'));
             } else {
                 if ($this->form->getInput('session_handling_type') == ilSession::SESSION_HANDLING_LOAD_DEPENDENT) {
                     require_once 'Services/Authentication/classes/class.ilSessionControl.php';
                     if ($ilSetting->get('session_allow_client_maintenance', ilSessionControl::DEFAULT_ALLOW_CLIENT_MAINTENANCE)) {
                         // has to be done BEFORE updating the setting!
                         include_once "Services/Authentication/classes/class.ilSessionStatistics.php";
                         ilSessionStatistics::updateLimitLog((int) $this->form->getInput('session_max_count'));
                         $ilSetting->set('session_max_count', (int) $this->form->getInput('session_max_count'));
                         $ilSetting->set('session_min_idle', (int) $this->form->getInput('session_min_idle'));
                         $ilSetting->set('session_max_idle', (int) $this->form->getInput('session_max_idle'));
                         $ilSetting->set('session_max_idle_after_first_request', (int) $this->form->getInput('session_max_idle_after_first_request'));
                     }
                 }
             }
             // END SESSION SETTINGS
             ilUtil::sendSuccess($this->lng->txt('saved_successfully'));
         } else {
             ilUtil::sendFailure($this->lng->txt('form_input_not_valid'));
         }
     } else {
         ilUtil::sendFailure($this->lng->txt('form_input_not_valid'));
     }
     $this->form->setValuesByPost();
     $this->tpl->setContent($this->form->getHTML());
 }
 /**
  * Destroy session
  *
  * @param	string|array		session id|s
  * @param	int					closing context
  * @param	int|bool			expired at timestamp
  */
 static function _destroy($a_session_id, $a_closing_context = null, $a_expired_at = null)
 {
     global $ilDB;
     if (!$a_closing_context) {
         $a_closing_context = self::$closing_context;
     }
     ilSessionStatistics::closeRawEntry($a_session_id, $a_closing_context, $a_expired_at);
     if (!is_array($a_session_id)) {
         $q = "DELETE FROM usr_session WHERE session_id = " . $ilDB->quote($a_session_id, "text");
     } else {
         // array: id => timestamp - so we get rid of timestamps
         if ($a_expired_at) {
             $a_session_id = array_keys($a_session_id);
         }
         $q = "DELETE FROM usr_session WHERE " . $ilDB->in("session_id", $a_session_id, "", "text");
     }
     ilSessionIStorage::destroySession($a_session_id);
     $ilDB->manipulate($q);
     return true;
 }
 /**
  * checks wether the current session exhaust the limit of sessions
  * when limit is reached it deletes "firstRequestAbidencer" and checks again
  * when limit is still reached it deletes "oneMinIdleSession" and checks again
  * when limit is still reached the current session will be logged out
  *
  * @global ilSetting $ilSetting
  * @global ilAppEventHandler $ilAppEventHandler
  * @param Auth $a_auth
  */
 private static function checkCurrentSessionIsAllowed(Auth $a_auth, $a_user_id)
 {
     global $ilSetting;
     $max_sessions = (int) $ilSetting->get('session_max_count', DEFAULT_MAX_COUNT);
     if ($max_sessions > 0) {
         // get total number of sessions
         $num_sessions = self::getExistingSessionCount(self::$session_types_controlled);
         self::debug(__METHOD__ . "--> total existing sessions (" . $num_sessions . ")");
         if ($num_sessions + 1 > $max_sessions) {
             self::debug(__METHOD__ . ' --> limit for session pool reached, but try kicking some first request abidencer');
             self::kickFirstRequestAbidencer(self::$session_types_controlled);
             // get total number of sessions again
             $num_sessions = self::getExistingSessionCount(self::$session_types_controlled);
             if ($num_sessions + 1 > $max_sessions) {
                 self::debug(__METHOD__ . ' --> limit for session pool still reached so try kick one min idle session');
                 self::kickOneMinIdleSession(self::$session_types_controlled);
                 // get total number of sessions again
                 $num_sessions = self::getExistingSessionCount(self::$session_types_controlled);
                 if ($num_sessions + 1 > $max_sessions) {
                     self::debug(__METHOD__ . ' --> limit for session pool still reached so logout session (' . session_id() . ') and trigger event');
                     ilSession::setClosingContext(ilSession::SESSION_CLOSE_LIMIT);
                     // as the session is opened and closed in one request, there
                     // is no proper session yet and we have to do this ourselves
                     ilSessionStatistics::createRawEntry(session_id(), $_SESSION['SessionType'], time(), $a_user_id);
                     $a_auth->logout();
                     // Trigger reachedSessionPoolLimit Event
                     global $ilAppEventHandler;
                     $ilAppEventHandler->raise('Services/Authentication', 'reachedSessionPoolLimit', array());
                     // auth won't do this, we need to close session properly
                     session_destroy();
                     ilUtil::redirect('login.php?reached_session_limit=true');
                 } else {
                     self::debug(__METHOD__ . ' --> limit of session pool not reached anymore after kicking one min idle session');
                 }
             } else {
                 self::debug(__METHOD__ . ' --> limit of session pool not reached anymore after kicking some first request abidencer');
             }
         } else {
             self::debug(__METHOD__ . ' --> limit for session pool not reached yet');
         }
     } else {
         self::debug(__METHOD__ . ' --> limit for session pool not set so check is bypassed');
     }
 }
 protected function adminSync()
 {
     global $ilCtrl, $lng;
     // see ilSession::_writeData()
     $now = time();
     ilSession::_destroyExpiredSessions();
     ilSessionStatistics::aggretateRaw($now);
     ilUtil::sendSuccess($lng->txt("trac_sync_session_stats_success"), true);
     $ilCtrl->redirect($this);
 }
 /**
  * Save basic settings form
  *
  */
 public function saveBasicSettingsObject()
 {
     global $tpl, $lng, $ilCtrl, $ilSetting, $rbacsystem;
     if (!$rbacsystem->checkAccess("write", $this->object->getRefId())) {
         $this->ilias->raiseError($this->lng->txt("permission_denied"), $this->ilias->error_obj->MESSAGE);
     }
     $this->initBasicSettingsForm();
     if ($this->form->checkInput()) {
         $ilSetting->set("short_inst_name", $_POST["short_inst_name"]);
         $ilSetting->set("pub_section", $_POST["pub_section"]);
         $ilSetting->set("open_google", $_POST["open_google"]);
         $ilSetting->set("default_repository_view", $_POST["default_rep_view"]);
         $ilSetting->set("links_dynamic", $_POST["links_dynamic"]);
         $ilSetting->set("enable_trash", $_POST["enable_trash"]);
         $ilSetting->set("password_assistance", $_POST["password_assistance"]);
         $ilSetting->set("passwd_auto_generate", $_POST["passwd_auto_generate"]);
         $ilSetting->set("locale", $_POST["locale"]);
         $ilSetting->set('preview_learner', (int) $_POST['preview_learner']);
         $ilSetting->set('comments_tagging_in_lists', (int) $_POST['comments_tagging_in_lists']);
         $ilSetting->set('activate_captcha_anonym', (int) $_POST['activate_captcha_anonym']);
         //			$ilSetting->set('rep_cache',(int) $_POST['rep_cache']);
         $ilSetting->set('item_cmd_asynch', (int) $_POST['item_cmd_asynch']);
         $ilSetting->set("repository_tree_pres", $_POST["tree_pres"]);
         if ($_POST["tree_pres"] == "") {
             $_POST["rep_tree_limit_grp_crs"] = "";
         }
         if ($_POST["rep_tree_limit_grp_crs"] && !$ilSetting->get("rep_tree_limit_grp_crs")) {
             $_POST["rep_tree_synchronize"] = true;
         } else {
             if (!$_POST["rep_tree_synchronize"] && $ilSetting->get("rep_tree_synchronize")) {
                 $_POST["rep_tree_limit_grp_crs"] = false;
             }
         }
         $ilSetting->set("rep_tree_limit_grp_crs", $_POST["rep_tree_limit_grp_crs"]);
         $ilSetting->set("rep_tree_synchronize", $_POST["rep_tree_synchronize"]);
         // BEGIN SESSION SETTINGS
         $ilSetting->set('session_handling_type', (int) $this->form->getInput('session_handling_type'));
         if ($this->form->getInput('session_handling_type') == ilSession::SESSION_HANDLING_FIXED) {
             $ilSetting->set('session_reminder_enabled', $this->form->getInput('session_reminder_enabled'));
         } else {
             if ($this->form->getInput('session_handling_type') == ilSession::SESSION_HANDLING_LOAD_DEPENDENT) {
                 require_once 'Services/Authentication/classes/class.ilSessionControl.php';
                 if ($ilSetting->get('session_allow_client_maintenance', ilSessionControl::DEFAULT_ALLOW_CLIENT_MAINTENANCE)) {
                     // has to be done BEFORE updating the setting!
                     include_once "Services/Authentication/classes/class.ilSessionStatistics.php";
                     ilSessionStatistics::updateLimitLog((int) $this->form->getInput('session_max_count'));
                     $ilSetting->set('session_max_count', (int) $this->form->getInput('session_max_count'));
                     $ilSetting->set('session_min_idle', (int) $this->form->getInput('session_min_idle'));
                     $ilSetting->set('session_max_idle', (int) $this->form->getInput('session_max_idle'));
                     $ilSetting->set('session_max_idle_after_first_request', (int) $this->form->getInput('session_max_idle_after_first_request'));
                 }
             }
         }
         // END SESSION SETTINGS
         $global_profiles = $_POST["pub_section"] ? (int) $_POST['enable_global_profiles'] : 0;
         $ilSetting->set('enable_global_profiles', $global_profiles);
         $ilSetting->set("rep_shorten_description", $this->form->getInput('rep_shorten_description'));
         $ilSetting->set("rep_shorten_description_length", (int) $this->form->getInput('rep_shorten_description_length'));
         include_once "Services/User/classes/class.ilUserUtil.php";
         ilUserUtil::setStartingPoint($this->form->getInput('usr_start'), $this->form->getInput('usr_start_ref_id'));
         ilUserUtil::togglePersonalStartingPoint($this->form->getInput('usr_start_pers'));
         ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
         $ilCtrl->redirect($this, "showBasicSettings");
     }
     $this->setGeneralSettingsSubTabs("basic_settings");
     $this->form->setValuesByPost();
     $tpl->setContent($this->form->getHtml());
 }