diff --git a/Classes/Utility/SiteConfigUtility.php b/Classes/Utility/SiteConfigUtility.php index ab88031..76feb6d 100644 --- a/Classes/Utility/SiteConfigUtility.php +++ b/Classes/Utility/SiteConfigUtility.php @@ -15,6 +15,7 @@ namespace Cjel\TemplatesAide\Utility; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser; /** * Utility to work with site config @@ -35,20 +36,33 @@ class SiteConfigUtility $objectManager = GeneralUtility::makeInstance( ObjectManager::class ); + $typoScriptParser = GeneralUtility::makeInstance( + TypoScriptParser::class + ); $configurationManager = $objectManager->get( ConfigurationManagerInterface::class ); $typoscript = $configurationManager->getConfiguration( ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT ); - $typoscript = GeneralUtility::removeDotsFromTS($typoscript); $siteConfig = $typoscript; if ($limitToSiteConfig) { - $siteConfig = $typoscript['config']['site']; + $siteConfig = $typoscript['config.']['site.']; } $current = &$siteConfig; foreach ($pathParts as $key) { + if ($current[$key . '.']) { + $key .= '.'; + } $current = &$current[$key]; + if (isset($current[0]) && $current[0] === '<') { + $searchkey = trim(substr($current, 1)); + list($name, $conf) = $typoScriptParser->getVal( + $searchkey, + $typoscript + ); + $current = $conf; + } } if (is_array($current) && array_key_exists('value', $current) diff --git a/Classes/ViewHelpers/SiteConfigViewHelper.php b/Classes/ViewHelpers/SiteConfigViewHelper.php index 3201bd4..1d83ad1 100644 --- a/Classes/ViewHelpers/SiteConfigViewHelper.php +++ b/Classes/ViewHelpers/SiteConfigViewHelper.php @@ -34,6 +34,13 @@ class SiteConfigViewHelper extends AbstractViewHelper 'The config key to get', true ); + $this->registerArgument( + 'siteConfig', + 'bool', + 'Limit the typoscript to the config.site part', + false, + true + ); } /** @@ -51,7 +58,7 @@ class SiteConfigViewHelper extends AbstractViewHelper ) { return SiteConfigUtility::getByPath( $arguments['key'], - false + $arguments['siteConfig'] ); } } diff --git a/Configuration/TCA/Overrides/be_users.php b/Configuration/TCA/Overrides/be_users.php new file mode 100644 index 0000000..102ba9f --- /dev/null +++ b/Configuration/TCA/Overrides/be_users.php @@ -0,0 +1,4 @@ + - +
LFEditor
@@ -9,6 +9,10 @@ + + + + diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf index bb353e3..a2b7adb 100644 --- a/Resources/Private/Language/locallang.xlf +++ b/Resources/Private/Language/locallang.xlf @@ -1,6 +1,6 @@ - +
LFEditor
@@ -8,6 +8,9 @@ + + + diff --git a/build/dev/core_fail-fatally-on-failed-inserts.diff b/build/dev/core_fail-fatally-on-failed-inserts.diff new file mode 100644 index 0000000..0010f48 --- /dev/null +++ b/build/dev/core_fail-fatally-on-failed-inserts.diff @@ -0,0 +1,37 @@ +*** webroot/typo3/sysext/core/Classes/DataHandling/DataHandler.php.orig 2022-04-22 13:15:26.314780488 +0200 +--- webroot/typo3/sysext/core/Classes/DataHandling/DataHandler.php 2022-04-22 13:15:39.018129312 +0200 +*************** class DataHandler implements LoggerAware +*** 7431,7446 **** + } + $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table); + $insertErrorMessage = ''; +! try { + // Execute the INSERT query: + $connection->insert( + $table, + $fieldArray, + $typeArray + ); +! } catch (DBALException $e) { +! $insertErrorMessage = $e->getPrevious()->getMessage(); +! } + // If succees, do...: + if ($insertErrorMessage === '') { + // Set mapping for NEW... -> real uid: +--- 7431,7446 ---- + } + $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table); + $insertErrorMessage = ''; +! //try { + // Execute the INSERT query: + $connection->insert( + $table, + $fieldArray, + $typeArray + ); +! //} catch (DBALException $e) { +! // $insertErrorMessage = $e->getPrevious()->getMessage(); +! //} + // If succees, do...: + if ($insertErrorMessage === '') { + // Set mapping for NEW... -> real uid: diff --git a/build/dev/impexp_dont-fail-on-changed-image-hashes.diff b/build/dev/impexp_dont-fail-on-changed-image-hashes.diff new file mode 100644 index 0000000..5b572f3 --- /dev/null +++ b/build/dev/impexp_dont-fail-on-changed-image-hashes.diff @@ -0,0 +1,12 @@ +--- webroot/typo3/sysext/impexp/Classes/Import.php 2022-04-22 12:43:09.439221153 +0200 ++++ webroot/typo3/sysext/impexp/Classes/Import.php 2022-04-22 12:43:27.169242298 +0200 +@@ -446,7 +446,8 @@ + } + + if ($newFile->getSha1() !== $fileRecord['sha1']) { +- $this->error('Error: The hash of the written file is not identical to the import data! File could be corrupted! File: "' . $fileRecord['identifier'] . '" with storage uid "' . $fileRecord['storage'] . '"'); ++ print('Error: The hash of the written file is not identical to the import data! File could be corrupted! File: "' . $fileRecord['identifier'] . '" with storage uid "' . $fileRecord['storage'] . '"'); ++ print(PHP_EOL); + } + } + diff --git a/build/patches/backend_option-disable-drag-and-drop-modal.diff b/build/patches/backend_option-disable-drag-and-drop-modal.diff new file mode 100644 index 0000000..38a0b98 --- /dev/null +++ b/build/patches/backend_option-disable-drag-and-drop-modal.diff @@ -0,0 +1,41 @@ +--- a/Resources/Public/JavaScript/SvgTree.js 2022-04-28 12:32:01.961189044 +0200 ++++ b/Resources/Public/JavaScript/SvgTree.js 2022-04-28 12:32:06.047858227 +0200 +@@ -37,6 +37,7 @@ + showCheckboxes: false, + showIcons: false, + allowRecursiveDelete: false, ++ disableDragModal: false, + marginTop: 15, + nodeHeight: 20, + indentWidth: 16, +--- a/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js 2022-04-28 11:43:41.046705421 +0200 ++++ b/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js 2022-04-28 12:30:40.741138721 +0200 +@@ -275,6 +275,10 @@ + var modalText = options.position === 'in' ? TYPO3.lang['mess.move_into'] : TYPO3.lang['mess.move_after']; + modalText = modalText.replace('%s', options.node.name).replace('%s', options.target.name); + ++ if (tree.settings.disableDragModal) { ++ options.command = 'move'; ++ tree.sendChangeCommand(options); ++ } else { + Modal.confirm( + TYPO3.lang.move_page, + modalText, +@@ -307,6 +311,7 @@ + + Modal.dismiss(); + }); ++ } + } else if (tree.nodeIsOverDelete) { + var options = _this.changeNodePosition({droppedNode: droppedNode, command: 'delete'}); + if (tree.settings.displayDeleteConfirmation) { +--- a/Classes/Controller/Page/TreeController.php 2022-04-28 13:00:20.025466105 +0200 ++++ b/Classes/Controller/Page/TreeController.php 2022-04-28 13:00:22.312133921 +0200 +@@ -155,6 +155,7 @@ + 'doktypes' => $this->getDokTypes(), + 'displayDeleteConfirmation' => $this->getBackendUser()->jsConfirmation(JsConfirmation::DELETE), + 'temporaryMountPoint' => $this->getMountPointPath((int)($this->getBackendUser()->uc['pageTree_temporaryMountPoint'] ?? 0)), ++ 'disableDragModal' => !empty($this->getBackendUser()->uc['disableDragModal']) + ]; + + return new JsonResponse($configuration); diff --git a/ext_tables.php b/ext_tables.php index 4bf828b..2438057 100644 --- a/ext_tables.php +++ b/ext_tables.php @@ -65,3 +65,14 @@ call_user_func( } ); + +$GLOBALS['TYPO3_USER_SETTINGS']['columns']['disableDragModal'] = [ + 'type' => 'check', + 'label' => 'LLL:EXT:templates_aide/Resources/Private/Language/locallang.xlf:disableDragModal', +]; +$GLOBALS['TYPO3_USER_SETTINGS']['showitem'] = str_replace( + 'recursiveDelete', + 'recursiveDelete,disableDragModal', + $GLOBALS['TYPO3_USER_SETTINGS']['showitem'], +); +