Forráskód Böngészése

reduce duplicated code and use querybuilder

ksieren 2 éve
szülő
commit
fc601b0dc2

+ 22 - 45
Classes/Controller/BackendController.php

@@ -44,13 +44,15 @@ class BackendController extends ActionController
             ],
             'expiredlast30' => [
                 'controller' => 'Backend',
-                'action' => 'showLast30',
-                'label' => 'Beiträge, die in den letzten 30 Tagen ausgelaufen sind'
+                'action' => 'showLast',
+                'label' => 'Beiträge, die in den letzten 30 Tagen ausgelaufen sind',
+                'parameters' => ['daysPast' => 30]
             ],
             'expiredlast90' => [
                 'controller' => 'Backend',
-                'action' => 'showLast90',
-                'label' => 'Beiträge, die in den letzten 90 Tagen ausgelaufen sind'
+                'action' => 'showLast',
+                'label' => 'Beiträge, die in den letzten 90 Tagen ausgelaufen sind',
+                'parameters' => ['daysPast' => 90]
             ],
         ];
 
@@ -60,21 +62,28 @@ class BackendController extends ActionController
         $menu = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
         $menu->setIdentifier('PageManagerModuleMenu');
 
-        foreach ($menuItems as $menuItemConfig) {
+        foreach ($menuItems as $key => $menuItemConfig) {
             $isActive = false;
             if ($this->request->getControllerName() === $menuItemConfig['controller']) {
                 if ($this->request->getControllerActionName() === $menuItemConfig['action']) {
-                    $isActive = true;
+                    $queryParams = $this->request->getQueryParams();
+                    if (!isset($menuItemConfig['parameters']['daysPast']) ||
+                        (isset($queryParams['tx_pagemanager_tools_pagemanagerpgmgt']['daysPast']) &&
+                            $queryParams['tx_pagemanager_tools_pagemanagerpgmgt']['daysPast'] == $menuItemConfig['parameters']['daysPast'])) {
+                        $isActive = true;
+                        $activeMenuItem = $key; // store the key of the active menu item
+                    }
                 }
             }
-
             $menuItem = $menu->makeMenuItem()
                 ->setTitle($menuItemConfig['label'])
-                ->setHref($this->getHref($menuItemConfig['controller'], $menuItemConfig['action']))
+                ->setHref(
+                    $this->getHref($menuItemConfig['controller'], $menuItemConfig['action'], $menuItemConfig['parameters'] ?? []))
                 ->setActive($isActive);
             $menu->addMenuItem($menuItem);
         }
         $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
+        $view->assign('activeMenuItem', $activeMenuItem);
     }
 
     protected function translate($key, $arguments): string
@@ -123,10 +132,10 @@ class BackendController extends ActionController
         return $this->htmlResponse($this->moduleTemplate->renderContent());
     }
 
-    public function showLast30Action()
+    public function showLastAction(int $daysPast = null)
     {
         $this->utilities = GeneralUtility::makeInstance(Utilities::class);
-        $activePagesExpiredInlast30days = $this->activePageRepository->findExpiredRecordsInTheLast30OR90Days(30);
+        $activePagesExpiredInlast30days = $this->activePageRepository->findExpiredRecordsInTheLast30OR90Days($daysPast);
         $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
 
         $pageObjectArray = [];
@@ -148,36 +157,7 @@ class BackendController extends ActionController
 
         $this->buildPagination($pageObjectArray, $itemsperpage, $currentPage);
 
-        $this->moduleTemplate->setContent($this->view->render());
-        return $this->htmlResponse($this->moduleTemplate->renderContent());
-    }
-
-    public function showLast90Action()
-    {
-        $this->utilities = GeneralUtility::makeInstance(Utilities::class);
-        $activePagesExpiredInlast90days = $this->activePageRepository->findExpiredRecordsInTheLast30OR90Days(90);
-        $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
-
-        $pageObjectArray = [];
-
-        foreach ($activePagesExpiredInlast90days as $activePage) {
-            $pageObj = new ActivePage();
-            $pageObj->setUid($activePage['uid']);
-            $pageObj->setStarttime($activePage['starttime']);
-            $pageObj->setEndtime($activePage['endtime']);
-            $pageObj->setTitle($activePage['title']);
-            $pageObj->setRoof($activePage['roof']);
-            $pageObj->setCategory($this->utilities->createCategoryFromSlug($activePage['slug']));
-            $pageObj->setCreator($activePage['username']);
-            $pageObj->setFullName($activePage['realName']);
-
-            array_push($pageObjectArray, $pageObj);
-        }
-        $currentPage = $this->request->hasArgument('currentPage') ? $this->request->getArgument('currentPage') : 1;
-
-        $this->buildPagination($pageObjectArray, $itemsperpage, $currentPage);
-
-        $this->moduleTemplate->setContent($this->view->render());
+        $this->moduleTemplate->setContent($this->view->assign('days',$daysPast)->render());
         return $this->htmlResponse($this->moduleTemplate->renderContent());
     }
 
