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