/** * 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; } }
public function setOption($name, $value, $save = true) { $setting = $this->db_assertor->getRow('setting', array('varname' => $name)); $new_value = $value; $valid_value = $this->validate_setting_value($value, $setting['datatype'], true, false); $old_value = $this->validate_setting_value($setting['value'], $setting['datatype'], true, false); //If styleid changes we need to clear fastDS'd templates. if ($name == 'styleid' and $fastDS = vB_FastDS::instance()) { $fastDs->setDsChanged('styleid'); } $options = $this->getValue('options'); $options[$name] = $valid_value; $this->registered['options'] = $options; if ($valid_value != $setting['value']) { if ($save) { $this->db_assertor->update('setting', array('value' => $valid_value), array('varname' => $name)); $this->build('options', serialize($options), 1); } } }