2 declare(strict_types = 1);
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
56 $this->moduleTemplate =
$moduleTemplate ?? GeneralUtility::makeInstance(ModuleTemplate::class);
65 public function mainAction(ServerRequestInterface $request): ResponseInterface
68 $pageUid = (int)$request->getQueryParams()[
'id'];
72 if (!is_array($pageRecord)) {
74 $this->moduleTemplate->setContent(
'');
75 return new HtmlResponse($this->moduleTemplate->renderContent());
79 $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
80 $this->moduleTemplate->getDocHeaderComponent()->setMetaInformation($pageRecord);
81 $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
82 $cshButton = $buttonBar->makeHelpButton()
83 ->setModuleName(
'pages_new')
84 ->setFieldName(
'pages_new');
85 $viewButton = $buttonBar->makeLinkButton()
87 ->setTitle($this->
getLanguageService()->sL(
'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.showPage'))
90 $shortcutButton = $buttonBar->makeShortcutButton()
91 ->setModuleName(
'pages_new')
92 ->setGetVariables([
'id']);
93 $buttonBar->addButton($cshButton)->addButton($viewButton)->addButton($shortcutButton);
96 $view = GeneralUtility::makeInstance(StandaloneView::class);
97 $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName(
98 'EXT:backend/Resources/Private/Templates/Page/NewPages.html'
101 $calculatedPermissions = $backendUser->calcPerms($pageRecord);
104 $view->assign(
'canCreateNew', $canCreateNew);
105 $view->assign(
'maxTitleLength', $backendUser->uc[
'titleLen'] ?? 20);
106 $view->assign(
'pageUid', $pageUid);
109 $newPagesData = (array)$request->getParsedBody()[
'pages'];
110 if (!empty($newPagesData)) {
111 $hasNewPagesData =
true;
112 $afterExisting = isset($request->getParsedBody()[
'createInListEnd']);
113 $hidePages = isset($request->getParsedBody()[
'hidePages']);
114 $hidePagesInMenu = isset($request->getParsedBody()[
'hidePagesInMenus']);
115 $pagesCreated = $this->
createPages($newPagesData, $pageUid, $afterExisting, $hidePages, $hidePagesInMenu);
116 $view->assign(
'pagesCreated', $pagesCreated);
119 foreach ($subPages as $page) {
120 $calculatedPermissions = $backendUser->calcPerms($page);
122 $visiblePages[] = $page;
125 $view->assign(
'visiblePages', $visiblePages);
127 $hasNewPagesData =
false;
130 $view->assign(
'hasNewPagesData', $hasNewPagesData);
133 $this->moduleTemplate->setContent($view->render());
134 return new HtmlResponse($this->moduleTemplate->renderContent());
147 protected function createPages(array $newPagesData,
int $pageUid,
bool $afterExisting,
bool $hidePages,
bool $hidePagesInMenu):
bool
149 $pagesCreated =
false;
152 $firstPid = $pageUid;
153 if ($afterExisting) {
155 $lastPage = end($subPages);
157 $firstPid = -(int)$lastPage[
'uid'];
163 $previousIdentifier =
'';
164 foreach ($newPagesData as $identifier => $data) {
165 if (!trim($data[
'title'])) {
168 $commandArray[
'pages'][$identifier][
'hidden'] = (int)$hidePages;
169 $commandArray[
'pages'][$identifier][
'nav_hide'] = (int)$hidePagesInMenu;
170 $commandArray[
'pages'][$identifier][
'title'] = $data[
'title'];
171 $commandArray[
'pages'][$identifier][
'doktype'] = $data[
'doktype'];
173 $firstRecord =
false;
174 $commandArray[
'pages'][$identifier][
'pid'] = $firstPid;
176 $commandArray[
'pages'][$identifier][
'pid'] =
'-' . $previousIdentifier;
178 $previousIdentifier = $identifier;
181 if (!empty($commandArray)) {
182 $pagesCreated =
true;
183 $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
184 $dataHandler->start($commandArray, []);
185 $dataHandler->process_datamap();
189 return $pagesCreated;
201 $pagesTsConfig = $tsConfig[
'TCEFORM.'][
'pages.'] ?? [];
205 unset($types[
'default']);
206 $types = array_keys($types);
214 $types = GeneralUtility::trimExplode(
',', $this->
getBackendUser()->groupData[
'pagetypes_select'],
true);
216 $removeItems = isset($pagesTsConfig[
'doktype.'][
'removeItems']) ? GeneralUtility::trimExplode(
',', $pagesTsConfig[
'doktype.'][
'removeItems'],
true) : [];
217 $allowedDoktypes = array_diff($types, $removeItems);
220 $availableDoktypes =
$GLOBALS[
'TCA'][
'pages'][
'columns'][
'doktype'][
'config'][
'items'];
225 foreach ($availableDoktypes as $doktypeData) {
227 if ($doktypeData[1] ===
'--div--') {
228 $groupLabel = $doktypeData[0];
230 if (in_array($doktypeData[1], $allowedDoktypes)) {
231 $groupedData[$groupLabel][] = $doktypeData;
248 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'pages');
249 $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
250 return $queryBuilder->select(
'*')
253 $queryBuilder->expr()->eq(
255 $queryBuilder->createNamedParameter($pageUid, \PDO::PARAM_INT)
257 $queryBuilder->expr()->eq(
258 $GLOBALS[
'TCA'][
'pages'][
'ctrl'][
'languageField'],
259 $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)