function print_channels($permissions, $inheritance = array(), $channels = false, $indent = '	')
{
    global $vbulletin, $imodcache, $npermscache, $vbphrase;
    if ($channels === false) {
        $channels = vB_Api::instanceInternal('search')->getChannels(false, array('include_protected' => true, 'no_perm_check' => true));
    }
    foreach ($channels as $nodeid => $node) {
        // make a copy of the current permissions set up
        $perms = $permissions;
        // make a copy of the inheritance set up
        $inherit = $inheritance;
        // echo channel title and links
        if (!defined('ONLYID') or $nodeid == ONLYID) {
            echo "{$indent}<ul class=\"lsq\">\n";
            echo "{$indent}<li><b><a name=\"node{$nodeid}\" href=\"forum.php?" . vB::getCurrentSession()->get('sessionurl') . "do=edit&amp;n={$nodeid}\">{$node['htmltitle']}</a></b>";
            if ($node['parentid'] != 0) {
                echo " <b><span class=\"smallfont\">(" . construct_link_code($vbphrase['reset'], "forumpermission.php?" . vB::getCurrentSession()->get('sessionurl') . "do=quickset&amp;type=reset&amp;n={$nodeid}&amp;hash=" . CP_SESSIONHASH) . construct_link_code($vbphrase['deny_all'], "forumpermission.php?" . vB::getCurrentSession()->get('sessionurl') . "do=quickset&amp;type=deny&amp;n={$nodeid}&amp;hash=" . CP_SESSIONHASH) . ")</span></b>";
            }
            // get moderators
            if (is_array($imodcache["{$nodeid}"])) {
                echo "<span class=\"smallfont\"><br /> - <i>" . $vbphrase['moderators'] . ":";
                foreach ($imodcache["{$nodeid}"] as $moderator) {
                    // moderator username and links
                    echo " <a href=\"moderator.php?" . vB::getCurrentSession()->get('sessionurl') . "do=edit&amp;moderatorid={$moderator['moderatorid']}\">{$moderator['username']}</a>";
                }
                echo "</i></span>";
            }
            echo "{$indent}\t<ul class=\"usergroups\">\n";
        }
        $nplink = "";
        foreach ($vbulletin->usergroupcache as $usergroupid => $usergroup) {
            if ($inherit["{$usergroupid}"] == 'col-c') {
                $inherit["{$usergroupid}"] = 'col-i';
            }
            // if there is a custom permission for the current usergroup, use it
            if (isset($npermscache["{$nodeid}"]["{$usergroupid}"]) and $node['parentid'] != 0 and vB_ChannelPermission::compareDefaultChannelPermissions($nodeid, $usergroupid, $npermscache["{$nodeid}"]["{$usergroupid}"])) {
                $inherit["{$usergroupid}"] = 'col-c';
                $perms["{$usergroupid}"] = $npermscache[$nodeid][$usergroupid]['forumpermissions'];
                $nplink = 'np=' . $npermscache[$nodeid][$usergroupid]['permissionid'];
            } else {
                $nplink = "n={$nodeid}&amp;u={$usergroupid}";
            }
            // work out display style
            $liStyle = '';
            if (isset($inherit["{$usergroupid}"])) {
                $liStyle = " class=\"{$inherit[$usergroupid]}\"";
            } else {
                $liStyle = " class=\"col-g\"";
            }
            if (!($perms["{$usergroupid}"] & $vbulletin->bf_ugp_forumpermissions['canview'])) {
                $liStyle .= " style=\"list-style:circle\"";
            }
            if (!defined('ONLYID') or $nodeid == ONLYID) {
                echo "{$indent}\t<li{$liStyle}>" . construct_link_code($vbphrase['edit'], "forumpermission.php?" . vB::getCurrentSession()->get('sessionurl') . "do=edit&amp;{$nplink}") . $usergroup['title'] . "</li>\n";
            }
        }
        if (!defined('ONLYID') or $nodeid == ONLYID) {
            echo "{$indent}\t</ul><br />\n";
        }
        if (defined('ONLYID') and $nodeid == ONLYID) {
            echo "{$indent}</li>\n";
            echo "{$indent}</ul>\n";
            return;
        }
        if (!empty($node['channels'])) {
            print_channels($perms, $inherit, $node['channels'], "{$indent}\t");
        }
        if (!defined('ONLYID') or $nodeid == ONLYID) {
            echo "{$indent}</li>\n";
        }
        unset($inherit);
        if (!defined('ONLYID') or $nodeid == ONLYID) {
            echo "{$indent}</ul>\n";
        }
        if (!defined('ONLYID') and $node['parentid'] == -1) {
            echo "<hr size=\"1\" />\n";
        }
    }
}