10 Commits ee3e606fc9 ... bc8af5d89a

Autor SHA1 Mensagem Data
  ksieren bc8af5d89a update readme há 2 anos atrás
  jabongwa f0c1b70a3b add README.md há 2 anos atrás
  ksieren 2f28e4c30b assign activeMenuItem to view only if it is defined há 2 anos atrás
  ksieren 699cac0492 reduce controller há 2 anos atrás
  ksieren 059677f2a5 reduce queries to one há 2 anos atrás
  ksieren f2c557516c fix typos há 2 anos atrás
  ksieren 6c475549f2 fix some minor pagination issues há 2 anos atrás
  ksieren fc601b0dc2 reduce duplicated code and use querybuilder há 2 anos atrás
  ksieren c79fb534af repair the repair há 2 anos atrás
  ksieren 71a1e316d1 some changes of table fields há 2 anos atrás

+ 162 - 195
Classes/Controller/BackendController.php

@@ -15,210 +15,177 @@ use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
 use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
 use TYPO3\CMS\Core\Page\PageRenderer;
 use TYPO3\CMS\Core\Page\PageRenderer;
 use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
 use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
-use Meramo\Pagemanager\Utils\Gedoens;
+use Meramo\Pagemanager\Utils\Utilities;
 
 
 class BackendController extends ActionController
 class BackendController extends ActionController
 {
 {
-  protected ModuleTemplateFactory $moduleTemplateFactory;
-  protected ModuleTemplate $moduleTemplate;
-  protected PageRenderer $pageRenderer;
-
-  /**
-   * @var activePageRepository
-   */
-  protected $activePageRepository;
-
-  public function __construct(
-    ActivePageRepository $activePageRepository
-  ) {
-    $this->activePageRepository = $activePageRepository;
-  }
-
-  protected function initializeView(ViewInterface $view)
-  {
-    $menuItems = [
-      'index' => [
-        'controller' => 'Backend',
-        'action' => 'index',
-        'label' => 'Heute oder demnächst auslaufende Beiträge'
-      ],
-      'expiredlast30' => [
-        'controller' => 'Backend',
-        'action' => 'showLast30',
-        'label' => 'Beiträge, die in den letzten 30 Tagen ausgelaufen sind'
-      ],
-      'expiredlast90' => [
-        'controller' => 'Backend',
-        'action' => 'showLast90',
-        'label' => 'Beiträge, die in den letzten 90 Tagen ausgelaufen sind'
-      ],
-    ];
-
-    $this->moduleTemplateFactory = GeneralUtility::makeInstance(ModuleTemplateFactory::class);
-    $this->moduleTemplate = $this->moduleTemplateFactory->create($this->request);
-
-    $menu = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
-    $menu->setIdentifier('PageManagerModuleMenu');
-
-    foreach ($menuItems as $menuItemConfig) {
-      $isActive = false;
-      if ($this->request->getControllerName() === $menuItemConfig['controller']) {
-        if ($this->request->getControllerActionName() === $menuItemConfig['action']) {
-          $isActive = true;
+    protected ModuleTemplateFactory $moduleTemplateFactory;
+    protected ModuleTemplate $moduleTemplate;
+    protected PageRenderer $pageRenderer;
+
+    /**
+     * @var activePageRepository
+     */
+    protected $activePageRepository;
+
+    public function __construct(
+        ActivePageRepository $activePageRepository
+    ) {
+        $this->activePageRepository = $activePageRepository;
+    }
+
+    protected function initializeView(ViewInterface $view)
+    {
+        $menuItems = [
+            'index' => [
+                'controller' => 'Backend',
+                'action' => 'index',
+                'label' => 'Heute oder demnächst auslaufende Beiträge',
+                'parameters' => ['daysPast' => 0]
+            ],
+            'expiredlast30' => [
+                'controller' => 'Backend',
+                'action' => 'showLast',
+                'label' => 'Beiträge, die in den letzten 30 Tagen ausgelaufen sind',
+                'parameters' => ['daysPast' => 30]
+            ],
+            'expiredlast90' => [
+                'controller' => 'Backend',
+                'action' => 'showLast',
+                'label' => 'Beiträge, die in den letzten 90 Tagen ausgelaufen sind',
+                'parameters' => ['daysPast' => 90]
+            ],
+        ];
+
+        $this->moduleTemplateFactory = GeneralUtility::makeInstance(ModuleTemplateFactory::class);
+        $this->moduleTemplate = $this->moduleTemplateFactory->create($this->request);
+
+        $menu = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
+        $menu->setIdentifier('PageManagerModuleMenu');
+
+        foreach ($menuItems as $key => $menuItemConfig) {
+            $isActive = false;
+            if ($this->request->getControllerName() === $menuItemConfig['controller']) {
+                if ($this->request->getControllerActionName() === $menuItemConfig['action']) {
+                    $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'], $menuItemConfig['parameters'] ?? []))
+                ->setActive($isActive);
+            $menu->addMenuItem($menuItem);
         }
         }
-      }
+        $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
+//        $view->assign('activeMenuItem', $activeMenuItem);
+    }
 
 
-      $menuItem = $menu->makeMenuItem()
-        ->setTitle($menuItemConfig['label'])
-        ->setHref($this->getHref($menuItemConfig['controller'], $menuItemConfig['action']))
-        ->setActive($isActive);
-      $menu->addMenuItem($menuItem);
+    protected function translate($key, $arguments): string
+    {
+        return LocalizationUtility::translate(
+            $key,
+            'pagemanager',
+            $arguments
+        );
     }
     }
-    $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
-  }
-
-  protected function translate($key, $arguments): string
-  {
-    return LocalizationUtility::translate(
-      $key,
-      'pagemanager',
-      $arguments
-    );
-  }
-
-  protected function getHref($controller, $action, $parameters = [])
-  {
-    $this->uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
-    $this->uriBuilder->setRequest($this->request);
-
-    return $this->uriBuilder->reset()->uriFor($action, $parameters, $controller);
-  }
-
-  public function indexAction(): ResponseInterface
-  {
-      $this->gedoens = GeneralUtility::makeInstance(Gedoens::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->gedoens->createCategoryFromSlug($activePage['slug']));
-      $pageObj->setCreator($activePage['username']);
-      $pageObj->setFullName($activePage['realName']);
-
-      array_push($pageObjectArray, $pageObj);
+
+    protected function getHref($controller, $action, $parameters = [])
+    {
+        $this->uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
+        $this->uriBuilder->setRequest($this->request);
+
+        return $this->uriBuilder->reset()->uriFor($action, $parameters, $controller);
     }
     }
-    $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());
-  }
-
-  public function showLast30Action()
-  {
-      $this->gedoens = GeneralUtility::makeInstance(Gedoens::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->gedoens->createCategoryFromSlug($activePage['slug']));
-      $pageObj->setCreator($activePage['username']);
-      $pageObj->setFullName($activePage['realName']);
-
-      array_push($pageObjectArray, $pageObj);
+
+    public function indexAction(): ResponseInterface
+    {
+        $response = $this->displayPages(12, 0);
+        return $response;
     }
     }
-    $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());
-  }
-
-  public function showLast90Action()
-  {
-      $this->gedoens = GeneralUtility::makeInstance(Gedoens::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->gedoens->createCategoryFromSlug($activePage['slug']));
-      $pageObj->setCreator($activePage['username']);
-      $pageObj->setFullName($activePage['realName']);
-
-      array_push($pageObjectArray, $pageObj);
+
+    public function showLastAction(int $daysPast = 0)
+    {
+        $response = $this->displayPages(22, 1, $daysPast, 'DESC', true);
+        return $response;
     }
     }
