[!!!][TASK] Remove legacy soft references functionality 33/48933/7
authorBenni Mack <benni@typo3.org>
Tue, 12 Jul 2016 16:24:34 +0000 (18:24 +0200)
committerBenni Mack <benni@typo3.org>
Thu, 28 Jul 2016 06:06:29 +0000 (08:06 +0200)
The soft references based on TSconfig, TStemplate and images within
fileadmin/ are not accurate and thus useless since it's not common
anymore to reference TSconfig or TStemplate code inline inside the
DB fields, and also the data inside the softrefparser hasn't been used
anymore.

In order to refactor the SoftReference Index the old legacy code is
removed first without substitution.

The following softref keys are not evaluated anymore:
* TSconfig
* TStemplate

and can be removed from TCA.

The "image" soft reference key is not evaluating files within
fileadmin/ anymore (that are not linked as files).

The "typolink" and "typolink_tag" soft reference parsers don't evalute
links to plain files within fileadmin/ anymore.

The public property "SoftReferenceIndex::$fileAdminDir" is removed.

The following PHP methods are removed without substitution:
* SoftReferenceIndex::findRef_TStemplate()
* SoftReferenceIndex::findRef_TSconfig()
* SoftReferenceIndex::fileadminReferences()

Resolves: #77156
Releases: master
Change-Id: I0bc791a051fda06715175c2f526dddb90b8e4391
Reviewed-on: https://review.typo3.org/48933
Tested-by: Bamboo TYPO3com <info@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
12 files changed:
typo3/sysext/core/Classes/Database/SoftReferenceIndex.php
typo3/sysext/core/Classes/Migrations/TcaMigration.php
typo3/sysext/core/Configuration/DefaultConfiguration.php
typo3/sysext/core/Configuration/TCA/be_groups.php
typo3/sysext/core/Configuration/TCA/be_users.php
typo3/sysext/core/Configuration/TCA/pages.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-77156-TSconfigAndTStemplateSoftReferencesFunctionalityRemoved.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/Migrations/TcaMigrationTest.php
typo3/sysext/frontend/Configuration/TCA/fe_groups.php
typo3/sysext/frontend/Configuration/TCA/fe_users.php
typo3/sysext/frontend/Configuration/TCA/sys_template.php
typo3/sysext/rtehtmlarea/Classes/Hook/SoftReferenceHook.php

index 128d719..02b7ab3 100644 (file)
@@ -59,11 +59,9 @@ use TYPO3\CMS\Frontend\Service\TypoLinkCodecService;
  *
  * - 'substitute' : A full field value targeted for manual substitution (for import /export features)
  * - 'notify' : Just report if a value is found, nothing more.
- * - 'images' : HTML <img> tags for RTE images / images from fileadmin/
+ * - 'images' : HTML <img> tags for RTE images
  * - 'typolink' : references to page id or file, possibly with anchor/target, possibly commaseparated list.
  * - 'typolink_tag' : As typolink, but searching for <link> tag to encapsulate it.
- * - 'TSconfig' processing (filerefs? Domains? what do we know...)
- * - 'TStemplate' : freetext references to "fileadmin/" files.
  * - 'email' : Email highlight
  * - 'url' : URL highlights (with a scheme)
  */
@@ -72,22 +70,9 @@ class SoftReferenceIndex
     /**
      * @var string
      */
