[BUGFIX] rte_ckeditor triggers has-change on change
[Packages/TYPO3.CMS.git] / typo3 / sysext / rte_ckeditor / Classes / Form / Element / RichTextElement.php
index f485c41..0d7a720 100644 (file)
@@ -75,20 +75,16 @@ class RichTextElement extends AbstractFormElement
 
         $value = $this->data['parameterArray']['itemFormElValue'] ?? '';
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $attributes = [
@@ -184,10 +180,11 @@ class RichTextElement extends AbstractFormElement
         return 'function(CKEDITOR) {
                 ' . $externalPlugins . '
                 CKEDITOR.replace("' . $fieldId . '", ' . json_encode($configuration) . ');
-                require([\'TYPO3/CMS/Backend/FormEngine\'], function(FormEngine) {
+                require([\'jquery\', \'TYPO3/CMS/Backend/FormEngine\'], function($, FormEngine) {
                     CKEDITOR.instances.' . $fieldId . '.on(\'change\', function() {
                         CKEDITOR.instances.' . $fieldId . '.updateElement();
                         FormEngine.Validation.validate();
+                        FormEngine.Validation.markFieldAsChanged($(\'#' . $fieldId . '\'));
                     });
                 });
         }';
@@ -230,6 +227,24 @@ class RichTextElement extends AbstractFormElement
     }
 
     /**
+     * Add configuration to replace LLL: references with the translated value
+     * @param array $configuration
+     *
+     * @return array
+     */
+    protected function replaceLanguageFileReferences(array $configuration): array
+    {
+        foreach ($configuration as $key => $value) {
+            if (is_array($value)) {
+                $configuration[$key] = $this->replaceLanguageFileReferences($value);
+            } elseif (is_string($value) && stripos($value, 'LLL:') === 0) {
+                $configuration[$key] = $this->getLanguageService()->sL($value);
+            }
+        }
+        return $configuration;
+    }
+
+    /**
      * Add configuration to replace absolute EXT: paths with relative ones
      * @param array $configuration
      *
@@ -240,7 +255,7 @@ class RichTextElement extends AbstractFormElement
         foreach ($configuration as $key => $value) {
             if (is_array($value)) {
                 $configuration[$key] = $this->replaceAbsolutePathsToRelativeResourcesPath($value);
-            } elseif (is_string($value) && substr($value, 0, 4) === 'EXT:') {
+            } elseif (is_string($value) && stripos($value, 'EXT:') === 0) {
                 $configuration[$key] = $this->resolveUrlPath($value);
             }
         }
@@ -282,7 +297,9 @@ class RichTextElement extends AbstractFormElement
         }
         $configuration['contentsLanguage'] = $this->getLanguageIsoCodeOfContent();
 
-        // replace all paths
+        // Replace all label references
+        $configuration = $this->replaceLanguageFileReferences($configuration);
+        // Replace all paths
         $configuration = $this->replaceAbsolutePathsToRelativeResourcesPath($configuration);
 
         // there are some places where we define an array, but it needs to be a list in order to work