Fixed bug #14021: Simplify the code to get nested GET Parameters with TS
[Packages/TYPO3.CMS.git] / typo3 / show_item.php
old mode 100755 (executable)
new mode 100644 (file)
index d5471d7..7bf8af1
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2009 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
  *
  *
  *
- *   82: class transferData extends t3lib_transferData
- *   99:     function regItem($table, $id, $field, $content)
+ *   84: class transferData extends t3lib_transferData
+ *  101:     function regItem($table, $id, $field, $content)
  *
  *
- *  133: class SC_show_item
- *  158:     function init()
+ *  135: class SC_show_item
+ *  160:     function init()
  *  225:     function main()
- *  253:     function renderDBInfo()
- *  301:     function renderFileInfo($returnLinkTag)
- *  416:     function printContent()
+ *  273:     function renderDBInfo()
+ *  327:     function renderFileInfo($returnLinkTag)
+ *  449:     function printContent()
+ *  462:     function makeRef($table,$ref)
+ *  524:     function makeRefFrom($table,$ref)
  *
- * TOTAL FUNCTIONS: 6
+ * TOTAL FUNCTIONS: 8
  * (This index is automatically created/updated by the extension "extdeveval")
  *
  */
@@ -57,9 +59,6 @@
 $BACK_PATH = '';
 require($BACK_PATH.'init.php');
 require($BACK_PATH.'template.php');
-require_once(PATH_t3lib.'class.t3lib_page.php');
-require_once(PATH_t3lib.'class.t3lib_loaddbgroup.php');
-require_once(PATH_t3lib.'class.t3lib_transferdata.php');
 
 
 
@@ -156,7 +155,7 @@ class SC_show_item {
         * @return      void
         */
        function init() {
-               global $BE_USER,$LANG,$BACK_PATH,$TCA;
+               global $BE_USER,$BACK_PATH,$TCA;
 
                        // Setting input variables.
                $this->table = t3lib_div::_GET('table');
@@ -194,26 +193,23 @@ class SC_show_item {
                } else  {
                        // if the filereference $this->file is relative, we correct the path
                        if (substr($this->table,0,3)=='../')    {
-                               $this->file = PATH_site.ereg_replace('^\.\./','',$this->table);
+                               $this->file = PATH_site.preg_replace('/^\.\.\//','',$this->table);
                        } else {
                                $this->file = $this->table;
                        }
                        if (@is_file($this->file) && t3lib_div::isAllowedAbsPath($this->file))  {
                                $this->type = 'file';
                                $this->access = 1;
-
-                               require_once(PATH_t3lib.'class.t3lib_stdgraphic.php');
                        }
                }
 
                        // Initialize document template object:
                $this->doc = t3lib_div::makeInstance('smallDoc');
                $this->doc->backPath = $BACK_PATH;
-               $this->doc->docType = 'xhtml_trans';
 
                        // Starting the page by creating page header stuff:
-               $this->content.=$this->doc->startPage($LANG->sL('LLL:EXT:lang/locallang_core.php:show_item.php.viewItem'));
-               $this->content.=$this->doc->header($LANG->sL('LLL:EXT:lang/locallang_core.php:show_item.php.viewItem'));
+               $this->content.=$this->doc->startPage($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem'));
+               $this->content.=$this->doc->header($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem'));
                $this->content.=$this->doc->spacer(5);
        }
 
@@ -223,24 +219,43 @@ class SC_show_item {
         * @return      void
         */
        function main() {
-               global $LANG;
 
                if ($this->access)      {
                        $returnLinkTag = t3lib_div::_GP('returnUrl') ? '<a href="'.t3lib_div::_GP('returnUrl').'" class="typo3-goBack">' : '<a href="#" onclick="window.close();">';
 
-                               // Branch out based on type:
-                       switch($this->type)     {
-                               case 'db':
-                                       $this->renderDBInfo();
-                               break;
-                               case 'file':
-                                       $this->renderFileInfo($returnLinkTag);
-                               break;
+                               // 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;
+                                               }
+                                       }
+                               }
+                       }
+
+                               // 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;
+                               }
                        }
 
                                // If return Url is set, output link to go back:
                        if (t3lib_div::_GP('returnUrl'))        {
-                               $this->content.= $this->doc->section('','<br />'.$returnLinkTag.'<strong>'.$LANG->sL('LLL:EXT:lang/locallang_core.php:labels.goBack',1).'</strong></a>');
+                               $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>');
                        }
                }
        }