-    $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());
-  }
-
-  /**
-   * @param array $activePages
-   * @param int $currentPage
-   * @param int $itemsperpage 
-   * 
-   */
-  protected function buildPagination(array $activePages, int $itemsperpage, int $currentPage = 1)
-  {
-    $arrayPaginator = new ArrayPaginator($activePages, $currentPage, $itemsperpage);
-    $paging = new SimplePagination($arrayPaginator);
-    $totalNumberOfRecords = count($activePages);
-
-    $cPage = $arrayPaginator->getCurrentPageNumber();
-    $controlleractionName = $this->request->getControllerActionName();
-    $actioName = '';
-
-    switch($controlleractionName) {
-      case 'index':
-        $actionName = 'index';
-        break;
-      case 'showLast30':
-        $actionName = 'showLast30';
-        break;
-      case 'showLast90':
-          $actionName = 'showLast90';
-          break;
+
+    public function displayPages(int $redStatus, int $hiddenStatus, int $daysPast = 0, string $orderBy = 'ASC', bool $isExpired = false): ResponseInterface
+    {
+        $this->utilities = GeneralUtility::makeInstance(Utilities::class);
+        $pages = $this->activePageRepository->findPages($redStatus, $hiddenStatus, $daysPast, $orderBy);
+        $itemsperpage = $this->settings['itemsPerPage'] ?? 50;
+
+        $pageObjectArray = [];
+
+        foreach ($pages as $page) {
+            $pageObj = new ActivePage();
+            $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);
+        }
+        $currentPage = $this->request->hasArgument('currentPage') ? $this->request->getArgument('currentPage') : 1;
+
+        $this->buildPagination($pageObjectArray, $itemsperpage, $currentPage);
+
+        if($isExpired) {
+            $this->view->assign('daysPast',$daysPast);
+        }
+
+        $this->moduleTemplate->setContent($this->view->render());
+        return $this->htmlResponse($this->moduleTemplate->renderContent());
     }
     }
 
 
