|
eZ Publish
[trunk]
|
00001 <?php 00002 /** 00003 * File containing the eZImageShellHandler class. 00004 * 00005 * @copyright Copyright (C) 1999-2012 eZ Systems AS. All rights reserved. 00006 * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2 00007 * @version //autogentag// 00008 * @package lib 00009 */ 00010 00011 /*! 00012 \class eZImageShellHandler ezimageshellhandler.php 00013 \ingroup eZImage 00014 \brief The class eZImageShellHandler does 00015 00016 */ 00017 00018 class eZImageShellHandler extends eZImageHandler 00019 { 00020 /*! 00021 Constructor 00022 */ 00023 function eZImageShellHandler( $handlerName, $isEnabled = true, $outputRewriteType = self::REPLACE_SUFFIX, 00024 $supportedInputMIMETypes = false, $supportedOutputMIMETypes = false, 00025 $conversionRules = false, $filters = false, $mimeTagMap = false) 00026 { 00027 $this->eZImageHandler( $handlerName, $isEnabled, $outputRewriteType, 00028 $supportedInputMIMETypes, $supportedOutputMIMETypes, 00029 $conversionRules, $filters, $mimeTagMap ); 00030 $this->Path = false; 00031 $this->Executable = false; 00032 $this->PreParameters = false; 00033 $this->PostParameters = false; 00034 $this->UseTypeTag = false; 00035 $this->QualityParameters = false; 00036 $this->FrameRangeParameters = false; 00037 } 00038 00039 /*! 00040 Creates the shell string and runs the executable. 00041 */ 00042 function convert( $manager, $sourceMimeData, &$destinationMimeData, $filters = false ) 00043 { 00044 $argumentList = array(); 00045 $executable = $this->Executable; 00046 if ( eZSys::osType() == 'win32' and $this->ExecutableWin32 ) 00047 $executable = $this->ExecutableWin32; 00048 else if ( eZSys::osType() == 'mac' and $this->ExecutableMac ) 00049 $executable = $this->ExecutableMac; 00050 else if ( eZSys::osType() == 'unix' and $this->ExecutableUnix ) 00051 $executable = $this->ExecutableUnix; 00052 if ( $this->Path ) 00053 $executable = $this->Path . eZSys::fileSeparator() . $executable; 00054 if ( eZSys::osType() == 'win32' ) 00055 $executable = "\"$executable\""; 00056 00057 $argumentList[] = $executable; 00058 00059 if ( $this->PreParameters ) 00060 $argumentList[] = $this->PreParameters; 00061 00062 $frameRangeParameters = $this->FrameRangeParameters; 00063 if ( $frameRangeParameters && isset( $frameRangeParameters[$sourceMimeData['name']] ) ) 00064 { 00065 $sourceMimeData['url'] .= $frameRangeParameters[$sourceMimeData['name']]; 00066 } 00067 00068 $argumentList[] = eZSys::escapeShellArgument( $sourceMimeData['url'] ); 00069 00070 $qualityParameters = $this->QualityParameters; 00071 if ( $qualityParameters and 00072 isset( $qualityParameters[$destinationMimeData['name']] ) ) 00073 { 00074 $qualityParameter = $qualityParameters[$destinationMimeData['name']]; 00075 $outputQuality = $manager->qualityValue( $destinationMimeData['name'] ); 00076 if ( $outputQuality ) 00077 { 00078 $qualityArgument = eZSys::createShellArgument( $qualityParameter, array( '%1' => $outputQuality ) ); 00079 $argumentList[] = $qualityArgument; 00080 } 00081 } 00082 00083 if ( $filters !== false ) 00084 { 00085 foreach ( $filters as $filterData ) 00086 { 00087 $argumentList[] = $this->textForFilter( $filterData ); 00088 } 00089 } 00090 00091 $destinationURL = $destinationMimeData['url']; 00092 if ( $this->UseTypeTag ) 00093 $destinationURL = $this->tagForMIMEType( $destinationMimeData ) . $this->UseTypeTag . $destinationURL; 00094 $argumentList[] = eZSys::escapeShellArgument( $destinationURL ); 00095 00096 if ( $this->PostParameters ) 00097 $argumentList[] = $this->PostParameters; 00098 00099 $systemString = implode( ' ', $argumentList ); 00100 00101 system( $systemString, $returnCode ); 00102 00103 if ( $returnCode == 0 ) 00104 { 00105 if ( !file_exists( $destinationMimeData['url'] ) ) 00106 { 00107 eZDebug::writeError( 'Unknown destination file: ' . $destinationMimeData['url'] . " when executing '$systemString'", 'eZImageShellHandler(' . $this->HandlerName . ')' ); 00108 return false; 00109 } 00110 $this->changeFilePermissions( $destinationMimeData['url'] ); 00111 return true; 00112 } 00113 else 00114 { 00115 eZDebug::writeWarning( "Failed executing: $systemString, Error code: $returnCode", __METHOD__ ); 00116 return false; 00117 } 00118 00119 } 00120 00121 /*! 00122 Creates a new image handler for shell executable from INI settings. 00123 The INI settings are read from ini file \a $iniFilename and group \a $iniGroup. 00124 If \a $iniFilename is not supplied \c image.ini is used. 00125 */ 00126 static function createFromINI( $iniGroup, $iniFilename = false ) 00127 { 00128 if ( !$iniFilename ) 00129 $iniFilename = 'image.ini'; 00130 00131 $handler = false; 00132 $ini = eZINI::instance( $iniFilename ); 00133 if ( !$ini ) 00134 { 00135 eZDebug::writeError( "Failed loading ini file $iniFilename", __METHOD__ ); 00136 return $handler; 00137 } 00138 00139 if ( $ini->hasGroup( $iniGroup ) ) 00140 { 00141 $name = $iniGroup; 00142 if ( $ini->hasVariable( $iniGroup, 'Name' ) ) 00143 $name = $ini->variable( $iniGroup, 'Name' ); 00144 $inputMimeList = false; 00145 $outputMimeList = false; 00146 if ( $ini->hasVariable( $iniGroup, 'InputMIMEList' ) ) 00147 $inputMimeList = $ini->variable( $iniGroup, 'InputMIMEList' ); 00148 if ( $ini->hasVariable( $iniGroup, 'OutputMIMEList' ) ) 00149 $outputMimeList = $ini->variable( $iniGroup, 'OutputMIMEList' ); 00150 $qualityParameters = false; 00151 if ( $ini->hasVariable( $iniGroup, 'QualityParameters' ) ) 00152 { 00153 $qualityParametersRaw = $ini->variable( $iniGroup, 'QualityParameters' ); 00154 foreach ( $qualityParametersRaw as $qualityParameterRaw ) 00155 { 00156 $elements = explode( ';', $qualityParameterRaw ); 00157 $qualityParameters[$elements[0]] = $elements[1]; 00158 } 00159 } 00160 00161 $frameRangeParameters = false; 00162 if ( $ini->hasVariable( $iniGroup, 'FrameRangeParameters' ) ) 00163 { 00164 foreach ( $ini->variable( $iniGroup, 'FrameRangeParameters' ) as $frameRangeParameter ) 00165 { 00166 $elements = explode( ';', $frameRangeParameter ); 00167 $frameRangeParameters[$elements[0]] = $elements[1]; 00168 } 00169 } 00170 00171 $conversionRules = false; 00172 if ( $ini->hasVariable( $iniGroup, 'ConversionRules' ) ) 00173 { 00174 $conversionRules = array(); 00175 $rules = $ini->variable( $iniGroup, 'ConversionRules' ); 00176 foreach ( $rules as $ruleString ) 00177 { 00178 $ruleItems = explode( ';', $ruleString ); 00179 if ( count( $ruleItems ) >= 2 ) 00180 { 00181 $conversionRules[] = array( 'from' => $ruleItems[0], 00182 'to' => $ruleItems[1] ); 00183 } 00184 } 00185 } 00186 $isEnabled = $ini->variable( $iniGroup, 'IsEnabled' ) == 'true'; 00187 $path = false; 00188 $executable = false; 00189 $preParameters = false; 00190 $postParameters = false; 00191 if ( $ini->hasVariable( $iniGroup, 'ExecutablePath' ) ) 00192 $path = $ini->variable( $iniGroup, 'ExecutablePath' ); 00193 if ( !$ini->hasVariable( $iniGroup, 'Executable' ) ) 00194 { 00195 eZDebug::writeError( "No Executable setting for group $iniGroup in ini file $iniFilename", __METHOD__ ); 00196 return $handler; 00197 } 00198 $executable = $ini->variable( $iniGroup, 'Executable' ); 00199 $executableWin32 = false; 00200 $executableMac = false; 00201 $executableUnix = false; 00202 $ini->assign( $iniGroup, 'ExecutableWin32', $executableWin32 ); 00203 $ini->assign( $iniGroup, 'ExecutableMac', $executableMac ); 00204 $ini->assign( $iniGroup, 'ExecutableUnix', $executableUnix ); 00205 00206 if ( $ini->hasVariable( $iniGroup, 'ExecutablePath' ) ) 00207 $path = $ini->variable( $iniGroup, 'ExecutablePath' ); 00208 if ( $ini->hasVariable( $iniGroup, 'PreParameters' ) ) 00209 $preParameters = $ini->variable( $iniGroup, 'PreParameters' ); 00210 if ( $ini->hasVariable( $iniGroup, 'PostParameters' ) ) 00211 $postParameters = $ini->variable( $iniGroup, 'PostParameters' ); 00212 $useTypeTag = false; 00213 if ( $ini->hasVariable( $iniGroup, 'UseTypeTag' ) ) 00214 { 00215 $useTypeTag = $ini->variable( $iniGroup, 'UseTypeTag' ); 00216 } 00217 $outputRewriteType = self::REPLACE_SUFFIX; 00218 $filters = false; 00219 if ( $ini->hasVariable( $iniGroup, 'Filters' ) ) 00220 { 00221 $filterRawList = $ini->variable( $iniGroup, 'Filters' ); 00222 $filters = array(); 00223 foreach ( $filterRawList as $filterRawItem ) 00224 { 00225 $filter = eZImageHandler::createFilterDefinitionFromINI( $filterRawItem ); 00226 $filters[] = $filter; 00227 } 00228 } 00229 $mimeTagMap = false; 00230 if ( $ini->hasVariable( $iniGroup, 'MIMETagMap' ) ) 00231 { 00232 $mimeTagMapList = $ini->variable( $iniGroup, 'MIMETagMap' ); 00233 $mimeTagMap = array(); 00234 foreach ( $mimeTagMapList as $mimeTagMapItem ) 00235 { 00236 $mimeTagMapArray = explode( ';', $mimeTagMapItem ); 00237 if ( count( $mimeTagMapArray ) >= 2 ) 00238 $mimeTagMap[$mimeTagMapArray[0]] = $mimeTagMapArray[1]; 00239 } 00240 } 00241 $handler = new eZImageShellHandler( $name, $isEnabled, 00242 $outputRewriteType, 00243 $inputMimeList, $outputMimeList, 00244 $conversionRules, $filters, $mimeTagMap ); 00245 $handler->Path = $path; 00246 $handler->Executable = $executable; 00247 $handler->ExecutableWin32 = $executableWin32; 00248 $handler->ExecutableMac = $executableMac; 00249 $handler->ExecutableUnix = $executableUnix; 00250 $handler->PreParameters = $preParameters; 00251 $handler->PostParameters = $postParameters; 00252 $handler->UseTypeTag = $useTypeTag; 00253 $handler->QualityParameters = $qualityParameters; 00254 $handler->FrameRangeParameters = $frameRangeParameters; 00255 return $handler; 00256 } 00257 return $handler; 00258 } 00259 00260 /// \privatesection 00261 public $Path; 00262 public $Executable; 00263 public $PreParameters; 00264 public $PostParameters; 00265 } 00266 00267 ?>