[TYPO3-core] RFC #8279: Bug: Sorting in fields of type "group", "MM=1" and "multiple=1" is not preserved
Ernesto Baschny [cron IT]
ernst at cron-it.de
Fri Jun 6 09:18:56 CEST 2008
Hi,
committed to TYPO3_4-1 (rev. 3768).
Cheers,
Ernesto
Ernesto Baschny [cron IT] wrote: on 28.04.2008 14:56:
> Type: Bugfix
>
> Bugtracker references: http://bugs.typo3.org/view.php?id=8279
>
> ChangeSet reference for the fix by Kasper in TYPO3_4-2:
> http://code.typo3.org/v4/changeset/3002
>
> Branches: TYPO3_4-1
>
> Problem:
> If I have a field defined like:
>
> 'mitglieder_ag' => array(
> 'exclude' => 1,
> 'label' =>
> 'LLL:EXT:cronmm_ratsinfo/locallang_db.xml:tx_cronmmratsinfo_gremium.mitglieder_ag',
>
> 'config' => array(
> 'type' => 'group',
> 'internal_type' => 'db',
> 'allowed' => 'tx_cronmmratsinfo_ausschussgemeinschaft',
> 'size' => 20,
> 'minitems' => 0,
> 'maxitems' => 100,
> 'multiple' => 1,
> 'selectedListStyle' => 'width:100px',
> 'MM' => 'tx_cronmmratsinfo_gremium_mitglieder_ag_mm',
> )
> ),
>
> that is with "MM=xxx" and "multiple=1", I am able to have a list where
> the same record occurs multiple times, e.g:
>
> uid_foreign=45, sorting=1
> uid_foreign=44, sorting=2
> uid_foreign=44, sorting=3
>
> After moving the entry 45 down one item (to get the list "44, 45, 44"),
> and I save the record, I end up with the following list:
>
> 45, sorting = 1
> 44, sorting = 3
> 44, sorting = 3
>
> So not the desired sorting (sorting=3 twice). To sum up, I cannot
> separate the same uids: they will end up always being sorted in a "block".
>
>
> Problem:
> The problem comes from t3lib_loaddbgroup::writeMM(), which cannot handle
> "multiple=1".
>
> Imagine $oldMMs: 45, 44, 44 (the old order)
> the new $this->itemArray in t3lib_loaddbgroup::writeMM() is: 44, 45, 44
> (the desired new order)
>
> In t3lib_loaddbgroup::writeMM() TYPO3 will execute the following UPDATEs:
>
> UPDATE tx_cronmmratsinfo_gremium_mitglieder_ag_mm SET sorting = 1 WHERE
> uid_local=1026 AND uid_foreign=44
> UPDATE tx_cronmmratsinfo_gremium_mitglieder_ag_mm SET sorting = 2 WHERE
> uid_local=1026 AND uid_foreign=45
> UPDATE tx_cronmmratsinfo_gremium_mitglieder_ag_mm SET sorting = 3 WHERE
> uid_local=1026 AND uid_foreign=44
>
> Notice that the last UPDATE will override what the first one did, so
> that we end up with the MM-table containing:
>
> 45, sorting = 2
> 44, sorting = 3
> 44, sorting = 3
>
> and we would expect:
>
> 44, sorting = 1
> 45, sorting = 2
> 44, sorting = 3
>
>
> Solution:
> In case of multiple=1, delete all records before we start and just write
> the new ones in the order they come in (with INSERT). Attached patch
> does that.
>
>
> Note:
> The problem is not present in TYPO3 4.2, because of this change done by
> Kasper in January: http://code.typo3.org/v4/changeset/3002. The solution
> here was to add a "uid" field for every MM table that needs
> "multiple=1", to be able to identify each record uniquely even if they
> contain the same uid_local/uid_foreign combination. I would like to fix
> the bug in 4.1 like suggested above, because else we would have to
> backport a new feature from 4.2 (new TCA setting "MM_hasUidField") to 4.1.
>
> BTW that new feature (see Kasper's ChangeLog) hasn't been documented and
> is not listed in
> http://wiki.typo3.org/index.php/Pending_Documentation#doc_core_api.
> Should I add it there?
>
> Cheers,
> Ernesto
>
More information about the TYPO3-team-core
mailing list