Просмотр исходного кода

recreate the classes folder and containing files

jabongwa 2 лет назад
Родитель
Сommit
742d259b4f

+ 204 - 0
Classes/Controller/BackendController.php

@@ -0,0 +1,204 @@
+<?php
+
+namespace Meramo\Pagemanager\Controller;
+
+use Meramo\Pagemanager\Domain\Model\ActivePage;
+use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
+use Meramo\Pagemanager\Domain\Repository\ActivePageRepository;
+//use TYPO3\CMS\Backend\View\BackendTemplateView;
+use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Mvc\Controller\ControllerContext;
+use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
+use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
+use TYPO3\CMS\Extbase\Utility\DebuggerUtility;
+use TYPO3\CMS\Core\Pagination\ArrayPaginator;
+use TYPO3\CMS\Core\Pagination\SimplePagination;
+
+class BackendController extends ActionController
+{
+  /**
+   * BackendTemplateContainer
+   *
+   * @var \TYPO3\CMS\Backend\View\BackendTemplateView
+   */
+  protected $view;
+  /**
+   * Backend Template Container
+   * 
+   * @var string
+   * @return string
+   */
+  protected $defaultViewObjectName = \TYPO3\CMS\Backend\View\BackendTemplateView::class;
+
+  /**
+   * @var activePageRepository
+   */
+  protected $activePageRepository;
+
+  public function __construct(ActivePageRepository $activePageRepository)
+  {
+    $this->activePageRepository = $activePageRepository;
+  }
+
+  protected function translate($key, $arguments): string
+  {
+    return LocalizationUtility::translate(
+      $key,
+      'pagemanager',
+      $arguments
+    );
+  }
+
+  /**
+   * @return ViewInterface
+   */
+  protected function resolveView(): \TYPO3\CMS\Backend\View\BackendTemplateView
+  {
+    $view = parent::resolveView();
+
+    $view->assignMultiple([
+      'extensionName' => $this->request->getControllerExtensionName(),
+      'controllerName' => $this->request->getControllerName(),
+      'actionName'     => $this->request->getControllerActionName()
+    ]);
+    // var_dump($view);
+    return $view;
+  }
+
+
+
+  protected function generateMenu()
+  {
+    $menuItems = [
+      'activePage' => [
+        'controller' => 'Backend',
+        'action' => 'index',
+        'label' => 'Heute oder demnächst auslaufende Beiträge'
+      ]
+    ];
+
+    // Generate Backend Active select Box
+    $menu = $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
+    $menu->setIdentifier('PageManagerModuleMenu');
+
+    // $menu = GeneralUtility::makeInstance(Menu::class);
+    // $menu->setIdentifier('PageManagerModuleMenu');
+
+    foreach ($menuItems as $menuItemConfig) {
+      $isActive = false;
+      if ($this->request->getControllerName() === $menuItemConfig['controller']) {
+        if ($this->request->getControllerActionName() === $menuItemConfig['action']) {
+          $isActive = true;
+        }
+      }
+      $menuItem = $menu->makeMenuItem()
+        ->setTitle($menuItemConfig['label'])
+        ->setHref($this->getHref($menuItemConfig['controller'], $menuItemConfig['action']))
+        ->setActive($isActive);
+      $menu->addMenuItem($menuItem);
+    }
+    $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
+  }
+
+  protected function getHref($controller, $action, $parameters = [])
+  {
+    $uriBuilder = $this->objectManager->get(UriBuilder::class);
+    $uriBuilder->setRequest($this->request);
+    return $uriBuilder->reset()->uriFor($action, $parameters, $controller);
+  }
+
+  /**
+   * Initialize view
+   * 
+   * @param ViewInterface $view
+   */
+  protected function initializeView(ViewInterface $view)
+  {
+    if ($view instanceof \TYPO3\CMS\Backend\View\BackendTemplateView) {
+      /** @var \TYPO3\CMS\Backend\View\BackendTemplateView $view */
+      parent::initializeView($view);
+      //$this->generateMenu();
+    }
+  }
+
+  public function createCategoryFromSlug($slug)
+  {
+    if (substr($slug, 0, 1) === '/') {
+      $value = ltrim($slug, '/');
+
+      if (substr($slug, 0, 1) === '_') {
+        $value = ltrim($slug, '_');
+      }
+
+      $data = explode('/', $slug);
+    }
+    return $data[0];
+  }
+
+  public function indexAction()
+  {
+    $activePages = $this->activePageRepository->findActivePagesAndPageCreatetors();
+
+    $pageObjectArray = [];
+
+    //DebuggerUtility::var_dump($activePages);
+    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->activePageRepository->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;
+    $itemsPerPage  = $this->settings['itemsPerPage'];
+    // if (count($pageObjectArray) > $numberPerPage) {
+    //   $itemsPerPage = $numberPerPage;
+    // } else {
+    //   $itemsPerPage = 25;
+    // }
+    $this->buildPagination($pageObjectArray, $currentPage, $itemsPerPage);
+
+
+    // $this->view->assign('activePages', $pageObjectArray);
+  }
+
+  public function lastthirdtydays()
+  {
+    $activePagesExpiredInlast30days = $this->activePageRepository->findExpiredRecordsInTheLast30Days();
+    
+    $this->view->assign('last30days', $activePagesExpiredInlast30days);
+  }
+
+  /**
+   * @param array $activePages
+   * @param int $currentPage
+   * @param int $itemsperpage 
+   * 
+   */
+  protected function buildPagination(array $activePages, int $currentPage = 1, int $itemsperpage)
+  {
+    $arrayPaginator = new ArrayPaginator($activePages, $currentPage, $itemsperpage);
+    $paging = new SimplePagination($arrayPaginator);
+    $totalNumberOfRecords = count($activePages);
+
+    $cPage = $arrayPaginator->getCurrentPageNumber();
+  
+    $this->view->assignMultiple(
+      [
+        'cpage' => $cPage,
+        'totalRecords' => $totalNumberOfRecords,
+        'activepages' => $activePages,
+        'paginator' => $arrayPaginator,
+        'paging' => $paging,
+        'pages' => range(1, $paging->getLastPageNumber()),
+      ]
+    );
+  }
+}

