public function getFull($CategoryID = false, $Permissions = false)
{
// Get the current category list
$Categories = self::categories();
// Filter out the categories we aren't supposed to view.
if ($CategoryID && !is_array($CategoryID)) {
$CategoryID = array($CategoryID);
}
if (!$CategoryID && $this->Watching) {
$CategoryID = self::CategoryWatch(false);
}
switch ($Permissions) {
case 'Vanilla.Discussions.Add':
$Permissions = 'PermsDiscussionsAdd';
break;
case 'Vanilla.Disussions.Edit':
$Permissions = 'PermsDiscussionsEdit';
break;
default:
$Permissions = 'PermsDiscussionsView';
break;
}
$IDs = array_keys($Categories);
foreach ($IDs as $ID) {
if ($ID < 0) {
unset($Categories[$ID]);
} elseif (!$Categories[$ID][$Permissions]) {
unset($Categories[$ID]);
} elseif (is_array($CategoryID) && !in_array($ID, $CategoryID)) {
unset($Categories[$ID]);
}
}
//self::JoinRecentPosts($Categories);
foreach ($Categories as &$Category) {
if ($Category['ParentCategoryID'] <= 0) {
self::JoinRecentChildPosts($Category, $Categories);
}
}
// This join users call can be very slow on forums with a lot of categories so we can disable it here.
if ($this->JoinRecentUsers) {
Gdn::userModel()->joinUsers($Categories, array('LastUserID'));
}
$Result = new Gdn_DataSet($Categories, DATASET_TYPE_ARRAY);
$Result->DatasetType(DATASET_TYPE_OBJECT);
return $Result;
}