@@ -251,7 +266,7 @@ class SC_show_item {
         * @return      void
         */
        function renderDBInfo() {
-               global $LANG,$TCA;
+               global $TCA;
 
                        // Print header, path etc:
                $code = $this->doc->getHeader($this->table,$this->row,$this->pageinfo['_thePath'],1).'<br />';
@@ -270,7 +285,7 @@ class SC_show_item {
                                        $i++;
                                        $tableRows[] = '
                                                <tr>
-                                                       <td class="bgColor5">'.$LANG->sL(t3lib_BEfunc::getItemLabel($this->table,$name),1).'</td>
+                                                       <td class="bgColor5">'.$GLOBALS['LANG']->sL(t3lib_BEfunc::getItemLabel($this->table,$name),1).'</td>
                                                        <td class="bgColor4">'.htmlspecialchars(t3lib_BEfunc::getProcessedValue($this->table,$name,$this->row[$name])).'</td>
                                                </tr>';
                                }
@@ -287,9 +302,15 @@ class SC_show_item {
 
                        // Add path and table information in the bottom:
                $code = '';
-               $code.= $LANG->sL('LLL:EXT:lang/locallang_core.php:labels.path').': '.t3lib_div::fixed_lgd_cs($this->pageinfo['_thePath'],-48).'<br />';
-               $code.= $LANG->sL('LLL:EXT:lang/locallang_core.php:labels.table').': '.$LANG->sL($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($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']));
+
+                       // 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']));
        }
 
        /**
@@ -299,7 +320,6 @@ class SC_show_item {
         * @return      void
         */
        function renderFileInfo($returnLinkTag) {
-               global $LANG;
 
                        // Initialize object to work on the image:
                $imgObj = t3lib_div::makeInstance('t3lib_stdGraphic');
@@ -320,16 +340,16 @@ class SC_show_item {
                        // Setting header:
                $icon = t3lib_BEfunc::getFileIcon($ext);
                $url = 'gfx/fileicons/'.$icon;
-               $fileName = '<img src="'.$url.'" width="18" height="16" align="top" alt="" /><b>'.$LANG->sL('LLL:EXT:lang/locallang_core.php:show_item.php.file',1).':</b> '.$fI['file'];
+               $fileName = '<img src="'.$url.'" width="18" height="16" align="top" alt="" /><strong>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.file', 1).':</strong> '.$fI['file'];
                if (t3lib_div::isFirstPartOfStr($this->file,PATH_site)) {
                        $code.= '<a href="../'.substr($this->file,strlen(PATH_site)).'" target="_blank">'.$fileName.'</a>';
                } else {
                        $code.= $fileName;
                }
-               $code.=' &nbsp;&nbsp;<b>'.$LANG->sL('LLL:EXT:lang/locallang_core.php:show_item.php.filesize').':</b> '.t3lib_div::formatSize(@filesize($this->file)).'<br />
+               $code.=' &nbsp;&nbsp;<strong>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.filesize').':</strong> '.t3lib_div::formatSize(@filesize($this->file)).'<br />
                        ';
                if (is_array($imgInfo)) {
-                       $code.= '<b>'.$LANG->sL('LLL:EXT:lang/locallang_core.php:show_item.php.dimensions').':</b> '.$imgInfo[0].'x'.$imgInfo[1].' pixels';
+                       $code.= '<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');
                }
                $this->content.=$this->doc->section('',$code);
                $this->content.=$this->doc->divider(2);
@@ -350,6 +370,7 @@ class SC_show_item {
                        if (TYPO3_OS!='WIN' && !$GLOBALS['TYPO3_CONF_VARS']['BE']['disable_exec_function'])     {
                                if ($ext=='zip')        {
                                        $code = '';
+                                       $t = array();
                                        exec('unzip -l '.$this->file, $t);
                                        if (is_array($t))       {
                                                reset($t);
@@ -374,6 +395,7 @@ class SC_show_item {
                                        } else {
                                                $compr = 'z';
                                        }
+                                       $t = array();
                                        exec('tar t'.$compr.'f '.$this->file, $t);
                                        if (is_array($t))       {
                                                foreach($t as $val)     {
@@ -383,7 +405,7 @@ class SC_show_item {
 
                                                $code.='
                                                                 -------<br/>
-                                                                '.count($t).' files';
+                                                                '.count($t).' '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.files');
 
                                                $code = '
                                                        <span class="nobr">'.$code.'
@@ -393,19 +415,25 @@ class SC_show_item {
                                        $this->content.= $this->doc->section('',$code);
                                }
                        } elseif ($GLOBALS['TYPO3_CONF_VARS']['BE']['disable_exec_function']) {
-                               $this->content.= $this->doc->section('','Sorry, TYPO3_CONF_VARS[BE][disable_exec_function] was set, so cannot display content of archive file.');
+                               $this->content.= $this->doc->section('',$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.cannotDisplayArchive'));
                        }
 
                                // Font files:
                        if ($ext=='ttf')        {
                                $thumbScript = 'thumbs.php';
+                               $check = basename($this->file).':'.filemtime($this->file).':'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
                                $params = '&file='.rawurlencode($this->file);
+                               $params.= '&md5sum='.t3lib_div::shortMD5($check);
                                $url = $thumbScript.'?&dummy='.$GLOBALS['EXEC_TIME'].$params;
                                $thumb = '<br />
                                        <div align="center">'.$returnLinkTag.'<img src="'.htmlspecialchars($url).'" border="0" title="'.htmlspecialchars(trim($this->file)).'" alt="" /></a></div>';
                                $this->content.= $this->doc->section('',$thumb);
                        }
                }
+
+
+                       // References:
+               $this->content.= $this->doc->section($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesToThisItem'),$this->makeRef('_FILE',$this->file));
        }
 
        /**
@@ -415,23 +443,122 @@ class SC_show_item {
         */
        function printContent() {
                $this->content.= $this->doc->endPage();
+               $this->content = $this->doc->insertStylesAndJS($this->content);
                echo $this->content;
        }
-}
 
-// Include extension?
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/show_item.php'])    {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/show_item.php']);
-}
+       /**
+        * Make reference display
+        *
+        * @param       string          Table name
+        * @param       string          Filename or uid
+        * @return      string          HTML
+        */
+       function makeRef($table,$ref)   {
 
+               if ($table==='_FILE')   {
+                               // First, fit path to match what is stored in the refindex:
+                       $fullIdent = $ref;
 
+                       if (t3lib_div::isFirstPartOfStr($fullIdent,PATH_site))  {
+                               $fullIdent = substr($fullIdent,strlen(PATH_site));
+                       }
 
+                               // Look up the path:
+                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+                               '*',
+                               'sys_refindex',
+                               'ref_table='.$GLOBALS['TYPO3_DB']->fullQuoteStr('_FILE','sys_refindex').
+                                       ' AND ref_string='.$GLOBALS['TYPO3_DB']->fullQuoteStr($fullIdent,'sys_refindex').
+                                       ' AND deleted=0'
+                       );
+               } 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'
+                       );
+               }
 
+                       // Compile information for title tag:
+               $infoData = array();
+               if (count($rows))       {
+                       $infoData[] = '<tr class="bgColor5 tableheader">' .
+                                       '<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.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)  {
+                       $infoData[] = '<tr class="bgColor4"">' .
+                                       '<td>'.$row['tablename'].'</td>' .
+                                       '<td>'.$row['recuid'].'</td>' .
+                                       '<td>'.$row['field'].'</td>'.
+                                       '<td>'.$row['flexpointer'].'</td>'.
+                                       '<td>'.$row['softref_key'].'</td>'.
+                                       '<td>'.$row['sorting'].'</td>'.
+                                       '</tr>';
+               }
 
+               return count($infoData) ? '<table border="0" cellpadding="1" cellspacing="1">'.implode('',$infoData).'</table>' : '';
+       }
 
+       /**
+        * Make reference display (what this elements points to)
+        *
+        * @param       string          Table name
+        * @param       string          Filename or uid
+        * @return      string          HTML
+        */
+       function makeRefFrom($table,$ref)       {
+
+                       // Look up the path:
+               $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+                       '*',
+                       'sys_refindex',
+                       'tablename='.$GLOBALS['TYPO3_DB']->fullQuoteStr($table,'sys_refindex').
+                               ' AND recuid='.intval($ref)
+               );
+
+                       // Compile information for title tag:
+               $infoData = array();
+               if (count($rows))       {
+                       $infoData[] = '<tr class="bgColor5 tableheader">' .
+                                       '<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>'.
+                                       '<td>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.refTable').'</td>' .
+                                       '<td>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.refUid').'</td>' .
+                                       '<td>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.refString').'</td>' .
+                                       '</tr>';
+               }
+               foreach($rows as $row)  {
+                       $infoData[] = '<tr class="bgColor4"">' .
+                                       '<td>'.$row['field'].'</td>'.
+                                       '<td>'.$row['flexpointer'].'</td>'.
+                                       '<td>'.$row['softref_key'].'</td>'.
+                                       '<td>'.$row['sorting'].'</td>'.
+                                       '<td>'.$row['ref_table'].'</td>' .
+                                       '<td>'.$row['ref_uid'].'</td>' .
+                                       '<td>'.$row['ref_string'].'</td>' .
+                                       '</tr>';
+               }
 
+               return count($infoData) ? '<table border="0" cellpadding="1" cellspacing="1">'.implode('',$infoData).'</table>' : '';
+       }
+}
 
 
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/show_item.php'])    {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/show_item.php']);
+}
 
 
 
@@ -440,4 +567,5 @@ $SOBE = t3lib_div::makeInstance('SC_show_item');
 $SOBE->init();
 $SOBE->main();
 $SOBE->printContent();
+
 ?>
\ No newline at end of file