+ 235 - 0
Classes/Domain/Model/ActivePage.php

@@ -0,0 +1,235 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Meramo\Pagemanager\Domain\Model;
+
+
+/**
+ * This file is part of the "ABI2021 Page Manager" Extension for TYPO3 CMS.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * (c) 2023 Meramo Developer <development@meramo.de>, Meramo Verlag GmbH
+ */
+
+/**
+ * Active Page Online
+ */
+class ActivePage extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
+{
+    /**
+     * uid
+     * 
+     * @var int
+     */
+    protected $uid;
+
+    /**
+     * startDate
+     * 
+     * @var int
+     */
+    protected $starttime;
+    /**
+     * startDate
+     * 
+     * @var int
+     */
+    protected $endtime;
+    /**
+     * Page title
+     *
+     * @var string
+     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
+     */
+    protected $title = '';
+
+    /**
+     * page category
+     *
+     * @var string
+     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
+     */
+    protected $category = '';
+
+    /**
+     * Main topic
+     *
+     * @var string
+     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
+     */
+    protected $roof = '';
+
+    /**
+     * Page Creator
+     *
+     * @var string
+     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
+     */
+    protected $creator = '';
+
+    /**
+     * Creator full name
+     *
+     * @var string
+     */
+    protected $fullName = '';
+
+     /**
+     * sets the Uid
+     * 
+     * @return void
+     */
+    public function setUid(int $uid)
+    {
+      $this->uid = $uid;
+    }
+
+    /**
+     * sets the starttime
+     * 
+     * @return void
+     */
+    public function setStarttime(int $starttime)
+    {
+      $this->starttime = $starttime;
+    }
+
+    /**
+     * Returns the starttime
+     * 
+     * @return int starttime
+     */
+    public function getStarttime()
+    {
+      return $this->starttime;
+    }
+
+    /**
+     * sets the endttime
+     * 
+     * @return void
+     */
+    public function setEndtime(int $endtime)
+    {
+      $this->endtime = $endtime;
+    }
+
+    /**
+     * Returns the endtime
+     * 
+     * @return int endtime
+     */
+    public function getEndtime()
+    {
+      return $this->endtime;
+    }
+
+
+    /**
+     * Returns the title
+     *
+     * @return string $title
+     */
+    public function getTitle()
+    {
+        return $this->title;
+    }
+
+    /**
+     * Sets the title
+     *
+     * @param string $title
+     * @return void
+     */
+    public function setTitle(string $title)
+    {
+        $this->title = $title;
+    }
+
+    /**
+     * Returns the category
+     *
+     * @return string $category
+     */
+    public function getCategory()
+    {
+        return $this->category;
+    }
+
+    /**
+     * Sets the category
+     *
+     * @param string $category
+     * @return void
+     */
+    public function setCategory(string $category)
+    {
+        $this->category = $category;
+    }
+
+    /**
+     * Returns the roof
+     *
+     * @return string $roof
+     */
+    public function getRoof()
+    {
+        return $this->roof;
+    }
+
+    /**
+     * Sets the roof
+     *
+     * @param string $roof
+     * @return void
+     */
+    public function setRoof(string $roof)
+    {
+        $this->roof = $roof;
+    }
+
+    /**
+     * Returns the creator
+     *
+     * @return string $creator
+     */
+    public function getCreator()
+    {
+        return $this->creator;
+    }
+
+    /**
+     * Sets the creator
+     *
+     * @param string $creator
+     * @return void
+     */
+    public function setCreator(string $creator)
+    {
+        $this->creator = $creator;
+    }
+
+    /**
+     * Returns the fullName
+     *
+     * @return string $fullName
+     */
+    public function getFullName()
+    {
+        return $this->fullName;
+    }
+
+    /**
+     * Sets the fullName
+     *
+     * @param string $fullName
+     * @return void
+     */
+    public function setFullName(string $fullName)
+    {
+        $this->fullName = $fullName;
+    }
+}

