[FEATURE] Improve the info popup
[Packages/TYPO3.CMS.git] / typo3 / show_item.php
index 60c0838..efef643 100644 (file)
@@ -1,37 +1,29 @@
 <?php
 /***************************************************************
-*  Copyright notice
-*
-*  (c) 1999-2011 Kasper Skårhøj (kasperYYYY@typo3.com)
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-/**
- * Shows information about a database or file item
+ *  Copyright notice
  *
- * Revised for TYPO3 3.7 May/2004 by Kasper Skårhøj
+ *  (c) 1999-2012 Kasper Skårhøj (kasperYYYY@typo3.com)
+ *  All rights reserved
  *
- * @author Kasper Skårhøj <kasperYYYY@typo3.com>
- */
-
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
 
 $GLOBALS['BACK_PATH'] = '';
 require_once('init.php');
@@ -43,13 +35,23 @@ require_once('init.php');
  * @package TYPO3
  * @subpackage core
  */
-class transferData extends t3lib_transferData  {
-
+class transferData extends t3lib_transferData {
+       /**
+        * @var string
+        */
        var $formname = 'loadform';
+
+       /**
+        * @var boolean
+        */
        var $loading = 1;
 
-               // Extra for show_item.php:
-       var $theRecord = Array();
+       /**
+        * Extra for show_item.php:
+        *
+        * @var array
+        */
+       var $theRecord = array();
 
        /**
         * Register item function.
@@ -70,15 +72,16 @@ class transferData extends t3lib_transferData       {
                                        break;
                                }
                                if (t3lib_div::inList($config['eval'], 'date')) {
-                                       $content = Date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'], $content);
+                                       $content = date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'], $content);
                                }
-                       break;
+                               break;
+
                        case 'group':
-                       break;
                        case 'select':
-                       break;
+                               break;
                }
-               $this->theRecord[$field]=$content;
+
+               $this->theRecord[$field] = $content;
        }
 }
 
@@ -90,35 +93,77 @@ class transferData extends t3lib_transferData       {
  * @subpackage core
  */
 class SC_show_item {
-
-               // GET vars:
-               // Record table (or filename)
+       /**
+        * GET vars:
+        * Record table (or filename)
+        *
+        * @var string
+        */
        var $table;
-               // Record uid  (or '' when filename)
+
+       /**
+        * Record uid  (or '' when filename)
+        *
+        * @var int
+        */
        var $uid;
 
-               // Internal, static:
-               // Page select clause
+       /**
+        * Internal, static:
+        * Page select clause
+        *
+        * @var string
+        */
        var $perms_clause;
-               // If TRUE, access to element is granted
+
+       /**
+        * If TRUE, access to element is granted
+        *
+        * @var boolean
+        */
        var $access;
-               // Which type of element: "file" or "db"
+
+       /**
+        * Which type of element: "file" or "db"
+        *
+        * @var string
+        */
        var $type;
-               // Document Template Object
+
+       /**
+        * Document Template Object
+        *
+        * @var template
+        */
        var $doc;
 
-               // Internal, dynamic:
-               // Content Accumulation
+       /**
+        * Internal, dynamic:
+        * Content Accumulation
+        *
+        * @var string
+        */
        var $content;
-               // For type "db": Set to page record of the parent page of the item set (if type="db")
+
+       /**
+        * For type "db": Set to page record of the parent page of the item set
+        * (if type="db")
+        *
+        * @var array
+        */
        var $pageinfo;
-               // For type "db": The database record row.
+
+       /**
+        * For type "db": The database record row.
+        *
+        * @var array
+        */
        var $row;
 
        /**
         * The fileObject if present
         *
-        * @var t3lib_file_AbstractFile
+        * @var t3lib_file_File
         */
        protected $fileObject;
 
@@ -131,7 +176,8 @@ class SC_show_item {
 
        /**
         * Initialization of the class
-        * Will determine if table/uid GET vars are database record or a file and if the user has access to view information about the item.
+        * Will determine if table/uid GET vars are database record or a file and if
+        * the user has access to view information about the item.
         *
         * @return void
         */
@@ -147,7 +193,8 @@ class SC_show_item {
                        // Sets the type, "db" or "file". If blank, nothing can be shown.
                $this->type = '';
 
-                       // Checking if the $table value is really a table and if the user has access to it.
+                       // Checking if the $table value is really a table and if the user has
+                       // access to it.
                if (isset($GLOBALS['TCA'][$this->table])) {
                        t3lib_div::loadTCA($this->table);
                        $this->type = 'db';
@@ -157,20 +204,21 @@ class SC_show_item {
                        if ($this->uid && $GLOBALS['BE_USER']->check('tables_select', $this->table)) {
                                if ((string)$this->table == 'pages') {
                                        $this->pageinfo = t3lib_BEfunc::readPageAccess($this->uid, $this->perms_clause);
-                                       $this->access = is_array($this->pageinfo) ? 1 : 0;
+                                       $this->access = (is_array($this->pageinfo) ? 1 : 0);
                                        $this->row = $this->pageinfo;
                                } else {
                                        $this->row = t3lib_BEfunc::getRecordWSOL($this->table, $this->uid);
                                        if ($this->row) {
                                                $this->pageinfo = t3lib_BEfunc::readPageAccess($this->row['pid'], $this->perms_clause);
-                                               $this->access = is_array($this->pageinfo) ? 1 : 0;
+                                               $this->access = (is_array($this->pageinfo) ? 1 : 0);
                                        }
                                }
 
+                               /** @var $treatData t3lib_transferData */
                                $treatData = t3lib_div::makeInstance('t3lib_transferData');
                                $treatData->renderRecord($this->table, $this->uid, 0, $this->row);
-                               $cRow = $treatData->theRecord;
                        }
+
                } elseif ($this->table == '_FILE' || $this->table == '_FOLDER' || $this->table == 'sys_file') {
                        $fileOrFolderObject = t3lib_file_Factory::getInstance()->retrieveFileOrFolderObject($this->uid);
 
@@ -184,13 +232,12 @@ class SC_show_item {
                                $this->type = 'file';
                                $this->table = 'sys_file';
                                t3lib_div::loadTCA($this->table);
+
                                try {
                                        $this->row = t3lib_BEfunc::getRecordWSOL($this->table, $this->fileObject->getUid());
                                } catch (Exception $e) {
                                        $this->row = array();
                                }
-
-
                        }
                }
 
@@ -199,133 +246,203 @@ class SC_show_item {
                $this->doc->backPath = $GLOBALS['BACK_PATH'];
 
                        // Starting the page by creating page header stuff:
-               $this->content .= $this->doc->startPage($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem'));
-               $this->content .= '<h3 class="t3-row-header">' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem') . '</h3>';
+               $this->content .= $this->doc->startPage(
+                       $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem')
+               );
+
+               $this->content .= '<h3 class="t3-row-header">' .
+                       $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem') . '</h3>';
                $this->content .= $this->doc->spacer(5);
        }
 
        /**
-        * Main function. Will generate the information to display for the item set internally.
+        * Main function. Will generate the information to display for the item
+        * set internally.
         *
         * @return void
         */
        function main() {
+               if (!$this->access) {
+                       return;
+               }
 
-               if ($this->access) {
-                       $returnLink =  t3lib_div::sanitizeLocalUrl(t3lib_div::_GP('returnUrl'));
-                       $returnLinkTag = $returnLink ? '<a href="' . $returnLink . '" class="typo3-goBack">' : '<a href="#" onclick="window.close();">';
-                               // render type by user func
-                       $typeRendered = FALSE;
-                       if (is_array ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/show_item.php']['typeRendering'])) {
-                               foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/show_item.php']['typeRendering'] as $classRef) {
-                                       $typeRenderObj = t3lib_div::getUserObj($classRef);
-                                       if (is_object($typeRenderObj) && method_exists($typeRenderObj, 'isValid') && method_exists($typeRenderObj, 'render')) {
-                                               if ($typeRenderObj->isValid($this->type, $this)) {
-                                                       $this->content .=  $typeRenderObj->render($this->type, $this);
-                                                       $typeRendered = TRUE;
-                                                       break;
-                                               }
+               $returnLink = t3lib_div::sanitizeLocalUrl(t3lib_div::_GP('returnUrl'));
+               $returnLinkTag = $returnLink ? '<a href="' . $returnLink .
+                       '" class="typo3-goBack">' : '<a href="#" onclick="window.close();">';
+
+                       // render type by user func
+               $typeRendered = FALSE;
+               if (is_array ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/show_item.php']['typeRendering'])) {
+                       foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/show_item.php']['typeRendering'] as $classRef) {
+                               $typeRenderObj = t3lib_div::getUserObj($classRef);
+                                       // @TODO should have an interface
+                               if (is_object($typeRenderObj) && method_exists($typeRenderObj, 'isValid')
+                                       && method_exists($typeRenderObj, 'render')
+                               ) {
+                                       if ($typeRenderObj->isValid($this->type, $this)) {
+                                               $this->content .=  $typeRenderObj->render($this->type, $this);
+                                               $typeRendered = TRUE;
+                                               break;
                                        }
                                }
                        }
+               }
 
-                               // If type was not rendered use default rendering functions
-                       if (!$typeRendered) {
-                                       // Branch out based on type:
-                               switch ($this->type) {
-                                       case 'db':
-                                               $this->renderDBInfo();
-                                       break;
-                                       case 'file':
-                                               $this->renderFileInfo($returnLinkTag);
-                                       break;
-                                       case 'folder':
-                                               // @todo: implement a info about a folder
-                                       break;
-                               }
+                       // If type was not rendered use default rendering functions
+               if (!$typeRendered) {
+                               // Branch out based on type:
+                       switch ($this->type) {
+                               case 'db':
+                                       $this->renderDBInfo();
+                               break;
+                               case 'file':
+                                       $this->renderFileInfo($returnLinkTag);
+                               break;
+                               case 'folder':
+                                       // @todo: implement an info about a folder
+                               break;
                        }
+               }
 
-                               // If return Url is set, output link to go back:
-                       if (t3lib_div::sanitizeLocalUrl(t3lib_div::_GP('returnUrl'))) {
-                               $this->content = $this->doc->section('', $returnLinkTag.'<strong>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.goBack', 1).'</strong></a><br /><br />').$this->content;
-
-                               $this->content .= $this->doc->section('', '<br />'.$returnLinkTag.'<strong>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.goBack', 1).'</strong></a>');
-                       }
+                       // If return Url is set, output link to go back:
+               if (t3lib_div::sanitizeLocalUrl(t3lib_div::_GP('returnUrl'))) {
+                       $this->content = $this->doc->section(
+                               '',
+                               $returnLinkTag .
+                               '<strong>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.goBack', 1) .
+                               '</strong></a><br /><br />'
+                       ) . $this->content;
+
+                       $this->content .= $this->doc->section(
+                               '',
+                               '<br />' . $returnLinkTag .
+                               '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.goBack', 1) .
+                               '</strong></a>'
+                       );
                }
        }
 
        /**
-        * Main function. Will generate the information to display for the item set internally.
+        * Main function. Will generate the information to display for the item
+        * set internally.
         *
         * @return      void
         */
        function renderDBInfo() {
-
                        // Print header, path etc:
-               $code = $this->doc->getHeader($this->table, $this->row, $this->pageinfo['_thePath'], 1).'<br />';
-               $this->content.= $this->doc->section('', $code);
-
-                       // Initialize variables:
+                       // @TODO invalid context menu code in the output
+               $code = $this->doc->getHeader($this->table, $this->row, $this->pageinfo['_thePath'], 1) . '<br />';
+               $this->content .= $this->doc->section('', $code);
                $tableRows = array();
-               $i = 0;
+
+               $extraFields = array(
+                       'crdate' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_general.xml:LGL.creationDate', 1),
+                       'cruser_id' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_general.xml:LGL.creationUserId', 1),
+                       'tstamp' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_general.xml:LGL.timestamp', 1)
+               );
+
+               foreach ($extraFields as $name => $value) {
+                       $rowValue = t3lib_BEfunc::getProcessedValueExtra($this->table, $name, $this->row[$name]);
+
+                       if ($name === 'cruser_id' && $rowValue) {
+                               $userTemp = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+                                       'username, realName',
+                                       'be_users',
+                                       'uid = ' . intval($rowValue)
+                               );
+
+                               if ($userTemp[0]['username'] !== '') {
+                                       $rowValue = $userTemp[0]['username'];
+                                       if ($userTemp[0]['realName'] !== '') {
+                                               $rowValue .= ' - '.$userTemp[0]['realName'];
+                                       }
+                               }
+                       }
+
+                       $tableRows[] = '
+                               <tr>
+                                       <td class="t3-col-header">' . $value . '</td>
+                                       <td>' . htmlspecialchars($rowValue) . '</td>
+                               </tr>';
+               }
 
                        // Traverse the list of fields to display for the record:
                $fieldList = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$this->table]['interface']['showRecordFieldList'], 1);
                foreach ($fieldList as $name) {
                        $name = trim($name);
-                       if ($GLOBALS['TCA'][$this->table]['columns'][$name]) {
-                               if (!$GLOBALS['TCA'][$this->table]['columns'][$name]['exclude'] || $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table . ':' . $name)) {
-                                       $i++;
-                                       $tableRows[] = '
-                                               <tr>
-                                                       <td class="t3-col-header">' . $GLOBALS['LANG']->sL(t3lib_BEfunc::getItemLabel($this->table, $name), 1) . '</td>
-                                                       <td>' . htmlspecialchars(t3lib_BEfunc::getProcessedValue($this->table, $name, $this->row[$name], 0, 0, FALSE, $this->row['uid'])) . '</td>
-                                               </tr>';
-                               }
+                       if (!isset($GLOBALS['TCA'][$this->table]['columns'][$name])) {
+                               continue;
+                       }
+
+                       $isExcluded = !(!$GLOBALS['TCA'][$this->table]['columns'][$name]['exclude'] ||
+                               $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table . ':' . $name));
+                       if ($isExcluded) {
+                               continue;
                        }
+
+                       $uid = $this->row['uid'];
+                       $itemValue = t3lib_BEfunc::getProcessedValue($this->table, $name, $this->row[$name], 0, 0, FALSE, $uid);
+                       $itemLabel = $GLOBALS['LANG']->sL(t3lib_BEfunc::getItemLabel($this->table, $name), 1);
+                       $tableRows[] = '
+                               <tr>
+                                       <td class="t3-col-header">' . $itemLabel . '</td>
+                                       <td>' . htmlspecialchars($itemValue) . '</td>
+                               </tr>';
                }
 
                        // Create table from the information:
                $tableCode = '
-                                       <table border="0" cellpadding="0" cellspacing="0" id="typo3-showitem" class="t3-table-info">
-                                               '.implode('', $tableRows).'
-                                       </table>';
+                       <table border="0" cellpadding="0" cellspacing="0" id="typo3-showitem" class="t3-table-info">
+                               '.implode('', $tableRows).'
+                       </table>';
                $this->content .= $this->doc->section('', $tableCode);
 
                        // Add path and table information in the bottom:
                $code = '';
-               $code .= $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.path') . ': ' . t3lib_div::fixed_lgd_cs($this->pageinfo['_thePath'], -48) . '<br />';
-               $code .= $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.table') . ': ' . $GLOBALS['LANG']->sL($GLOBALS['TCA'][$this->table]['ctrl']['title']) . ' (' . $this->table . ') - UID: ' . $this->uid . '<br />';
+               $code .= $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.path') . ': ' .
+                       t3lib_div::fixed_lgd_cs($this->pageinfo['_thePath'], -48) . '<br />';
+               $code .= $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.table') . ': ' .
+                       $GLOBALS['LANG']->sL($GLOBALS['TCA'][$this->table]['ctrl']['title']) .
+                       ' (' . $this->table . ') - UID: ' . $this->uid . '<br />';
                $this->content .= $this->doc->section('', $code);
 
                        // References:
-               $this->content .= $this->doc->section($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesToThisItem'), $this->makeRef($this->table, $this->row['uid']));
+               $this->content .= $this->doc->section(
+                       $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesToThisItem'),
+                       $this->makeRef($this->table, $this->row['uid'])
+               );
 
-                       // References:
-               $this->content .= $this->doc->section($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesFromThisItem'), $this->makeRefFrom($this->table, $this->row['uid']));
+               $this->content .= $this->doc->section(
+                       $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesFromThisItem'),
+                       $this->makeRefFrom($this->table, $this->row['uid'])
+               );
        }
 
        /**
-        * Main function. Will generate the information to display for the item set internally.
+        * Main function. Will generate the information to display for the item
+        * set internally.
         *
         * @param string $returnLinkTag <a> tag closing/returning.
         * @return void
         */
        function renderFileInfo($returnLinkTag) {
                $fileExtension = $this->fileObject->getExtension();
-                       // Setting header:
-               $code = '<div class="fileInfoContainer">'
-                       . t3lib_iconWorks::getSpriteIconForFile($fileExtension) . '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.file', TRUE) . ':</strong> ' . $this->fileObject->getName()
-                       . '&nbsp;&nbsp;'
-                       . '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.filesize') . ':</strong> '
-                       . t3lib_div::formatSize($this->fileObject->getSize())
-                       . '</div>
+               $code = '<div class="fileInfoContainer">' .
+                       t3lib_iconWorks::getSpriteIconForFile($fileExtension) .
+                       '<strong>' .
+                               $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.file', TRUE) .
+                       ':</strong> ' . $this->fileObject->getName() .
+                       '&nbsp;&nbsp;' .
+                       '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.filesize') .
+                       ':</strong> ' .
+                       t3lib_div::formatSize($this->fileObject->getSize()) .
+                       '</div>
                        ';
                $this->content .= $this->doc->section('', $code);
                $this->content .= $this->doc->divider(2);
 
                        // If the file was an image...
-                       // @todo: add this check in the domain model in some kind of way, or in the processing folder
+                       // @todo: add this check in the domain model, or in the processing folder
                if (t3lib_div::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], $fileExtension)) {
                                // @todo: find a way to make getimagesize part of the t3lib_file object
                        $imgInfo = @getimagesize($this->fileObject->getForLocalProcessing(FALSE));
@@ -334,64 +451,77 @@ class SC_show_item {
                                t3lib_file_ProcessedFile::CONTEXT_IMAGEPREVIEW,
                                array('width' => '150m', 'height' => '150m')
                        )->getPublicUrl(TRUE);
-                       $code = '<div class="fileInfoContainer fileDimensions">'
-                                       . '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.dimensions')
-                                       . ':</strong> ' . $imgInfo[0] . 'x' . $imgInfo[1] . ' '
-                                       . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.pixels') . '</div>';
+
+                       $code = '<div class="fileInfoContainer fileDimensions">' .
+                               '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.dimensions') .
+                               ':</strong> ' . $imgInfo[0] . 'x' . $imgInfo[1] . ' ' .
+                               $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.pixels') . '</div>';
+
                        $code .= '<br />
