CategoriesController::getCategoryTree PHP Method

getCategoryTree() private method

Build a structured tree of children for the specified category.
private getCategoryTree ( integer | string | object | array | null $category = null, string | null $displayAs = null, boolean $recent = false, boolean $watching = false ) : array
$category integer | string | object | array | null Category or code/ID to build the tree for. Null for all.
$displayAs string | null What display should the tree be configured for?
$recent boolean Join in recent record info?
$watching boolean Filter categories by "watching" status?
return array
    private function getCategoryTree($category = null, $displayAs = null, $recent = false, $watching = false)
    {
        $categoryIdentifier = null;
        if (is_string($category) || is_numeric($category)) {
            $category = CategoryModel::categories($category);
        }
        if ($category) {
            if ($displayAs === null) {
                $displayAs = val('DisplayAs', $category, 'Discussions');
            }
            $categoryIdentifier = val('CategoryID', $category, null);
        }
        switch ($displayAs) {
            case 'Flat':
                $perPage = c('Vanilla.Categories.PerPage', 30);
                $page = Gdn::request()->get('Page', Gdn::request()->get('page', null));
                list($offset, $limit) = offsetLimit($page, $perPage);
                $categoryTree = $this->CategoryModel->getTreeAsFlat($categoryIdentifier, $offset, $limit);
                $this->setData('_Limit', $perPage);
                $this->setData('_CurrentRecords', count($categoryTree));
                break;
            case 'Categories':
            case 'Discussions':
            case 'Default':
            case 'Nested':
            default:
                $categoryTree = $this->CategoryModel->setJoinUserCategory(true)->getChildTree($categoryIdentifier ?: null, ['depth' => CategoryModel::instance()->getMaxDisplayDepth() ?: 10]);
        }
        if ($recent) {
            $this->CategoryModel->joinRecent($categoryTree);
        }
        return $categoryTree;
    }