From 0064da7fb7714dc007fae4839d26d0c5feae8414 Mon Sep 17 00:00:00 2001 From: Nicole Cordes <typo3@cordes.co> Date: Thu, 19 Feb 2015 10:55:13 +0100 Subject: [PATCH] [BUGFIX] Prevent wrong ref_index for fields with soft references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If you add a page link to a field which is defined as softrefs, the ReferenceIndex creates an index to a FAL record if there exists a file record with the page id. As file links are always prefixed with 'file:' this patch adds a proper check before generating a file ref_index. Because the functional tests of impexp extension still use a hardcoded file path for the header_link field the patch corrects the value to refer to a file. Furthermore if you add a file or folder link, the field is referenced twice for the FAL record. So we have to suppress the softreference for those records. Releases: master, 6.2 Resolves: #60226 Change-Id: I969224e2a291491cb7ece1f61b375071bf0eaebc Reviewed-on: http://review.typo3.org/37086 Reviewed-by: Markus Klein <klein.t3@reelworx.at> Tested-by: Markus Klein <klein.t3@reelworx.at> Reviewed-by: Andreas Fernandez <andreas.fernandez@aspedia.de> Reviewed-by: Göran Bodenschatz <coding@46halbe.de> Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl> Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de> Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de> --- .../core/Classes/Database/ReferenceIndex.php | 8 ++- .../Fixtures/Database/tt_content.xml | 4 +- .../ImportExportXml/pages-and-ttcontent.xml | 52 ++++++++++++++++--- .../importPagesAndRelatedTtContent.csv | 4 +- 4 files changed, 56 insertions(+), 12 deletions(-) diff --git a/typo3/sysext/core/Classes/Database/ReferenceIndex.php b/typo3/sysext/core/Classes/Database/ReferenceIndex.php index 04016ec2276b..93f40a87e0a2 100644 --- a/typo3/sysext/core/Classes/Database/ReferenceIndex.php +++ b/typo3/sysext/core/Classes/Database/ReferenceIndex.php @@ -17,6 +17,7 @@ namespace TYPO3\CMS\Core\Database; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Messaging\FlashMessage; use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Core\Utility\StringUtility; /** * Reference index processing and relation extraction @@ -308,7 +309,10 @@ class ReferenceIndex { switch ((string)$el['subst']['type']) { case 'db': list($tableName, $recordId) = explode(':', $el['subst']['recordRef']); - $this->relations[] = $this->createEntryData($table, $uid, $fieldname, $flexpointer, $deleted, $tableName, $recordId, '', -1, $spKey, $subKey); + // Prevent double references for files and file relations + if ($tableName !== 'sys_file' && $tableName !== 'sys_file_reference') { + $this->relations[] = $this->createEntryData($table, $uid, $fieldname, $flexpointer, $deleted, $tableName, $recordId, '', -1, $spKey, $subKey); + } break; case 'file_reference': // not used (see getRelations()), but fallback to file @@ -597,7 +601,7 @@ class ReferenceIndex { $fileArray[] = array('table' => 'sys_file', 'id' => $fileUid['uid_local']); } return $fileArray; - } elseif ($conf['type'] == 'input' && isset($conf['wizards']['link']) && trim($value)) { + } elseif ($conf['type'] == 'input' && isset($conf['wizards']['link']) && StringUtility::beginsWith($value, 'file:')) { try { $file = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->retrieveFileOrFolderObject($value); } catch (\Exception $e) { diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/Database/tt_content.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/Database/tt_content.xml index 6a7a7b69c8b4..420f7cbd27eb 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/Database/tt_content.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/Database/tt_content.xml @@ -5,7 +5,7 @@ <pid>1</pid> <CType>text</CType> <header>Test content</header> - <header_link>fileadmin/user_upload/typo3_image3.jpg</header_link> + <header_link>file:2</header_link> <deleted>0</deleted> <t3ver_oid>0</t3ver_oid> <t3ver_wsid>0</t3ver_wsid> @@ -15,7 +15,7 @@ <pid>1</pid> <CType>text</CType> <header>Test content 2</header> - <header_link>typo3conf/ext/template_extension/Resources/Public/Templates/Empty.html</header_link> + <header_link>file:4</header_link> <deleted>0</deleted> <t3ver_oid>0</t3ver_oid> <t3ver_wsid>0</t3ver_wsid> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/ImportExportXml/pages-and-ttcontent.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/ImportExportXml/pages-and-ttcontent.xml index 9c839bae3b5b..2a1be5242cf3 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/ImportExportXml/pages-and-ttcontent.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/ImportExportXml/pages-and-ttcontent.xml @@ -29,7 +29,7 @@ <uid>1</uid> <pid>1</pid> <title>Test content</title> - <size>230</size> + <size>197</size> <relations index="rels" type="array"> <element index="sys_file:2" type="array"> <table>sys_file</table> @@ -37,13 +37,24 @@ </element> </relations> <softrefs type="array"> + <softref_element index="header_link:typolink:2487ce518ed56d22f20f259928ff43f1:0" type="array"> + <field>header_link</field> + <spKey>typolink</spKey> + <matchString>file:2</matchString> + <subst type="array"> + <type>db</type> + <recordRef>sys_file:2</recordRef> + <tokenID>2487ce518ed56d22f20f259928ff43f1</tokenID> + <tokenValue>file:2</tokenValue> + </subst> + </softref_element> </softrefs> </rec> <rec index="2" type="array"> <uid>2</uid> <pid>1</pid> <title>Test content 2</title> - <size>264</size> + <size>199</size> <relations index="rels" type="array"> <element index="sys_file:4" type="array"> <table>sys_file</table> @@ -54,7 +65,13 @@ <softref_element index="header_link:typolink:81b8b33df54ef433f1cbc7c3e513e6c4:0" type="array"> <field>header_link</field> <spKey>typolink</spKey> - <matchString>typo3conf/ext/template_extension/Resources/Public/Templates/Empty.html</matchString> + <matchString>file:4</matchString> + <subst type="array"> + <type>db</type> + <recordRef>sys_file:4</recordRef> + <tokenID>81b8b33df54ef433f1cbc7c3e513e6c4</tokenID> + <tokenValue>file:4</tokenValue> + </subst> </softref_element> </softrefs> </rec> @@ -167,7 +184,7 @@ <field index="CType">text</field> <field index="header">Test content</field> <field index="deleted">0</field> - <field index="header_link">fileadmin/user_upload/typo3_image3.jpg</field> + <field index="header_link">file:2</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -178,6 +195,22 @@ <id>2</id> </element> </relations> + <softrefs type="array"> + <keys type="array"> + <softref_key index="typolink" type="array"> + <softref_element index="2487ce518ed56d22f20f259928ff43f1:0" type="array"> + <matchString>file:2</matchString> + <subst type="array"> + <type>db</type> + <recordRef>sys_file:2</recordRef> + <tokenID>2487ce518ed56d22f20f259928ff43f1</tokenID> + <tokenValue>file:2</tokenValue> + </subst> + </softref_element> + </softref_key> + </keys> + <tokenizedContent>{softref:2487ce518ed56d22f20f259928ff43f1}</tokenizedContent> + </softrefs> </field> </related> </tablerow> @@ -190,7 +223,7 @@ <field index="CType">text</field> <field index="header">Test content 2</field> <field index="deleted">0</field> - <field index="header_link">typo3conf/ext/template_extension/Resources/Public/Templates/Empty.html</field> + <field index="header_link">file:4</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -205,10 +238,17 @@ <keys type="array"> <softref_key index="typolink" type="array"> <softref_element index="81b8b33df54ef433f1cbc7c3e513e6c4:0" type="array"> - <matchString>typo3conf/ext/template_extension/Resources/Public/Templates/Empty.html</matchString> + <matchString>file:4</matchString> + <subst type="array"> + <type>db</type> + <recordRef>sys_file:4</recordRef> + <tokenID>81b8b33df54ef433f1cbc7c3e513e6c4</tokenID> + <tokenValue>file:4</tokenValue> + </subst> </softref_element> </softref_key> </keys> + <tokenizedContent>{softref:81b8b33df54ef433f1cbc7c3e513e6c4}</tokenizedContent> </softrefs> </field> </related> diff --git a/typo3/sysext/impexp/Tests/Functional/Import/PagesAndTtContent/DataSet/Assertion/importPagesAndRelatedTtContent.csv b/typo3/sysext/impexp/Tests/Functional/Import/PagesAndTtContent/DataSet/Assertion/importPagesAndRelatedTtContent.csv index 8c3a3dbedf38..45e833edcd1b 100644 --- a/typo3/sysext/impexp/Tests/Functional/Import/PagesAndTtContent/DataSet/Assertion/importPagesAndRelatedTtContent.csv +++ b/typo3/sysext/impexp/Tests/Functional/Import/PagesAndTtContent/DataSet/Assertion/importPagesAndRelatedTtContent.csv @@ -4,8 +4,8 @@ ,2,1,256,0,"Dummy 1-2" "tt_content" ,"uid","pid","sorting","deleted","header","header_link" -,1,1,256,0,"Test content 2","typo3conf/ext/template_extension/Resources/Public/Templates/Empty.html" -,2,1,128,0,"Test content","fileadmin/user_upload/typo3_image3.jpg" +,1,1,256,0,"Test content 2","file:2" +,2,1,128,0,"Test content","file:1" "sys_file" ,"uid","pid","storage","type","identifier","identifier_hash","folder_hash","extension","mime_type","name","sha1","size" ,1,0,1,2,"/user_upload/typo3_image3.jpg","25777b72e5e1cbed2d1b33e4fe5b737304b5bd28","19669f1e02c2f16705ec7587044c66443be70725","jpg","image/jpeg","typo3_image3.jpg","e873c1e2ffd0f191e183a1057de3eef4d62e782d","5565" -- GitLab