-                               <div align="center">' . $returnLinkTag . '<img src="' . $thumbUrl . '" alt="' . htmlspecialchars(trim($this->fileObject->getName())) . '" title="' . htmlspecialchars(trim($this->fileObject->getName())) . '" /></a></div>';
+                               <div align="center">' . $returnLinkTag . '<img src="' . $thumbUrl . '" alt="' .
+                               htmlspecialchars(trim($this->fileObject->getName())) . '" title="' .
+                               htmlspecialchars(trim($this->fileObject->getName())) . '" /></a></div>';
                        $this->content .= $this->doc->section('', $code);
+
                } elseif ($fileExtension == 'ttf') {
                        $thumbUrl = $this->fileObject->process(
                                t3lib_file_ProcessedFile::CONTEXT_IMAGEPREVIEW,
                                array('width' => '530m', 'height' => '600m')
                        )->getPublicUrl(TRUE);
+
                        $thumb = '<br />
-                               <div align="center">' . $returnLinkTag . '<img src="' . $thumbUrl . '" border="0" title="' . htmlspecialchars(trim($this->fileObject->getName())) . '" alt="" /></a></div>';
+                               <div align="center">' . $returnLinkTag . '<img src="' . $thumbUrl . '" border="0" title="' .
+                               htmlspecialchars(trim($this->fileObject->getName())) . '" alt="" /></a></div>';
                        $this->content .= $this->doc->section('', $thumb);
                }
 
