public function testSelectAsArray()
 {
     $qb = new ResourceQueryBuilder();
     $dql = $qb->selectAsArray()->getDql();
     $eol = PHP_EOL;
     $expectedDql = "SELECT DISTINCT{$eol}" . "    node.id as id,{$eol}" . "    node.name as name,{$eol}" . "    node.path as path,{$eol}" . "    parent.id as parent_id,{$eol}" . "    creator.username as creator_username,{$eol}" . "    resourceType.name as type,{$eol}" . "    previous.id as previous_id,{$eol}" . "    next.id as next_id,{$eol}" . "    icon.relativeUrl as large_icon,{$eol}" . "    node.mimeType as mime_type{$eol}" . "FROM Claroline\\CoreBundle\\Entity\\Resource\\ResourceNode node{$eol}" . "JOIN node.creator creator{$eol}" . "JOIN node.resourceType resourceType{$eol}" . "LEFT JOIN node.next next{$eol}" . "LEFT JOIN node.previous previous{$eol}" . "LEFT JOIN node.parent parent{$eol}" . "LEFT JOIN node.icon icon{$eol}";
     $this->assertEquals($expectedDql, $dql);
     $dql = $qb->selectAsArray(true)->getDql();
     $expectedDql = "SELECT DISTINCT{$eol}" . "    node.id as id,{$eol}" . "    node.name as name,{$eol}" . "    node.path as path,{$eol}" . "    parent.id as parent_id,{$eol}" . "    creator.username as creator_username,{$eol}" . "    resourceType.name as type,{$eol}" . "    previous.id as previous_id,{$eol}" . "    next.id as next_id,{$eol}" . "    icon.relativeUrl as large_icon,{$eol}" . "    node.mimeType as mime_type" . ",{$eol}rights.mask{$eol}" . "FROM Claroline\\CoreBundle\\Entity\\Resource\\ResourceNode node{$eol}" . "JOIN node.creator creator{$eol}" . "JOIN node.resourceType resourceType{$eol}" . "LEFT JOIN node.next next{$eol}" . "LEFT JOIN node.previous previous{$eol}" . "LEFT JOIN node.parent parent{$eol}" . "LEFT JOIN node.icon icon{$eol}" . "LEFT JOIN node.rights rights{$eol}" . "JOIN rights.role rightRole{$eol}";
     $this->assertEquals($expectedDql, $dql);
 }
Пример #2
0
 /**
  * Returns all the shortcuts targeting a directory (recursive).
  *
  * @param array $criteria
  * @param array $roles
  *
  * @return array[array] An array of resources represented as arrays
  *
  * @todo find a proper way to prevent infinite recursion
  */
 public function findRecursiveDirectoryShortcuts(array $criteria, array $roles = null, $alreadyFound = array())
 {
     $builder = new ResourceQueryBuilder();
     $builder->selectAsArray();
     $this->addFilters($builder, $criteria, $roles);
     $dql = $builder->whereIsShortcut()->getDql();
     $query = $this->_em->createQuery($dql);
     $query->setParameters($builder->getParameters());
     $results = $query->getResult();
     foreach ($results as $result) {
         $criteria['roots'] = array($result['target_path']);
         //if the result was already found, stop the recursion.
         if (!in_array($result, $alreadyFound)) {
             $results = array_merge($this->findRecursiveDirectoryShortcuts($criteria, $roles, $results), $results);
             $results = array_map('unserialize', array_unique(array_map('serialize', $results)));
         }
     }
     return $results;
 }