Documentation TYPO3 par Ameos |
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com) 00006 * All rights reserved 00007 * 00008 * This script is part of the Typo3 project. The Typo3 project is 00009 * free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * The GNU General Public License can be found at 00015 * http://www.gnu.org/copyleft/gpl.html. 00016 * A copy is found in the textfile GPL.txt and important notices to the license 00017 * from the author is found in LICENSE.txt distributed with these scripts. 00018 * 00019 * 00020 * This script is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * This copyright notice MUST APPEAR in all copies of the script! 00026 ***************************************************************/ 00097 define ('T3_ERR_SV_GENERAL', -1); // General error - something went wrong 00098 define ('T3_ERR_SV_NOT_AVAIL', -2); // During execution it showed that the service is not available and should be ignored. The service itself should call $this->setNonAvailable() 00099 define ('T3_ERR_SV_WRONG_SUBTYPE', -3); // passed subtype is not possible with this service 00100 define ('T3_ERR_SV_NO_INPUT', -4); // passed subtype is not possible with this service 00101 00102 00103 define ('T3_ERR_SV_FILE_NOT_FOUND', -20); // File not found which the service should process 00104 define ('T3_ERR_SV_FILE_READ', -21); // File not readable 00105 define ('T3_ERR_SV_FILE_WRITE', -22); // File not writable 00106 00107 define ('T3_ERR_SV_PROG_NOT_FOUND', -40); // passed subtype is not possible with this service 00108 define ('T3_ERR_SV_PROG_FAILED', -41); // passed subtype is not possible with this service 00109 00110 // define ('T3_ERR_SV_serviceType_myerr, -100); // All errors with prefix T3_ERR_SV_[serviceType]_ and lower than -99 are service type dependent error 00111 00112 00113 require_once(PATH_t3lib.'class.t3lib_exec.php'); 00114 00115 00116 00117 00118 00119 00127 class t3lib_svbase { 00128 00132 var $info=array(); 00133 00137 var $error=array(); 00138 00142 var $writeDevLog = false; 00143 00144 00149 var $out = ''; 00150 00154 var $inputFile = ''; 00155 00159 var $inputContent = ''; 00160 00164 var $inputType = ''; 00165 00169 var $outputFile = ''; 00170 00171 00177 var $tempFiles = array(); 00178 00179 00180 00181 /*************************************** 00182 * 00183 * Get service meta information 00184 * 00185 ***************************************/ 00186 00187 00193 function getServiceInfo() { 00194 return $this->info; 00195 } 00196 00197 00203 function getServiceKey() { 00204 return $this->info['serviceKey']; 00205 } 00206 00207 00213 function getServiceTitle() { 00214 return $this->info['title']; 00215 } 00216 00217 00226 function getServiceOption($optionName, $defaultValue='', $includeDefaultConfig=TRUE) { 00227 global $TYPO3_CONF_VARS; 00228 00229 $config = NULL; 00230 00231 $svOptions = $TYPO3_CONF_VARS['SVCONF'][$this->info['serviceType']]; 00232 00233 if(isset($svOptions[$this->info['serviceKey']][$optionName])) { 00234 $config = $svOptions[$this->info['serviceKey']][$optionName]; 00235 } elseif($includeDefaultConfig AND isset($svOptions['default'][$optionName])) { 00236 $config = $svOptions['default'][$optionName]; 00237 } 00238 if(!isset($config)) { 00239 $config = $defaultValue; 00240 } 00241 return $config; 00242 } 00243 00244 00245 00246 /*************************************** 00247 * 00248 * Error handling 00249 * 00250 ***************************************/ 00251 00252 00261 function devLog($msg, $severity=0, $dataVar=FALSE) { 00262 if($this->writeDevLog) { 00263 t3lib_div::devLog($msg, $this->info['serviceKey'], $severity, $dataVar); 00264 } 00265 } 00266 00267 00275 function errorPush($errNum=T3_ERR_SV_GENERAL, $errMsg='Unspecified error occured') { 00276 array_push($this->error, array('nr'=>$errNum, 'msg'=>$errMsg)); 00277 00278 if (is_object($GLOBALS['TT'])) { 00279 $GLOBALS['TT']->setTSlogMessage($errMsg,2); 00280 } 00281 00282 } 00283 00284 00290 function errorPull() { 00291 array_pop($this->error); 00292 00293 // pop for $GLOBALS['TT']->setTSlogMessage is not supported 00294 } 00295 00296 00302 function getLastError() { 00303 if(count($this->error)) { 00304 $error = end($this->error); 00305 return $error['nr']; 00306 } else { 00307 return TRUE; // means all is ok - no error 00308 } 00309 } 00310 00311 00317 function getLastErrorMsg() { 00318 if(count($this->error)) { 00319 $error = end($this->error); 00320 return $error['msg']; 00321 } else { 00322 return ''; 00323 } 00324 } 00325 00326 00332 function getErrorMsgArray() { 00333 $errArr = array(); 00334 00335 if(count($this->error)) { 00336 reset($this->error); 00337 foreach($this->error as $error) { 00338 $errArr[] = $error['msg']; 00339 } 00340 } 00341 return $errArr; 00342 } 00343 00344 00350 function getLastErrorArray() { 00351 return end($this->error); 00352 } 00353 00359 function resetErrors() { 00360 $this->error=array(); 00361 } 00362 00363 00364 00365 /*************************************** 00366 * 00367 * General service functions 00368 * 00369 ***************************************/ 00370 00371 00372 00379 function checkExec($progList) { 00380 global $T3_VAR, $TYPO3_CONF_VARS; 00381 00382 $ret = TRUE; 00383 00384 require_once(PATH_t3lib.'class.t3lib_exec.php'); 00385 00386 $progList = t3lib_div::trimExplode(',', $progList, 1); 00387 foreach($progList as $prog) { 00388 if (!t3lib_exec::checkCommand($prog)) { 00389 // program not found 00390 $this->errorPush('External program not found: '.$prog, T3_ERR_SV_PROG_NOT_FOUND); 00391 $ret = FALSE; 00392 } 00393 } 00394 return $ret; 00395 } 00396 00397 00403 function deactivateService() { 00404 t3lib_extMgm::deactivateService($this->info['serviceType'], $this->info['serviceKey']); 00405 } 00406 00407 00408 00409 00410 00411 00412 00413 00414 00415 /*************************************** 00416 * 00417 * IO tools 00418 * 00419 ***************************************/ 00420 00421 00422 00429 function checkInputFile ($absFile) { 00430 if(t3lib_div::isAllowedAbsPath($absFile) && @is_file($absFile)) { 00431 if(@is_readable($absFile)) { 00432 return $absFile; 00433 } else { 00434 $this->errorPush(T3_ERR_SV_FILE_READ, 'File is not readable: '.$absFile); 00435 } 00436 } else { 00437 $this->errorPush(T3_ERR_SV_FILE_NOT_FOUND, 'File not found: '.$absFile); 00438 } 00439 return FALSE; 00440 } 00441 00442 00450 function readFile ($absFile, $length=0) { 00451 $out = FALSE; 00452 00453 if ($this->checkInputFile ($absFile)) { 00454 if ($fd = fopen ($absFile, 'rb')) { 00455 $length = intval($length) ? intval($length) : filesize ($absFile); 00456 if ($length > 0) { 00457 $out = fread ($fd, $length); 00458 } 00459 fclose ($fd); 00460 } else { 00461 $this->errorPush(T3_ERR_SV_FILE_READ, 'Can not read from file: '.$absFile); 00462 } 00463 } 00464 return $out; 00465 } 00466 00467 00475 function writeFile ($content, $absFile='') { 00476 $ret = TRUE; 00477 00478 if (!$absFile) { 00479 $absFile = $this->tempFile($this->prefixId); 00480 } 00481 00482 if($absFile && t3lib_div::isAllowedAbsPath($absFile)) { 00483 if ($fd = @fopen($absFile,'wb')) { 00484 @fwrite($fd, $content); 00485 @fclose($fd); 00486 } else { 00487 $this->errorPush(T3_ERR_SV_FILE_WRITE, 'Can not write to file: '.$absFile); 00488 $absFile = FALSE; 00489 } 00490 } 00491 00492 return $absFile; 00493 } 00494 00501 function tempFile ($filePrefix) { 00502 $absFile = t3lib_div::tempnam($filePrefix); 00503 if($absFile) { 00504 $ret = TRUE; 00505 $this->registerTempFile ($absFile); 00506 } else { 00507 $ret = FALSE; 00508 $this->errorPush(T3_ERR_SV_FILE_WRITE, 'Can not create temp file.'); 00509 } 00510 return ($ret ? $absFile : FALSE); 00511 } 00512 00519 function registerTempFile ($absFile) { 00520 $this->tempFiles[] = $absFile; 00521 } 00522 00529 function unlinkTempFiles () { 00530 foreach ($this->tempFiles as $absFile) { 00531 t3lib_div::unlink_tempfile($absFile); 00532 } 00533 $this->tempFiles = array(); 00534 } 00535 00536 00537 /*************************************** 00538 * 00539 * IO input 00540 * 00541 ***************************************/ 00542 00543 00551 function setInput ($content, $type='') { 00552 $this->inputContent = $content; 00553 $this->inputFile = ''; 00554 $this->inputType = $type; 00555 } 00556 00557 00565 function setInputFile ($absFile, $type='') { 00566 $this->inputContent = ''; 00567 $this->inputFile = $absFile; 00568 $this->inputType = $type; 00569 } 00570 00571 00578 function getInput () { 00579 if ($this->inputContent=='') { 00580 $this->inputContent = $this->readFile($this->inputFile); 00581 } 00582 return $this->inputContent; 00583 } 00584 00585 00593 function getInputFile ($createFile='') { 00594 if($this->inputFile) { 00595 $this->inputFile = $this->checkInputFile($this->inputFile); 00596 } elseif ($this->inputContent) { 00597 $this->inputFile = $this->writeFile($this->inputContent, $createFile); 00598 } 00599 return $this->inputFile; 00600 } 00601 00602 00603 00604 00605 /*************************************** 00606 * 00607 * IO output 00608 * 00609 ***************************************/ 00610 00611 00618 function setOutputFile ($absFile) { 00619 $this->outputFile = $absFile; 00620 } 00621 00622 00628 function getOutput () { 00629 if ($this->outputFile) { 00630 $this->out = $this->readFile($this->outputFile); 00631 } 00632 return $this->out; 00633 } 00634 00635 00642 function getOutputFile ($absFile='') { 00643 if (!$this->outputFile) { 00644 $this->outputFile = $this->writeFile($this->out, $absFile); 00645 } 00646 return $this->outputFile; 00647 } 00648 00649 00650 00651 00652 /*************************************** 00653 * 00654 * Service implementation 00655 * 00656 ***************************************/ 00657 00666 function init() { 00667 // do not work :-( but will not hurt 00668 register_shutdown_function(array(&$this, '__destruct')); 00669 // look in makeInstanceService() 00670 00671 $this->reset(); 00672 00673 // check for external programs which are defined by $info['exec'] 00674 if (trim($this->info['exec'])) { 00675 if (!$this->checkExec($this->info['exec'])) { 00676 // nothing todo here or? 00677 } 00678 } 00679 00680 return $this->getLastError(); 00681 } 00682 00683 00690 function reset() { 00691 $this->unlinkTempFiles(); 00692 $this->resetErrors(); 00693 $this->out = ''; 00694 $this->inputFile = ''; 00695 $this->inputContent = ''; 00696 $this->inputType = ''; 00697 $this->outputFile = ''; 00698 } 00699 00705 function __destruct() { 00706 $this->unlinkTempFiles(); 00707 } 00708 00709 00710 /* every service type has it's own API 00711 function process($content='', $type='', $conf=array()) { // 00712 } 00713 */ 00714 00715 } 00716 00724 ?>