-    public $fileAdminDir = '';
-
-    /**
-     * @var string
-     */
     public $tokenID_basePrefix = '';
 
     /**
-     * Class construct to set global variable
-     */
-    public function __construct()
-    {
-        $this->fileAdminDir = !empty($GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir']) ? rtrim($GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'], '/') : 'fileadmin';
-    }
-
-    /**
      * Main function through which all processing happens
      *
      * @param string $table Database table name
@@ -144,12 +129,6 @@ class SoftReferenceIndex
             case 'ext_fileref':
                 $retVal = $this->findRef_extension_fileref($content, $spParams);
                 break;
-            case 'TStemplate':
-                $retVal = $this->findRef_TStemplate($content, $spParams);
-                break;
-            case 'TSconfig':
-                $retVal = $this->findRef_TSconfig($content, $spParams);
-                break;
             case 'email':
                 $retVal = $this->findRef_email($content, $spParams);
                 break;
@@ -165,7 +144,7 @@ class SoftReferenceIndex
     /**
      * Finding image tags in the content.
      * All images that are not from external URLs will be returned with an info text
-     * Will only return files in fileadmin/ and files in uploads/ folders which are prefixed with "RTEmagic[C|P]_" for substitution
+     * Will only return files in uploads/ folders which are prefixed with "RTEmagic[C|P]_" for substitution
      * Any "clear.gif" images are ignored.
      *
      * @param string $content The input content to analyse
@@ -192,8 +171,8 @@ class SoftReferenceIndex
                     $tokenID = $this->makeTokenID($k);
                     $elements[$k] = array();
                     $elements[$k]['matchString'] = $v;
-                    // If the image seems to be from fileadmin/ folder or an RTE image, then proceed to set up substitution token:
-                    if (GeneralUtility::isFirstPartOfStr($srcRef, $this->fileAdminDir . '/') || GeneralUtility::isFirstPartOfStr($srcRef, 'uploads/') && preg_match('/^RTEmagicC_/', basename($srcRef))) {
+                    // If the image seems to be an RTE image, then proceed to set up substitution token:
+                    if (GeneralUtility::isFirstPartOfStr($srcRef, 'uploads/') && preg_match('/^RTEmagicC_/', basename($srcRef))) {
                         // Token and substitute value:
                         // Make sure the value we work on is found and will get substituted in the content (Very important that the src-value is not DeHSC'ed)
                         if (strstr($splitContent[$k], $attribs[0]['src'])) {
@@ -296,103 +275,6 @@ class SoftReferenceIndex
     }
 
     /**
-     * Processing the content expected from a TypoScript template
-     * This content includes references to files in fileadmin/ folders and file references in HTML tags like <img src="">, <a href=""> and <form action="">
-     *
-     * @param string $content The input content to analyse
-     * @param array $spParams Parameters set for the softref parser key in TCA/columns
-     * @return array Result array on positive matches, see description above. Otherwise FALSE
-     */
-    public function findRef_TStemplate($content, $spParams)
-    {
-        $elements = array();
-        // First, try to find images and links:
-        $htmlParser = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Html\HtmlParser::class);
-        $splitContent = $htmlParser->splitTags('img,a,form', $content);
-        // Traverse splitted parts:
-        foreach ($splitContent as $k => $v) {
-            if ($k % 2) {
-                $attribs = $htmlParser->get_tag_attributes($v);
-                $attributeName = '';
-                switch ($htmlParser->getFirstTagName($v)) {
-                    case 'img':
-                        $attributeName = 'src';
-                        break;
-                    case 'a':
-                        $attributeName = 'href';
-                        break;
-                    case 'form':
-                        $attributeName = 'action';
-                        break;
-                }
-                // Get file reference:
-                if (isset($attribs[0][$attributeName])) {
-                    $srcRef = htmlspecialchars_decode($attribs[0][$attributeName]);
-                    // Set entry:
-                    $tokenID = $this->makeTokenID($k);
-                    $elements[$k] = array();
-                    $elements[$k]['matchString'] = $v;
-                    // OK, if it looks like a local file from fileadmin/, include it:
-                    $pI = pathinfo($srcRef);
-                    $absPath = GeneralUtility::getFileAbsFileName(PATH_site . $srcRef);
-                    if (GeneralUtility::isFirstPartOfStr($srcRef, $this->fileAdminDir . '/') && !$pI['query'] && $absPath) {
-                        // Token and substitute value:
-                        // Very important that the src-value is not DeHSC'ed
-                        if (strstr($splitContent[$k], $attribs[0][$attributeName])) {
-                            $splitContent[$k] = str_replace($attribs[0][$attributeName], '{softref:' . $tokenID . '}', $splitContent[$k]);
-                            $elements[$k]['subst'] = array(
-                                'type' => 'file',
-                                'relFileName' => $srcRef,
-                                'tokenID' => $tokenID,
-                                'tokenValue' => $attribs[0][$attributeName]
-                            );
-                            if (!@is_file($absPath)) {
-                                $elements[$k]['error'] = 'File does not exist!';
-                            }
-                        } else {
-                            $elements[$k]['error'] = 'Could not substitute attribute (' . $attributeName . ') value with token!';
-                        }
-                    }
-                }
-            }
-        }
-        $content = implode('', $splitContent);
-        // Process free fileadmin/ references as well:
-        $content = $this->fileadminReferences($content, $elements);
-        // Return output:
-        if (!empty($elements)) {
-            $resultArray = array(
-                'content' => $content,
-                'elements' => $elements
-            );
-            return $resultArray;
-        }
-    }
-
-    /**
-     * Processes possible references inside of Page and User TSconfig fields.
-     * Currently this only includes file references to fileadmin/ but in fact there are currently no properties that supports such references.
-     *
-     * @param string $content The input content to analyse
-     * @param array $spParams Parameters set for the softref parser key in TCA/columns
-     * @return array Result array on positive matches, see description above. Otherwise FALSE
-     */
-    public function findRef_TSconfig($content, $spParams)
-    {
-        $elements = array();
-        // Process free fileadmin/ references from TSconfig
-        $content = $this->fileadminReferences($content, $elements);
-        // Return output:
-        if (!empty($elements)) {
-            $resultArray = array(
-                'content' => $content,
-                'elements' => $elements
-            );
-            return $resultArray;
-        }
-    }
-
-    /**
      * Finding email addresses in content and making them substitutable.
      *
      * @param string $content The input content to analyse
@@ -439,7 +321,7 @@ class SoftReferenceIndex
     public function findRef_url($content, $spParams)
     {
         $resultArray = array();
-        // Fileadmin files:
+        // URLs
         $parts = preg_split('/([^[:alnum:]"\']+)((http|ftp):\\/\\/[^[:space:]"\'<>]*)([[:space:]])/', ' ' . $content . ' ', 10000, PREG_SPLIT_DELIM_CAPTURE);
         foreach ($parts as $idx => $value) {
             if ($idx % 5 == 3) {
@@ -479,7 +361,7 @@ class SoftReferenceIndex
     public function findRef_extension_fileref($content, $spParams)
     {
         $resultArray = array();
-        // Fileadmin files:
+        // Files starting with EXT:
         $parts = preg_split('/([^[:alnum:]"\']+)(EXT:[[:alnum:]_]+\\/[^[:space:]"\',]*)/', ' ' . $content . ' ', 10000, PREG_SPLIT_DELIM_CAPTURE);
         foreach ($parts as $idx => $value) {
             if ($idx % 3 == 2) {
@@ -503,42 +385,6 @@ class SoftReferenceIndex
      * Helper functions
      *
      *************************/
