00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00097 define ('T3_ERR_SV_GENERAL', -1);
00098 define ('T3_ERR_SV_NOT_AVAIL', -2);
00099 define ('T3_ERR_SV_WRONG_SUBTYPE', -3);
00100 define ('T3_ERR_SV_NO_INPUT', -4);
00101
00102
00103 define ('T3_ERR_SV_FILE_NOT_FOUND', -20);
00104 define ('T3_ERR_SV_FILE_READ', -21);
00105 define ('T3_ERR_SV_FILE_WRITE', -22);
00106
00107 define ('T3_ERR_SV_PROG_NOT_FOUND', -40);
00108 define ('T3_ERR_SV_PROG_FAILED', -41);
00109
00110
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
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
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
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;
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
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
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
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
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
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
00655
00656
00657
00666 function init() {
00667
00668 register_shutdown_function(array(&$this, '__destruct'));
00669
00670
00671 $this->reset();
00672
00673
00674 if (trim($this->info['exec'])) {
00675 if (!$this->checkExec($this->info['exec'])) {
00676
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
00711
00712
00713
00714
00715 }
00716
00724 ?>