diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Clipboard/Clipboard.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Clipboard/Clipboard.php 719d718 < diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/ContextMenu/Pagetree/ContextMenuDataProvider.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/ContextMenu/Pagetree/ContextMenuDataProvider.php 67c67,84 < return array_merge($disableItems, $additionalItems); --- > $disableItems = array_merge($disableItems, $additionalItems); > > // Further manipulation of disableItems array via hook > // @internal: This is an internal hook for extension impexp only, this hook may change without further notice > if (!empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['backend']['contextMenu']['disableItems']) > && is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['backend']['contextMenu']['disableItems']) > ) { > $hooks = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['backend']['contextMenu']['disableItems']; > foreach ($hooks as $hook) { > $parameterArray = [ > 'disableItems' => &$disableItems, > ]; > $null = null; > GeneralUtility::callUserFunction($hook, $parameterArray, $null); > } > } > > return $disableItems; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/BackendController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/BackendController.php 484c484 < 'refresh_login_title' => sprintf($lang->sL('LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_title'), htmlspecialchars($this->getBackendUser()->user['username'])), --- > 'refresh_login_title' => $lang->sL('LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_title'), diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php 406,407c406,407 < ' . htmlspecialchars($GLOBALS['BE_USER']->user['username']) . '
< ' . ($GLOBALS['BE_USER']->user['realName'] ? htmlspecialchars($GLOBALS['BE_USER']->user['realName']) : '') . ' --- > ' . htmlspecialchars($creatorRecord['username']) . '
> ' . ($creatorRecord['realName'] ? htmlspecialchars($creatorRecord['realName']) : '') . ' diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/ContentElement/NewContentElementController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/ContentElement/NewContentElementController.php 545c545 < if ($authModeDeny || $fN === 'CType' && in_array($fV, $removeItems[$fN]) || $isNotInKeepItems) { --- > if ($authModeDeny || $fN === 'CType' && (in_array($fV, $removeItems[$fN]) || $isNotInKeepItems)) { diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/File/FileController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/File/FileController.php 166,167d165 < // Push errors to flash message queue, if there are any < $this->fileProcessor->pushErrorMessagesToFlashMessageQueue(); 186,187d183 < // Push errors to flash message queue, if there are any < $this->fileProcessor->pushErrorMessagesToFlashMessageQueue(); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php 796a797,800 > if (!$this->backendUserHasUcInlineView($backendUser)) { > return []; > } > 799c803 < $inlineView = array(); --- > $inlineView = []; 800a805 > 804a810,820 > * Method to check whether the backend user has the property inline view for the current IRRE item. > * In existing or old IRRE items the attribute may not exist, then the unserialize will fail. > * > * @param BackendUserAuthentication $backendUser > * @return bool > */ > protected function backendUserHasUcInlineView(BackendUserAuthentication $backendUser) { > return !empty($backendUser->uc['inlineView']); > } > > /** 875,911c891 < // Substitute FlexForm addition and make parsing a bit easier < $domObjectId = str_replace('---', ':', $domObjectId); < // The starting pattern of an object identifier (e.g. "data--) < $pattern = '/^data' . '-' . '(?.+?)' . '-' . '(?.+)$/'; < < $flexFormPath = []; < // Will be checked against the FlexForm configuration as an additional safeguard < $foreignTableName = ''; < < if (preg_match($pattern, $domObjectId, $match)) { < // For new records the flexform path should be the second to last array element, < // followed by the foreign table name. For existing records it should be the third < // array element from the end as the UID of the inline record is provided as well. < $parts = array_slice(explode('-', $match['anything'], 4), -2, 2); < < if (count($parts) !== 2 || !isset($parts[0]) || strpos($parts[0], ':') === false) { < throw new \UnexpectedValueException( < 'DOM Object ID ' . $domObjectId . ' does not contain required information ' < . 'to extract inline field configuration.', < 1446996136 < ); < } < < $fieldParts = GeneralUtility::trimExplode(':', $parts[0]); < < // FlexForm parts start with data: < if (empty($fieldParts) || !isset($fieldParts[1]) || $fieldParts[1] !== 'data') { < throw new \UnexpectedValueException( < 'Malformed flexform identifier: ' . $parts[2], < 1446996254 < ); < } < < $flexFormPath = array_slice($fieldParts, 2); < $foreignTableNameParts = explode('-', $parts[1]); < $foreignTableName = $foreignTableNameParts[0]; < } --- > list($flexFormPath, $foreignTableName) = $this->splitDomObjectId($domObjectId); 914c894 < --- > $flexFormPath = explode(':', $flexFormPath); 970a951,994 > } > > /** > * split the domObjectID and retrieve the needed parts > * > * @param string $domObjectId > * > * @return array > */ > protected function splitDomObjectId($domObjectId) > { > > // Substitute FlexForm addition and make parsing a bit easier > $domObjectId = str_replace('---', ':', $domObjectId); > $pattern = '/:data:(?.*?)-(?[^-]+)(?:-(?:NEW)?\w+)?$/'; > > /* EXPLANATION for the regex: > * according https://regex101.com/ > * > * :data: matches the characters :data: literally (case sensitive) > * (?.*?) Named capturing group flexformPath > * .*? matches any character (except newline) > * Quantifier: *? Between zero and unlimited times, as few times as possible, expanding as needed [lazy] > * - matches the character - literally > * (?[^-]+) Named capturing group tableName > * [^-]+ match a single character not present in the list below > * Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] > * - the literal character - > * (?:-(?:NEW)?\w+)? Non-capturing group > * Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy] > * - matches the character - literally > * (?:NEW)? Non-capturing group > * Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy] > * NEW matches the characters NEW literally (case sensitive) > * \w+ match any word character [a-zA-Z0-9_] > * Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] > * $ assert position at end of a line > */ > > if (preg_match($pattern, $domObjectId, $match)) { > return array($match['flexformPath'], $match['tableName']); > } > > return []; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/LoginController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/LoginController.php 156c156 < $pageRenderer->addJsLibrary('placeholders', 'sysext/core/Resources/Public/JavaScript/Contrib/placeholders.jquery.min.js'); --- > $pageRenderer->addJsLibrary('placeholders', 'sysext/core/Resources/Public/JavaScript/Contrib/placeholders.min.js'); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/Page/LocalizationController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/Page/LocalizationController.php 193a194,206 > $this->process($params); > > $response->getBody()->write(json_encode([])); > return $response; > } > > /** > * Processes the localization actions > * > * @param array $params > */ > protected function process($params) > { 254,256d266 < < $response->getBody()->write(json_encode([])); < return $response; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/PageLayoutController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/PageLayoutController.php 1498c1498 < ->setTitle('__' . $lang->sL(BackendUtility::getLabelFromItemlist('tt_content', 'colPos', $colPos), true) . ':__') --- > ->setTitle('__' . $lang->sL(BackendUtility::getLabelFromItemlist('tt_content', 'colPos', $colPos)) . ':__') 1505c1505 < ->setTitle(htmlspecialchars(GeneralUtility::fixed_lgd_cs(($cRow['header'] ? $cRow['header'] : '[' . $lang->sL('LLL:EXT:lang/locallang_core.xlf:labels.no_title') . '] ' . strip_tags($cRow['bodytext'])), $beUser->uc['titleLen']))) --- > ->setTitle(GeneralUtility::fixed_lgd_cs(($cRow['header'] ? $cRow['header'] : '[' . $lang->sL('LLL:EXT:lang/locallang_core.xlf:labels.no_title') . '] ' . strip_tags($cRow['bodytext'])), $beUser->uc['titleLen'])) diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/UserSettingsController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/UserSettingsController.php 205c205 < $array = &$this->getBackendUser()->uc; --- > $array = $this->getBackendUser()->uc; 208c208 < $array = &$array[$subkey]; --- > $array = &$array[$subkey]; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Controller/Wizard/TableController.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Controller/Wizard/TableController.php 134,135d133 < // Setting form tag: < list($rUri) = explode('#', GeneralUtility::getIndpEnv('REQUEST_URI')); 161a160 > list($rUri) = explode('#', GeneralUtility::getIndpEnv('REQUEST_URI')); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Domain/Repository/Localization/LocalizationRepository.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Domain/Repository/Localization/LocalizationRepository.php 36c36 < 'tt_content,tt_content AS tt_content_orig', --- > 'tt_content,tt_content AS tt_content_orig,sys_language', 40a41 > . ' AND tt_content_orig.sys_language_uid=sys_language.uid' diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/AbstractNode.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/AbstractNode.php 166c166 < if ($config['renderType'] !== 'selectTree' && $maxItems <= 1 && $minItems > 0) { --- > if ($config['type'] === 'select' && $config['renderType'] !== 'selectTree' && $maxItems <= 1 && $minItems > 0) { diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/Container/FlexFormNoTabsContainer.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/Container/FlexFormNoTabsContainer.php 61c61 < if ((string)$row[$key] !== '') { --- > if (is_string($row[$key]) && $row[$key] !== '') { 62a63,64 > } elseif (is_array($row[$key]) && isset($row[$key][0]) && is_string($row[$key][0]) && $row[$key][0] !== '') { > $parameterArray['_cshKey'] .= '.' . $row[$key][0]; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/Container/FlexFormTabsContainer.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/Container/FlexFormTabsContainer.php 65c65 < if ((string)$row[$key] !== '') { --- > if (is_string($row[$key]) && $row[$key] !== '') { 66a67,68 > } elseif (is_array($row[$key]) && isset($row[$key][0]) && is_string($row[$key][0]) && $row[$key][0] !== '') { > $parameterArray['_cshKey'] .= '.' . $row[$key][0]; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/Container/InlineRecordContainer.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/Container/InlineRecordContainer.php 503c503 < GeneralUtility::quoteJSvalue($hiddenField) .')'; --- > GeneralUtility::quoteJSvalue($hiddenField) . ')'; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/Container/SingleFieldContainer.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/Container/SingleFieldContainer.php 412c412 < . ' --- > . ' diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/Element/ImageManipulationElement.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/Element/ImageManipulationElement.php 91c91 < if (GeneralUtility::inList(mb_strtolower($config['allowedExtensions']), mb_strtolower($file->getExtension()))) { --- > if (GeneralUtility::inList(strtolower($config['allowedExtensions']), strtolower($file->getExtension()))) { 141c141 < $content .= mb_strtoupper(implode(', ', GeneralUtility::trimExplode(',', $config['allowedExtensions']))); --- > $content .= strtoupper(implode(', ', GeneralUtility::trimExplode(',', $config['allowedExtensions']))); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php 961a962 > $effectivePid = $result['effectivePid']; 992a994,999 > // Use pid from parent page clause if in flex flom context > if (strpos($foreignTableClause, '###CURRENT_PID###') !== false > && !empty($result['flexParentDatabaseRow']['pid']) > ) { > $effectivePid = $result['flexParentDatabaseRow']['pid']; > } 1045c1052 < (int)$result['effectivePid'], --- > (int)$effectivePid, diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaFlexProcess.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/FormDataProvider/TcaFlexProcess.php 614d613 < diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/FormResultCompiler.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/FormResultCompiler.php 261c261 < $this->loadJavascriptLib('sysext/core/Resources/Public/JavaScript/Contrib/placeholders.jquery.min.js'); --- > $this->loadJavascriptLib('sysext/core/Resources/Public/JavaScript/Contrib/placeholders.min.js'); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Form/Wizard/SuggestWizard.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Form/Wizard/SuggestWizard.php 239c239 < return !$tableConfig['ctrl']['hideTable']; --- > return (bool)$tableConfig['ctrl']['hideTable']; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Http/AjaxRequestHandler.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Http/AjaxRequestHandler.php 203c203 < $ajaxObj->setError('Invalid CSRF token detected for ajaxID "' . $ajaxID . '"!'); --- > $ajaxObj->setError('Invalid CSRF token detected for ajaxID "' . $ajaxID . '", reload the backend of TYPO3'); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Search/LiveSearch/LiveSearch.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Search/LiveSearch/LiveSearch.php 195d194 < $isFirst = true; 204d202 < $dbCount = $GLOBALS['TYPO3_DB']->sql_num_rows($result); 216d213 < $isFirst = false; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Template/Components/Buttons/Action/ShortcutButton.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Template/Components/Buttons/Action/ShortcutButton.php 36,37d35 < * $extbaseButton = $buttonBar->makeShortcutButton() < * ->setControllerContext($this->controllerContext); 39d36 < * $buttonBar->addButton($extbaseButton); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Tree/Pagetree/ExtdirectTreeCommands.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Tree/Pagetree/ExtdirectTreeCommands.php 359c359 < if (!empty(static::getBackendUser()->uc['pageTree_temporaryMountPoint'])){ --- > if (!empty(static::getBackendUser()->uc['pageTree_temporaryMountPoint'])) { diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/Utility/BackendUtility.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/Utility/BackendUtility.php 28d27 < use TYPO3\CMS\Core\Messaging\FlashMessage; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Classes/View/PageTreeView.php /var/www/typo3_src-7.6.10/typo3/sysext/backend/Classes/View/PageTreeView.php 66c66 < public function wrapIcon($thePageIcon, &$row) --- > public function wrapIcon($thePageIcon, $row) diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Resources/Public/JavaScript/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js /var/www/typo3_src-7.6.10/typo3/sysext/backend/Resources/Public/JavaScript/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js 96c96 < var hasContentFrameValidPageId = (contentId !== '-1' && contentId !== '0'); --- > var hasContentFrameValidPageId = contentId !== '-1'; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineFlexForm.js /var/www/typo3_src-7.6.10/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineFlexForm.js 213c213,217 < previewContent += (previewContent ? ' / ' : '') + $(this).val(); --- > var content = $($.parseHTML($(this).val())).text(); > if (content.length > 50) { > content = content.substring(0, 50) + '...'; > } > previewContent += (previewContent ? ' / ' : '') + content; diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineSuggest.js /var/www/typo3_src-7.6.10/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineSuggest.js 44c44 < var labelEl = $('
').text($(element).data('label')); --- > var labelEl = $('
').html($(element).data('label')); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js /var/www/typo3_src-7.6.10/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js 207d206 < var origValue = $humanReadableField.val(); 220,226c219,220 < if ($.inArray('password', evalList) !== -1) { < $mainField.val(origValue); < $humanReadableField.val(newValue); < } else { < $mainField.val(newValue); < $humanReadableField.val(formattedValue); < } --- > $mainField.val(newValue); > $humanReadableField.val(formattedValue); 277d270 < $field.closest(FormEngineValidation.markerSelector).addClass(FormEngineValidation.errorClass); 291d283 < $field.closest(FormEngineValidation.markerSelector).addClass(FormEngineValidation.errorClass); 314d305 < $field.closest(FormEngineValidation.markerSelector).addClass(FormEngineValidation.errorClass); 359a351,353 > // mark field > $field.closest(FormEngineValidation.markerSelector).addClass(FormEngineValidation.errorClass); > 490,491c484 < var theString = (value) ? FormEngineValidation.passwordDummy : ''; < returnValue = theString; --- > // password is only a display evaluation, we ignore it diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.inline.js /var/www/typo3_src-7.6.10/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.inline.js 179a180 > return false; 1135c1136 < TYPO3.jQuery('#' + this.escapeObjectId(objectId) + '_label').html(value.length ? value : this.noTitleString); --- > TYPO3.jQuery('#' + this.escapeObjectId(objectId) + '_label').text(value.length ? value : this.noTitleString); diff -r /var/www/typo3_src-7.6.9/typo3/sysext/backend/Resources/Public/JavaScript/LoginRefresh.js /var/www/typo3_src-7.6.10/typo3/sysext/backend/Resources/Public/JavaScript/LoginRefresh.js 207c207,208 < LoginRefresh.$loginForm.find('.modal-header h4').text(TYPO3.LLL.core.refresh_login_title); --- > var refresh_login_title = String(TYPO3.LLL.core.refresh_login_title).replace('%s', TYPO3.configuration.username); > LoginRefresh.$loginForm.find('.modal-header h4').text(refresh_login_title); 220c221,225 < $('