7 İşlemeler c79fb534af ... f0c1b70a3b

Yazar SHA1 Mesaj Tarih
  jabongwa f0c1b70a3b add README.md 2 yıl önce
  ksieren 2f28e4c30b assign activeMenuItem to view only if it is defined 2 yıl önce
  ksieren 699cac0492 reduce controller 2 yıl önce
  ksieren 059677f2a5 reduce queries to one 2 yıl önce
  ksieren f2c557516c fix typos 2 yıl önce
  ksieren 6c475549f2 fix some minor pagination issues 2 yıl önce
  ksieren fc601b0dc2 reduce duplicated code and use querybuilder 2 yıl önce

+ 43 - 76
Classes/Controller/BackendController.php

@@ -40,17 +40,20 @@ class BackendController extends ActionController
             'index' => [
                 'controller' => 'Backend',
                 'action' => 'index',
-                'label' => 'Heute oder demnächst auslaufende Beiträge'
+                'label' => 'Heute oder demnächst auslaufende Beiträge',
+                'parameters' => ['daysPast' => 0]
             ],
             '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 +63,29 @@ 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
+                        $view->assign('activeMenuItem', $activeMenuItem);
+                    }
                 }
             }
-
             $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
@@ -96,80 +107,34 @@ class BackendController extends ActionController
 
     public function indexAction(): ResponseInterface
     {
-        $this->utilities = GeneralUtility::makeInstance(Utilities::class);
-        $activePages = $this->activePageRepository->findActivePagesAndPageCreatetors();
-        $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
-
-        $pageObjectArray = [];
-
-        foreach ($activePages 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());
-        return $this->htmlResponse($this->moduleTemplate->renderContent());
+        $response = $this->displayPages(12, 0);
+        return $response;
     }
 
-    public function showLast30Action()
+    public function showLastAction(int $daysPast = 0)
     {
-        $this->utilities = GeneralUtility::makeInstance(Utilities::class);
-        $activePagesExpiredInlast30days = $this->activePageRepository->findExpiredRecordsInTheLast30OR90Days(30);
-        $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
-
-        $pageObjectArray = [];
-
-        foreach ($activePagesExpiredInlast30days 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());
-        return $this->htmlResponse($this->moduleTemplate->renderContent());
+        $response = $this->displayPages(22, 1, $daysPast, 'DESC', true);
+        return $response;
     }
 