-    /**
-     * Searches the content for a reference to a file in "fileadmin/".
-     * When a match is found it will get substituted with a token.
-     *
-     * @param string $content Input content to analyse
-     * @param array $elements Element array to be modified with new entries. Passed by reference.
-     * @return string Output content, possibly with tokens inserted.
-     */
-    public function fileadminReferences($content, &$elements)
-    {
-        // Fileadmin files are found
-        $parts = preg_split('/([^[:alnum:]]+)(' . preg_quote($this->fileAdminDir, '/') . '\\/[^[:space:]"\'<>]*)/', ' ' . $content . ' ', 10000, PREG_SPLIT_DELIM_CAPTURE);
-        // Traverse files:
-        foreach ($parts as $idx => $value) {
-            if ($idx % 3 == 2) {
-                // when file is found, set up an entry for the element:
-                $tokenID = $this->makeTokenID('fileadminReferences:' . $idx);
-                $elements['fileadminReferences.' . $idx] = array();
-                $elements['fileadminReferences.' . $idx]['matchString'] = $value;
-                $elements['fileadminReferences.' . $idx]['subst'] = array(
-                    'type' => 'file',
-                    'relFileName' => $value,
-                    'tokenID' => $tokenID,
-                    'tokenValue' => $value
-                );
-                $parts[$idx] = '{softref:' . $tokenID . '}';
-                // Check if the file actually exists:
-                $absPath = GeneralUtility::getFileAbsFileName(PATH_site . $value);
-                if (!@is_file($absPath)) {
-                    $elements['fileadminReferences.' . $idx]['error'] = 'File does not exist!';
-                }
-            }
-        }
-        // Implode the content again, removing prefixed and trailing white space:
-        return substr(implode('', $parts), 1, -1);
-    }
 
     /**
      * Analyse content as a TypoLink value and return an array with properties.
@@ -693,29 +539,6 @@ class SoftReferenceIndex
                         // This is a link to a folder...
                         return $content;
                     }
-
-                    // Process files found in fileadmin directory:
-                } elseif (!$tLP['query']) {
-                    // We will not process files which has a query added to it. That will look like a script we don't want to move.
-                    // File must be inside fileadmin/
-                    if (GeneralUtility::isFirstPartOfStr($tLP['filepath'], $this->fileAdminDir . '/')) {
-                        // Set up the basic token and token value for the relative file:
-                        $elements[$tokenID . ':' . $idx]['subst'] = array(
-                            'type' => 'file',
-                            'relFileName' => $tLP['filepath'],
-                            'tokenID' => $tokenID,
-                            'tokenValue' => $tLP['filepath']
-                        );
-                        // Depending on whether the file exists or not we will set the
-                        $absPath = GeneralUtility::getFileAbsFileName(PATH_site . $tLP['filepath']);
-                        if (!@is_file($absPath)) {
-                            $elements[$tokenID . ':' . $idx]['error'] = 'File does not exist!';
-                        }
-                        // Output content will be the token instead
-                        $content = '{softref:' . $tokenID . '}';
-                    } else {
-                        return $content;
-                    }
                 } else {
                     return $content;
                 }
index 61d6db5..bda98d1 100644 (file)
@@ -55,6 +55,7 @@ class TcaMigration
         $tca = $this->migrateDefaultExtrasRteTransFormOptions($tca);
         $tca = $this->migrateColorPickerWizardToRenderType($tca);
         $tca = $this->migrateSelectTreeOptions($tca);
+        $tca = $this->migrateTSconfigSoftReferences($tca);
         // @todo: if showitem/defaultExtras wizards[xy] is migrated to columnsOverrides here, enableByTypeConfig could be dropped
         return $tca;
     }
@@ -790,4 +791,47 @@ class TcaMigration
         }
         return $tca;
     }
+
+    /**
+     * Migrates selectTree fields deprecated options
+     *
+     * @param array $tca Incoming TCA
+     * @return array Migrated TCA
+     */
+    protected function migrateTSconfigSoftReferences(array $tca)
+    {
+        foreach ($tca as $table => &$tableDefinition) {
+            if (!isset($tableDefinition['columns']) || !is_array($tableDefinition['columns'])) {
+                continue;
+            }
+            foreach ($tableDefinition['columns'] as $fieldName => &$fieldConfig) {
+                if (isset($fieldConfig['config'])) {
+                    if (isset($fieldConfig['config']['softref'])) {
+                        $softReferences = array_flip(GeneralUtility::trimExplode(',', $fieldConfig['config']['softref']));
+                        $changed = false;
+                        if (isset($softReferences['TSconfig'])) {
+                            $changed = true;
+                            unset($softReferences['TSconfig']);
+                        }
+                        if (isset($softReferences['TStemplate'])) {
+                            $changed = true;
+                            unset($softReferences['TStemplate']);
+                        }
+                        if ($changed) {
+                            if (!empty($softReferences)) {
+                                $softReferences = array_flip($softReferences);
+                                $fieldConfig['config']['softref'] = implode(',', $softReferences);
+                            } else {
+                                unset($fieldConfig['config']['softref']);
+                            }
+                            $this->messages[] = 'The soft reference setting using \'TSconfig\' and '
+                                . '\'TStemplate\' was removed in TCA ' . $table . '[\'columns\']'
+                                . '[\'' . $fieldName . '\'][\'config\'][\'softref\']';
+                        }
+                    }
+                }
+            }
+        }
+        return $tca;
+    }
 }
