Пример #1
0
 /**
  * Updates the last visit and last activity times for guests and registered users (differently).
  * Last visit is set to the last activity time (before it's updated) only when a certain
  * time has lapsed. Last activity is always set to the specified time.
  *
  * @param	integer	Time stamp for last visit time (guest only)
  * @param	integer	Time stamp for last activity time (guest only)
  * @return	array	Updated values for setting cookies (guest only)
  */
 public function doLastVisitUpdate($lastvisit = 0, $lastactivity = 0)
 {
     $options = $this->datastore->getValue('options');
     $request = vB::getRequest();
     $timeNow = $request->getTimeNow();
     $cookies = array();
     // update last visit/activity stuff
     if ($this->vars['userid'] == 0) {
         // guest -- emulate last visit/activity for registered users by cookies
         if ($lastvisit) {
             // we've been here before
             $this->userinfo['lastactivity'] = $lastactivity ? intval($lastactivity) : intval($lastvisit);
             // here's the emulation
             if ($timeNow - $this->userinfo['lastactivity'] > $options['cookietimeout']) {
                 // update lastvisit
                 $this->userinfo['lastvisit'] = $this->userinfo['lastactivity'];
                 $cookies['lastvisit'] = $this->userinfo['lastactivity'];
             } else {
                 // keep lastvisit value
                 $this->userinfo['lastvisit'] = intval($lastvisit);
             }
         } else {
             // first visit!
             $this->userinfo['lastvisit'] = $timeNow;
             $cookies['lastvisit'] = $timeNow;
         }
         // lastactivity is always now
         $this->userinfo['lastactivity'] = $timeNow;
         $cookies['lastactivity'] = $timeNow;
         return $cookies;
     } else {
         // registered user
         if (!SESSION_BYPASS) {
             if ($timeNow - $this->userinfo['lastactivity'] > $options['cookietimeout']) {
                 // see if session has 'expired' and if new post indicators need resetting
                 $this->dBAssertor->shutdownQuery('updateLastVisit', array('timenow' => $timeNow, 'userid' => $this->userinfo['userid']), 'lastvisit');
                 $this->userinfo['lastvisit'] = $this->userinfo['lastactivity'];
             } else {
                 // if this line is removed (say to be replaced by a cron job, you will need to change all of the 'online'
                 // status indicators as they use $userinfo['lastactivity'] to determine if a user is online which relies
                 // on this to be updated in real time.
                 $this->dBAssertor->update('user', array('lastactivity' => $timeNow), array('userid' => $this->userinfo['userid']), 'lastvisit');
             }
         }
         // we don't need to set cookies for registered users
         return null;
     }
 }