-                       // Initialize variables:
-               $tableRows = array();
-               $i = 0;
-
                        // Traverse the list of fields to display for the record:
-               $fieldList = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$this->table]['interface']['showRecordFieldList'], TRUE);
+               $tableRows = array();
+               $showRecordFieldList = $GLOBALS['TCA'][$this->table]['interface']['showRecordFieldList'];
+               $fieldList = t3lib_div::trimExplode(',', $showRecordFieldList, TRUE);
                foreach ($fieldList as $name) {
                        $name = trim($name);
-                       if ($GLOBALS['TCA'][$this->table]['columns'][$name]) {
-                               if (!$GLOBALS['TCA'][$this->table]['columns'][$name]['exclude'] || $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table . ':' . $name)) {
-                                       $i++;
-                                       $tableRows[] = '
-                                               <tr>
-                                                       <td class="t3-col-header">' . $GLOBALS['LANG']->sL(t3lib_BEfunc::getItemLabel($this->table, $name), 1) . '</td>
-                                                       <td>' . htmlspecialchars(t3lib_BEfunc::getProcessedValue($this->table, $name, $this->row[$name], 0, 0, FALSE, $this->row['uid'])) . '</td>
-                                               </tr>';
-                               }
+                       if (!isset($GLOBALS['TCA'][$this->table]['columns'][$name])) {
+                               continue;
+                       }
+
+                       $isExcluded = !(!$GLOBALS['TCA'][$this->table]['columns'][$name]['exclude'] ||
+                               $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table . ':' . $name));
+                       if ($isExcluded) {
+                               continue;
                        }
