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
00191 function getServiceInfo() {
00192 return $this->info;
00193 }
00194
00195
00199 function getServiceKey() {
00200 return $this->info['serviceKey'];
00201 }
00202
00203
00207 function getServiceTitle() {
00208 return $this->info['title'];
00209 }
00210
00211
00220 function getServiceOption($optionName, $defaultValue='', $includeDefaultConfig=TRUE) {
00221 global $TYPO3_CONF_VARS;
00222
00223 $config = NULL;
00224
00225 $svOptions = $TYPO3_CONF_VARS['SVCONF'][$this->info['serviceType']];
00226
00227 if(isset($svOptions[$this->info['serviceKey']][$optionName])) {
00228 $config = $svOptions['default'][$optionName];
00229 } elseif($includeDefaultConfig AND isset($svOptions['default'][$optionName])) {
00230 $config = $svOptions['default'][$optionName];
00231 }
00232 if(!isset($config)) {
00233 $config = $defaultValue;
00234 }
00235 return $config;
00236 }
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00255 function devLog($msg, $severity=0, $dataVar=FALSE) {
00256 if($this->writeDevLog) {
00257 t3lib_div::devLog($msg, $this->info['serviceKey'], $severity, $dataVar);
00258 }
00259 }
00260
00261
00269 function errorPush($errNum=T3_ERR_SV_GENERAL, $errMsg='Unspecified error occured') {
00270 array_push($this->error, array('nr'=>$errNum, 'msg'=>$errMsg));
00271
00272 if (is_object($GLOBALS["TT"])) {
00273 $GLOBALS['TT']->setTSlogMessage($errMsg,2);
00274 }
00275
00276 }
00277
00278
00284 function errorPull() {
00285 array_pop($this->error);
00286
00287
00288 }
00289
00290
00296 function getLastError() {
00297 if(count($this->error)) {
00298 $error = end($this->error);
00299 return $error['nr'];
00300 } else {
00301 return TRUE;
00302 }
00303 }
00304
00305
00311 function getLastErrorMsg() {
00312 if(count($this->error)) {
00313 $error = end($this->error);
00314 return $error['msg'];
00315 } else {
00316 return '';
00317 }
00318 }
00319
00320
00326 function getErrorMsgArray() {
00327 $errArr = array();
00328
00329 if(count($this->error)) {
00330 reset($this->error);
00331 foreach($this->error as $error) {
00332 $errArr[] = $error['msg'];
00333 }
00334 }
00335 return $errArr;
00336 }
00337
00338
00344 function getLastErrorArray() {
00345 return end($this->error);
00346 }
00347
00353 function resetErrors() {
00354 $this->error=array();
00355 }
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00373 function checkExec($progList) {
00374 $ret = TRUE;
00375
00376 require_once(PATH_t3lib.'class.t3lib_exec.php');
00377
00378 $progList = t3lib_div::trimExplode(',', $progList, 1);
00379 foreach($progList as $prog) {
00380 if (!t3lib_exec::checkCommand($prog)) {
00381
00382 $this->errorPush('External program not found: '.$prog, T3_ERR_SV_PROG_NOT_FOUND);
00383 $ret = FALSE;
00384 }
00385 }
00386 return $ret;
00387 }
00388
00389
00395 function deactivateService() {
00396 t3lib_extMgm::deactivateService($this->info['serviceType'], $this->info['serviceKey']);
00397 }
00398
00399
00425
00426
00427
00428
00429
00430
00431
00432
00439 function checkInputFile ($absFile) {
00440 if(@is_file($absFile)) {
00441 if(@is_readable($absFile)) {
00442 return $absFile;
00443 } else {
00444 $this->errorPush(T3_ERR_SV_FILE_READ, 'File is not readable: '.$absFile);
00445 }
00446 } else {
00447 $this->errorPush(T3_ERR_SV_FILE_NOT_FOUND, 'File not found: '.$absFile);
00448 }
00449 return FALSE;
00450 }
00451
00452
00460 function readFile ($absFile, $length=0) {
00461 $out = FALSE;
00462
00463 if ($this->checkInputFile ($absFile)) {
00464 if ($fd = fopen ($absFile, 'rb')) {
00465 $length = intval($length) ? intval($length) : filesize ($absFile);
00466 if ($length > 0) {
00467 $out = fread ($fd, $length);
00468 }
00469 fclose ($fd);
00470 } else {
00471 $this->errorPush(T3_ERR_SV_FILE_READ, 'Can not read from file: '.$absFile);
00472 }
00473 }
00474 return $out;
00475 }
00476
00477
00485 function writeFile ($content, $absFile='') {
00486 $ret = TRUE;
00487
00488 if (!$absFile) {
00489 $absFile = $this->tempFile($this->prefixId);
00490 }
00491
00492 if($absFile) {
00493 if ($fd = @fopen($absFile,'wb')) {
00494 @fwrite($fd, $content);
00495 @fclose($fd);
00496 } else {
00497 $this->errorPush(T3_ERR_SV_FILE_WRITE, 'Can not write to file: '.$absFile);
00498 $absFile = FALSE;
00499 }
00500 }
00501
00502 return $absFile;
00503 }
00504
00511 function tempFile ($filePrefix) {
00512 $absFile = t3lib_div::tempnam($filePrefix);
00513 if($absFile) {
00514 $ret = TRUE;
00515 $this->registerTempFile ($absFile);
00516 } else {
00517 $ret = FALSE;
00518 $this->errorPush(T3_ERR_SV_FILE_WRITE, 'Can not create temp file.');
00519 }
00520 return ($ret ? $absFile : FALSE);
00521 }
00522
00529 function registerTempFile ($absFile) {
00530 $this->tempFiles[] = $absFile;
00531 }
00532
00539 function unlinkTempFiles () {
00540 foreach ($this->tempFiles as $absFile) {
00541 t3lib_div::unlink_tempfile($absFile);
00542 }
00543 $this->tempFiles = array();
00544 }
00545
00546
00547
00548
00549
00550
00551
00552
00553
00561 function setInput ($content, $type='') {
00562 $this->inputContent = $content;
00563 $this->inputFile = '';
00564 $this->inputType = $type;
00565 }
00566
00567
00575 function setInputFile ($absFile, $type='') {
00576 $this->inputContent = '';
00577 $this->inputFile = $absFile;
00578 $this->inputType = $type;
00579 }
00580
00581
00588 function getInput () {
00589 if ($this->inputContent=='') {
00590 $this->inputContent = $this->readFile($this->inputFile);
00591 }
00592 return $this->inputContent;
00593 }
00594
00595
00603 function getInputFile ($createFile='') {
00604 if($this->inputFile) {
00605 $this->inputFile = $this->checkInputFile($this->inputFile);
00606 } elseif ($this->inputContent) {
00607 $this->inputFile = $this->writeFile($this->inputContent, $createFile);
00608 }
00609 return $this->inputFile;
00610 }
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00628 function setOutputFile ($absFile) {
00629 $this->outputFile = $absFile;
00630 }
00631
00632
00638 function getOutput () {
00639 if ($this->outputFile) {
00640 $this->out = $this->readFile($this->outputFile);
00641 }
00642 return $this->out;
00643 }
00644
00645
00652 function getOutputFile ($absFile='') {
00653 if (!$this->outputFile) {
00654 $this->outputFile = $this->writeFile($this->out, $absFile);
00655 }
00656 return $this->outputFile;
00657 }
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00676 function init() {
00677
00678 register_shutdown_function(array(&$this, '__destruct'));
00679
00680
00681 $this->reset();
00682
00683
00684 if (trim($this->info['exec'])) {
00685 if (!$this->checkExec($this->info['exec'])) {
00686
00687 }
00688 }
00689
00690 return $this->getLastError();
00691 }
00692
00693
00700 function reset() {
00701 $this->unlinkTempFiles();
00702 $this->resetErrors();
00703 $this->out = '';
00704 $this->inputFile = '';
00705 $this->inputContent = '';
00706 $this->inputType = '';
00707 $this->outputFile = '';
00708 }
00709
00715 function __destruct() {
00716 $this->unlinkTempFiles();
00717 }
00718
00719
00720
00721
00722
00723
00724
00725 }
00726
00734 ?>