/** * Connect to Jackrabbit, and filter pages by tags * * @param $tags array with stanbol references * @param $currentUrl string current url * @param $lang string language * * @return array with links to pages */ protected function getPagesByTags($tags, $currentUrl, $lang) { $this->basePath = $this->basePath . '/' . $lang; foreach ($tags as $i => $tag) { $tags[$i] = 'referring.tags = ' . $this->dm->quote($tag); } $sql = 'SELECT routes.* FROM [nt:unstructured] AS routes'; $sql .= ' INNER JOIN [nt:unstructured] AS referring ON referring.[jcr:uuid] = routes.[routeContent]'; $sql .= ' WHERE (ISDESCENDANTNODE(routes, ' . $this->dm->quote($this->basePath) . ') OR ISSAMENODE(routes, ' . $this->dm->quote($this->basePath) . '))'; $sql .= ' AND (' . implode(' OR ', $tags) . ')'; $query = $this->dm->createQuery($sql, QueryInterface::JCR_SQL2); $query->setLimit(-1); $pages = $this->dm->getDocumentsByQuery($query); $links = array(); foreach ($pages as $page) { if ($page instanceof Route && $page->getRouteContent()) { $url = $this->router->generate('', array('_locale' => $lang, 'content' => $page->getRouteContent()), true); if (preg_replace('/^\\/|\\/$/', '', $url) !== preg_replace('/^\\/|\\/$/', '', $currentUrl)) { $label = $page->getRouteContent()->title; $links[] = array('url' => $url, 'label' => $label); } } } return $links; }
/** * Get documents from a PHPCR query instance * * @param \PHPCR\Query\QueryResultInterface $result * @return array of document instances */ public function getDocumentsByQuery(\PHPCR\Query\QueryInterface $query) { return $this->dm->getDocumentsByQuery($query, $this->className); }