-    $this->view->assignMultiple(
-      [
-        'cpage' => $cPage,
-        'totalRecords' => $totalNumberOfRecords,
-        'activepages' => $activePages,
-        'paginator' => $arrayPaginator,
-        'paging' => $paging,
-        'pages' => range(1, $paging->getLastPageNumber()),
-        'actionName' => $actionName
-      ]
-    );
-  }
+
+    /**
+     * @param array $activePages
+     * @param int $currentPage
+     * @param int $itemsperpage
+     *
+     */
+    protected function buildPagination(array $activePages, int $itemsperpage, int $currentPage = 1)
+    {
+        $arrayPaginator = new ArrayPaginator($activePages, $currentPage, $itemsperpage);
+        $paging = new SimplePagination($arrayPaginator);
+        $totalNumberOfRecords = count($activePages);
+
+        $cPage = $arrayPaginator->getCurrentPageNumber();
+        $controlleractionName = $this->request->getControllerActionName();
+        $actioName = '';
+
+        switch($controlleractionName) {
+            case 'index':
+                $actionName = 'index';
+                break;
+            case 'showLast':
+                $actionName = 'showLast';
+                break;
+        }
+
+        $this->view->assignMultiple(
+            [
+                'cpage' => $cPage,
+                'totalRecords' => $totalNumberOfRecords,
+                'activepages' => $activePages,
+                'paginator' => $arrayPaginator,
+                'paging' => $paging,
+                'pages' => range(1, $paging->getLastPageNumber()),
+                'actionName' => $actionName
+            ]
+        );
+    }
 }
 }

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

@@ -28,68 +28,42 @@ class ActivePageRepository extends Repository
    * 
    * 
    * @return QueryResult|array
    * @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();
+    }
 }
 }

+ 1 - 1
Classes/Utils/Gedoens.php → Classes/Utils/Utilities.php

@@ -2,7 +2,7 @@
 
 
 namespace Meramo\Pagemanager\Utils;
 namespace Meramo\Pagemanager\Utils;
 
 
