Added feature #13953: Hookrequest - t3lib_page::getRecordOverlay (thanks to Tolleiv...
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_stdgraphic.php
index 09ea63e..eb248e6 100644 (file)
@@ -326,9 +326,9 @@ class t3lib_stdGraphic      {
                }
 
                if (TYPO3_MODE=='FE')   {
-                       $this->csConvObj = &$GLOBALS['TSFE']->csConvObj;
+                       $this->csConvObj = $GLOBALS['TSFE']->csConvObj;
                } elseif(is_object($GLOBALS['LANG']))   {       // BE assumed:
-                       $this->csConvObj = &$GLOBALS['LANG']->csConvObj;
+                       $this->csConvObj = $GLOBALS['LANG']->csConvObj;
                } else  {       // The object may not exist yet, so we need to create it now. Happens in the Install Tool for example.
                        $this->csConvObj = t3lib_div::makeInstance('t3lib_cs');
                }
@@ -1610,7 +1610,18 @@ class t3lib_stdGraphic   {
                        $reduce = t3lib_div::intInRange($this->setup['reduceColors'], 256, $this->truecolorColors, 256);
                        $this->reduceColors($im, $reduce-1, $reduce-2); // If "reduce-1" colors (or more) are used reduce them to "reduce-2"
                }
-               $tmpColor = ImageColorAllocate($im, $cols[0],$cols[1],$cols[2]);
+
+               $opacity = 0;
+               if (isset($conf['opacity'])) {
+                               // conversion:
+                               // PHP 0 = opaque, 127 = transparent
+                               // TYPO3 100 = opaque, 0 = transparent
+                       $opacity = t3lib_div::intInRange(intval($conf['opacity']), 1, 100, 1);
+                       $opacity = abs($opacity - 100);
+                       $opacity = round((127 * $opacity) / 100);
+               }
+
+               $tmpColor = ImageColorAllocateAlpha($im, $cols[0],$cols[1],$cols[2], $opacity);
                imagefilledrectangle($im, $cords[0], $cords[1], $cords[0]+$cords[2]-1, $cords[1]+$cords[3]-1, $tmpColor);
        }
 
