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