AbstractBackendController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace Meramo\Mrmbepages\Controller;
  3. use Meramo\Mrmbepages\Paginator\Paginator;
  4. use \TYPO3\CMS\Backend\View\BackendTemplateView;
  5. use TYPO3\CMS\Core\Utility\GeneralUtility;
  6. use \TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
  7. use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
  8. use \TYPO3\CMS\Extbase\Utility\LocalizationUtility;
  9. /**
  10. * Abstract backend controller provides functions for all backend controllers
  11. */
  12. class AbstractBackendController extends ActionController
  13. {
  14. /**
  15. * Backend Template Container
  16. *
  17. * @var BackendTemplateView
  18. */
  19. protected $view;
  20. /**
  21. * Backend Template Container
  22. *
  23. * @var string
  24. * @return string
  25. */
  26. protected $defaultViewObjectName = \TYPO3\CMS\Backend\View\BackendTemplateView::class;
  27. protected function translate($key, $arguments = null): string
  28. {
  29. return LocalizationUtility::translate(
  30. $key,
  31. 'mrmbepages',
  32. $arguments
  33. );
  34. }
  35. protected function resolveView(): BackendTemplateView
  36. {
  37. $view = parent::resolveView();
  38. $view->assignMultiple([
  39. 'extensionName' => $this->request->getControllerExtensionName(),
  40. 'controllerName' => $this->request->getControllerName(),
  41. 'actionName' => $this->request->getControllerActionName()
  42. ]);
  43. return $view;
  44. }
  45. protected function generateMenu()
  46. {
  47. $menuItems = [
  48. 'dashboardA' => [
  49. 'controller' => 'Dashboard',
  50. 'action' => 'index',
  51. 'label' => $this->translate('mrmbepage.dashboard.headline')
  52. ],
  53. 'dashboardB' => [
  54. 'controller' => 'Dashboard',
  55. 'action' => 'index',
  56. 'label' => $this->translate('mrmbepage.dashboard.headline')
  57. ],
  58. ];
  59. $menu = $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
  60. $menu->setIdentifier('mrmbepagesModuleMenu');
  61. foreach($menuItems as $menuItemConfig) {
  62. $isActive = false;
  63. if($this->request->getControllerName() === $menuItemConfig['controller']) {
  64. if($this->request->getControllerActionName() === $menuItemConfig['action']) {
  65. $isActive = true;
  66. }
  67. }
  68. $menuItem = $menu->makeMenuItem()
  69. ->setTitle($menuItemConfig['label'])
  70. ->setHref($this->getHref($menuItemConfig['controller'], $menuItemConfig['action']))
  71. ->setActive($isActive);
  72. $menu->addMenuItem($menuItem);
  73. }
  74. $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
  75. }
  76. protected function getHref($controller, $action, $parameters = [])
  77. {
  78. $uriBuilder = $this->objectManager->get(UriBuilder::class);
  79. $uriBuilder->setRequest($this->request);
  80. return $uriBuilder->reset()->uriFor($action, $parameters, $controller);
  81. }
  82. protected function buildPagination(array $data, $itemsPerPage, $currentPage)
  83. {
  84. $paginator = GeneralUtility::makeInstance(Paginator::class);
  85. $paginator->setData($data);
  86. $paginator->setItemsPerPage($itemsPerPage);
  87. $paginator->setCurrentPage($currentPage);
  88. $totalRecords = $paginator->getTotalRecords();
  89. $totalPages = $paginator->getTotalPages();
  90. $pageSize = $paginator->getItemsPerPage();
  91. $currentPage = $paginator->getCurrentPage();
  92. if($currentPage == 1) {
  93. $previousPage = 0;
  94. } else {
  95. $previousPage = $paginator->getPreviousPage();
  96. }
  97. $previousPage = $paginator->getPreviousPage();
  98. $nextPage = $paginator->getNextPage();
  99. $offSet = $paginator->getOffSet();
  100. $paginatedData = $paginator->getPaginatedData($data, $offSet, $currentPage);
  101. $firstPage = min(range(1, $totalPages));
  102. $lastPage = max(range(1, $totalPages));
  103. $isFirstPage = $currentPage == min(range(1, $totalPages));
  104. $isLastPage = $currentPage == $lastPage = max(range(1, $totalPages));
  105. return [
  106. 'paginatedData' => $paginatedData,
  107. 'totalRecords' => $totalRecords,
  108. 'totalPages' => $totalPages,
  109. 'pageSize' => $pageSize,
  110. 'currentPage' => $currentPage,
  111. 'previousPage' => $previousPage,
  112. 'nextPage' => $nextPage,
  113. 'firstPage' => $firstPage,
  114. 'lastPage' => $lastPage,
  115. 'pageRange' => range($firstPage, $lastPage),
  116. 'isFirstPage' => $isFirstPage,
  117. 'isLastPage' => $isLastPage,
  118. ];
  119. }
  120. }