-class Gedoens
+class Utilities
 {
 {
     /**
     /**
      * Create category from slug
      * Create category from slug

+ 0 - 6
Classes/ViewHelpers/CssBackgroundViewHelper.php

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

+ 80 - 0
README.md

@@ -0,0 +1,80 @@
+# 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": "git",
+			"url": "https://git2.meramo.org/typo3-Extensions/pagemanager.git",
+			"options": {
+				"ssl": {
+					"verify_peer": true,
+					"verify_peer_name": true
+				},
+				"http": {
+					"header": "Authorization: Bearer 4164b811b0774eaa8a34938e39458bcd66309e57"
+				}
+			}
+		}
+```
+The repository section will now look like this;
+```
+"repositories": [
+...
+		{
+			"type": "git",
+			"url": "https://git2.meramo.org/typo3-Extensions/pagemanager.git",
+			"options": {
+				"ssl": {
+					"verify_peer": true,
+					"verify_peer_name": true
+				},
+				"http": {
+					"header": "Authorization: Bearer 4164b811b0774eaa8a34938e39458bcd66309e57"
+				}
+			}
+		}
+...
+]
+```
+
+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:if condition="{paging.previousPageNumber} && {paging.previousPageNumber} >= {paging.firstPageNumber}">
       <f:then>
       <f:then>
         <li class="waves-effect list-group">
         <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')}">
             title="{f:translate(key:'pagemanager.paging.first')}">
             <i class="material-icons">first_page</i>
             <i class="material-icons">first_page</i>
           </a>
           </a>
         </li>
         </li>
         <li class="waves-effect list-group">
         <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')}">
             title="{f:translate(key:'pagemanager.paging.prevoius')}">
             <i class="material-icons">chevron_left</i>
             <i class="material-icons">chevron_left</i>
           </a>
           </a>
@@ -33,20 +33,20 @@
     <li><span class="pageNumbers">Seite {paginator.currentPageNumber} von {paging.lastPageNumber} |</span></li>
     <li><span class="pageNumbers">Seite {paginator.currentPageNumber} von {paging.lastPageNumber} |</span></li>
     <f:for each="{pages}" as="page">
     <f:for each="{pages}" as="page">
       <li class="{f:if(condition: '{page} == {paginator.currentPageNumber}', then:'active', else: 'waves-effect')}">
       <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>
       </li>
     </f:for>
     </f:for>
 
 
     <f:if condition="{paging.nextPageNumber} && {paging.nextPageNumber} <= {paging.lastPageNumber}">
     <f:if condition="{paging.nextPageNumber} && {paging.nextPageNumber} <= {paging.lastPageNumber}">
       <f:then>
       <f:then>
         <li class="waves-effect list-group">
         <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')}">
             title="{f:translate(key:'pagemanager.paging.next')}">
             <i class="material-icons">chevron_right</i>
             <i class="material-icons">chevron_right</i>
           </a>
           </a>
         </li>
         </li>
         <li class="waves-effect list-group">
         <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')}">
           title="{f:translate(key:'pagemanager.paging.last')}">
             <i class="material-icons">last_page</i>
             <i class="material-icons">last_page</i>
           </a>
           </a>

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

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

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

@@ -5,7 +5,7 @@
 
 
 <f:section name="Content">
 <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 />
     <f:flashMessages />
     
     
@@ -46,6 +46,5 @@
           <f:else>Kein Daten Gefunden</f:else>
           <f:else>Kein Daten Gefunden</f:else>
         </f:if>
         </f:if>
     </table>
     </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>
 </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": {
   "require": {
     "php": ">=7.4.0",
     "php": ">=7.4.0",
     "ext-pdo": "*",
     "ext-pdo": "*",
-    "typo3/cms-core": "^10.4 || ^11.5"
+    "typo3/cms-core": "^10.4 || ^11.5 || ^12.4"
   },
   },
   "type": "typo3-cms-extension",
   "type": "typo3-cms-extension",
   "version": "dev-local",
   "version": "dev-local",

+ 1 - 1
ext_emconf.php

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

+ 3 - 0
ext_localconf.php

@@ -0,0 +1,3 @@
+<?php
+
+defined('TYPO3_MODE') || die();

+ 1 - 1
ext_tables.php

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

+ 5 - 3
ext_tables.sql

@@ -1,4 +1,6 @@
 CREATE TABLE pages (
 CREATE TABLE pages (
-    roof varchar(255) DEFAULT '' NOT NULL,
-    red_status varchar(255) DEFAULT '' NOT NULL
-);
+    roof varchar(2048) DEFAULT '',
+    red_status smallint DEFAULT -1
+);
+
+-- roof VARCHAR(2048) CHARACTER SET utf8mb4 DEFAULT '' COLLATE `utf8mb4_unicode_ci`