diff --git a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/FormEngineSuggest.ts b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/FormEngineSuggest.ts index 1dd6cbef972910821b18bd84d7b482f44130441b..3ddc6019b5474f5f47d85ef6bf2a317b57a087f6 100644 --- a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/FormEngineSuggest.ts +++ b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/FormEngineSuggest.ts @@ -56,6 +56,7 @@ class FormEngineSuggest { const flexFormFieldName: string = searchField.dataset.flexformfieldname; const flexFormContainerName: string = searchField.dataset.flexformcontainername; const flexFormContainerFieldName: string = searchField.dataset.flexformcontainerfieldname; + const recordTypeValue: string = searchField.dataset.recordtypevalue; const minimumCharacters: number = parseInt(searchField.dataset.minchars, 10); const url: string = TYPO3.settings.ajaxUrls.record_suggest; const params = { @@ -68,6 +69,7 @@ class FormEngineSuggest { flexFormFieldName, flexFormContainerName, flexFormContainerFieldName, + recordTypeValue, }; function insertValue(element: HTMLElement): void { diff --git a/typo3/sysext/backend/Classes/Controller/Wizard/SuggestWizardController.php b/typo3/sysext/backend/Classes/Controller/Wizard/SuggestWizardController.php index 43e48a942e2ad5aeb2d5604000c1f6ab3050edb7..e5608d430339cb104b6b1daf665ce5edc24f2b40 100644 --- a/typo3/sysext/backend/Classes/Controller/Wizard/SuggestWizardController.php +++ b/typo3/sysext/backend/Classes/Controller/Wizard/SuggestWizardController.php @@ -54,6 +54,7 @@ class SuggestWizardController $flexFormFieldName = $parsedBody['flexFormFieldName'] ?? null; $flexFormContainerName = $parsedBody['flexFormContainerName'] ?? null; $flexFormContainerFieldName = $parsedBody['flexFormContainerFieldName'] ?? null; + $recordType = (string)($parsedBody['recordTypeValue'] ?? ''); // Determine TCA config of field if (empty($dataStructureIdentifier)) { @@ -62,8 +63,13 @@ class SuggestWizardController $fieldNameInPageTsConfig = $fieldName; // With possible columnsOverrides - $row = BackendUtility::getRecord($tableName, $uid) ?? []; - $recordType = BackendUtility::getTCAtypeValue($tableName, $row); + // @todo Validate if we can move this fallback recordType determination, should be do-able in v13?! + if ($recordType === '') { + $recordType = BackendUtility::getTCAtypeValue( + $tableName, + BackendUtility::getRecord($tableName, $uid) ?? [] + ); + } $columnsOverridesConfigOfField = $GLOBALS['TCA'][$tableName]['types'][$recordType]['columnsOverrides'][$fieldName]['config'] ?? null; if ($columnsOverridesConfigOfField) { ArrayUtility::mergeRecursiveWithOverrule($fieldConfig, $columnsOverridesConfigOfField); diff --git a/typo3/sysext/backend/Classes/Form/Element/GroupElement.php b/typo3/sysext/backend/Classes/Form/Element/GroupElement.php index 83d48fd2944331e637ec221785baf5f96f15b030..8b723a44b071b49f2e1d7b3e6cde15be602a56e8 100644 --- a/typo3/sysext/backend/Classes/Form/Element/GroupElement.php +++ b/typo3/sysext/backend/Classes/Form/Element/GroupElement.php @@ -118,6 +118,7 @@ class GroupElement extends AbstractFormElement $parameterArray = $this->data['parameterArray']; $config = $parameterArray['fieldConf']['config']; $elementName = $parameterArray['itemFormElName']; + $recordTypeValue = $this->data['recordTypeValue'] ?? null; $selectedItems = $parameterArray['itemFormElValue']; $maxItems = $config['maxitems']; @@ -286,6 +287,9 @@ class GroupElement extends AbstractFormElement $html[] = ' data-flexformfieldname="' . htmlspecialchars($flexFormFieldName) . '"'; $html[] = ' data-flexformcontainername="' . htmlspecialchars($flexFormContainerName) . '"'; $html[] = ' data-flexformcontainerfieldname="' . htmlspecialchars($flexFormContainerFieldName) . '"'; + if ($recordTypeValue !== null && $recordTypeValue !== '') { + $html[] = ' data-recordtypevalue="' . htmlspecialchars($recordTypeValue) . '"'; + } $html[] = '/>'; $html[] = '</div>'; $html[] = '</div>'; diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineSuggest.js b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineSuggest.js index 6d683bcf66b85342fd6a2fd1e266be5c72c071af..81d621a16c75aac23b19f5b86618379dc65f1d07 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineSuggest.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineSuggest.js @@ -10,4 +10,4 @@ * * The TYPO3 project - inspiring people to share! */ -var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};define(["require","exports","jquery","TYPO3/CMS/Backend/FormEngine","jquery/autocomplete"],(function(e,t,a,s){"use strict";a=__importDefault(a);return class{constructor(e){(0,a.default)(()=>{this.initialize(e)})}initialize(e){const t=e.closest(".t3-form-suggest-container"),i=e.dataset.tablename,n=e.dataset.fieldname,o=e.dataset.field,l=parseInt(e.dataset.uid,10),r=parseInt(e.dataset.pid,10),d=e.dataset.datastructureidentifier,u=e.dataset.flexformsheetname,m=e.dataset.flexformfieldname,c=e.dataset.flexformcontainername,f=e.dataset.flexformcontainerfieldname,p=parseInt(e.dataset.minchars,10),g=TYPO3.settings.ajaxUrls.record_suggest,x={tableName:i,fieldName:n,uid:l,pid:r,dataStructureIdentifier:d,flexFormSheetName:u,flexFormFieldName:m,flexFormContainerName:c,flexFormContainerFieldName:f};(0,a.default)(e).autocomplete({serviceUrl:g,params:x,type:"POST",paramName:"value",dataType:"json",minChars:p,groupBy:"typeLabel",containerClass:"autocomplete-results",appendTo:t,forceFixPosition:!1,preserveInput:!0,showNoSuggestionNotice:!0,noSuggestionNotice:'<div class="autocomplete-info">No results</div>',minLength:p,preventBadQueries:!1,transformResult:e=>({suggestions:e.map(e=>({value:e.text,data:e}))}),formatResult:e=>(0,a.default)("<div>").append((0,a.default)('<a class="autocomplete-suggestion-link" href="#">'+e.data.sprite+e.data.text+"</a></div>").attr({"data-label":e.data.label,"data-table":e.data.table,"data-uid":e.data.uid})).html(),onSearchComplete:function(){t.classList.add("open")},beforeRender:function(e){e.attr("style",""),t.classList.add("open")},onHide:function(){t.classList.remove("open")},onSelect:function(){!function(t){let i="";i="select"===e.dataset.fieldtype?t.dataset.uid:t.dataset.table+"_"+t.dataset.uid,s.setSelectOptionFromExternalSource(o,i,t.dataset.label,t.dataset.label),s.Validation.markFieldAsChanged((0,a.default)(document.querySelector('input[name="'+o+'"]')))}(t.querySelector(".autocomplete-selected a"))}})}}})); \ No newline at end of file +var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};define(["require","exports","jquery","TYPO3/CMS/Backend/FormEngine","jquery/autocomplete"],(function(e,t,a,s){"use strict";a=__importDefault(a);return class{constructor(e){(0,a.default)(()=>{this.initialize(e)})}initialize(e){const t=e.closest(".t3-form-suggest-container"),i=e.dataset.tablename,o=e.dataset.fieldname,r=e.dataset.field,l=parseInt(e.dataset.uid,10),n=parseInt(e.dataset.pid,10),d=e.dataset.datastructureidentifier,u=e.dataset.flexformsheetname,c=e.dataset.flexformfieldname,m=e.dataset.flexformcontainername,f=e.dataset.flexformcontainerfieldname,p=e.dataset.recordtypevalue,g=parseInt(e.dataset.minchars,10),x=TYPO3.settings.ajaxUrls.record_suggest,h={tableName:i,fieldName:o,uid:l,pid:n,dataStructureIdentifier:d,flexFormSheetName:u,flexFormFieldName:c,flexFormContainerName:m,flexFormContainerFieldName:f,recordTypeValue:p};(0,a.default)(e).autocomplete({serviceUrl:x,params:h,type:"POST",paramName:"value",dataType:"json",minChars:g,groupBy:"typeLabel",containerClass:"autocomplete-results",appendTo:t,forceFixPosition:!1,preserveInput:!0,showNoSuggestionNotice:!0,noSuggestionNotice:'<div class="autocomplete-info">No results</div>',minLength:g,preventBadQueries:!1,transformResult:e=>({suggestions:e.map(e=>({value:e.text,data:e}))}),formatResult:e=>(0,a.default)("<div>").append((0,a.default)('<a class="autocomplete-suggestion-link" href="#">'+e.data.sprite+e.data.text+"</a></div>").attr({"data-label":e.data.label,"data-table":e.data.table,"data-uid":e.data.uid})).html(),onSearchComplete:function(){t.classList.add("open")},beforeRender:function(e){e.attr("style",""),t.classList.add("open")},onHide:function(){t.classList.remove("open")},onSelect:function(){!function(t){let i="";i="select"===e.dataset.fieldtype?t.dataset.uid:t.dataset.table+"_"+t.dataset.uid,s.setSelectOptionFromExternalSource(r,i,t.dataset.label,t.dataset.label),s.Validation.markFieldAsChanged((0,a.default)(document.querySelector('input[name="'+r+'"]')))}(t.querySelector(".autocomplete-selected a"))}})}}})); \ No newline at end of file