public function treeAction(Request $request)
{
$em = $this->get('em');
$locale = $request->get('_code');
$articleNumber = $request->get('_articleNumber');
$topicService = $this->get('newscoop_newscoop.topic_service');
$cacheService = $this->get('newscoop.cache');
$topicsCount = $topicService->countBy();
$attachedCount = $topicService->countArticleTopicsBy();
$cacheKey = $cacheService->getCacheKey(array('topics', $topicsCount, $attachedCount, $articleNumber), 'topic');
$repository = $em->getRepository('Newscoop\\NewscoopBundle\\Entity\\Topic');
if ($cacheService->contains($cacheKey)) {
$nodes = $cacheService->fetch($cacheKey);
} else {
$topicsQuery = $repository->getTranslatableTopics($locale);
$nodes = $topicsQuery->getArrayResult();
if ($articleNumber) {
$nodes = $this->setAttachedKeysForArticleTopics($nodes, $articleNumber);
}
$cacheService->save($cacheKey, $nodes);
}
$tree = $repository->buildTreeArray($nodes);
usort($tree, function ($node1, $node2) {
return $node2['topicOrder'] - $node1['topicOrder'];
});
return new JsonResponse(array('tree' => $tree));
}