public function getChannelPerm($usergroupid, $permissiongroup, $permission, $channelid) { if ($permissiongroup == 'moderatorpermissions') { $bf_ugp = $this->datastore->getValue('bf_misc_' . $permissiongroup); } else { $bf_ugp = $this->datastore->getValue('bf_ugp_' . $permissiongroup); } if (!isset($this->channelPermissions[$usergroupid])) { $this->loadChannelPermissions($usergroupid); $this->validateInfractionPermissions($usergroupid, $channelid); } if (empty($this->permissionsFrom)) { $this->permissionsFrom = vB::getDatastore()->getValue('vBUgChannelPermissionsFrom'); } // We might have gotten an integer; if (is_numeric($permission)) { $permission = strtolower(vB_Types::instance()->getContentTypePackage($permission) . '_' . vB_Types::instance()->getContentTypeClass($permission)); } else { $permission = strtolower($permission); } if (!isset($this->channelPermissions[$usergroupid][$channelid]) and isset($this->permissionsFrom[$usergroupid]) and isset($this->permissionsFrom[$usergroupid][$channelid])) { $channelid = $this->permissionsFrom[$usergroupid][$channelid]; } if (isset($bf_ugp[$permission]) and isset($this->channelPermissions[$usergroupid][$channelid])) { switch ($permissiongroup) { case 'forumpermissions': return $bf_ugp[$permission] & $this->channelPermissions[$usergroupid][$channelid]['forumpermissions']; break; case 'forumpermissions2': return $bf_ugp[$permission] & $this->channelPermissions[$usergroupid][$channelid]['forumpermissions2']; break; case 'createpermissions': //We might have gotten an integer; if (is_numeric($permission)) { $permission = strtolower(vB_Types::instance()->getContentTypePackage($permission) . '_' . vB_Types::instance()->getContentTypeClass($permission)); } else { $permission = strtolower($permission); } return $bf_ugp[$permission] & $this->channelPermissions[$usergroupid][$channelid]['createpermissions']; break; case 'moderatorpermissions': if ($usergroupid == 1) { return false; } return $bf_ugp[$permission] & intval($this->channelPermissions[$usergroupid][$channelid]['moderatorpermissions']); break; default: return false; } // switch } else { $permFields = vB_ChannelPermission::fetchPermFields(); if (isset($permFields[$permission]) and $permFields[$permission] != vB_ChannelPermission::TYPE_BITMAP and isset($this->channelPermissions[$usergroupid][$channelid])) { return $this->channelPermissions[$usergroupid][$channelid][$permission]; } return false; } }
/** * 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; } }