/**
  * Update access time
  * @param ilObjUser $user
  * @return bool
  * @static
  */
 public static function updateAccess(ilObjUser $user)
 {
     /**
      * @var $ilDB      ilDB
      * @var $ilSetting ilSetting
      */
     global $ilDB, $ilSetting;
     if (null === self::$last_access_time) {
         $query = 'SELECT access_time FROM ut_online WHERE usr_id = ' . $ilDB->quote($user->getId(), 'integer');
         $res = $ilDB->query($query);
         if (!$ilDB->numRows($res)) {
             return false;
         }
         $row = $ilDB->fetchAssoc($res);
         self::$last_access_time = $row['access_time'];
     }
     $time_span = (int) $ilSetting->get('tracking_time_span', 300);
     if (($diff = time() - self::$last_access_time) <= $time_span) {
         $ilDB->manipulateF('UPDATE ut_online SET online_time = online_time + %s, access_time = %s WHERE usr_id = %s', array('integer', 'integer', 'integer'), array($diff, time(), $user->getId()));
     } else {
         $ilDB->manipulateF('UPDATE ut_online SET access_time = %s WHERE usr_id = %s', array('integer', 'integer'), array(time(), $user->getId()));
     }
     return true;
 }
 /**
  * @static
  */
 protected static function handleAuthenticationSuccess()
 {
     /**
      * @var $ilUser ilObjUser
      */
     global $ilUser;
     require_once 'Services/Tracking/classes/class.ilOnlineTracking.php';
     ilOnlineTracking::updateAccess($ilUser);
 }
 function __appendUserInfo(&$info, $a_user)
 {
     global $ilUser;
     // #13525 - irrelevant personal data is not to be presented
     return;
     if (!is_object($a_user)) {
         $a_user = ilObjectFactory::getInstanceByObjId($a_user);
     }
     if ($a_user->getId() != $ilUser->getId()) {
         $info->addSection($this->lng->txt("trac_user_data"));
         // $info->addProperty($this->lng->txt('username'),$a_user->getLogin());
         // $info->addProperty($this->lng->txt('name'),$a_user->getFullname());
         $info->addProperty($this->lng->txt('last_login'), ilDatePresentation::formatDate(new ilDateTime($a_user->getLastLogin(), IL_CAL_DATETIME)));
         $info->addProperty($this->lng->txt('trac_total_online'), ilFormat::_secondsToString(ilOnlineTracking::getOnlineTime($a_user->getId())));
         return true;
     }
 }
 /**
  * Called after successful login
  * @return 
  * @param array $a_username
  * @param object $a_auth
  */
 protected function loginObserver($a_username, $a_auth)
 {
     global $ilLog, $ilAppEventHandler, $ilSetting;
     if ($this->getContainer()->loginObserver($a_username, $a_auth)) {
         // validate user
         include_once "Services/User/classes/class.ilObjUser.php";
         $user_id = ilObjUser::_loginExists($a_auth->getUsername());
         if ($user_id != ANONYMOUS_USER_ID) {
             $user = new ilObjUser($user_id);
             // check if profile is complete
             include_once "Services/User/classes/class.ilUserProfile.php";
             if (ilUserProfile::isProfileIncomplete($user) and ilAuthFactory::getContext() != ilAuthFactory::CONTEXT_ECS) {
                 $user->setProfileIncomplete(true);
                 $user->update();
             }
             // --- extended user validation
             //
             // we only have a single status, so abort after each one
             // order from highest priority to lowest
             // active?
             if (!$user->getActive()) {
                 $this->status = AUTH_USER_INACTIVE;
                 $a_auth->logout();
                 return;
             }
             // time limit
             if (!$user->checkTimeLimit()) {
                 $this->status = AUTH_USER_TIME_LIMIT_EXCEEDED;
                 // #16327
                 $this->exceeded_user_name = $this->getUserName();
                 $a_auth->logout();
                 return;
             }
             // check client ip
             $clientip = $user->getClientIP();
             if (trim($clientip) != "") {
                 $clientip = preg_replace("/[^0-9.?*,:]+/", "", $clientip);
                 $clientip = str_replace(".", "\\.", $clientip);
                 $clientip = str_replace(array("?", "*", ","), array("[0-9]", "[0-9]*", "|"), $clientip);
                 if (!preg_match("/^" . $clientip . "\$/", $_SERVER["REMOTE_ADDR"])) {
                     $this->status = AUTH_USER_WRONG_IP;
                     $a_auth->logout();
                     return;
                 }
             }
             // simultaneous login
             if ($ilSetting->get('ps_prevent_simultaneous_logins') && ilObjUser::hasActiveSession($user_id)) {
                 $this->status = AUTH_USER_SIMULTANEOUS_LOGIN;
                 $a_auth->logout();
                 return;
             }
             include_once 'Services/Tracking/classes/class.ilOnlineTracking.php';
             ilOnlineTracking::addUser($user_id);
             include_once 'Modules/Forum/classes/class.ilObjForum.php';
             ilObjForum::_updateOldAccess($user_id);
             require_once 'Services/PrivacySecurity/classes/class.ilSecuritySettings.php';
             $security_settings = ilSecuritySettings::_getInstance();
             // determine first login of user for setting an indicator
             // which still is available in PersonalDesktop, Repository, ...
             // (last login date is set to current date in next step)
             if ($security_settings->isPasswordChangeOnFirstLoginEnabled() && $user->getLastLogin() == null) {
                 $user->resetLastPasswordChange();
             }
             $user->refreshLogin();
             // reset counter for failed logins
             ilObjUser::_resetLoginAttempts($user_id);
         }
         // --- anonymous/registered user
         $ilLog->write(__METHOD__ . ': logged in as ' . $a_auth->getUsername() . ', remote:' . $_SERVER['REMOTE_ADDR'] . ':' . $_SERVER['REMOTE_PORT'] . ', server:' . $_SERVER['SERVER_ADDR'] . ':' . $_SERVER['SERVER_PORT']);
         ilSessionControl::handleLoginEvent($a_auth->getUsername(), $a_auth);
         $ilAppEventHandler->raise('Services/Authentication', 'afterLogin', array('username' => $a_auth->getUsername()));
     }
 }