+
+                       $uid = $this->row['uid'];
+                       $itemValue = t3lib_BEfunc::getProcessedValue($this->table, $name, $this->row[$name], 0, 0, FALSE, $uid);
+                       $itemLabel = $GLOBALS['LANG']->sL(t3lib_BEfunc::getItemLabel($this->table, $name), 1);
+                       $tableRows[] = '
+                               <tr>
+                                       <td class="t3-col-header">' . $itemLabel . '</td>
+                                       <td>' . htmlspecialchars($itemValue) . '</td>
+                               </tr>';
                }
 
                        // Create table from the information:
                $tableCode = '
-                                       <table border="0" cellpadding="0" cellspacing="0" id="typo3-showitem" class="t3-table-info">
-                                               ' . implode('', $tableRows) . '
-                                       </table>';
+                       <table border="0" cellpadding="0" cellspacing="0" id="typo3-showitem" class="t3-table-info">
+                               ' . implode('', $tableRows) . '
+                       </table>';
                $this->content .= $this->doc->section('', $tableCode);
 
-
+                       // References:
                if ($this->fileObject->isIndexed()) {
-                               // References:
-                       $this->content .= $this->doc->section($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesToThisItem'), $this->makeRef('_FILE', $this->fileObject));
+                       $header = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesToThisItem');
+                       $this->content .= $this->doc->section($header, $this->makeRef('_FILE', $this->fileObject));
                }
        }
 
        /**
         * End page and print content
         *
-        * @return      void
+        * @return void
         */
        function printContent() {
-               $this->content.= $this->doc->endPage();
+               $this->content .= $this->doc->endPage();
                $this->content = $this->doc->insertStylesAndJS($this->content);
                echo $this->content;
        }
