Bug #71436
closedStory #69617: FormEngine bugs
Inline in flex with multiple DS fails
Added by Christian Kuhn about 9 years ago. Updated about 7 years ago.
0%
Description
See example in https://forge.typo3.org/issues/70918
If an inline field is defined in a flex field that has multiple dataSheet definitions, always the first ds is taken when adding new inline relations via ajax. This is because a) the record is not fetched for InlineParent data group (it would fail still fail for new records then), so the real solution is to have the name of the data structure coded within the domObjectId string so TcaFlexFetch can pick the correct one.
This however requires a rewrite of the string magic that is happening in this area.
first step: add a scenario to styleguide for more easy how-to-reproduce.
Files
FormInlineAjaxController.php.patch (936 Bytes) FormInlineAjaxController.php.patch | Witali Rott, 2015-11-20 13:28 | ||
bug_reproduce.tar.gz (3.5 KB) bug_reproduce.tar.gz | Christopher Orth, 2015-11-24 13:58 | ||
FormInlineAjaxController.php.patch (825 Bytes) FormInlineAjaxController.php.patch | Witali Rott, 2015-12-17 17:32 | ||
2016-01-03 at 11.12.png (76.8 KB) 2016-01-03 at 11.12.png | Konstantin Salakhutdinov, 2016-01-03 09:32 | ||
2016-01-03 at 11.16.png (51.6 KB) 2016-01-03 at 11.16.png | Konstantin Salakhutdinov, 2016-01-03 09:32 | ||
FormInlineAjaxController.php.patch (911 Bytes) FormInlineAjaxController.php.patch | Witali Rott, 2016-01-22 11:45 | ||
FormInlineAjaxController.php.patch (1.65 KB) FormInlineAjaxController.php.patch | Patch for TYPO3 7.6.3-7.6.4 | Witali Rott, 2016-02-23 12:52 | |
udg_bug_0.0.1_201702031407.zip (7.78 KB) udg_bug_0.0.1_201702031407.zip | Sven Carstens, 2017-02-03 15:08 |
Updated by Andreas Wolf about 9 years ago
This does i.a. affect pi_flexform, because it has multiple data structures defined, right?
Have a look at my patch for #70918. The choice of the DS depends on the surrounding record, for pi_flexform on CType and list_type. When invoking the FlexFetcher (or another Flex* class, don’t exactly remember) with the full DB record, the correct flexform is loaded automatically – don’t know if that was by fortune or is intended. I’m pretty sure this is also the way it was done in the old FormEngine.
Anyways, I don’t think we need to code the name of the DS into the object id.
Updated by Felix Rauch about 9 years ago
It affects pi_flexform, it also will affect FluidTYPO3 once the inline fields in that are fixed for latest master.
Updated by Gerrit Code Review about 9 years ago
- Status changed from New to Under Review
Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/44653
Updated by Gerrit Code Review about 9 years ago
Patch set 2 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/44653
Updated by Christian Kuhn about 9 years ago
Morton and me have a plan now. We will solve this in a relatively straight forward way for 7 with giving required additional information via JS. For 8 this area will be refactored completely.
This issue issue will be resolved within maximum next 2 weeks.
Updated by Witali Rott about 9 years ago
This patch work's on existing rows but not on new
Updated by Witali Rott about 9 years ago
Why not use the ajax context data?
What speaks against it?
Updated by Gerrit Code Review almost 9 years ago
Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/44914
Updated by Christopher Orth almost 9 years ago
- File bug_reproduce.tar.gz bug_reproduce.tar.gz added
Bug still exist for IRRE-Elements
Updated by Gerrit Code Review almost 9 years ago
Patch set 2 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/44914
Updated by Morton Jonuschat almost 9 years ago
- Status changed from Under Review to Resolved
- % Done changed from 0 to 100
Applied in changeset 570e19edc7ab3363c46071667d1ee667a64926f2.
Updated by Henning Liebe almost 9 years ago
Seems that the patch isn't working for me. Still got the 500 internal server error in combination with grid elements and inline in flex.
I used the flexform from the bug_reproduce.tar.gz and included it in my ts configuration:
flexformDS = FILE:EXT:myext/Configuration/FlexForms/TestFlexform.xml
The thrown exception:
Uncaught TYPO3 Exception #1446996319: Configuration retrieved from FlexForm is incomplete or not of type "inline". (More information)
Tested with the current 7.6.1-dev (including the changeset). In 6.2 the flexformDS include works.
Updated by Jeff C almost 9 years ago
I can confirm, that the bug still exists with IRRE.
Updated by Till Schweneker almost 9 years ago
I can confirm it, too. The bug still exists.
Updated by Morton Jonuschat almost 9 years ago
+1 / confirms are not really helpful without any additional information on how to reproduce the issue. First of all, if it occurs in combination with flux/fluidcontent/fluidpages extensions please there is an open issue reported for them at https://github.com/FluidTYPO3/flux/issues/1013
If it occurs in combination with gridelements as reported by Henning there's a similar bug in EXT:gridelements. In the case that it still occurs in core TCA/Flexform combinations please post the required configuration needed to reliably reproduce it or - which would be even better - upload an extension to reproduce it like Christopher did.
Updated by Jeff C almost 9 years ago
I get the problem with a core-plugin that has nothing to do with neither gridelements nor fluid typo3.
Here's the flexform for the broken plugin:
<T3DataStructure> <meta> <langDisable>1</langDisable> </meta> <sheets> <main> <ROOT> <TCEforms> <sheetTitle>LLL:EXT:tw_content/Resources/Private/Language/locallang_db.xlf:tx_twcontent_plugin.tab</sheetTitle> </TCEforms> <el> <settings.elements> <TCEforms> <label>LLL:EXT:tw_content/Resources/Private/Language/locallang_db.xlf:tx_twcontent_plugin.settings.elements</label> <config> <type>inline</type> <foreign_table>tx_twcontent_domain_model_icontile</foreign_table> <foreign_table_where> AND tx_twcontent_domain_model_icontile.sys_language_uid IN (-1, 0) AND tx_twcontent_domain_model_icontile.hidden = 0 AND tx_twcontent_domain_model_icontile.deleted = 0 ORDER BY tx_twcontent_domain_model_icontile.description </foreign_table_where> <foreign_sortby>sorting</foreign_sortby> <foreign_record_defaults> <record_type>0</record_type> </foreign_record_defaults> <minitems>0</minitems> <maxitems>99</maxitems> <appearance> <useSortable>1</useSortable> <collapseAll>1</collapseAll> </appearance> <behaviour> <enableCascadingDelete>1</enableCascadingDelete> </behaviour> </config> </TCEforms> </settings.elements> </el> </ROOT> </main> </sheets> </T3DataStructure>
Updated by Morton Jonuschat almost 9 years ago
Thanks for the feedback. From reading I think your flexform is actually invalid, missing a <type>array</type> before the first <el> Tag. The earlier Flexform parsers might have let that slip through, I'll try to reproduce tonight. The inline config itself looks good on first impression and shouldn't cause troubles.
Updated by Stefan Berger almost 9 years ago
I just upgrade the new TYPO3 7.6.1 version on our live systems, but that “error 500 alert box” bug unfortunately still exists. So I had to patch the source with that intermediate fix (https://review.typo3.org/#/c/44653/) for version 7.6.0 in order to be able to add images at least when the record is saved.
We use FAL-images in gridelement flexforms and I think the xml is correct. E.g.:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3DataStructure> <meta> <langDisable>1</langDisable> </meta> <ROOT type="array"> <type>array</type> <el type="array"> <image type="array"> <TCEforms> <label>LLL:fileadmin/locallang/gridelements/information_teaser.xml:image</label> <config> <type>inline</type> <appearance type="array"> <createNewRelationLinkTitle>LLL:fileadmin/locallang/gridelements/information_teaser.xml:addnewimage</createNewRelationLinkTitle> <useSortable>TRUE</useSortable> <showAllLocalizationLink>FALSE</showAllLocalizationLink> <showPossibleLocalizationRecords>FALSE</showPossibleLocalizationRecords> <showRemovedLocalizationRecords>FALSE</showRemovedLocalizationRecords> <showSynchronizationLink>FALSE</showSynchronizationLink> <enabledControls type="array"> <info>FALSE</info> <new>FALSE</new> <dragdrop>TRUE</dragdrop> <sort>FALSE</sort> <hide>TRUE</hide> <delete>TRUE</delete> <localize>TRUE</localize> </enabledControls> <levelLinksPosition>both</levelLinksPosition> <headerThumbnail type="array"> <field>uid_local</field> <height>165c</height> <width>177c</width> </headerThumbnail> </appearance> <behaviour> <localizationMode>select</localizationMode> <localizeChildrenAtParentLocalization>TRUE</localizeChildrenAtParentLocalization> </behaviour> <foreign_table>sys_file_reference</foreign_table> <foreign_field>uid_foreign</foreign_field> <foreign_sortby>sorting_foreign</foreign_sortby> <foreign_table_field>tablenames</foreign_table_field> <foreign_match_fields type="array"> <fieldname>image</fieldname> </foreign_match_fields> <foreign_label>uid_local</foreign_label> <foreign_selector>uid_local</foreign_selector> <maxitems>1</maxitems> <foreign_selector_fieldTcaOverride type="array"> <config> <appearance> <elementBrowserAllowed>gif,jpg,jpeg,tif,tiff,bmp,pcx,tga,png,pdf,ai</elementBrowserAllowed> <elementBrowserType>file</elementBrowserType> </appearance> </config> </foreign_selector_fieldTcaOverride> </config> </TCEforms> </image> </el> </ROOT> </T3DataStructure>
It would be great, if there will be a solution that works. THX.
Updated by Witali Rott almost 9 years ago
There is still a Bug on Flexforms with sections (<section>1</section>).
We must skip the digit values on checking the XML Syntax.
Patch included
Updated by Konstantin Salakhutdinov almost 9 years ago
- File 2016-01-03 at 11.12.png 2016-01-03 at 11.12.png added
- File 2016-01-03 at 11.16.png 2016-01-03 at 11.16.png added
Omg, why is this issue still exist in 7.6.2?... It's one of the main things in CMS - adding images to content elements!
A month ago I installed 7.6.1-dev version for one of my sites and patched it with FormInlineAjaxController.php.patch, after that "500 internal server error" dissapeared, but there were still some minor usability problems with deleting images (they dissapeared only after pressing delete AND saving page).
But now I decided to upgrade from 7.6.1-dev to 7.6.2, upgrade went ok, but I discovered that "500 internal server error" still existt,
BUT ONE THING TERRIFIED ME MOST OF ALL:
All previous inline.fal images are visible as preview in a Page view (http://drif.tt/1NYu3Rl), BUT INVISIBLE AT THE CONTENT ELEMENT ITSELF (http://drif.tt/1R8mNGC) ! HOW IS THAT POSSIBLE ?? All my previous work is gone after this upgrade :(
WHEN WILL THIS USSUE WILL BE FINALLY FIXED? IT'S A SHAME !
P.S.:
This is my code for inline.fal elements:
<flux:field.inline.fal name="settings.images" multiple="TRUE" maxItems="6" enabledControls="{dragdrop:1}" /> <flux:grid> <v:resource.record.fal record="{record}" field="image" table="tt_content" as="images"> <f:for each="{images}" as="image" iteration="iteration"> <flux:grid.row> <flux:grid.column name="content{image.checksum}" label="{v:l(key: 'caption', arguments: '{0: image.name}')}" /> </flux:grid.row> </f:for> </v:resource.record.fal> </flux:grid>
Updated by Anonymous almost 9 years ago
Konstantin, I assume you are having the same problem I had (though mine appeared in DCE):
Please check if you have compatibility6 installed. If so, this is almost certainly causing the problem.
Compatibility6 slightly changes the data that is used when selecting an inline element - this leads to the problem and the symptoms are the same as they were before the fix in 7.6.1.
I have found a workaround that works for me, but please be aware that I have not done any in-depth testing nor can I guarantee that there are no side-effects. I am pretty certain though that there should be no problems as the workaround only adds some data to the config array for the flexform.
To apply my fix:
Copy the method "addDataStructurePointersToMetaData" from TYPO3\CMS\Backend\Form\FormDataProvider\TcaFlexProcess to the coreesponding file within compatibility6.
In the addData-method of the same file - as the last command within the foreach-loop, add:
$result = $this->addDataStructurePointersToMetaData($result, $fieldName);
This adds the needed field to the config so you can add inline fields again. I don't know if this applies to your situation. The next thing should:
You will still have the problem that stored elements do not show up when you open an element. To fix this, edit TYPO3\CMS\Compatibility6\Form\Container\FlexFormElementContainer and in lines 97ff add
'children' => $flexFormFieldArray['children'],
somewhere to the fakeParameterArray.
This should heopefully solve your problems despite havin compatibility6 installed.
If compatibility6 is not installed: ignore my answer and sorry I couldn't help you.
Updated by Wolfram Eberius almost 9 years ago
Hi,
I'm not sure whether this is the right place: the problem still exists within our TYPO3 7.6.2 installation.
Error message is "Configuration retrieved from FlexForm is incomplete or not of type "inline". I confirm the debugging output as Felix: "$parentConfig in FormInlineAjaxController->getParentConfigFromFlexForm does not contain my actual flexform" (https://forge.typo3.org/issues/70918, seems to be the same problem, right?).
So it does not seem to depend on the Flexform content itself.
However, it works when I first save the element that contains an inline relation field and then add a relation (in my case an image, popup appears, I select an image and it is added to my Grid element).
I also checked out (and cherry-picked over branch TYPO3_7-2-6) this patch, mentioned here
Any help would be very much appreciated!
Updated by Anonymous almost 9 years ago
Hi Wolfram,
since we are developing several new Projects that need this functionality I am curious if I have to expect this behavior to re-appear.
Do you use compatibility6? If so, check my answer above. If not could you provide the version of gridelements you are using?
Updated by Wolfram Eberius almost 9 years ago
Hey Christian,
sorry, I should have mentioned that: no, we do not use compatibility6. Our gridelements is at 7.0.0 - just saw there is 7.0.4 available...should we update?
Updated by Stefan Berger almost 9 years ago
Hi,
as I mentioned 28 days ago, now the "500 alert box"-Bug (#71564) still exist in the new release 7.6.2.
Unfortunately, I had to patch the source again, being able to add images at least when the content elements are already saved.
At this point I not sure, if this bug ticket is the right one, but the bug ticket #71564 says that it is a dupe of this bug ticket.
Our system is up to date and simple. We use the newest gridelements and no compatibily6 or flux extensions.
So very hopefully this breaking bug will be fixed in the coming releases and I don’t have to repeat myself again.
Updated by Dan no-lastname-given almost 9 years ago
Stefan Berger wrote:
Hi,
as I mentioned 28 days ago, now the "500 alert box"-Bug (#71564) still exist in the new release 7.6.2.
Unfortunately, I had to patch the source again, being able to add images at least when the content elements are already saved.
At this point I not sure, if this bug ticket is the right one, but the bug ticket #71564 says that it is a dupe of this bug ticket.
Our system is up to date and simple. We use the newest gridelements and no compatibily6 or flux extensions.
So very hopefully this breaking bug will be fixed in the coming releases and I don’t have to repeat myself again.
@Stefan:
I had the same problem and just found a solution (see #72054) that worked for me.
Maybe you have the same problem as I had.
Updated by Stefan Berger almost 9 years ago
Hi Dan,
thanks for your answer, but we have already the php extension mbstring enabled. So this won’t be the solution:(
Updated by Wolfram Eberius almost 9 years ago
Hi Dan, thank you, too, but it does neither work me...
Updated by Anonymous almost 9 years ago
Hey guys!
Sadly, I was able to reproduce this error with 7.6.2 and gridelements. I found a solution that might be a bit hacky, but (until now) works with everything we are using. User "monosize" posted it on GitHub for flux:
https://github.com/FluidTYPO3/flux/issues/1013#issuecomment-160123769
Maybe this helps someone and hopefully there will be a core fix for this soon...
Updated by Witali Rott almost 9 years ago
It's not possible with Gridelements and Inline Flex, because you need the parent field tx_gridelements_backend_layout for this.
The best solution is to use the $ajaxArguments['context'] in FormInlineAjaxController for Inline Elements. (https://forge.typo3.org/attachments/download/30171/FormInlineAjaxController.php.patch)
Updated by Witali Rott almost 9 years ago
I make a new Patch for TYPO3 7.6.2 which work with gridelements
Updated by Steve Lenz almost 9 years ago
Witali Rott wrote:
I make a new Patch for TYPO3 7.6.2 which work with gridelements
I tested your patch in TYPO3 7.6.3-dev and it works fine.
Updated by Patrick Kroog almost 9 years ago
I experienced this bug on a gridelement with flexform fal image after updating from 7.5 to 7.6.2.
Another update today to 7.6.3 didn't help either.
I just tried the above patch of witali on 7.6.3. For the moment it lets me add new image relations. Reopening the IRRE-Item fails with same 500-error, but for a quick fix, this is okay for the moment ;-)
Updated by Witali Rott over 8 years ago
A new Patch included
Tested with TYPO3 7.6.4
Updated by Stefan Berger over 8 years ago
Hi,
I could confirm the latest patch will fix the problem using the TYPO3 7.6.4.
Hopefully the patch will be come in the next TYPO3 release.
Updated by Witali Rott over 8 years ago
Please use the Patch from https://forge.typo3.org/issues/73751
Updated by XIMA MEDIA GmbH over 8 years ago
The patch #35 works with TYPO3 7.6.4.
Updated by Wolfram Eberius over 8 years ago
Witali Rott wrote:
A new Patch included
Tested with TYPO3 7.6.4
Witali, for us on TYPO3_7-6-4 your patch in comment #35 worked (https://forge.typo3.org/issues/71436#note-35,and only that one)
Updated by Anonymous over 8 years ago
nice to have a working patch, BUT why is this marked as resolved if its not integrated in the core jet? Or the target-Version should be set to 7.6.5 ...
Updated by Jo Hasenau over 8 years ago
Just a recommendation for the people running into problems with Gridelements due to the described errors:
Gridelements was never meant to be used with any kind of content in flexforms, since it's purpose actually was to get rid of content in XML strings in just one database field.
So while flexforms might be used to store configurational stuff like checkboxes or dropdowns for several frontend features, the actual content should ALWAYS be put in the columns of a gridelements container.
Putting FAL image relations into a flexform isn't a good idea anyway, but it can be easily avoided by creating a column for that image instead and restricting the allowed elements to "images".
So this is one of the reasons, why we never tried to change that behaviour from the gridelements side, the other one is, that it is a core problem.
Since it can't be fixed that easily, the current recommendation is to get rid of any kind of content in flexforms and to use the actual grid functionality instead.
Updated by Wolfram Eberius over 8 years ago
For TYPO3 7.6.9 we offer a fork including the patch #35: https://github.com/xima-media/TYPO3.CMS/commits/TYPO3_7-6.
Updated by Markus Kobligk about 8 years ago
I can confirm this patch works, we use it on production system and for every new TYPO3 project, where we need FAL in Flexforms.
The "Done" says 100%, but why is this patch not included in the core or pushed to Gerrit?
Any news on this issue?
Updated by Sven Carstens almost 8 years ago
We've build a simple extension to easily demonstrate and reproduce the error.
Demonstrate bug on new gridelement with a flexform containing an inline element
How to reproduce¶
- Take TYPO3-7.6 (tested with .15)
- Install this extension
- Add demonstration content element via new wizard from special tab
- Do not save!
- Add relation
- Enjoy result
- Throw away the element
- Add demonstration grid element via new wizard from gridelements tab
- Do not save!
- Add relation
- Enjoy 500
Both elements share the same flexform.
Throwing the exception is \TYPO3\CMS\Backend\Controller\FormInlineAjaxController.
In the case of the grid based element it has the default flexform loaded:{ "type": "flex", "ds_pointerField": "list_type,CType", "ds": { "meta": { "dataStructurePointers": { "list_type": "", "CType": "gridelements_pi1" } }, "sheets": { "sDEF": { "ROOT": { "type": "array", "el": { "xmlTitle": { "label": "The Title:", "config": { "type": "input", "size": "48" } } } } } } }, "search": { "andWhere": "CType='list'" } }
Applying the patch from here
https://github.com/xima-media/TYPO3.CMS/commit/e216c0aafd0452bbd53df8e52f013c034091b2d2
will resolve the error and we can add inline elements during grid element creation.
Updated by Leonie Philine over 7 years ago
I can confirm that with TYPO3 7.6.18, this bug is not fixed.
After applying https://forge.typo3.org/attachments/download/30629/FormInlineAjaxController.php.patch I was able to unfold an inline FAL field contained in a gridelements flexform.
More complete, however, is this patch: https://forge.typo3.org/attachments/download/31098/FormInlineAjaxController.php.patch
So, use the latter one - and please merge it into the core for 7.6.19!
(See also https://github.com/LeoniePhiline/TYPO3.CMS/commit/dbbd153ff3a9e33dd42c9958ba123de32ed8ebac)
Previously to applying the patch, I had received a red "500 Internal Server Error" Ajax box, and a log entry like such:
Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1446996319: Configuration retrieved from FlexForm is incomplete or not of type "inline". | UnexpectedValueException thrown in file [...]/typo3_src/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php in line 916. Requested URL: [...]/typo3/index.php?ajaxID=%2Fajax%2Frecord%2Finline%2Fdetails&ajaxToken=[...]
Updated by Andi Peh over 7 years ago
+1 for the bugfix from leonie - previous bugfix solved the problem with new elements. the latter one also solved the issue for already existing elements, when trying to load the details of an image.
also using, typo3 7.6.18 with gridelements 7.1.0
Updated by Markus Zipfel about 7 years ago
- Related to Bug #82096: Error when adding an inline element inside the FlexForm area of an inline element added
Updated by Markus Zipfel about 7 years ago
I am also able to reproduce the error in TYPO3 7.6.21 and it seems to be still present in v8. Leonie's patch is working for me, too. Additionally I created a new issue: #82096
Updated by Wouter Wolters about 7 years ago
- Assignee deleted (
Morton Jonuschat)
Updated by Riccardo De Contardi about 7 years ago
- Status changed from Resolved to Closed