2 declare(strict_types = 1);
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
54 $this->moduleTemplate =
$moduleTemplate ?? GeneralUtility::makeInstance(ModuleTemplate::class);
63 public function mainAction(ServerRequestInterface $request): ResponseInterface
66 $parentPageUid = (int)$request->getQueryParams()[
'id'];
70 if (!is_array($pageInformation)) {
72 $this->moduleTemplate->setContent(
'');
73 return new HtmlResponse($this->moduleTemplate->renderContent());
77 $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
78 $this->moduleTemplate->getDocHeaderComponent()->setMetaInformation($pageInformation);
79 $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
80 $cshButton = $buttonBar->makeHelpButton()
81 ->setModuleName(
'pages_sort')
82 ->setFieldName(
'pages_sort');
83 $viewButton = $buttonBar->makeLinkButton()
85 ->setTitle($this->
getLanguageService()->sL(
'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.showPage'))
88 $shortcutButton = $buttonBar->makeShortcutButton()
89 ->setModuleName(
'pages_sort')
90 ->setGetVariables([
'id']);
91 $buttonBar->addButton($cshButton)->addButton($viewButton)->addButton($shortcutButton);
94 $view = GeneralUtility::makeInstance(StandaloneView::class);
95 $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName(
96 'EXT:backend/Resources/Private/Templates/Page/SortSubPages.html'
99 $isInWorkspace = $backendUser->workspace !== 0;
100 $view->assign(
'isInWorkspace', $isInWorkspace);
101 $view->assign(
'maxTitleLength', $backendUser->uc[
'titleLen'] ?? 20);
102 $view->assign(
'parentPageUid', $parentPageUid);
103 $view->assign(
'dateFormat',
$GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'ddmmyy']);
104 $view->assign(
'timeFormat',
$GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'hhmm']);
106 if (!$isInWorkspace) {
108 $newSortBy = $request->getQueryParams()[
'newSortBy'] ??
null;
109 if ($newSortBy && in_array($newSortBy, [
'title',
'subtitle',
'nav_title',
'crdate',
'tstamp'],
true)) {
111 } elseif ($newSortBy && $newSortBy ===
'reverseCurrentSorting') {
117 $hasInvisiblePage =
false;
119 foreach ($pageRecords as $page) {
120 $pageWithPermissions = [];
121 $pageWithPermissions[
'record'] = $page;
122 $calculatedPermissions = $backendUser->calcPerms($page);
123 $pageWithPermissions[
'canEdit'] = $backendUser->isAdmin() || $calculatedPermissions &
Permission::PAGE_EDIT;
126 $subPages[] = $pageWithPermissions;
128 $hasInvisiblePage =
true;
131 $view->assign(
'subPages', $subPages);
132 $view->assign(
'hasInvisiblePage', $hasInvisiblePage);
135 $this->moduleTemplate->setContent($view->render());
136 return new HtmlResponse($this->moduleTemplate->renderContent());
148 if (!in_array($newSortBy, [
'title',
'subtitle',
'nav_title',
'crdate',
'tstamp'],
true)) {
149 throw new \RuntimeException(
150 'New sort by must be one of "title", "subtitle", "nav_title", "crdate" or tstamp',
155 if (!empty($subPages)) {
156 $subPages = array_reverse($subPages);
169 if (!empty($subPages)) {
183 foreach ($subPages as $subPage) {
184 $commandArray[
'pages'][$subPage[
'uid']][
'move'] = $parentPageUid;
186 $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
187 $dataHandler->start([], $commandArray);
188 $dataHandler->process_cmdmap();
200 protected function getSubPagesOfPage(
int $parentPageUid,
string $orderBy =
'sorting'): array
202 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'pages');
203 $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
204 return $queryBuilder->select(
'*')
207 $queryBuilder->expr()->eq(
'sys_language_uid', 0),
208 $queryBuilder->expr()->eq(
210 $queryBuilder->createNamedParameter($parentPageUid, \PDO::PARAM_INT)