@@ -413,38 +543,66 @@ class SC_show_item {
                } else {
                        $field = $fieldName;
                }
+
                return $field;
        }
 
+       /**
+        * Returns the rendered record actions
+        *
+        * @param string $table
+        * @param integer $uid
+        * @return string
+        */
+       protected function getRecordActions($table, $uid) {
+               if ($table === '' || $uid < 0) {
+                       return '';
+               }
+
+               $editOnClick = t3lib_BEfunc::editOnClick('&edit[' . $table . '][' . $uid . ']=edit', $GLOBALS['BACK_PATH']);
+               $icon = t3lib_iconWorks::getSpriteIcon('actions-document-open');
+               $pageActionIcons = '<a href="#" onclick="' . htmlspecialchars($editOnClick) . '">' . $icon . '</a>';
+
+               $historyOnClick = 'window.location.href=\'show_rechis.php?element=' . $table . '%3A' . $uid .
+                       '&returnUrl=' . rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI')) . '\'; return false;';
+               $icon = t3lib_iconWorks::getSpriteIcon('actions-document-history-open');
+               $pageActionIcons .= '<a href="#" onclick="' . $historyOnClick . '">' . $icon . '</a>';
+
+               if ($table === 'pages') {
+                       $pageActionIcons .= $this->doc->viewPageIcon($uid, '');
+               }
+
+               return $pageActionIcons;
+       }
+
        /**
         * Make reference display
         *
         * @param string $table Table name
-        * @param string $ref Filename or uid
+        * @param string|t3lib_file_File $ref Filename or uid
         * @return string HTML
         */
        function makeRef($table, $ref) {
-
+                       // Look up the path:
                if ($table === '_FILE') {
-                               // Look up the path:
                        $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
                                '*',
                                'sys_file_reference',
                                'uid_local=' . $ref->getUid()
                        );
                } else {
-                               // Look up the path:
                        $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'
+                               'ref_table=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($table, 'sys_refindex') .
+                                       ' AND ref_uid=' . intval($ref) . ' 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>' .
@@ -454,16 +612,21 @@ class SC_show_item {
                                '<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);
                        }
+
                        $record = t3lib_BEfunc::getRecord($row['tablename'], $row['recuid']);
+                       $parentRecord = t3lib_BEfunc::getRecord('pages', $record['pid']);
+                       $actions = $this->getRecordActions($row['tablename'], $row['recuid']);
                        $infoData[] = '<tr class="bgColor4">' .
+                               '<td style="white-space:nowrap;">' . $actions . '</td>' .
                                '<td>' . $GLOBALS['LANG']->sL($GLOBALS['TCA'][$row['tablename']]['ctrl']['title'], TRUE) . '</td>' .
                                '<td>' . t3lib_BEfunc::getRecordTitle($row['tablename'], $record, TRUE) . '</td>' .
                                '<td><span title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_common.xlf:page') . ': ' .
