/** * 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; } }