Bladeren bron

add some basic queries and orderings

ksieren 2 jaren geleden
bovenliggende
commit
685bc91349

+ 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){
+            $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,

+ 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 && $type !== ''){
+            $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 && $url !== ''){
+            $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();
+    }
+
 }

+ 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();
+    }
+
 }