-                               htmlspecialchars(t3lib_BEfunc::getRecordTitle('pages', t3lib_BEfunc::getRecord('pages', $record['pid']))) .
+                               htmlspecialchars(t3lib_BEfunc::getRecordTitle('pages', $parentRecord)) .
                                ' (uid=' . $record['pid'] . ')">' . $record['uid'] . '</span></td>' .
                                '<td>' . htmlspecialchars($this->getFieldName($row['tablename'], $row['field'])) . '</td>' .
                                '<td>' . htmlspecialchars($row['flexpointer']) . '</td>' .
@@ -472,9 +635,13 @@ class SC_show_item {
                                '</tr>';
                }
 
-               return count($infoData)
-                       ? '<table border="0" cellpadding="0" cellspacing="0" class="typo3-dblist">' . implode('', $infoData) . '</table>'
-                       : '';
+               $referenceLine = '';
+               if (count($infoData)) {
+                       $referenceLine = '<table border="0" cellpadding="0" cellspacing="0" class="typo3-dblist">' .
+                               implode('', $infoData) . '</table>';
+               }
+
+               return $referenceLine;
        }
 
        /**
@@ -503,8 +670,8 @@ class SC_show_item {
         * @return string HTML
         */
        function makeRefFrom($table, $ref) {
-
                        // Look up the path:
+                       // @TODO files not respected (see makeRef)
                $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
                        '*',
                        'sys_refindex',
@@ -516,6 +683,7 @@ class SC_show_item {
                $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.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>' .
@@ -525,8 +693,11 @@ class SC_show_item {
                                '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.refString') . '</td>' .
                                '</tr>';
                }
+
                foreach ($rows as $row) {
+                       $actions = $this->getRecordActions($row['ref_table'], $row['ref_uid']);
                        $infoData[] = '<tr class="bgColor4">' .
+                               '<td style="white-space:nowrap;">' . $actions . '</td>' .
                                '<td>' . htmlspecialchars($this->getFieldName($table, $row['field'])) . '</td>' .
                                '<td>' . htmlspecialchars($row['flexpointer']) . '</td>' .
                                '<td>' . htmlspecialchars($row['softref_key']) . '</td>' .
@@ -537,16 +708,20 @@ class SC_show_item {
                                '</tr>';
                }
 
-               return count($infoData)
-                       ? '<table border="0" cellpadding="0" cellspacing="0" class="typo3-dblist">' . implode('', $infoData) . '</table>'
-                       : '';
+               $referenceLine = '';
+               if (count($infoData)) {
+                       $referenceLine = '<table border="0" cellpadding="0" cellspacing="0" class="typo3-dblist">' .
+                               implode('', $infoData) . '</table>';
+               }
+
+               return $referenceLine;
        }
 }
 
-       // Make instance:
+/** @var $SOBE SC_show_item */
 $SOBE = t3lib_div::makeInstance('SC_show_item');
 $SOBE->init();
 $SOBE->main();
 $SOBE->printContent();
 
-?>
+?>
\ No newline at end of file