index c3c932c..1b118f3 100644 (file)
@@ -1180,8 +1180,6 @@ return array(
                 'images' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
                 'typolink' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
                 'typolink_tag' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
-                'TSconfig' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
-                'TStemplate' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
                 'ext_fileref' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
                 'email' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
                 'url' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
index 2f23dbe..41c3c57 100644 (file)
@@ -255,8 +255,7 @@ return array(
             'config' => array(
                 'type' => 'text',
                 'cols' => '40',
-                'rows' => '5',
-                'softref' => 'TSconfig'
+                'rows' => '5'
             ),
             'defaultExtras' => 'fixed-font : enable-tab'
         ),
index 88ca5ee..82816a8 100644 (file)
@@ -340,8 +340,7 @@ return array(
             'config' => array(
                 'type' => 'text',
                 'cols' => '40',
-                'rows' => '5',
-                'softref' => 'TSconfig'
+                'rows' => '5'
             ),
             'defaultExtras' => 'fixed-font : enable-tab'
         ),
index 0ac3dc6..028df60 100644 (file)
@@ -143,8 +143,7 @@ return array(
             'config' => array(
                 'type' => 'text',
                 'cols' => '40',
-                'rows' => '5',
-                'softref' => 'TSconfig'
+                'rows' => '5'
             ),
             'defaultExtras' => 'fixed-font : enable-tab'
         ),
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-77156-TSconfigAndTStemplateSoftReferencesFunctionalityRemoved.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-77156-TSconfigAndTStemplateSoftReferencesFunctionalityRemoved.rst
new file mode 100644 (file)
index 0000000..afb78e3
--- /dev/null
@@ -0,0 +1,47 @@
+================================================================================
+Breaking: #77156 - TSconfig and TStemplate soft references functionality removed
+================================================================================
+
+Description
+===========
+
+Soft references based on TSconfig, TStemplate and images within fileadmin/ have been removed.
+
+The soft reference keys "TSconfig" and "TStemplate" that could previously be set via
+``$TCA[$table][columns][$column][config][softref]`` are not evaluated anymore.
+
+The soft reference keys "images", "typolink" and "typolink_tag" are not evaluating files within fileadmin/
+anymore that are not based on the File Abstraction Layer.
+
+The public PHP property "SoftReferenceIndex::$fileAdminDir" has been removed.
+
+The following PHP methods has been removed without substitution:
+* SoftReferenceIndex::findRef_TStemplate()
+* SoftReferenceIndex::findRef_TSconfig()
+* SoftReferenceIndex::fileadminReferences()
+
+
+Impact
+======
+
+Setting softref property ``TSconfig`` and ``TStemplate`` within TCA will not be evaluated anymore and will
+throw a deprecation message.
+
+Calling any of the PHP methods above will throw a fatal PHP error.
+
+The soft reference index will not be updated with the TSconfig and TStemplate properties anymore, as well
+as files directly linked or referenced with the fileadmin/ directory.
+
+
+Affected Installations
+======================
+
+If the soft reference index is evaluated in a third-party extension, this might result in unexpected behaviour.
+
+All TYPO3 instances using extensions setting TSconfig or TStemplate soft references in TCA are also affected.
+
+
+Migration
+=========
+
+Remove the softref keys ``TStemplate`` and ``TSconfig`` from the TCA definition of the third party extensions.
\ No newline at end of file
index 4720f84..16d088f 100644 (file)
@@ -1592,4 +1592,94 @@ class TcaMigrationTest extends UnitTestCase
         $subject = new TcaMigration();
         $this->assertEquals($expected, $subject->migrate($input));
     }
