[BUGFIX] Do not override hidden UC fields in user settings 99/50099/2
authorStefan Froemken <froemken@gmail.com>
Wed, 27 Jul 2016 07:34:54 +0000 (09:34 +0200)
committerMarkus Klein <markus.klein@typo3.org>
Fri, 7 Oct 2016 09:11:22 +0000 (11:11 +0200)
While saving a user's uc record, all fields, which are set to disabled
in user TSconfig, are not touched anymore.
This is enforced by reducing the fields of showItem to the ones which
are allowed via user TSconfig.

Resolves: #77263
Releases: master, 7.6
Change-Id: Ib867efef731654373a3b1502c410ba5e182780e4
Reviewed-on: https://review.typo3.org/50099
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
typo3/sysext/setup/Classes/Controller/SetupModuleController.php

index e8cc8d4..45967a6 100644 (file)
@@ -489,7 +489,11 @@ class SetupModuleController extends AbstractModule
         $fieldArray = $this->getFieldsFromShowItem();
         $tabLabel = '';
         foreach ($fieldArray as $fieldName) {
-            $more = '';
+            $config = $GLOBALS['TYPO3_USER_SETTINGS']['columns'][$fieldName];
+            if (isset($config['access']) && !$this->checkAccess($config)) {
+                continue;
+            }
+
             if (substr($fieldName, 0, 8) === '--div--;') {
                 if ($firstTabLabel === '') {
                     // First tab
@@ -505,28 +509,18 @@ class SetupModuleController extends AbstractModule
                 }
                 continue;
             }
-            $config = $GLOBALS['TYPO3_USER_SETTINGS']['columns'][$fieldName];
-
-            // Field my be disabled in setup.fields
-            if (isset($this->tsFieldConf[$fieldName . '.']['disabled']) && $this->tsFieldConf[$fieldName . '.']['disabled'] == 1) {
-                continue;
-            }
-            if (isset($config['access']) && !$this->checkAccess($config)) {
-                continue;
-            }
             $label = $this->getLabel($config['label'], $fieldName);
             $label = $this->getCSH($config['csh'] ?: $fieldName, $label);
             $type = $config['type'];
             $class = $config['class'];
-
             if ($type !== 'check') {
                 $class .= ' form-control';
             }
-
-            $style = $config['style'];
+            $more = '';
             if ($class) {
                 $more .= ' class="' . $class . '"';
             }
+            $style = $config['style'];
             if ($style) {
                 $more .= ' style="' . $style . '"';
             }
@@ -674,11 +668,9 @@ class SetupModuleController extends AbstractModule
     /**
      * Return a select with available languages
      *
-     * @param array $params
-     *
      * @return string Complete select as HTML string or warning box if something went wrong.
      */
-    public function renderLanguageSelect($params)
+    public function renderLanguageSelect()
     {
         $languageOptions = [];
         // Compile the languages dropdown
@@ -835,10 +827,9 @@ class SetupModuleController extends AbstractModule
      * @param string $str Locallang key
      * @param string $key Alternative override-config key
      * @param bool $addLabelTag Defines whether the string should be wrapped in a <label> tag.
-     * @param string $altLabelTagId Alternative id for use in "for" attribute of <label> tag. By default the $str key is used prepended with "field_".
      * @return string HTML output.
      */
-    protected function getLabel($str, $key = '', $addLabelTag = true, $altLabelTagId = '')
+    protected function getLabel($str, $key = '', $addLabelTag = true)
     {
         if (substr($str, 0, 4) === 'LLL:') {
             $out = $this->getLanguageService()->sL($str);
@@ -878,12 +869,23 @@ class SetupModuleController extends AbstractModule
 
     /**
      * Returns array with fields defined in $GLOBALS['TYPO3_USER_SETTINGS']['showitem']
+     * Remove fields which are disabled by user TSconfig
      *
-     * @return array Array with fieldnames visible in form
+     * @return string[] Array with field names visible in form
      */
     protected function getFieldsFromShowItem()
     {
-        return GeneralUtility::trimExplode(',', $GLOBALS['TYPO3_USER_SETTINGS']['showitem'], true);
+        $allowedFields = GeneralUtility::trimExplode(',', $GLOBALS['TYPO3_USER_SETTINGS']['showitem'], true);
+        foreach ($this->tsFieldConf as $fieldName => $userTsFieldConfig) {
+            if (!empty($userTsFieldConfig['disabled'])) {
+                $fieldName = rtrim($fieldName, '.');
+                $key = array_search($fieldName, $allowedFields);
+                if ($key !== false) {
+                    unset($allowedFields[$key]);
+                }
+            }
+        }
+        return $allowedFields;
     }
 
     /**