/** * @param int|null $parentId The parent node id * @param string $lang The locale * @param string $permission The permission (read, write, ...) * @param AclHelper $aclHelper The acl helper * @param bool $includeHiddenFromNav Include nodes hidden from * navigation or not * @param Node $rootNode Root node of the current tree * * @return Node[] */ public function getChildNodes($parentId, $lang, $permission, AclHelper $aclHelper, $includeHiddenFromNav = false, $includeHiddenWithInternalName = false, $rootNode = null) { $qb = $this->createQueryBuilder('b')->select('b', 't', 'v')->leftJoin('b.nodeTranslations', 't', 'WITH', 't.lang = :lang')->leftJoin('t.publicNodeVersion', 'v', 'WITH', 't.publicNodeVersion = v.id')->where('b.deleted = 0')->setParameter('lang', $lang)->addOrderBy('t.weight', 'ASC')->addOrderBy('t.title', 'ASC'); if (!$includeHiddenFromNav) { if ($includeHiddenWithInternalName) { $qb->andWhere('(b.hiddenFromNav != true OR b.internalName IS NOT NULL)'); } else { $qb->andWhere('b.hiddenFromNav != true'); } } if (is_null($parentId)) { $qb->andWhere('b.parent is NULL'); } elseif ($parentId !== false) { $qb->andWhere('b.parent = :parent')->setParameter('parent', $parentId); } if ($rootNode) { $qb->andWhere('b.lft >= :left')->andWhere('b.rgt <= :right')->setParameter('left', $rootNode->getLeft())->setParameter('right', $rootNode->getRight()); } $query = $aclHelper->apply($qb, new PermissionDefinition(array($permission))); return $query->getResult(); }
/** * Get the node translation for a given url * * @param string $urlSlug The full url * @param string $locale The locale * @param boolean $includeDeleted Include deleted nodes * @param NodeTranslation $toExclude Optional NodeTranslation instance * you wish to exclude * @param Node $rootNode Optional Root node of the tree you * wish to use * * @return NodeTranslation|null */ public function getNodeTranslationForUrl($urlSlug, $locale = '', $includeDeleted = false, NodeTranslation $toExclude = null, Node $rootNode = null) { $qb = $this->createQueryBuilder('b')->select('b', 'v')->innerJoin('b.node', 'n', 'WITH', 'b.node = n.id')->leftJoin('b.publicNodeVersion', 'v', 'WITH', 'b.publicNodeVersion = v.id')->addOrderBy('b.online', 'DESC')->addOrderBy('n.sequenceNumber', 'DESC')->setFirstResult(0)->setMaxResults(1); if (!$includeDeleted) { $qb->andWhere('n.deleted = 0'); } if (!empty($locale)) { $qb->andWhere('b.lang = :lang')->setParameter('lang', $locale); } if (empty($urlSlug)) { $qb->andWhere('b.url IS NULL'); } else { $qb->andWhere('b.url = :url'); $qb->setParameter('url', $urlSlug); } if (!is_null($toExclude)) { $qb->andWhere('NOT b.id = :exclude_id')->setParameter('exclude_id', $toExclude->getId()); } if ($rootNode) { $qb->andWhere('n.lft >= :left')->andWhere('n.rgt <= :right')->setParameter('left', $rootNode->getLeft())->setParameter('right', $rootNode->getRight()); } return $qb->getQuery()->getOneOrNullResult(); }