+
+    public function migrateTsTemplateSoftReferencesDataProvider()
+    {
+        return [
+            'nothing removed' => [
+                [
+                    'aTable' => [
+                        'columns' => [
+                            'aCol' => [
+                                'config' => [
+                                    'softref' => 'email,somethingelse'
+                                ],
+                            ],
+                        ],
+                    ],
+                ],
+                [
+                    'aTable' => [
+                        'columns' => [
+                            'aCol' => [
+                                'config' => [
+                                    'softref' => 'email,somethingelse',
+                                ],
+                            ],
+                        ],
+                    ],
+                ]
+            ],
+            'TStemplate only' => [
+                [
+                    'aTable' => [
+                        'columns' => [
+                            'aCol' => [
+                                'config' => [
+                                    'softref' => 'TStemplate,somethingelse'
+                                ],
+                            ],
+                        ],
+                    ],
+                ],
+                [
+                    'aTable' => [
+                        'columns' => [
+                            'aCol' => [
+                                'config' => [
+                                    'softref' => 'somethingelse',
+                                ],
+                            ],
+                        ],
+                    ],
+                ]
+            ],
+            'TStemplate and TSconfig' => [
+                [
+                    'aTable' => [
+                        'columns' => [
+                            'aCol' => [
+                                'config' => [
+                                    'softref' => 'TStemplate,somethingelse,TSconfig'
+                                ],
+                            ],
+                        ],
+                    ],
+                ],
+                [
+                    'aTable' => [
+                        'columns' => [
+                            'aCol' => [
+                                'config' => [
+                                    'softref' => 'somethingelse',
+                                ],
+                            ],
+                        ],
+                    ],
+                ]
+            ],
+        ];
+    }
+
+    /**
+     * @test
+     * @dataProvider migrateTsTemplateSoftReferencesDataProvider
+     * @param array $givenConfig
+     * @param array $expectedConfig
+     */
+    public function migrateTsTemplateSoftReferences(array $givenConfig, array $expectedConfig)
+    {
+        $subject = new TcaMigration();
+        $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
+    }
 }
