[BUGFIX] Fix shown references of files 00/17400/2
authorHelmut Hummel <helmut.hummel@typo3.org>
Sun, 28 Oct 2012 12:19:08 +0000 (13:19 +0100)
committerHelmut Hummel <helmut.hummel@typo3.org>
Sun, 6 Jan 2013 18:14:20 +0000 (19:14 +0100)
Currently the references of files are only fetched from
the sys_file_reference table. This does not take all direct
references and soft references into account.

Besides that, the count shown in the list is taken from the
count of tooltip hints instead of real references.

Fix both issues with this change.

Fixes: #42453
Releases: 6.1, 6.0
Change-Id: I82995896b5d62ee8df7baa175a752a6a25ce9c24
Reviewed-on: https://review.typo3.org/17400
Reviewed-by: Helmut Hummel
Tested-by: Helmut Hummel
typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php
typo3/sysext/backend/Classes/RecordList/AbstractRecordList.php
typo3/sysext/filelist/Classes/FileList.php

index 26d47d0..d693889 100644 (file)
@@ -431,20 +431,23 @@ class ElementInformationController {
         * @todo Define visibility
         */
        public function makeRef($table, $ref) {
-               // Look up the path:
+               // Files reside in sys_file table
                if ($table === '_FILE') {
-                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_file_reference', 'uid_local=' . $ref->getUid());
+                       $selectTable = 'sys_file';
+                       $selectUid = $ref->getUid();
                } else {
-                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'ref_table=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($table, 'sys_refindex') . ' AND ref_uid=' . intval($ref) . ' AND deleted=0');
+                       $selectTable = $table;
+                       $selectUid = $ref;
                }
+               $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'ref_table=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($selectTable, 'sys_refindex') . ' AND ref_uid=' . intval($selectUid) . ' AND deleted=0');
                // Compile information for title tag:
                $infoData = array();
                if (count($rows)) {
                        $infoData[] = '<tr class="t3-row-header">' . '<td>&nbsp;</td>' . '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.table') . '</td>' . '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.title') . '</td>' . '<td>[uid]</td>' . '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.field') . '</td>' . '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.flexpointer') . '</td>' . '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.softrefKey') . '</td>' . '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.sorting') . '</td>' . '</tr>';
                }
                foreach ($rows as $row) {
-                       if ($table === '_FILE') {
-                               $row = $this->mapFileReferenceOnRefIndex($row);
+                       if ($row['tablename'] === 'sys_file_reference') {
+                               $row = $this->transformFileReferenceToRecordReference($row);
                        }
                        $record = \TYPO3\CMS\Backend\Utility\BackendUtility::getRecord($row['tablename'], $row['recuid']);
                        $parentRecord = \TYPO3\CMS\Backend\Utility\BackendUtility::getRecord('pages', $record['pid']);
@@ -462,10 +465,11 @@ class ElementInformationController {
         * Maps results from the fal file reference table on the
         * structure of  the normal reference index table.
         *
-        * @param array $fileReference
+        * @param array $referenceRecord
         * @return array
         */
-       protected function mapFileReferenceOnRefIndex(array $fileReference) {
+       protected function transformFileReferenceToRecordReference(array $referenceRecord) {
+               $fileReference = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('*', 'sys_file_reference', 'uid=' . (int)$referenceRecord['recuid']);
                return array(
                        'recuid' => $fileReference['uid_foreign'],
                        'tablename' => $fileReference['tablenames'],
index 96db8bd..171b1a3 100644 (file)
@@ -455,7 +455,7 @@ abstract class AbstractRecordList {
                                $htmlCode .= ' onclick="' . htmlspecialchars(('top.launchView(' . $launchViewParameter . '); return false;')) . '"';
                        }
                        $htmlCode .= ' title="' . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs(implode(' / ', $result), 100)) . '">';
-                       $htmlCode .= count($result);
+                       $htmlCode .= count($references);
                        $htmlCode .= '</a>';
                }
                return $htmlCode;
index 396a94e..98694f0 100644 (file)
@@ -752,8 +752,8 @@ class FileList extends \TYPO3\CMS\Backend\RecordList\AbstractRecordList {
                        return '-';
                }
                // Look up the path:
-               $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'ref_table = ' . $GLOBALS['TYPO3_DB']->fullQuoteStr('sys_file', 'sys_refindex') . ' AND ref_uid = ' . $fileOrFolderObject->getUid() . ' AND deleted=0');
-               return $this->generateReferenceToolTip($rows, '\'_FILE\', \'' . $fileOrFolderObject->getCombinedIdentifier() . '\'');
+               $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'ref_table=\'sys_file\' AND ref_uid = ' . (integer)$fileOrFolderObject->getUid() . ' AND deleted=0');
+               return $this->generateReferenceToolTip($rows, '\'_FILE\', ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($fileOrFolderObject->getCombinedIdentifier()));
        }
 
 }