Bug #95400
openWorkspace broken mm relation
0%
Description
There is a bug, which is also present in the 11 version. This problem occurs if there is mm table and both, foreign and local records have workspace version.
Let's say we have folowing tables
products (with record uid:1)
color (width records uid:1 and uid:2)
products_color_mm (with
1|1
1|2
)
Now if we switch to Workspace and create a new color (it will have uid:3)
If we now edit the product, make some changes and save it, a new workspace version will be created uid:2
The products_color_mm contains now
1|1
1|2
2(WS version of uid:1)|1
2(WS version of uid:1)|3(WS version of uid:1)
here the 2|3 is the problem, because:
1) In the BE (e.g. in side by side selectbox) in the itemArray of possible colors (right selectbox), all colors have non-workspace UID's. But in the itemArray of already selected, the values from MM are taken - in this case 1(non-WS) and 3 (WS). So in the BE it will always look like if 2|3 is not selected.
2) If we publish the workspace. The foreign field in mm table is not updated and it is still 3, even if 3 doesn't exist anymore because it was published and has now again uid 1. And so the product looses this relation.
The only solution i have found, is to save the foreign key always with non-ws uid. It works in our project, but maybe this solution will not work if there is a bidirectional relation.
Here is a fix i have found:
typo3/sysext/core/Classes/DataHandling/DataHandler.php
function checkValue_group_select_processDBdata
coder
// convert submitted items to use version ids instead of live ids
// (only required for MM relations in a workspace context)
$dbAnalysis->convertItemArray();
if i delete the $dbAnalysis->convertItemArray(); here everythings works fine.
I have also tried to modify the core so that both itemArrays have WS-id's if the WS version of the record exists. This has fixed the problem for BE, but there is still the problem (2) where after workspace publication the mm relation is broken because the foreign key is not updated.
Files
Updated by Christian Kuhn almost 3 years ago
- Status changed from New to Needs Feedback
Hey.
Thanks for your report. I played around with your scenario, but I'm unable to reproduce. Maybe you could help me out. I'm using 'category->tt_content', since that's a scenario delivered by core already.
a)- live: create a category, uid 1
- live: create two content elements, connect them to cat 1, uid 1,2
- workspace: create a third content element, uid 3
- workspace: edit category 1, change title, safe, uid 2
-> (categories uids left)
1|1
1|2
2|2
2|1
-> looks good to me.
b) the other way around- live: create two categories, uid 1,2
- live: create content element, connect to cat 1, uid 1
- workspace: create a third category, uid 3
- workspace: edit content element 1, change title, safe, uid 2
-> (category uids left)
1|1
2|1
2|2
1|2
-> looks good to me.
I tried with main and not v11, but that shouldn't make much of a difference in this case. If this is still reproducible for you, I'd be interested in more details, maybe even a as-simple-as-possible example extension to sort this out.
Updated by Juraj Sulek almost 3 years ago
- File test.zip test.zip added
- File sr.mov sr.mov added
- TYPO3 Version changed from 10 to 11
- PHP Version changed from 7.4 to 8.0
I have testet it now on Typo3 11. There is still this bug in BE but FE works fine with the WS is in the mm Table. On Typo3 10 also the FE donesn't work and i had to create a hook which overwrides the ws IDs' in the mm table after modification in BE - unfortunately in 11 this will not work anymore.
Just to be sure have i createt a new Typo3 11 with composer, without templates etc. Then i have installed extension_builder and createt the extension from scratch just with the necessary fields. I have attached also a video where you can see what is the problem.
Updated by Lidia Demin over 2 years ago
Not sure if this is related, but I have an issue if both a sys_category and a linked record are new items in a workspace on TYPO3 10.4.22.
Being in a workspace I created a new category and a new product. In the product's editing interface I see the new category and can select it, but when I save the product, the category is not linked anymore, although the entries exist in the database:
sys_category:uid | t3ver_oid | t3ver_wsid | t3ver_state |
---|---|---|---|
570 | 569 | 1 | -1 |
569 | 0 | 1 | 1 |
uid | t3ver_oid | t3ver_wsid | t3ver_state |
---|---|---|---|
1541 | 1540 | 1 | -1 |
1540 | 0 | 1 | 1 |
uid_local | uid_foreign | tablenames |
---|---|---|
570 | 1541 | product |
Maybe this is easier to reproduce and helps you with investigation.
Updated by Lidia Demin over 2 years ago
My issue seems to be fixed in version 11. Thanks Christian Kuhn for helping me on Slack with this ;)