index cd2c283..bef4de8 100644 (file)
@@ -78,8 +78,7 @@ return array(
             'config' => array(
                 'type' => 'text',
                 'cols' => '40',
-                'rows' => '10',
-                'softref' => 'TSconfig'
+                'rows' => '10'
             ),
             'defaultExtras' => 'fixed-font : enable-tab'
         )
index 2e44a73..b0ffc17 100644 (file)
@@ -256,8 +256,7 @@ return array(
             'config' => array(
                 'type' => 'text',
                 'cols' => '40',
-                'rows' => '10',
-                'softref' => 'TSconfig'
+                'rows' => '10'
             ),
             'defaultExtras' => 'fixed-font : enable-tab'
         ),
index b288019..c8c6a60 100644 (file)
@@ -102,7 +102,7 @@ return array(
                 'cols' => '48',
                 'rows' => '10',
                 'wrap' => 'OFF',
-                'softref' => 'TStemplate,email[subst],url[subst]'
+                'softref' => 'email[subst],url[subst]'
             ),
             'defaultExtras' => 'fixed-font : enable-tab'
         ),
@@ -194,7 +194,7 @@ return array(
                 'rows' => 10,
                 'cols' => 48,
                 'wrap' => 'OFF',
-                'softref' => 'TStemplate,email[subst],url[subst]'
+                'softref' => 'email[subst],url[subst]'
             ),
             'defaultExtras' => 'fixed-font : enable-tab'
         ),
index 1de0ef4..331b667 100644 (file)
@@ -19,42 +19,35 @@ namespace TYPO3\CMS\Rtehtmlarea\Hook;
  */
 class SoftReferenceHook extends \TYPO3\CMS\Core\Database\SoftReferenceIndex
 {
-    // Token prefix
-    public $tokenID_basePrefix = '';
-
     /**
      * Main function through which all processing happens
      *
-     * @param string Database table name
-     * @param string Field name for which processing occurs
-     * @param int UID of the record
-     * @param string The content/value of the field
-     * @param string The softlink parser key. This is only interesting if more than one parser is grouped in the same class. That is the case with this parser.
-     * @param array Parameters of the softlink parser. Basically this is the content inside optional []-brackets after the softref keys. Parameters are exploded by ";
-     * @param string If running from inside a FlexForm structure, this is the path of the tag.
-     * @return array Result array on positive matches. Otherwise FALSE
+     * @param string $table Database table name
+     * @param string $field Field name for which processing occurs
+     * @param int $uid UID of the record
+     * @param string $content The content/value of the field
+     * @param string $spKey The softlink parser key. This is only interesting if more than one parser is grouped in the same class. That is the case with this parser.
+     * @param array $spParams Parameters of the softlink parser. Basically this is the content inside optional []-brackets after the softref keys. Parameters are exploded by ";
+     * @param string $structurePath If running from inside a FlexForm structure, this is the path of the tag.
+     * @return array|bool Result array on positive matches. Otherwise FALSE
      */
     public function findRef($table, $field, $uid, $content, $spKey, $spParams, $structurePath = '')
     {
-        $retVal = false;
         $this->tokenID_basePrefix = $table . ':' . $uid . ':' . $field . ':' . $structurePath . ':' . $spKey;
-        switch ($spKey) {
-            case 'rtehtmlarea_images':
-                $retVal = $this->findRef_rtehtmlarea_images($content, $spParams);
-                break;
-            default:
-                $retVal = false;
+        if ($spKey === 'rtehtmlarea_images') {
+            return $this->findRef_rtehtmlarea_images($content, $spParams);
+        } else {
+            return false;
         }
-        return $retVal;
     }
 
     /**
      * Finding image tags with data-htmlarea-file-uid attribute in the content.
      * All images that have an data-htmlarea-file-uid attribute will be returned with an info text
      *
-     * @param string The input content to analyse
-     * @param array Parameters set for the softref parser key in TCA/columns
-     * @return array Result array on positive matches, see description above. Otherwise FALSE
+     * @param string $content The input content to analyse
+     * @param array $spParams Parameters set for the softref parser key in TCA/columns
+     * @return array|bool Result array on positive matches, see description above. Otherwise FALSE
      */
     public function findRef_rtehtmlarea_images($content, $spParams)
     {