Пример #1
0
 /**
  * Returns the descendants of a resource.
  *
  * @param ResourceNode $resource           The resource node to start with
  * @param boolean      $includeStartNode   Whether the given resource should be included in the result
  * @param string       $filterResourceType A resource type to filter the results
  *
  * @return array[ResourceNode]
  */
 public function findDescendants(ResourceNode $resource, $includeStartNode = false, $filterResourceType = null)
 {
     $builder = new ResourceQueryBuilder();
     $builder->selectAsEntity(true)->wherePathLike($resource->getPath(), $includeStartNode);
     if ($filterResourceType) {
         $builder->whereTypeIn(array($filterResourceType));
     }
     $query = $this->_em->createQuery($builder->getDql());
     $query->setParameters($builder->getParameters());
     return $this->executeQuery($query, null, null, false);
 }
Пример #2
0
 public function findWidgetPaths(array $userRoles, array $roots = array(), PathWidgetConfig $config = null)
 {
     $builder = new ResourceQueryBuilder();
     $builder->selectAsEntity(false, 'Innova\\PathBundle\\Entity\\Path\\Path');
     if (!empty($roots)) {
         $builder->whereRootIn($roots);
     }
     $builder->whereTypeIn(array('innova_path'));
     $builder->whereRoleIn($userRoles);
     // Add filters if defined
     if ($config) {
         // Add widget STATUS filters
         $statusList = $config->getStatus();
         if (!empty($statusList)) {
             $whereStatus = array();
             foreach ($statusList as $status) {
                 switch ($status) {
                     case 'draft':
                         $whereStatus[] = 'node.published = 0';
                         break;
                     case 'published':
                         $whereStatus[] = '(node.published = 1 AND resource.modified = 0)';
                         break;
                     case 'modified':
                         $whereStatus[] = '(node.published = 1 AND resource.modified = 1)';
                         break;
                 }
             }
             if (!empty($whereStatus)) {
                 $builder->addWhereClause(implode($whereStatus, ' OR '));
             }
         }
         // Add widget TAG filters
         $tagList = $config->getTags();
         if (0 < count($tagList)) {
             $tags = array();
             foreach ($tagList as $tag) {
                 $tags[] = $tag->getId();
             }
             // Join with the corresponding TaggedObject entities
             $builder->addJoinClause('LEFT JOIN ClarolineTagBundle:TaggedObject AS t WITH t.objectId = node.id');
             $builder->addWhereClause('t.id IS NOT NULL');
             $builder->addWhereClause('t.tag IN (' . implode($tags, ', ') . ')');
         }
     }
     $builder->orderByName();
     $dql = $builder->getDql();
     $query = $this->_em->createQuery($dql);
     $query->setParameters($builder->getParameters());
     $resources = $query->getResult();
     return $resources;
 }
Пример #3
0
 public function findAccessibleByUser(array $roots = array(), array $userRoles)
 {
     $builder = new ResourceQueryBuilder();
     $builder->selectAsEntity(false, 'Innova\\PathBundle\\Entity\\Path\\Path');
     if (!empty($roots)) {
         $builder->whereRootIn($roots);
     }
     $builder->whereTypeIn(array('innova_path'));
     $builder->whereRoleIn($userRoles);
     $builder->orderByName();
     $dql = $builder->getDql();
     $query = $this->_em->createQuery($dql);
     $query->setParameters($builder->getParameters());
     $resources = $query->getResult();
     return $resources;
 }