+ 151 - 0
Classes/Domain/Repository/ActivePageRepository.php

@@ -0,0 +1,151 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Meramo\Pagemanager\Domain\Repository;
+
+use Meramo\Pagemanager\Domain\Model\ActivePage;
+use TYPO3\CMS\Extbase\Persistence\Repository;
+use \TYPO3\CMS\Extbase\Persistence\QueryInterface;
+use \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult;
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser;
+use TYPO3\CMS\Extbase\Utility\DebuggerUtility;
+
+
+
+/**
+ * This file is part of the "ABI2021 Page Manager" Extension for TYPO3 CMS.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * (c) 2023 Meramo Developer <development@meramo.de>, Meramo Verlag GmbH
+ */
+
+/**
+ * The repository for ActivePages
+ */
+class ActivePageRepository extends Repository
+{
+  /**
+   * Queries the pages and be_users tables and returns the Data as an array
+   * 
+   * @return QueryResult|array
+   */
+  public  function findActivePagesAndPageCreatetors()
+  {
+    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+    $queryBuilder->getRestrictions()->removeAll();
+    /* 
+    SELECT `p`.`uid`, `p`.`starttime`, `p`.`endtime`, `p`.`title`, `p`.`roof`, `u`.`username`, `u`.`realName` FROM `pages` `p` 
+    LEFT JOIN `u` ```p```.```cruser_id`` = ``be_users```.```uid``` ON , `be_users` `u` WHERE (`p`.`starttime` > ?) AND (`p`.`endtime` > ?) AND (`p`.`red_status` > ?) AND (`p`.`deleted` > ?) AND (`p`.`hidden` > ?) GROUP BY `p`.`slug` ORDER BY `p`.`endtime` ASC'  
+
+
+    SELECT p.uid, p.starttime, p.endtime, p.title, p.roof, u.username, u.realName
+FROM pages p LEFT JOIN be_users u ON p.cruser_id = u.uid
+WHERE p.starttime > 0 AND p.endtime > 0 and p.red_status = 12 and p.deleted = 0 and p.hidden = 0
+GROUP BY p.slug ORDER BY p.endtime ASC;
+    */
+
+    $statement = $queryBuilder
+      ->select('p.uid', 'p.starttime', 'p.endtime', 'p.title', 'p.roof', 'p.slug', 'u.username', 'u.realName')
+      ->from('pages', 'p')
+      //->from('be_users', 'u')
+      ->leftJoin(
+        'p',
+        'be_users',
+        'u',
+        $queryBuilder->expr()->eq('p.cruser_id', $queryBuilder->quoteIdentifier('u.uid'))
+      )
+      ->where(
+        //$queryBuilder->expr()->eq('p.cruser_id', $queryBuilder->quoteIdentifier('u.uid')),
+        $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');
+     // ->setMaxResults(40);
+      //  var_dump($queryBuilder->getSQL());
+      //  die();
+
+      //($queryBuilder->getSQL());
+
+      $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 findExpiredRecordsInTheLast30Days()
+  {
+    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+    $queryBuilder->getRestrictions()->removeAll();
+
+    $currentDate = new \DateTime("now");
+    $last30Days = $currentDate->sub(new \DateInterval('P30D'));
+    $timestamp = date_format($last30Days, 'U');
+
+    $statement = $queryBuilder
+      ->select('p.uid', 'p.starttime', 'p.endtime', 'p.title', 'p.roof', 'p.slug', 'u.username', 'u.realName')
+      ->from('pages', 'p')
+      //->from('be_users', 'u')
+      ->leftJoin(
+        'p',
+        'be_users',
+        'u',
+        $queryBuilder->expr()->eq('p.cruser_id', $queryBuilder->quoteIdentifier('u.uid'))
+      )
+      ->where(
+        //$queryBuilder->expr()->eq('p.cruser_id', $queryBuilder->quoteIdentifier('u.uid')),
+        $queryBuilder->expr()->gt('p.starttime', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
+        $queryBuilder->expr()->lt('p.endtime', $queryBuilder->createNamedParameter($timestamp, \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();
+
+  }
+
+  /**
+   * Create category from slug
+   * 
+   */
+
+  public function createCategoryFromSlug($slug)
+  {
+    if(substr($slug, 0, 1) === '/') $value = ltrim($slug, '/');
+    
+    if(substr($slug, 0, 1) === '_') $value = ltrim($slug, '_');
+
+    return  explode('/', $value)[0];
+
+  }
+
+  /**
+   * Returns selected pages from the pages Table
+   * 
+   * @return QueryResult|array
+   */
+  // public function findActivePages()
+  // {
+  //   $activePageData = [];
+  //   $activePageData = $this->getActivePagesAndPageCreatetors();
+
+  // }
+}

+ 59 - 0
Classes/ViewHelpers/CssBackgroundViewHelper.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace Meramo\Pagemanager\ViewHelpers;
+
+use \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
+
+class CssBackgroundViewHelper extends AbstractViewHelper
+{
+       /**
+     * initialize Arguments
+     * 
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('endtime', 'integer', 'Page expiration Date', true);
+        
+    }
+
+    public function render()
+    {
+        $endtime = intval($this->arguments['endtime']);
+
+        $color = $this->getBackgroundColor($endtime);
+        //$data = ['$endtime' => $endtime, '$color' => $color];
+        //DebuggerUtility::var_dump($data);
+
+        return $color;
+    }
+
+    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) {
+            $color = 'Red';
+        }
+        elseif(($endtime > $between1And7) && ($endtime <= $between8And14)) {
+            $color = 'Orange';
+        }
+        elseif(($endtime > $between8And14) && ($endtime <= $between15And30)) {
+            $color = 'Blue';
+        }
+        elseif(($endtime > $between15And30) && ($endtime <= $between31And42)) {
+            $color = 'DarkBlue';
+        }
+        else $color = 'Black';
+
+        return $color;
+    }
+}