Pārlūkot izejas kodu

Merge branch 'develop' into staging

* develop:
  add a query to find them all by an API get request
  prevent empty values
  add some basic queries and orderings
ksieren 2 gadi atpakaļ
vecāks
revīzija
575cc249a1

+ 11 - 5
Classes/Controller/CategoryController.php

@@ -14,10 +14,16 @@ class CategoryController extends ActionController
     }
 
     public function createAction(string $title) {
-        $category = new Category();
-        $category->setTitle($title);
-        $this->categoryRepository->add($category);
-        $this->objectManager->get(PersistenceManager::class)->persistAll();
-        return $category->getUid();
+        $category = $this->categoryRepository->findByTitle($title);
+        if(!$category && $title !== ''){
+            $category = new Category();
+            $category->setTitle($title);
+            $this->categoryRepository->add($category);
+            $this->objectManager->get(PersistenceManager::class)->persistAll();
+            $categoryUid = $category->getUid();
+        } else {
+            $categoryUid =$category['uid'];
+        }
+        return $categoryUid;
     }
 }

+ 3 - 3
Classes/Controller/DashboardController.php

@@ -44,9 +44,9 @@ class DashboardController extends ActionController
     public function indexAction(): void
     {
         $terms = $this->termRepository->findAllOrderedByTerm();
-        $categories = $this->categoryRepository->findAll();
-        $types = $this->typeRepository->findAll();
-        $urls = $this->urlRepository->findAll();
+        $categories = $this->categoryRepository->findAllOrderedByTitle();
+        $types = $this->typeRepository->findAllOrderedByTitle();
+        $urls = $this->urlRepository->findAllOrderedByTitle();
         $this->view->assignMultiple([
             'terms' => $terms,
             'categories' => $categories,

+ 8 - 6
Classes/Controller/TermController.php

@@ -15,12 +15,14 @@ class TermController extends ActionController
 
     public function createAction($terms, $categoryObj, $typeObj, $urlObj): void {
         foreach ($terms as $term) {
-            $termObj = new Term();
-            $termObj->setTerm($term);
-            $termObj->setCategory($categoryObj);
-            $termObj->setType($typeObj);
-            $termObj->setUrl($urlObj);
-            $this->termRepository->add($termObj);
+            if($term !== '') {
+                $termObj = new Term();
+                $termObj->setTerm($term);
+                $termObj->setCategory($categoryObj);
+                $termObj->setType($typeObj);
+                $termObj->setUrl($urlObj);
+                $this->termRepository->add($termObj);
+            }
         }
     }
 

+ 11 - 5
Classes/Controller/TypeController.php

@@ -14,10 +14,16 @@ class TypeController extends ActionController
     }
 
     public function createAction(string $title) {
-        $type = new Type();
-        $type->setTitle($title);
-        $this->typeRepository->add($type);
-        $this->objectManager->get(PersistenceManager::class)->persistAll();
-        return $type->getUid();
+        $type = $this->typeRepository->findByTitle($title);
+        if(!$type && $title !== ''){
+            $type = new Type();
+            $type->setTitle($title);
+            $this->typeRepository->add($type);
+            $this->objectManager->get(PersistenceManager::class)->persistAll();
+            $typeUid = $type->getUid();
+        } else {
+            $typeUid = $type['uid'];
+        }
+        return $typeUid;
     }
 }

+ 12 - 5
Classes/Controller/UrlController.php

@@ -14,10 +14,17 @@ class UrlController extends ActionController
     }
 
     public function createAction(string $title) {
-        $url = new Url();
-        $url->setTitle($title);
-        $this->urlRepository->add($url);
-        $this->objectManager->get(PersistenceManager::class)->persistAll();
-        return $url->getUid();
+        $url = $this->urlRepository->findByTitle($title);
+
+        if(!$url && $title !== ''){
+            $url = new Url();
+            $url->setTitle($title);
+            $this->urlRepository->add($url);
+            $this->objectManager->get(PersistenceManager::class)->persistAll();
+            $urlUid = $url->getUid();
+        } else {
+            $urlUid = $url['uid'];
+        }
+        return $urlUid;
     }
 }

+ 38 - 1
Classes/Domain/Repository/CategoryRepository.php

@@ -2,8 +2,45 @@
 
 namespace Meramo\Begriffmgt\Domain\Repository;
 
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Database\Query\QueryBuilder;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Persistence\QueryInterface;
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
 class CategoryRepository extends Repository {
-    // Add any custom methods or queries for the Category repository if needed.
+
+    /**
+     * Find one record by 'title'.
+     *
+     * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
+     */
+    public function findByTitle($title)
+    {
+        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_begriffmgt_domain_model_category');
+        $query = $queryBuilder
+            ->select('*')
+            ->from('tx_begriffmgt_domain_model_category')
+            ->where(
+                $queryBuilder->expr()->eq('title', $queryBuilder->createNamedParameter($title, \PDO::PARAM_STR))
+            )
+            ->setMaxResults(1)
+            ->execute();
+
+        return $result = $query->fetch();
+    }
+
+    /**
+     * Find all records and order them by 'title' in ascending order.
+     *
+     * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
+     */
+    public function findAllOrderedByTitle()
+    {
+        $query = $this->createQuery();
+        $query->setOrderings(['title' => QueryInterface::ORDER_ASCENDING]);
+
+        return $query->execute();
+    }
+
 }