@@ -2296,7 +2307,7 @@ class t3lib_stdGraphic    {
                                $info[0]=$data[0];
                                $info[1]=$data[1];
 
-                               $frame = $this->noFramePrepended ? '' : '['.intval($frame).']';
+                               $frame = $this->noFramePrepended ? '' : intval($frame);
 
                                if (!$params)   {
                                        $params = $this->cmds[$newExt];
@@ -2315,9 +2326,9 @@ class t3lib_stdGraphic    {
                                $cropscale = ($data['crs'] ? 'crs-V'.$data['cropV'].'H'.$data['cropH'] : '');
 
                                if ($this->alternativeOutputKey)        {
-                                       $theOutputName = t3lib_div::shortMD5($command.$cropscale.basename($imagefile).$this->alternativeOutputKey.$frame);
+                                       $theOutputName = t3lib_div::shortMD5($command.$cropscale.basename($imagefile).$this->alternativeOutputKey.'['.$frame.']');
                                } else {
-                                       $theOutputName = t3lib_div::shortMD5($command.$cropscale.$imagefile.filemtime($imagefile).$frame);
+                                       $theOutputName = t3lib_div::shortMD5($command.$cropscale.$imagefile.filemtime($imagefile).'['.$frame.']');
                                }
                                if ($this->imageMagickConvert_forceFileNameBody)        {
                                        $theOutputName = $this->imageMagickConvert_forceFileNameBody;
@@ -2332,7 +2343,7 @@ class t3lib_stdGraphic    {
                                $GLOBALS['TEMP_IMAGES_ON_PAGE'][] = $output;
 
                                if ($this->dontCheckForExistingTempFile || !$this->file_exists_typo3temp_file($output, $imagefile))     {
-                                       $this->imageMagickExec($imagefile.$frame, $output, $command);
+                                       $this->imageMagickExec($imagefile, $output, $command, $frame);
                                }
                                if (file_exists($output))       {
                                        $info[3] = $output;
@@ -2392,7 +2403,7 @@ class t3lib_stdGraphic    {
                        $fieldArr = array (
                                'md5hash' => $md5Hash,
                                'md5filename' => md5($identifyResult[3]),
-                               'tstamp' => time(),
+                               'tstamp' => $GLOBALS['EXEC_TIME'],
                                'filename' => $identifyResult[3],
                                'imagewidth' => $identifyResult[0],
                                'imageheight' => $identifyResult[1],
@@ -2424,7 +2435,7 @@ class t3lib_stdGraphic    {
                                                // file has changed, delete the row
                                        $TYPO3_DB->exec_DELETEquery ('cache_imagesizes', 'md5hash='.$TYPO3_DB->fullQuoteStr($row['md5hash'],'cache_imagesizes'));
                                } else {
-                                       return (array($row['imagewidth'], $row['imageheight'], strtolower($reg[0]), $imageFile));
+                                       return (array((int) $row['imagewidth'], (int) $row['imageheight'], strtolower($reg[0]), $imageFile));
                                }
                        }
                }
@@ -2554,7 +2565,11 @@ class t3lib_stdGraphic   {
                                return 1;
                        } else {        // If not, we look up in the cache_typo3temp_log table to see if there is a image being rendered right now.
                                $md5Hash=md5($output);
-                               $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('md5hash', 'cache_typo3temp_log', 'md5hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($md5Hash, 'cache_typo3temp_log').' AND tstamp>'.(time()-30));
+                               $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
+                                       'md5hash',
+                                       'cache_typo3temp_log',
+                                       'md5hash=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($md5Hash, 'cache_typo3temp_log') . ' AND tstamp>' . ($GLOBALS['EXEC_TIME'] - 30)
+                               );
                                if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {       // If there was a record, the image is being generated by another proces (we assume)
                                        if (is_object($GLOBALS['TSFE']))        $GLOBALS['TSFE']->set_no_cache();       // ...so we set no_cache, because we dont want this page (which will NOT display an image...!) to be cached! (Only a page with the correct image on...)
                                        if (is_object($GLOBALS['TT']))  $GLOBALS['TT']->setTSlogMessage('typo3temp_log: Assume this file is being rendered now: '.$output);
@@ -2563,7 +2578,7 @@ class t3lib_stdGraphic    {
 
                                        $insertFields = array(
                                                'md5hash' => $md5Hash,
-                                               'tstamp' => time(),
+                                               'tstamp' => $GLOBALS['EXEC_TIME'],
                                                'filename' => $output,
                                                'orig_filename' => $orig
                                        );
@@ -2642,15 +2657,26 @@ class t3lib_stdGraphic  {
         * @param       string          The relative (to PATH_site) image filepath, input file (read from)
         * @param       string          The relative (to PATH_site) image filepath, output filename (written to)
         * @param       string          ImageMagick parameters
+        * @param       integer         Optional, refers to which frame-number to select in the image. '' or 0
+        *                              will select the first frame, 1 will select the next and so on...
         * @return      string          The result of a call to PHP function "exec()"
         */
-       function imageMagickExec($input,$output,$params)        {
-               if (!$this->NO_IMAGE_MAGICK)    {
-                       $cmd = t3lib_div::imageMagickCommand('convert', $params.' '.$this->wrapFileName($input).' '.$this->wrapFileName($output));
+       function imageMagickExec($input, $output, $params, $frame = 0) {
+               if (!$this->NO_IMAGE_MAGICK) {
+
+                               // Unless noFramePrepended is set in the Install Tool, a frame number is added to
+                               // select a specific page of the image (by default this will be the first page)
+                       if (!$this->noFramePrepended) {
+                               $frame = '[' . intval($frame) . ']';
+                       } else {
+                               $frame = '';
+                       }
+
+                       $cmd = t3lib_div::imageMagickCommand('convert', $params . ' ' . $this->wrapFileName($input) . $frame . ' ' . $this->wrapFileName($output));
                        $this->IM_commands[] = array($output,$cmd);
 
                        $ret = exec($cmd);
-                       t3lib_div::fixPermissions($this->wrapFileName($output));        // Change the permissions of the file
+                       t3lib_div::fixPermissions($output);     // Change the permissions of the file
 
                        return $ret;
                }
@@ -2681,7 +2707,7 @@ class t3lib_stdGraphic    {
                        $this->IM_commands[] = Array ($output,$cmd);
 
                        $ret = exec($cmd);
-                       t3lib_div::fixPermissions($this->wrapFileName($output));        // Change the permissions of the file
+                       t3lib_div::fixPermissions($output);     // Change the permissions of the file
 
                        if (is_file($theMask))  {
                                @unlink($theMask);
@@ -2692,17 +2718,14 @@ class t3lib_stdGraphic  {
        }
 
        /**
-        * Wrapping the input filename in double-quotes
+        * Escapes a file name so it can safely be used on the command line.
         *
-        * @param       string          Input filename
-        * @return      string          The output wrapped in "" (if there are spaces in the filepath)
-        * @access private
+        * @param string $inputName filename to safeguard, must not be empty
+        *
+        * @return string $inputName escaped as needed
         */
-       function wrapFileName($inputName)       {
-               if (strstr($inputName,' '))     {
-                       $inputName='"'.$inputName.'"';
-               }
-               return $inputName;
+       protected function wrapFileName($inputName) {
+               return escapeshellarg($inputName);
        }
 
 
@@ -2924,9 +2947,11 @@ class t3lib_stdGraphic   {
         * @param       string          The filename to write to
         * @return      mixed           The output of either imageGif, imagePng or imageJpeg based on the filename to write
         * @see imageWrite()
-        * @deprecated since TYPO3 4.0
+        * @deprecated since TYPO3 4.0, this function will be removed in TYPO3 4.5.
         */
        function imageGif($destImg, $theImage)  {
+               t3lib_div::logDeprecatedFunction();
+
                return $this->imageWrite($destImg, $theImage);
        }
 
@@ -2936,9 +2961,11 @@ class t3lib_stdGraphic   {
         *
         * @param       string          Image filename
         * @return      pointer         Image Resource pointer
-        * @deprecated since TYPO3 4.0
+        * @deprecated since TYPO3 4.0, this function will be removed in TYPO3 4.5.
         */
        function imageCreateFromGif($sourceImg) {
+               t3lib_div::logDeprecatedFunction();
+
                return $this->imageCreateFromFile($sourceImg);
        }