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;
     }
 }
Exemplo n.º 2
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;
     }
 }