/**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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);
 }