Quellcode durchsuchen

reduce queries to one

ksieren vor 2 Jahren
Ursprung
Commit
059677f2a5

+ 3 - 3
Classes/Controller/BackendController.php

@@ -106,7 +106,7 @@ class BackendController extends ActionController
     public function indexAction(): ResponseInterface
     {
         $this->utilities = GeneralUtility::makeInstance(Utilities::class);
-        $activePages = $this->activePageRepository->findActivePagesAndPageCreatetors();
+        $activePages = $this->activePageRepository->findPages(12, 0);
         $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
 
         $pageObjectArray = [];
@@ -135,12 +135,12 @@ class BackendController extends ActionController
     public function showLastAction(int $daysPast = 0)
     {
         $this->utilities = GeneralUtility::makeInstance(Utilities::class);
-        $activePagesExpiredInlast30days = $this->activePageRepository->findExpiredRecordsInTheLast30OR90Days($daysPast);
+        $expiredRecords = $this->activePageRepository->findPages(22, 1, $daysPast, 'DESC');
         $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
 
         $pageObjectArray = [];
 
-        foreach ($activePagesExpiredInlast30days as $activePage) {
+        foreach ($expiredRecords as $activePage) {
             $pageObj = new ActivePage();
             $pageObj->setUid($activePage['uid']);
             $pageObj->setStarttime($activePage['starttime']);

+ 19 - 45
Classes/Domain/Repository/ActivePageRepository.php

@@ -28,47 +28,12 @@ class ActivePageRepository extends Repository
    * 
    * @return QueryResult|array
    */
-  public  function findActivePagesAndPageCreatetors()
-  {
-    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
-    $queryBuilder->getRestrictions()->removeAll();
-
-    $statement = $queryBuilder
-      ->select('p.uid', 'p.starttime', 'p.endtime', 'p.title', 'p.roof', 'p.slug', 'u.username', 'u.realName')
-      ->from('pages', 'p')
-      ->leftJoin(
-        'p',
-        'be_users',
-        'u',
-        $queryBuilder->expr()->eq('p.cruser_id', $queryBuilder->quoteIdentifier('u.uid'))
-      )
-      ->where(
-        $queryBuilder->expr()->gt('p.starttime', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-        $queryBuilder->expr()->gt('p.endtime', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-        $queryBuilder->expr()->eq('p.red_status', $queryBuilder->createNamedParameter(12, \PDO::PARAM_INT)),
-        $queryBuilder->expr()->eq('p.deleted', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-        $queryBuilder->expr()->eq('p.hidden', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT))
-      )
-      ->groupBy('p.slug')
-      ->orderBy('p.endtime', 'ASC');
-
-    $result = $statement->execute();
-
-    return $result->fetchAllAssociative();
-  }
-
-    public function findExpiredRecordsInTheLast30OR90Days(int $daysPast = 0)
+    public function findPages(int $redStatus, int $hiddenStatus, int $daysPast = 0, string $orderBy = 'ASC')
     {
-        $currentDate = new \DateTime("now");
-        $timestampToday = $currentDate->getTimestamp();
-        $period = ($daysPast == 30) ? 'P30D' : 'P90D';
-        $timeperiod = $currentDate->sub(new \DateInterval($period));
-        $timestamp = $timeperiod->getTimestamp();
-
         $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
         $queryBuilder->getRestrictions()->removeAll(); // Remove all restrictions
 
-        $queryBuilder
+        $query = $queryBuilder
             ->select('p.uid', 'p.starttime', 'p.endtime', 'p.title', 'p.roof', 'p.slug', 'u.username', 'u.realName')
             ->from('pages', 'p')
             ->leftJoin(
@@ -79,17 +44,26 @@ class ActivePageRepository extends Repository
             )
             ->where(
                 $queryBuilder->expr()->gt('p.starttime', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-                $queryBuilder->expr()->eq('p.red_status', $queryBuilder->createNamedParameter(22, \PDO::PARAM_INT)),
+                $queryBuilder->expr()->gt('p.endtime', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
+                $queryBuilder->expr()->eq('p.red_status', $queryBuilder->createNamedParameter($redStatus, \PDO::PARAM_INT)),
                 $queryBuilder->expr()->eq('p.deleted', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-                $queryBuilder->expr()->eq('p.hidden', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
+                $queryBuilder->expr()->eq('p.hidden', $queryBuilder->createNamedParameter($hiddenStatus, \PDO::PARAM_INT))
             )
-            ->andWhere(
+            ->groupBy('p.slug')
+            ->orderBy('p.endtime', $orderBy);
+
+        if ($daysPast !== 0) {
+            $currentDate = new \DateTime("now");
+            $timestampToday = $currentDate->getTimestamp();
+            $period = ($daysPast == 30) ? 'P30D' : 'P90D';
+            $timeperiod = $currentDate->sub(new \DateInterval($period));
+            $timestamp = $timeperiod->getTimestamp();
+
+            $query->andWhere(
                 $queryBuilder->expr()->gte('p.endtime', $queryBuilder->createNamedParameter($timestamp, \PDO::PARAM_INT)),
                 $queryBuilder->expr()->lte('p.endtime', $queryBuilder->createNamedParameter($timestampToday, \PDO::PARAM_INT))
-            )
-            ->groupBy('p.slug')
-            ->orderBy('p.endtime', 'ASC');
-        return $queryBuilder->execute()->fetchAllAssociative();
+            );
+        }
+        return $query->execute()->fetchAllAssociative();
     }
-
 }