SubtopicsList::CreateList PHP Method

CreateList() protected method

Creates the list of objects. Sets the parameter $p_hasNextElements to true if this list is limited and elements still exist in the original list (from which this was truncated) after the last element of this list.
protected CreateList ( integer $p_start, integer $p_limit, array $p_parameters, &$p_count ) : array
$p_start integer
$p_limit integer
$p_parameters array
return array
    protected function CreateList($p_start = 0, $p_limit = 0, array $p_parameters, &$p_count)
    {
        $rootTopicId = $p_parameters['topic_identifier'];
        $order = array();
        if (!isset($p_parameters['direct'])) {
            $p_parameters['direct'] = true;
        }
        if (!empty($this->m_order)) {
            $order = $this->m_order[0];
        }
        $em = \Zend_Registry::get('container')->getService('em');
        $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache');
        $topicService = \Zend_Registry::get('container')->getService('newscoop_newscoop.topic_service');
        $repository = $em->getRepository('Newscoop\\NewscoopBundle\\Entity\\Topic');
        $language = $em->getReference('Newscoop\\Entity\\Language', $p_parameters['language_id']);
        $topic = $repository->getSingleTopicQuery($rootTopicId, $language ? $language->getCode() : null)->getOneOrNullResult();
        if (!$topic) {
            $subtopics = $repository->getRootNodes($language ? $language->getCode() : null)->getArrayResult();
        } else {
            $topicsCount = $topicService->countBy();
            $cacheKey = $cacheService->getCacheKey(array('topics', $topicsCount, $rootTopicId), 'topic');
            $repository = $em->getRepository('Newscoop\\NewscoopBundle\\Entity\\Topic');
            if ($cacheService->contains($cacheKey)) {
                $subtopics = $cacheService->fetch($cacheKey);
            } else {
                $subtopics = $repository->childrenWithTranslations($topic, $language ? $language->getCode() : null, $p_parameters['direct'], isset($order['field']) ? $order['field'] : null, isset($order['dir']) ? $order['dir'] : null, false, $start, $limit)->getArrayResult();
                $cacheService->save($cacheKey, $subtopics);
            }
        }
        $p_count = count($subtopics);
        $metaTopicsList = array();
        $index = 0;
        foreach ($subtopics as $topic) {
            $index++;
            if ($p_limit == 0 || $p_limit > 0 && $index <= $p_limit) {
                $metaTopicsList[] = new MetaTopic($topic['id']);
            }
        }
        return $metaTopicsList;
    }