@@ -201,11 +181,8 @@ class BackendController extends ActionController
             case 'index':
                 $actionName = 'index';
                 break;
-            case 'showLast30':
-                $actionName = 'showLast30';
-                break;
-            case 'showLast90':
-                $actionName = 'showLast90';
+            case 'showLast':
+                $actionName = 'showLast';
                 break;
         }
 

+ 37 - 34
Classes/Domain/Repository/ActivePageRepository.php

@@ -57,39 +57,42 @@ class ActivePageRepository extends Repository
     return $result->fetchAllAssociative();
   }
 
-  
-
-  /**
-   * Queries the pages and be_users to get Records which expired in the last 30 days
-   * 
-   * @return QueryResult|array
-   */
-
-  public function findExpiredRecordsInTheLast30OR90Days(int $daysPasst)
-  {
-    $currentDate = new \DateTime("now");
-    $period = ($daysPasst == 30) ? 'P30D' : 'P90D';
-    
-    $timeperiod = $currentDate->sub(new \DateInterval($period));
-    $timestamp = date_format($timeperiod, 'U');
-
-    $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('pages');
-
-    $sql = sprintf(
-      'SELECT `p`.`uid`, `p`.`starttime`, `p`.`endtime`, `p`.`title`, `p`.`roof`, `p`.`slug`, `u`.`username`, `u`.`realName`
-       FROM `pages` `p` LEFT JOIN `be_users` `u` on `p`.`cruser_id` = `u`.`uid`
-       WHERE `p`.`starttime` > 0  
-       AND `p`.`red_status` = 22 
-       AND `p`.`deleted` = 0 
-       AND `p`.`hidden` = 1
-       AND (`p`.`endtime` BETWEEN 1 AND %d )
-       GROUP BY `p`.`slug`
-       ORDER BY `p`.`endtime` ASC', $timestamp);
-
-    $statement  = $connection->prepare($sql);
-    $result = $statement->executeQuery();
-
-    return $result->fetchAllAssociative();
-  }
+    public function findExpiredRecordsInTheLast30OR90Days(int $daysPast = null)
+    {
+        $currentDate = new \DateTime("now");
+        $timestamp = $currentDate->getTimestamp();
+        if ($daysPast){
+            $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
+            ->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()->eq('p.red_status', $queryBuilder->createNamedParameter(22, \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))
+            )
+            ->andWhere(
+                $queryBuilder->expr()->gte('p.endtime', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)),
+                $queryBuilder->expr()->lte('p.endtime', $queryBuilder->createNamedParameter($timestamp, \PDO::PARAM_INT))
+            )
+            ->groupBy('p.slug')
+            ->orderBy('p.endtime', 'ASC');
+
+        return $queryBuilder->execute()->fetchAllAssociative();
+    }
 
 }

+ 1 - 1
Resources/Private/Templates/Backend/ShowLast30.html → Resources/Private/Templates/Backend/ShowLast.html

