@@ 350-384 (lines=35) @@ | ||
347 | * |
|
348 | * @return Node[] |
|
349 | */ |
|
350 | public function getAllParents(Node $node = null, $lang = null) |
|
351 | { |
|
352 | if (\is_null($node)) { |
|
353 | return array(); |
|
354 | } |
|
355 | ||
356 | $qb = $this->createQueryBuilder('node'); |
|
357 | ||
358 | // Directly hydrate the nodeTranslation and nodeVersion |
|
359 | $qb->select('node', 't', 'v') |
|
360 | ->innerJoin('node.nodeTranslations', 't') |
|
361 | ->leftJoin( |
|
362 | 't.publicNodeVersion', |
|
363 | 'v', |
|
364 | 'WITH', |
|
365 | 't.publicNodeVersion = v.id' |
|
366 | ) |
|
367 | ->where('node.deleted = 0'); |
|
368 | ||
369 | if ($lang) { |
|
370 | $qb->andWhere('t.lang = :lang') |
|
371 | ->setParameter('lang', $lang); |
|
372 | } |
|
373 | ||
374 | $qb->andWhere( |
|
375 | $qb->expr()->andX( |
|
376 | $qb->expr()->lte('node.lft', $node->getLeft()), |
|
377 | $qb->expr()->gte('node.rgt', $node->getRight()) |
|
378 | ) |
|
379 | ); |
|
380 | ||
381 | $qb->addOrderBy('node.lft', 'ASC'); |
|
382 | ||
383 | return $qb->getQuery()->getResult(); |
|
384 | } |
|
385 | ||
386 | /** |
|
387 | * Get the root node of a given node. |
|
@@ 394-427 (lines=34) @@ | ||
391 | * |
|
392 | * @return Node |
|
393 | */ |
|
394 | public function getRootNodeFor(Node $node = null, $lang = null) |
|
395 | { |
|
396 | if (\is_null($node)) { |
|
397 | return null; |
|
398 | } |
|
399 | ||
400 | $qb = $this->createQueryBuilder('node'); |
|
401 | ||
402 | // Directly hydrate the nodeTranslation and nodeVersion |
|
403 | $qb->select('node', 't', 'v') |
|
404 | ->innerJoin('node.nodeTranslations', 't') |
|
405 | ->leftJoin( |
|
406 | 't.publicNodeVersion', |
|
407 | 'v', |
|
408 | 'WITH', |
|
409 | 't.publicNodeVersion = v.id' |
|
410 | ) |
|
411 | ->where('node.deleted = 0') |
|
412 | ->andWhere('node.parent IS NULL'); |
|
413 | ||
414 | if ($lang) { |
|
415 | $qb->andWhere('t.lang = :lang') |
|
416 | ->setParameter('lang', $lang); |
|
417 | } |
|
418 | ||
419 | $qb->andWhere( |
|
420 | $qb->expr()->andX( |
|
421 | $qb->expr()->lte('node.lft', $node->getLeft()), |
|
422 | $qb->expr()->gte('node.rgt', $node->getRight()) |
|
423 | ) |
|
424 | ); |
|
425 | ||
426 | return $qb->getQuery()->getOneOrNullResult(); |
|
427 | } |
|
428 | ||
429 | /** |
|
430 | * @return Node[] |