+ 51 - 1
Classes/Domain/Repository/TermRepository.php

@@ -4,9 +4,10 @@
 
   namespace Meramo\Begriffmgt\Domain\Repository;
 
+  use TYPO3\CMS\Core\Database\ConnectionPool;
+  use TYPO3\CMS\Core\Utility\GeneralUtility;
   use TYPO3\CMS\Extbase\Persistence\QueryInterface;
   use TYPO3\CMS\Extbase\Persistence\Repository;
-  use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings;
 
   class TermRepository extends Repository
   {
@@ -22,4 +23,53 @@
 
           return $query->execute();
       }
+
+      public function findAllTermsByTypeOrCategoryOrSimplyAll($typeTitle= null, $categoryTitle = null) {
+          $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_begriffmgt_domain_model_term');
+          $queryBuilder = $connection->createQueryBuilder();
+          $queryBuilder
+              ->select('term','type.title as type_title', 'category.title as category_title','url.title as url_title')
+              ->from('tx_begriffmgt_domain_model_term', 't')
+              ->leftJoin('t', 'tx_begriffmgt_domain_model_type', 'type', 't.type = type.uid')
+              ->leftJoin('t', 'tx_begriffmgt_domain_model_category', 'category', 't.category = category.uid')
+              ->leftJoin('t', 'tx_begriffmgt_domain_model_url', 'url', 't.url = url.uid');
+         if($typeTitle && $categoryTitle){
+             $queryBuilder
+                 ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)))
+                 ->andWhere($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
+         }
+          if(!$typeTitle && $categoryTitle){
+              $queryBuilder
+                  ->where($queryBuilder->expr()->eq('category.title', $queryBuilder->createNamedParameter($categoryTitle)));
+          }
+          if($typeTitle && !$categoryTitle){
+              $queryBuilder
+                  ->where($queryBuilder->expr()->eq('type.title', $queryBuilder->createNamedParameter($typeTitle)));
+          }
+          $results = $queryBuilder->execute();
+          if(!$typeTitle && !$categoryTitle){
+              $terms = $this->buildTermsEachToArray($results);
+          } else {
+              $terms = $this->buildTermsAggregatedToArray($results);
+          }
+          return $terms;
+      }
+
+      public function buildTermsEachToArray($results){
+          $terms = array();
+          foreach ($results as $res){
+              array_push($terms, ['type'=>$res['type_title'],'category'=>$res['category_title'],'term'=>$res['term'], 'url'=>$res['url_title']]);
+          }
+          return $terms;
+      }
+
+      public function buildTermsAggregatedToArray($results){
+          $terms = [];
+          $response = [];
+          foreach ($results as $res){
+              array_push($terms, $res['term']);
+          }
+          array_push($response, ['type'=>$res['type_title'],'category'=>$res['category_title'], 'terms'=>$terms, 'url'=>$res['url_title']]);
+          return $response;
+      }
   }

+ 38 - 1
Classes/Domain/Repository/TypeRepository.php

@@ -2,9 +2,46 @@
 
 namespace Meramo\Begriffmgt\Domain\Repository;
 
+use Meramo\Begriffmgt\Domain\Model\Type;
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
+use TYPO3\CMS\Extbase\Persistence\QueryInterface;
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
 class TypeRepository extends Repository
 {
-    // Add any custom methods or queries for the Type repository if needed.
+    /**
+     * Find one record by 'title'.
+     *
+     * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
+     */
+    public function findByTitle($title)
+    {
+        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_begriffmgt_domain_model_type');
+        $query = $queryBuilder
+            ->select('*')
+            ->from('tx_begriffmgt_domain_model_type')
+            ->where(
+                $queryBuilder->expr()->eq('title', $queryBuilder->createNamedParameter($title, \PDO::PARAM_STR))
+            )
+            ->setMaxResults(1)
+            ->execute();
+
+        return $result = $query->fetch();
+    }
+
+    /**
+     * Find all records and order them by 'title' in ascending order.
+     *
+     * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
+     */
+    public function findAllOrderedByTitle()
+    {
+        $query = $this->createQuery();
+        $query->setOrderings(['title' => QueryInterface::ORDER_ASCENDING]);
+
+        return $query->execute();
+    }
+
 }

+ 36 - 1
Classes/Domain/Repository/UrlRepository.php

@@ -2,8 +2,43 @@
 
 namespace Meramo\Begriffmgt\Domain\Repository;
 
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Persistence\QueryInterface;
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
 class UrlRepository extends Repository {
-    // Add any custom methods or queries for the Url repository if needed.
+    /**
+     * Find one record by 'title'.
+     *
+     * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
+     */
+    public function findByTitle($title)
+    {
+        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_begriffmgt_domain_model_url');
+        $query = $queryBuilder
+            ->select('*')
+            ->from('tx_begriffmgt_domain_model_url')
+            ->where(
+                $queryBuilder->expr()->eq('title', $queryBuilder->createNamedParameter($title, \PDO::PARAM_STR))
+            )
+            ->setMaxResults(1)
+            ->execute();
+
+        return $result = $query->fetch();
+    }
+
+    /**
+     * Find all records and order them by 'title' in ascending order.
+     *
+     * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array
+     */
+    public function findAllOrderedByTitle()
+    {
+        $query = $this->createQuery();
+        $query->setOrderings(['title' => QueryInterface::ORDER_ASCENDING]);
+
+        return $query->execute();
+    }
+
 }