@@ -5,7 +5,7 @@
 
 <f:section name="Content">
  
-    <h1>Liste Beiträge, die in den letzten 30 Tagen ausgelaufen sind</h1>
+    <h1>Liste Beiträge, die in den letzten {days} Tagen ausgelaufen sind</h1>
 
     <f:flashMessages />
     

+ 0 - 52
Resources/Private/Templates/Backend/ShowLast90.html

@@ -1,52 +0,0 @@
-{namespace be=TYPO3\CMS\Backend\ViewHelpers}
-{namespace pagemanager=Meramo\Pagemanager\ViewHelpers}
-
-<f:layout name="Default" />
-
-<f:section name="Content">
- 
-    <h1>Liste Beiträge, die in den letzten 90 Tagen ausgelaufen sind</h1>
-
-    <f:flashMessages />
-    
-    <table class="tx_pagemanager table table-striped table-hover">
-        <tr>
-          <th><f:translate key="pagemanager.starttime" /></th>
-          <th><f:translate key="pagemanager.endtime" /></th>
-          <th><f:translate key="pagemanager.category" /></th>
-          <th><f:translate key="pagemanager.title" /></th>
-          <th><f:translate key="pagemanager.roof" /></th>
-          <th><f:translate key="pagemanager.backend-user" /></th>
-          <th><f:translate key="pagemanager.fullname" /></th>
-          <th><f:translate key="pagemanager.action" /></th>
-        </tr>
-        <f:if condition="{paginator.paginatedItems}">
-          <f:then>
-            <f:for each="{paginator.paginatedItems}" as="activePage" iteration="iterator">
-              <tr>
-                  <td>
-                    <f:format.date format="d.m.Y">{activePage.starttime}</f:format.date>
-                  </td>
-                  <td class="{pagemanager:cssBackground(endtime: '{activePage.endtime}')}">
-                    <f:format.date format="d.m.Y">{activePage.endtime}</f:format.date>
-                  </td>
-                  <td>{activePage.category}</td>
-                  <td>{activePage.title}</td>
-                  <td>{activePage.roof}</td>
-                  <td>{activePage.creator}</td>
-                  <td>{activePage.fullName}</td>
-                  <td>
-                    <be:link.editRecord uid="{activePage.uid}" table="pages" returnUrl="">
-                    <core:icon identifier="actions-document-open" />
-                    </be:link.editRecord>
-                  </td>
-              </tr>
-            </f:for>
-          </f:then>
-          <f:else>Kein Daten Gefunden</f:else>
-        </f:if>
-    </table>
-    <!-- Render your paging -->
-    <f:render partial="Paging.html" arguments="{totalrecords: totalRecords, cpage: cPage, paging: paging, pages: pages, paginator: paginator, actionName: actionName}" />
-
-</f:section>

+ 1 - 1
composer.json

@@ -5,7 +5,7 @@
   "require": {
     "php": ">=7.4.0",
     "ext-pdo": "*",
-    "typo3/cms-core": "^10.4 || ^11.5"
+    "typo3/cms-core": "^10.4 || ^11.5 || ^12.4"
   },
   "type": "typo3-cms-extension",
   "version": "dev-local",

+ 1 - 1
ext_emconf.php

@@ -11,7 +11,7 @@ $EM_CONF[$_EXTKEY] = [
     'version' => '1.0.0',
     'constraints' => [
         'depends' => [
-            'typo3' => '10.4.0-11.5.99',
+            'typo3' => '10.4.0-12.4.99',
         ],
         'conflicts' => [],
         'suggests' => [],

+ 1 - 1
ext_tables.php

@@ -15,7 +15,7 @@ call_user_func(
       'pgmgt',
       'bottom',
       [
-        \Meramo\Pagemanager\Controller\BackendController::class => 'index,showLast30,showLast90',
+        \Meramo\Pagemanager\Controller\BackendController::class => 'index,showLast',
 
       ],
       [