[FEATURE] Integrate possibility to overrule types array in TCEforms
authorTYPO3 FAL Team <typo3v4@typo3.org>
Sat, 25 Feb 2012 21:41:27 +0000 (22:41 +0100)
committerSteffen Ritter <info@rs-websystems.de>
Sun, 26 Feb 2012 21:52:17 +0000 (22:52 +0100)
Possibility to override the
$GLOBALS['TCA'][TABLE]['types'][TYPE]['showitem'] setting

Change-Id: I08202e2a9ffb6a1fffd944b94c5e50edb9190bb2
Resolves: #34281
Releases: 4.7
Reviewed-on: http://review.typo3.org/9205
Reviewed-by: Georg Ringer
Tested-by: Georg Ringer
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
t3lib/class.t3lib_tceforms.php
t3lib/class.t3lib_tceforms_inline.php

index 3f8a08f..847a471 100644 (file)
@@ -309,13 +309,14 @@ class t3lib_TCEforms {
         * Based on the $table and $row of content, this displays the complete TCEform for the record.
         * The input-$row is required to be preprocessed if necessary by eg. the t3lib_transferdata class. For instance the RTE content should be transformed through this class first.
         *
-        * @param       string          The table name
-        * @param       array           The record from the table for which to render a field.
-        * @param       integer         Depth level
-        * @return      string          HTML output
+        * @param string $table The table name
+        * @param array $row The record from the table for which to render a field.
+        * @param integer $depth Depth level
+        * @param array $overruleTypesArray Overrule types array. Can be used to override the showitem etc. configuration for the TCA types of the table. Can contain all settings which are possible in the TCA 'types' section. See e.g. $TCA['tt_content']['types'].
+        * @return string HTML output
         * @see getSoloField()
         */
-       function getMainFields($table, $row, $depth = 0) {
+       function getMainFields($table, array $row, $depth = 0, array $overruleTypesArray = array()) {
                $this->renderDepth = $depth;
 
                        // Init vars:
@@ -354,6 +355,9 @@ class t3lib_TCEforms {
                                // Find the list of fields to display:
                        if ($GLOBALS['TCA'][$table]['types'][$typeNum]) {
                                $itemList = $GLOBALS['TCA'][$table]['types'][$typeNum]['showitem'];
+                               if (is_array($overruleTypesArray) && isset($overruleTypesArray[$typeNum]['showitem'])) {
+                                       $itemList = $overruleTypesArray[$typeNum]['showitem'];
+                               }
                                if ($itemList) { // If such a list existed...
                                                // Explode the field list and possibly rearrange the order of the fields, if configured for
                                        $fields = t3lib_div::trimExplode(',', $itemList, 1);
index 691c42e..c36c013 100644 (file)
@@ -370,7 +370,9 @@ class t3lib_TCEforms_inline {
                                // Render full content ONLY IF this is a AJAX-request, a new record, the record is not collapsed or AJAX-loading is explicitly turned off
                        if ($isNewRecord || $isExpanded || !$ajaxLoad) {
                                $combination = $this->renderCombinationTable($rec, $appendFormFieldNames, $config);
-                               $fields = $this->renderMainFields($foreign_table, $rec);
+
+                               $overruleTypesArray = isset($config['foreign_types']) ? $config['foreign_types'] : array();
+                               $fields = $this->renderMainFields($foreign_table, $rec, $overruleTypesArray);
                                $fields = $this->wrapFormsSection($fields);
                                        // Replace returnUrl in Wizard-Code, if this is an AJAX call
                                $ajaxArguments = t3lib_div::_GP('ajax');
@@ -421,11 +423,12 @@ class t3lib_TCEforms_inline {
        /**
         * Wrapper for TCEforms::getMainFields().
         *
-        * @param       string          $table: The table name
-        * @param       array           $row: The record to be rendered
-        * @return      string          The rendered form
+        * @param string $table: The table name
+        * @param array $row: The record to be rendered
+        * @param array $overruleTypesArray: Overrule TCA [types] array, e.g to overrride [showitem] configuration of a particular type
+        * @return string The rendered form
         */
-       protected function renderMainFields($table, $row) {
+       protected function renderMainFields($table, array $row, array $overruleTypesArray = array()) {
                        // The current render depth of t3lib_TCEforms:
                $depth = $this->fObj->renderDepth;
                        // If there is some information about already rendered palettes of our parent, store this info:
@@ -433,7 +436,7 @@ class t3lib_TCEforms_inline {
                        $palettesRendered = $this->fObj->palettesRendered[$depth][$table];
                }
                        // Render the form:
-               $content = $this->fObj->getMainFields($table, $row, $depth);
+               $content = $this->fObj->getMainFields($table, $row, $depth, $overruleTypesArray);
                        // If there was some info about rendered palettes stored, write it back for our parent:
                if (isset($palettesRendered)) {
                        $this->fObj->palettesRendered[$depth][$table] = $palettesRendered;