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; } } $menuItem = $menu->makeMenuItem() ->setTitle($menuItemConfig['label']) ->setHref($this->getHref($menuItemConfig['controller'], $menuItemConfig['action'])) ->setActive($isActive); $menu->addMenuItem($menuItem); } $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 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(): ResponseInterface { $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->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; $this->buildPagination($pageObjectArray, $itemsperpage, $currentPage); $this->moduleTemplate->setContent($this->view->render()); return $this->htmlResponse($this->moduleTemplate->renderContent()); } public function showLast30Action() { $activePagesExpiredInlast30days = $this->activePageRepository->findExpiredRecordsInTheLast30Days(); $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->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; $this->buildPagination($pageObjectArray, $itemsperpage, $currentPage); $this->moduleTemplate->setContent($this->view->render()); return $this->htmlResponse($this->moduleTemplate->renderContent()); } public function showLast90Action() { $activePagesExpiredInlast90days = $this->activePageRepository->findExpiredRecordsInTheLast90Days(); $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->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; $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(); $this->view->assignMultiple( [ 'cpage' => $cPage, 'totalRecords' => $totalNumberOfRecords, 'activepages' => $activePages, 'paginator' => $arrayPaginator, 'paging' => $paging, 'pages' => range(1, $paging->getLastPageNumber()), ] ); } }