TermRepository.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. declare(strict_types=1);
  3. namespace Meramo\Begriffmgt\Domain\Repository;
  4. use TYPO3\CMS\Core\Database\ConnectionPool;
  5. use TYPO3\CMS\Core\Utility\GeneralUtility;
  6. use TYPO3\CMS\Extbase\Persistence\QueryInterface;
  7. use TYPO3\CMS\Extbase\Persistence\Repository;
  8. class TermRepository extends Repository
  9. {
  10. /**
  11. * Find all records and order them by 'term' in ascending order.
  12. *
  13. * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
  14. */
  15. public function findAllOrderedByTerm()
  16. {
  17. $query = $this->createQuery();
  18. $query->setOrderings(['term' => QueryInterface::ORDER_ASCENDING]);
  19. return $query->execute();
  20. }
  21. public function findAllTermsByTypeOrCategoryOrSimplyAll($typeTitle= null, $categoryTitle = null) {
  22. $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_begriffmgt_domain_model_term');
  23. $queryBuilder = $connection->createQueryBuilder();
  24. $queryBuilder
  25. ->select('term','type.title as type_title', 'category.title as category_title','url.title as url_title')
  26. ->from('tx_begriffmgt_domain_model_term', 't')
  27. ->leftJoin('t', 'tx_begriffmgt_domain_model_type', 'type', 't.type = type.uid')
  28. ->leftJoin('t', 'tx_begriffmgt_domain_model_category', 'category', 't.category = category.uid')
  29. ->leftJoin('t', 'tx_begriffmgt_domain_model_url', 'url', 't.url = url.uid');
  30. if($typeTitle && $categoryTitle){
  31. $queryBuilder
  32. ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)))
  33. ->andWhere($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
  34. }
  35. if(!$typeTitle && $categoryTitle){
  36. $queryBuilder
  37. ->where($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
  38. }
  39. if($typeTitle && !$categoryTitle){
  40. $queryBuilder
  41. ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)));
  42. }
  43. $results = $queryBuilder->execute();
  44. if(!$typeTitle && !$categoryTitle){
  45. $terms = $this->buildTermsEachToArray($results);
  46. } else {
  47. $terms = $this->buildTermsAggregatedToArray($results);
  48. }
  49. return $terms;
  50. }
  51. public function buildTermsEachToArray($results){
  52. $terms = array();
  53. foreach ($results as $res){
  54. array_push($terms, ['type'=>$res['type_title'],'category'=>$res['category_title'],'term'=>$res['term'], 'url'=>$res['url_title']]);
  55. }
  56. return $terms;
  57. }
  58. public function buildTermsAggregatedToArray($results){
  59. $terms = [];
  60. $response = [];
  61. foreach ($results as $res){
  62. array_push($terms, $res['term']);
  63. }
  64. array_push($response, ['type'=>$res['type_title'],'category'=>$res['category_title'], 'terms'=>$terms, 'url'=>$res['url_title']]);
  65. return $response;
  66. }
  67. }