-    public function showLast90Action()
+    public function displayPages(int $redStatus, int $hiddenStatus, int $daysPast = 0, string $orderBy = 'ASC', bool $isExpired = false): ResponseInterface
     {
         $this->utilities = GeneralUtility::makeInstance(Utilities::class);
-        $activePagesExpiredInlast90days = $this->activePageRepository->findExpiredRecordsInTheLast30OR90Days(90);
+        $pages = $this->activePageRepository->findPages($redStatus, $hiddenStatus, $daysPast, $orderBy);
         $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
 
         $pageObjectArray = [];
 
-        foreach ($activePagesExpiredInlast90days as $activePage) {
+        foreach ($pages as $page) {
             $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']);
+            $pageObj->setUid($page['uid']);
+            $pageObj->setStarttime($page['starttime']);
+            $pageObj->setEndtime($page['endtime']);
+            $pageObj->setTitle($page['title']);
+            $pageObj->setRoof($page['roof']);
+            $pageObj->setCategory($this->utilities->createCategoryFromSlug($page['slug']));
+            $pageObj->setCreator($page['username']);
+            $pageObj->setFullName($page['realName']);
 
             array_push($pageObjectArray, $pageObj);
         }
@@ -177,10 +142,15 @@ class BackendController extends ActionController
 
         $this->buildPagination($pageObjectArray, $itemsperpage, $currentPage);
 
+        if($isExpired) {
+            $this->view->assign('daysPast',$daysPast);
+        }
+
         $this->moduleTemplate->setContent($this->view->render());
         return $this->htmlResponse($this->moduleTemplate->renderContent());
     }
 
+
     /**
      * @param array $activePages
      * @param int $currentPage
@@ -201,11 +171,8 @@ class BackendController extends ActionController
             case 'index':
                 $actionName = 'index';
                 break;
-            case 'showLast30':
-                $actionName = 'showLast30';
-                break;
-            case 'showLast90':
-                $actionName = 'showLast90';
+            case 'showLast':
+                $actionName = 'showLast';
                 break;
         }
 

+ 38 - 64
Classes/Domain/Repository/ActivePageRepository.php

@@ -28,68 +28,42 @@ 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();
-  }
-
-  
-
-  /**
-   * 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 findPages(int $redStatus, int $hiddenStatus, int $daysPast = 0, string $orderBy = 'ASC')
+    {
+        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+        $queryBuilder->getRestrictions()->removeAll(); // Remove all restrictions
+
+        $query = $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($redStatus, \PDO::PARAM_INT)),
+                $queryBuilder->expr()->eq('p.deleted', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
+                $queryBuilder->expr()->eq('p.hidden', $queryBuilder->createNamedParameter($hiddenStatus, \PDO::PARAM_INT))
+            )
+            ->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))
+            );
+        }
+        return $query->execute()->fetchAllAssociative();
+    }
 }

+ 0 - 6
Classes/ViewHelpers/CssBackgroundViewHelper.php

@@ -22,8 +22,6 @@ class CssBackgroundViewHelper extends AbstractViewHelper
         $endtime = intval($this->arguments['endtime']);
 
         $color = $this->getBackgroundColor($endtime);
-        //$data = ['$endtime' => $endtime, '$color' => $color];
-        //DebuggerUtility::var_dump($data);
 
         return $color;
     }
@@ -31,13 +29,9 @@ class CssBackgroundViewHelper extends AbstractViewHelper
     protected function getBackgroundColor($endtime)
     {
          $between1And7 = strtotime('7 days');
-        // echo '$betwwen1And7: '.$between1And7.'<br>';
          $between8And14 = strtotime('14 days');
-        // echo '$betwwen8And14: '.$between8And14.'<br>';
          $between15And30 = strtotime('30 days');
-        // echo '$between15And30: '.$between15And30.'<br>';
         $between31And42 = strtotime('42 days');
-        // echo '$between15And30: '.$between31And42.'<br>';
 
         $color = '';
         if($endtime <= $between1And7) {

+ 58 - 0
README.md

@@ -0,0 +1,58 @@
+# Extension Name: meramo/pagemanager
+
+A TYPO3 page management extension which shows information about the status of all pages in the TYPO3 CMS to the system administrator.
+The information shown is the following:
+    - Start Date: the date the page went Online.
+    - End Date:  the date the page expired.
+    - Rubrik (Kategorie): The Category to which the page belongs.
+    - Title: The title of the page.
+    - Dach: Main topic of the page.
+    - Redacteur: page creator username.
+    - Name: creator name.
+    - Aktion: Edit Link for the page.
+
+## Table of Contents
+
+- [Installation](#installation)
+- [Usage](#usage)
+- [Configuration](#configuration)
+- [Contribution](#contribution)
+- [License](#license)
+
+## Installation
+
+Add the following to the "repositories" block in the  TYPO3 CMS composer.json file.
+    {
+        "type": "vcs",
+        "url": "https://git2.meramo.org/typo3-Extensions/pagemanager.git"
+    }
+The repository section will now look like this;
+"repositories": [
+    ....
+    ....
+    {
+    "type": "vcs",
+    "url": "https://git2.meramo.org/typo3-Extensions/pagemanager.git"
+    }
+]
+
+Save the file and run "composer require meramo/pagemanager" on the command line.
+
+## Usage
+After installation clear system caches. The Module Icon appears under the 'Tools Module' in Backend as a sub Module. 
+The Entry point in the Typo3 Function menu list all active pages in CMS. Changing the Functions Menu option shows either pages which expired in the last 30 or 90 days from the current date.
+
+## Configuration
+
+## Contribution
+
+
+## License
+GPL-3.0
+
+## Credits
+Credit to the whole Meramo Digital Division team, for the constructive criticism and changes to create a more robust extension.
+
+## Authors
+Meramo Digital Division Team.
+

+ 5 - 5
Resources/Private/Partials/Paging.html

@@ -8,13 +8,13 @@
     <f:if condition="{paging.previousPageNumber} && {paging.previousPageNumber} >= {paging.firstPageNumber}">
       <f:then>
         <li class="waves-effect list-group">
-          <a href="{f:uri.action(action: actionName, arguments:{currentPage: 1})}"
+          <a href="{f:uri.action(action: actionName, arguments:{currentPage: 1, daysPast: daysPast})}"
             title="{f:translate(key:'pagemanager.paging.first')}">
             <i class="material-icons">first_page</i>
           </a>
         </li>
         <li class="waves-effect list-group">
-          <a href="{f:uri.action(action: actionName, arguments:{currentPage: paging.previousPageNumber})}"
+          <a href="{f:uri.action(action: actionName, arguments:{currentPage: paging.previousPageNumber, daysPast: daysPast})}"
             title="{f:translate(key:'pagemanager.paging.prevoius')}">
             <i class="material-icons">chevron_left</i>
           </a>
@@ -33,20 +33,20 @@
     <li><span class="pageNumbers">Seite {paginator.currentPageNumber} von {paging.lastPageNumber} |</span></li>
     <f:for each="{pages}" as="page">
       <li class="{f:if(condition: '{page} == {paginator.currentPageNumber}', then:'active', else: 'waves-effect')}">
-        <a class="hide" href="{f:uri.action(action: actionName, arguments:{currentPage: page})}">{page}</a>
+        <a class="hide" href="{f:uri.action(action: actionName, arguments:{currentPage: page, daysPast: daysPast})}">{page}</a>
       </li>
     </f:for>
 
     <f:if condition="{paging.nextPageNumber} && {paging.nextPageNumber} <= {paging.lastPageNumber}">
       <f:then>
         <li class="waves-effect list-group">
-          <a href="{f:uri.action(action: actionName, arguments:{currentPage: paging.nextPageNumber})}"
+          <a href="{f:uri.action(action: actionName, arguments:{currentPage: paging.nextPageNumber, daysPast: daysPast})}"
             title="{f:translate(key:'pagemanager.paging.next')}">
             <i class="material-icons">chevron_right</i>
           </a>
         </li>
         <li class="waves-effect list-group">
-          <a href="{f:uri.action(action: actionName, arguments:{currentPage: paging.lastPageNumber})}"
+          <a href="{f:uri.action(action: actionName, arguments:{currentPage: paging.lastPageNumber, daysPast: daysPast})}"
           title="{f:translate(key:'pagemanager.paging.last')}">
             <i class="material-icons">last_page</i>
           </a>

+ 1 - 1
Resources/Private/Templates/Backend/Index.html

@@ -8,7 +8,7 @@
    <f:layout name="Default" />
 
    <f:section name="Content">
-    <h1>Liste Denächst auslaufende Beitrage</h1>
+    <h1>Liste demächst auslaufender Beiträge</h1>
 
     <f:flashMessages />
 

+ 2 - 3
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 der Beiträge, die in den letzten {daysPast} Tagen ausgelaufen sind</h1>
 
     <f:flashMessages />
     
@@ -46,6 +46,5 @@
           <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:render partial="Paging.html" arguments="{totalrecords: totalRecords, cpage: cPage, paging: paging, pages: pages, paginator: paginator, actionName: actionName, daysPast: daysPast}" />
 </f:section>

+ 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',
 
       ],
       [