TermRepository.php 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 one record by 'title'.
  12. *
  13. * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
  14. */
  15. public function findByTitle($term)
  16. {
  17. $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_begriffmgt_domain_model_term');
  18. return $query = $queryBuilder
  19. ->select('*')
  20. ->from('tx_begriffmgt_domain_model_term')
  21. ->where(
  22. $queryBuilder->expr()->eq('term', $queryBuilder->createNamedParameter($term, \PDO::PARAM_STR))
  23. )
  24. ->setMaxResults(1)
  25. ->execute()
  26. ->fetch();
  27. }
  28. /**
  29. * Find all records and order them by 'term' in ascending order.
  30. *
  31. * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
  32. */
  33. public function findAllOrderedByTerm()
  34. {
  35. $query = $this->createQuery();
  36. $query->setOrderings(['term' => QueryInterface::ORDER_ASCENDING]);
  37. return $query->execute();
  38. }
  39. public function findAllTermsByTypeOrCategoryOrSimplyAll($typeTitle= null, $categoryTitle = null) {
  40. $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_begriffmgt_domain_model_term');
  41. $queryBuilder = $connection->createQueryBuilder();
  42. $queryBuilder
  43. ->select('term','type.title as type_title', 'category.title as category_title','url.title as url_title')
  44. ->from('tx_begriffmgt_domain_model_term', 't')
  45. ->leftJoin('t', 'tx_begriffmgt_domain_model_type', 'type', 't.type = type.uid')
  46. ->leftJoin('t', 'tx_begriffmgt_domain_model_category', 'category', 't.category = category.uid')
  47. ->leftJoin('t', 'tx_begriffmgt_domain_model_url', 'url', 't.url = url.uid');
  48. if($typeTitle && $categoryTitle){
  49. $queryBuilder
  50. ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)))
  51. ->andWhere($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
  52. }
  53. if(!$typeTitle && $categoryTitle){
  54. $queryBuilder
  55. ->where($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
  56. }
  57. if($typeTitle && !$categoryTitle){
  58. $queryBuilder
  59. ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)));
  60. }
  61. $results = $queryBuilder->execute();
  62. if(!$typeTitle && !$categoryTitle){
  63. $terms = $this->buildTermsEachToArray($results);
  64. } else {
  65. $terms = $this->buildTermsAggregatedToArray($results);
  66. }
  67. return $terms;
  68. }
  69. public function buildTermsEachToArray($results){
  70. $terms = array();
  71. foreach ($results as $res){
  72. array_push($terms, ['type'=>$res['type_title'],'category'=>$res['category_title'],'term'=>$res['term'], 'url'=>$res['url_title']]);
  73. }
  74. return $terms;
  75. }
  76. public function buildTermsAggregatedToArray($results){
  77. $terms = [];
  78. $response = [];
  79. foreach ($results as $res){
  80. array_push($terms, $res['term']);
  81. }
  82. array_push($response, ['type'=>$res['type_title'],'category'=>$res['category_title'], 'terms'=>$terms, 'url'=>$res['url_title']]);
  83. return $response;
  84. }
  85. }