Пример #1
0
/**
* Populates the $vbulletin->forumcache with calculated forum permissions for each usergroup
*
* NB: this function should only be called from build_forum_permissions()
*
* @param	integer	Initial permissions value
* @param	integer	Parent forum id
*/
function cache_forum_permissions($permissions, $parentid = -1)
{
    global $vbulletin, $fpermcache;
    // abort if no child forums found
    if (!is_array($vbulletin->iforumcache["{$parentid}"])) {
        return;
    }
    // run through each child forum
    foreach ($vbulletin->iforumcache["{$parentid}"] as $forumid) {
        $forum =& $vbulletin->forumcache["{$forumid}"];
        // make a copy of the current permissions set up
        $perms = $permissions;
        // run through each usergroup
        foreach (array_keys($vbulletin->usergroupcache) as $usergroupid) {
            // if there is a custom permission for the current usergroup, use it
            if (isset($fpermcache["{$forumid}"]["{$usergroupid}"])) {
                $perms["{$usergroupid}"] = $fpermcache["{$forumid}"]["{$usergroupid}"];
            }
            ($hook = vBulletinHook::fetch_hook('admin_cache_forum_perms')) ? eval($hook) : false;
            // populate the current row of the forumcache permissions
            $forum['permissions']["{$usergroupid}"] = intval($perms["{$usergroupid}"]);
        }
        // recurse to child forums
        cache_forum_permissions($perms, $forum['forumid']);
    }
}
Пример #2
0
/**
* Populates the $npermscache global with calculated forum permissions for each usergroup
*
* NB: this function should only be called from build_channel_permissions
*
* @param	integer	Initial permissions value
* @param	integer	Parent forum id
*/
function cache_forum_permissions($permissions = array(), $parentid = 1)
{
    global $vbulletin, $npermscache;
    // abort if no child forums found
    $channels = vB::getDbAssertor()->assertQuery('vBForum:node', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, 'parentid' => $parentid, 'contenttypeid' => vB_Types::instance()->getContentTypeID('vBForum_Channel')));
    if (!$channels->valid()) {
        return;
    }
    $cacheperms = array();
    if (empty($permissions)) {
        foreach (array_keys($vbulletin->usergroupcache) as $usergroupid) {
            $permissions[$usergroupid] = array();
        }
    }
    // run through each child forum
    foreach ($channels as $channel) {
        // make a copy of the current permissions set up
        $perms = $permissions;
        // run through each usergroup
        foreach (array_keys($vbulletin->usergroupcache) as $usergroupid) {
            // if there is a custom permission for the current usergroup, use it
            if (isset($npermscache[$channel['nodeid']][$usergroupid])) {
                $perms[$usergroupid][$channel['nodeid']] = $npermscache[$channel['nodeid']][$usergroupid];
            }
        }
        $cacheperms[$usergroupid][$channel['nodeid']] = $perms[$usergroupid][$channel['nodeid']];
        // recurse to child forums
        cache_forum_permissions($perms, $channel['nodeid']);
    }
}