Bug #99529
Updated by Sybille Peters almost 2 years ago
Here, there is a collision with uid=4 and uid=5 as well as uid=4 and uid=6. They all have the slug 'hallo-2' which would be ok if the language differs, but sys_language_uid=-1 means the record will be shown for all languages <pre> select uid,sys_language_uid,deleted,hidden,slug,title from db.tx_sypetsexampleslug_something; +-----+------------------+---------+--------+-------------------+---------------------+ | uid | sys_language_uid | deleted | hidden | slug | title | +-----+------------------+---------+--------+-------------------+---------------------+ | 1 | 0 | 0 | 0 | hallo | hallo | | 2 | 0 | 0 | 0 | halloeoe-usw-blah | hallöö usw. blah | | 3 | 0 | 0 | 0 | hallo-1 | hallo | | 4 | -1 | 0 | 0 | hallo-2 | hallo | | 5 | 6 | 0 | 0 | hallo-2 | hallo | | 6 | 0 | 0 | 0 | hallo-2 | hallo | +-----+------------------+---------+--------+-------------------+---------------------+ </pre> h2. Reproduce There is a minimal extension to reproduce issue which works with v12: https://github.com/sypets/sypets_example_slug 1. Use an extension with slug field (e.g. calendarize or "sypets_example_slug":https://github.com/sypets/sypets_example_slug) 2. Create several records with the same slugs. slugs (e.g. use same title if title is used). Create at least one record with sys_language_uid=-1 (you may have to save once and then generate the slug again to create the duplicate) The problem can be reproduced with news + TYPO3 v11, "calendarize and TYPO3 v11":https://github.com/lochmueller/calendarize/issues/731 and TYPO3 v12 and the example extension "sypets_example_slug":https://github.com/sypets/sypets_example_slug. *or* check existing content for extensions, e.g. *news* (language 0 or -1): <pre> select path_segment,count(*) as c from tx_news_domain_model_news where not hidden and not deleted and (sys_language_uid=0 || sys_language_uid=-1) group by path_segment order by c; </pre> *calendarize* (language 0 or -1): <pre> select slug,count(*) as c from tx_calendarize_domain_model_event where not hidden and not deleted and (sys_language_uid=0 || sys_language_uid=-1) group by slug order by c; </pre> h2. Versions * reproduced with latest main branch (v12) * can be reproduced with v11 using EXT:calendarize, see issue: https://github.com/lochmueller/calendarize/issues/731 h2. Source code example <pre><code class="php"> // slug field 'slug' => [ 'exclude' => false, 'label' => 'slug', 'config' => [ 'type' => 'slug', 'generatorOptions' => [ 'fields' => ['title'], 'fieldSeparator' => '/', 'prefixParentPageSlug' => true, 'replacements' => [ '/' => '', ], ], 'fallbackCharacter' => '-', 'eval' => 'unique', 'default' => '' ] ], </code></pre>