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;
}