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
00092 require_once (PATH_t3lib.'class.t3lib_basicfilefunc.php');
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00132 class user_feAdmin {
00133
00134
00135 var $recInMarkersHSC = TRUE;
00136
00137 var $dataArr = array();
00138 var $failureMsg = array();
00139 var $theTable = '';
00140 var $thePid = 0;
00141 var $markerArray = array();
00142 var $templateCode='';
00143 var $cObj;
00144
00145 var $cmd;
00146 var $preview;
00147 var $backURL;
00148 var $recUid;
00149 var $failure=0;
00150 var $error='';
00151 var $saved=0;
00152 var $requiredArr;
00153 var $currentArr = array();
00154 var $previewLabel='';
00155 var $nc = '';
00156 var $additionalUpdateFields='';
00157 var $emailMarkPrefix = 'EMAIL_TEMPLATE_';
00158 var $codeLength;
00159 var $cmdKey;
00160 var $fileFunc='';
00161 var $filesStoredInUploadFolders=array();
00162
00163
00164 var $unlinkTempFiles = array();
00165
00179 function init($content,$conf) {
00180 $this->conf = $conf;
00181
00182
00183 $this->templateCode = $this->conf['templateContent'] ? $this->conf['templateContent'] : $this->cObj->fileResource($this->conf['templateFile']);
00184
00185
00186 $this->cmd = (string)t3lib_div::_GP('cmd');
00187
00188 $this->preview = (string)t3lib_div::_GP('preview');
00189
00190 $this->backURL = t3lib_div::_GP('backURL');
00191
00192 $this->recUid = t3lib_div::_GP('rU');
00193
00194 $this->authCode = t3lib_div::_GP('aC');
00195
00196 $this->theTable = $this->conf['table'];
00197
00198 $this->nc = $this->conf['no_cache'] ? '&no_cache=1' : $this->nc;
00199
00200 $this->thePid = intval($this->conf['pid']) ? intval($this->conf['pid']) : $GLOBALS['TSFE']->id;
00201
00202 $this->codeLength = intval($this->conf['authcodeFields.']['codeLength']) ? intval($this->conf['authcodeFields.']['codeLength']) : 8;
00203
00204
00205 $this->fieldList=implode(',',t3lib_div::trimExplode(',',$GLOBALS['TCA'][$this->theTable]['feInterface']['fe_admin_fieldList'],1));
00206
00207
00208 $splitMark = md5(microtime());
00209 list($this->markerArray['###GW1B###'],$this->markerArray['###GW1E###']) = explode($splitMark,$this->cObj->stdWrap($splitMark,$this->conf['wrap1.']));
00210 list($this->markerArray['###GW2B###'],$this->markerArray['###GW2E###']) = explode($splitMark,$this->cObj->stdWrap($splitMark,$this->conf['wrap2.']));
00211 $this->markerArray['###GC1###'] = $this->cObj->stdWrap($this->conf['color1'],$this->conf['color1.']);
00212 $this->markerArray['###GC2###'] = $this->cObj->stdWrap($this->conf['color2'],$this->conf['color2.']);
00213 $this->markerArray['###GC3###'] = $this->cObj->stdWrap($this->conf['color3'],$this->conf['color3.']);
00214
00215
00216 $this->markerArray['###FORM_URL###'] = 'index.php?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type.$this->nc.$this->conf['addParams'];
00217 $this->markerArray['###FORM_URL_ENC###'] = rawurlencode($this->markerArray['###FORM_URL###']);
00218 $this->markerArray['###FORM_URL_HSC###'] = htmlspecialchars($this->markerArray['###FORM_URL###']);
00219
00220 $this->markerArray['###BACK_URL###'] = $this->backURL;
00221 $this->markerArray['###BACK_URL_ENC###'] = rawurlencode($this->markerArray['###BACK_URL###']);
00222 $this->markerArray['###BACK_URL_HSC###'] = htmlspecialchars($this->markerArray['###BACK_URL###']);
00223
00224 $this->markerArray['###THE_PID###'] = $this->thePid;
00225 $this->markerArray['###REC_UID###'] = $this->recUid;
00226 $this->markerArray['###AUTH_CODE###'] = $this->authCode;
00227 $this->markerArray['###THIS_ID###'] = $GLOBALS['TSFE']->id;
00228 $this->markerArray['###THIS_URL###'] = htmlspecialchars(t3lib_div::getIndpEnv('TYPO3_REQUEST_DIR'));
00229 $this->markerArray['###HIDDENFIELDS###'] =
00230 ($this->cmd?'<input type="hidden" name="cmd" value="'.htmlspecialchars($this->cmd).'" />':'').
00231 ($this->authCode?'<input type="hidden" name="aC" value="'.htmlspecialchars($this->authCode).'" />':'').
00232 ($this->backURL?'<input type="hidden" name="backURL" value="'.htmlspecialchars($this->backURL).'" />':'');
00233
00234
00235
00236 switch($this->cmd) {
00237 case 'edit':
00238 $this->cmdKey='edit';
00239 break;
00240 default:
00241 $this->cmdKey='create';
00242 break;
00243 }
00244
00245 $this->requiredArr = array_intersect(
00246 t3lib_div::trimExplode(',',$this->conf[$this->cmdKey.'.']['required'],1),
00247 t3lib_div::trimExplode(',',$this->conf[$this->cmdKey.'.']['fields'],1)
00248 );
00249
00250
00251 $fe=t3lib_div::_GP('FE');
00252 $this->dataArr = $fe[$this->theTable];
00253
00254
00255 if (!$this->templateCode) {
00256 $content = 'No template file found: '.$this->conf['templateFile'];
00257 return $content;
00258 }
00259
00260 if (!$this->theTable || !$this->fieldList) {
00261 $content = 'Wrong table: '.$this->theTable;
00262 return $content;
00263 }
00264
00265
00266
00267
00268 if ($this->cmd=='delete' && !$this->preview && !t3lib_div::_GP('doNotSave')) {
00269 $this->deleteRecord();
00270 }
00271
00272 if (is_array($this->dataArr)) {
00273
00274 $this->parseValues();
00275 $this->overrideValues();
00276 $this->evalValues();
00277 if ($this->conf['evalFunc']) {
00278 $this->dataArr = $this->userProcess('evalFunc',$this->dataArr);
00279 }
00280
00281
00282
00283
00284
00285
00286
00287 if (!$this->failure && !$this->preview && !t3lib_div::_GP('doNotSave')) {
00288 $this->save();
00289 } else {
00290 if ($this->conf['debug']) debug($this->failure);
00291 }
00292 } else {
00293 $this->defaultValues();
00294 $this->preview = 0;
00295 }
00296 if ($this->failure) {$this->preview=0;}
00297 $this->previewLabel = $this->preview ? '_PREVIEW' : '';
00298
00299
00300
00301
00302
00303 if ($this->saved) {
00304
00305 $this->clearCacheIfSet();
00306
00307
00308 switch($this->cmd) {
00309 case 'delete':
00310 $key='DELETE';
00311 break;
00312 case 'edit':
00313 $key='EDIT';
00314 break;
00315 default:
00316 $key='CREATE';
00317 break;
00318 }
00319
00320 $templateCode = $this->cObj->getSubpart($this->templateCode, '###TEMPLATE_'.$key.'_SAVED###');
00321 $this->setCObjects($templateCode,$this->currentArr);
00322 $markerArray = $this->cObj->fillInMarkerArray($this->markerArray, $this->currentArr, '', TRUE, 'FIELD_', $this->recInMarkersHSC);
00323 $content = $this->cObj->substituteMarkerArray($templateCode, $markerArray);
00324
00325
00326 $this->compileMail(
00327 $key.'_SAVED',
00328 array($this->currentArr),
00329 $this->currentArr[$this->conf['email.']['field']],
00330 $this->conf['setfixed.']
00331 );
00332
00333 } elseif ($this->error) {
00334 $templateCode = $this->cObj->getSubpart($this->templateCode, $this->error);
00335 $this->setCObjects($templateCode);
00336 $content = $this->cObj->substituteMarkerArray($templateCode, $this->markerArray);
00337 } else {
00338
00339 if (!$this->cmd) {
00340 $this->cmd=$this->conf['defaultCmd'];
00341 }
00342 if ($this->conf['debug']) debug('Display form: '.$this->cmd,1);
00343 switch($this->cmd) {
00344 case 'setfixed':
00345 $content = $this->procesSetFixed();
00346 break;
00347 case 'infomail':
00348 $content = $this->sendInfoMail();
00349 break;
00350 case 'delete':
00351 $content = $this->displayDeleteScreen();
00352 break;
00353 case 'edit':
00354 $content = $this->displayEditScreen();
00355 break;
00356 case 'create':
00357 $content = $this->displayCreateScreen();
00358 break;
00359 }
00360 }
00361
00362
00363 foreach($this->unlinkTempFiles as $tempFileName) {
00364 t3lib_div::unlink_tempfile($tempFileName);
00365 }
00366
00367
00368 return $content;
00369 }
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00408 function parseValues() {
00409 if (is_array($this->conf['parseValues.'])) {
00410 reset($this->conf['parseValues.']);
00411 while(list($theField,$theValue)=each($this->conf['parseValues.'])) {
00412 $listOfCommands = t3lib_div::trimExplode(',',$theValue,1);
00413 while(list(,$cmd)=each($listOfCommands)) {
00414 $cmdParts = split('\[|\]',$cmd);
00415 $theCmd=trim($cmdParts[0]);
00416 switch($theCmd) {
00417 case 'int':
00418 $this->dataArr[$theField]=intval($this->dataArr[$theField]);
00419 break;
00420 case 'lower':
00421 case 'upper':
00422 $this->dataArr[$theField] = $this->cObj->caseshift($this->dataArr[$theField],$theCmd);
00423 break;
00424 case 'nospace':
00425 $this->dataArr[$theField] = str_replace(' ', '', $this->dataArr[$theField]);
00426 break;
00427 case 'alpha':
00428 $this->dataArr[$theField] = ereg_replace('[^a-zA-Z]','',$this->dataArr[$theField]);
00429 break;
00430 case 'num':
00431 $this->dataArr[$theField] = ereg_replace('[^0-9]','',$this->dataArr[$theField]);
00432 break;
00433 case 'alphanum':
00434 $this->dataArr[$theField] = ereg_replace('[^a-zA-Z0-9]','',$this->dataArr[$theField]);
00435 break;
00436 case 'alphanum_x':
00437 $this->dataArr[$theField] = ereg_replace('[^a-zA-Z0-9_-]','',$this->dataArr[$theField]);
00438 break;
00439 case 'trim':
00440 $this->dataArr[$theField] = trim($this->dataArr[$theField]);
00441 break;
00442 case 'random':
00443 $this->dataArr[$theField] = substr(md5(uniqid(microtime(),1)),0,intval($cmdParts[1]));
00444 break;
00445 case 'files':
00446 if ($this->cmdKey=='create' && !t3lib_div::_GP('doNotSave')) {
00447 $this->processFiles($cmdParts,$theField);
00448 } else unset($this->dataArr[$theField]);
00449 break;
00450 case 'setEmptyIfAbsent':
00451 if (!isset($this->dataArr[$theField])) {
00452 $this->dataArr[$theField]='';
00453 }
00454 break;
00455 case 'multiple':
00456 if (is_array($this->dataArr[$theField])) {
00457 $this->dataArr[$theField] = implode(',',$this->dataArr[$theField]);
00458 }
00459 break;
00460 case 'checkArray':
00461 if (is_array($this->dataArr[$theField])) {
00462 reset($this->dataArr[$theField]);
00463 $val = 0;
00464 while(list($kk,$vv)=each($this->dataArr[$theField])) {
00465 $kk = t3lib_div::intInRange($kk,0);
00466 if ($kk<=30) {
00467 if ($vv) {
00468 $val|=pow(2,$kk);
00469 }
00470 }
00471 }
00472 $this->dataArr[$theField] = $val;
00473 } else {$this->dataArr[$theField]=0;}
00474 break;
00475 case 'uniqueHashInt':
00476 $otherFields = t3lib_div::trimExplode(';',$cmdParts[1],1);
00477 $hashArray=array();
00478 while(list(,$fN)=each($otherFields)) {
00479 $vv = $this->dataArr[$fN];
00480 $vv = ereg_replace('[[:space:]]','',$vv);
00481 $vv = ereg_replace('[^[:alnum:]]','',$vv);
00482 $vv = strtolower($vv);
00483 $hashArray[]=$vv;
00484 }
00485 $this->dataArr[$theField]=hexdec(substr(md5(serialize($hashArray)),0,8));
00486 break;
00487 }
00488 }
00489 }
00490 }
00491 }
00492
00503 function processFiles($cmdParts,$theField) {
00504
00505
00506 $filesArr = array();
00507
00508 if (is_string($this->dataArr[$theField])) {
00509 $tmpArr = explode(',',$this->dataArr[$theField]);
00510 reset($tmpArr);
00511 while(list(,$val)=each($tmpArr)) {
00512 $valParts = explode('|',$val);
00513 $filesArr[] = array (
00514 'name'=>$valParts[1],
00515 'tmp_name'=>PATH_site.'typo3temp/'.$valParts[0]
00516 );
00517 }
00518 } elseif (is_array($_FILES['FE'][$this->theTable][$theField]['name'])) {
00519 reset($_FILES['FE'][$this->theTable][$theField]['name']);
00520 while(list($kk,$vv)=each($_FILES['FE'][$this->theTable][$theField]['name'])) {
00521 if ($vv) {
00522 $tmpFile = t3lib_div::upload_to_tempfile($_FILES['FE'][$this->theTable][$theField]['tmp_name'][$kk]);
00523 if ($tmpFile) {
00524 $this->unlinkTempFiles[]=$tmpFile;
00525 $filesArr[] = array (
00526 'name'=>$vv,
00527 'tmp_name'=>$tmpFile
00528 );
00529 }
00530 }
00531 }
00532 } elseif (is_array($_FILES['FE']['name'][$this->theTable][$theField])) {
00533 reset($_FILES['FE']['name'][$this->theTable][$theField]);
00534 while(list($kk,$vv)=each($_FILES['FE']['name'][$this->theTable][$theField])) {
00535 if ($vv) {
00536 $tmpFile = t3lib_div::upload_to_tempfile($_FILES['FE']['tmp_name'][$this->theTable][$theField][$kk]);
00537 if ($tmpFile) {
00538 $this->unlinkTempFiles[]=$tmpFile;
00539 $filesArr[] = array (
00540 'name'=>$vv,
00541 'tmp_name'=>$tmpFile
00542 );
00543 }
00544 }
00545 }
00546 }
00547
00548
00549 $this->dataArr[$theField]='';
00550 $finalFilesArr=array();
00551 if (count($filesArr)) {
00552 $extArray = t3lib_div::trimExplode(';',strtolower($cmdParts[1]),1);
00553 $maxSize = intval($cmdParts[3]);
00554 reset($filesArr);
00555 while(list(,$infoArr)=each($filesArr)) {
00556 $fI = pathinfo($infoArr['name']);
00557 if (t3lib_div::verifyFilenameAgainstDenyPattern($fI['name'])) {
00558 if (!count($extArray) || in_array(strtolower($fI['extension']), $extArray)) {
00559 $tmpFile = $infoArr['tmp_name'];
00560 if (@is_file($tmpFile)) {
00561 if (!$maxSize || filesize($tmpFile)<$maxSize*1024) {
00562 $finalFilesArr[]=$infoArr;
00563 } elseif ($this->conf['debug']) {debug('Size is beyond '.$maxSize.' kb ('.filesize($tmpFile).' bytes) and the file cannot be saved.');}
00564 } elseif ($this->conf['debug']) {debug('Surprisingly there was no file for '.$vv.' in '.$tmpFile);}
00565 } elseif ($this->conf['debug']) {debug('Extension "'.$fI['extension'].'" not allowed');}
00566 } elseif ($this->conf['debug']) {debug('Filename matched illegal pattern.');}
00567 }
00568 }
00569
00570 reset($finalFilesArr);
00571 $fileNameList=array();
00572 while(list(,$infoArr)=each($finalFilesArr)) {
00573 if ($this->isPreview()) {
00574 $this->createFileFuncObj();
00575 $fI = pathinfo($infoArr['name']);
00576 $tmpFilename = $this->theTable.'_'.t3lib_div::shortmd5(uniqid($infoArr['name'])).'.'.$fI['extension'];
00577 $theDestFile = $this->fileFunc->getUniqueName($this->fileFunc->cleanFileName($tmpFilename), PATH_site.'typo3temp/');
00578 t3lib_div::upload_copy_move($infoArr['tmp_name'],$theDestFile);
00579
00580 $fI2 = pathinfo($theDestFile);
00581 $fileNameList[] = $fI2['basename'].'|'.$infoArr['name'];
00582 } else {
00583 $this->createFileFuncObj();
00584 $GLOBALS['TSFE']->includeTCA();
00585 t3lib_div::loadTCA($this->theTable);
00586 if (is_array($GLOBALS['TCA'][$this->theTable]['columns'][$theField])) {
00587 $uploadPath = $GLOBALS['TCA'][$this->theTable]['columns'][$theField]['config']['uploadfolder'];
00588 }
00589 if ($uploadPath) {
00590 $theDestFile = $this->fileFunc->getUniqueName($this->fileFunc->cleanFileName($infoArr['name']), PATH_site.$uploadPath);
00591 t3lib_div::upload_copy_move($infoArr['tmp_name'],$theDestFile);
00592
00593 $fI2 = pathinfo($theDestFile);
00594 $fileNameList[] = $fI2['basename'];
00595 $this->filesStoredInUploadFolders[]=$theDestFile;
00596 }
00597 }
00598
00599 $this->dataArr[$theField] = implode(',',$fileNameList);
00600 }
00601 }
00602
00609 function overrideValues() {
00610
00611 if (is_array($this->conf[$this->cmdKey.'.']['overrideValues.'])) {
00612 reset($this->conf[$this->cmdKey.'.']['overrideValues.']);
00613 while(list($theField,$theValue)=each($this->conf[$this->cmdKey.'.']['overrideValues.'])) {
00614 $this->dataArr[$theField] = $theValue;
00615 }
00616 }
00617 }
00618
00625 function defaultValues() {
00626
00627 if (is_array($this->conf[$this->cmdKey.'.']['defaultValues.'])) {
00628 reset($this->conf[$this->cmdKey.'.']['defaultValues.']);
00629 while(list($theField,$theValue)=each($this->conf[$this->cmdKey.'.']['defaultValues.'])) {
00630 $this->dataArr[$theField] = $theValue;
00631 }
00632 }
00633 }
00634
00644 function evalValues() {
00645
00646 reset($this->requiredArr);
00647 $tempArr=array();
00648 while(list(,$theField)=each($this->requiredArr)) {
00649 if (!trim($this->dataArr[$theField])) {
00650 $tempArr[]=$theField;
00651 }
00652 }
00653
00654
00655 $recExist=0;
00656 if (is_array($this->conf[$this->cmdKey.'.']['evalValues.'])) {
00657 switch($this->cmd) {
00658 case 'edit':
00659 if (isset($this->dataArr['pid'])) {
00660 $recordTestPid = intval($this->dataArr['pid']);
00661 } else {
00662 $tempRecArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable,$this->dataArr['uid']);
00663 $recordTestPid = intval($tempRecArr['pid']);
00664 }
00665 $recExist=1;
00666 break;
00667 default:
00668 $recordTestPid = $this->thePid ? $this->thePid : t3lib_div::intval_positive($this->dataArr['pid']);
00669 break;
00670 }
00671
00672 reset($this->conf[$this->cmdKey.'.']['evalValues.']);
00673 while(list($theField,$theValue)=each($this->conf[$this->cmdKey.'.']['evalValues.'])) {
00674 $listOfCommands = t3lib_div::trimExplode(',',$theValue,1);
00675 while(list(,$cmd)=each($listOfCommands)) {
00676 $cmdParts = split('\[|\]',$cmd);
00677 $theCmd = trim($cmdParts[0]);
00678 switch($theCmd) {
00679 case 'uniqueGlobal':
00680 if ($DBrows = $GLOBALS['TSFE']->sys_page->getRecordsByField($this->theTable,$theField,$this->dataArr[$theField],'','','','1')) {
00681 if (!$recExist || $DBrows[0]['uid']!=$this->dataArr['uid']) {
00682 $tempArr[]=$theField;
00683 $this->failureMsg[$theField][] = $this->getFailure($theField, $theCmd, 'The value existed already. Enter a new value.');
00684 }
00685 }
00686 break;
00687 case 'uniqueLocal':
00688 if ($DBrows = $GLOBALS['TSFE']->sys_page->getRecordsByField($this->theTable,$theField,$this->dataArr[$theField], 'AND pid IN ('.$recordTestPid.')','','','1')) {
00689 if (!$recExist || $DBrows[0]['uid']!=$this->dataArr['uid']) {
00690 $tempArr[]=$theField;
00691 $this->failureMsg[$theField][] = $this->getFailure($theField, $theCmd, 'The value existed already. Enter a new value.');
00692 }
00693 }
00694 break;
00695 case 'twice':
00696 if (strcmp($this->dataArr[$theField], $this->dataArr[$theField.'_again'])) {
00697 $tempArr[]=$theField;
00698 $this->failureMsg[$theField][] = $this->getFailure($theField, $theCmd, 'You must enter the same value twice');
00699 }
00700 break;
00701 case 'email':
00702 if (!$this->cObj->checkEmail($this->dataArr[$theField])) {
00703 $tempArr[]=$theField;
00704 $this->failureMsg[$theField][] = $this->getFailure($theField, $theCmd, 'You must enter a valid email address');
00705 }
00706 break;
00707 case 'required':
00708 if (!trim($this->dataArr[$theField])) {
00709 $tempArr[]=$theField;
00710 $this->failureMsg[$theField][] = $this->getFailure($theField, $theCmd, 'You must enter a value!');
00711 }
00712 break;
00713 case 'atLeast':
00714 $chars=intval($cmdParts[1]);
00715 if (strlen($this->dataArr[$theField])<$chars) {
00716 $tempArr[]=$theField;
00717 $this->failureMsg[$theField][] = sprintf($this->getFailure($theField, $theCmd, 'You must enter at least %s characters!'), $chars);
00718 }
00719 break;
00720 case 'atMost':
00721 $chars=intval($cmdParts[1]);
00722 if (strlen($this->dataArr[$theField])>$chars) {
00723 $tempArr[]=$theField;
00724 $this->failureMsg[$theField][] = sprintf($this->getFailure($theField, $theCmd, 'You must enter at most %s characters!'), $chars);
00725 }
00726 break;
00727 case 'inBranch':
00728 $pars = explode(';',$cmdParts[1]);
00729 if (intval($pars[0])) {
00730 $pid_list = $this->cObj->getTreeList(
00731 intval($pars[0]),
00732 intval($pars[1]) ? intval($pars[1]) : 999,
00733 intval($pars[2])
00734 );
00735 if (!$pid_list || !t3lib_div::inList($pid_list,$this->dataArr[$theField])) {
00736 $tempArr[]=$theField;
00737 $this->failureMsg[$theField][] = sprintf($this->getFailure($theField, $theCmd, 'The value was not a valid valud from this list: %s'), $pid_list);
00738 }
00739 }
00740 break;
00741 case 'unsetEmpty':
00742 if (!$this->dataArr[$theField]) {
00743 $hash = array_flip($tempArr);
00744 unset($hash[$theField]);
00745 $tempArr = array_keys($hash);
00746 unset($this->failureMsg[$theField]);
00747 unset($this->dataArr[$theField]);
00748 }
00749 break;
00750 }
00751 }
00752 $this->markerArray['###EVAL_ERROR_FIELD_'.$theField.'###'] = is_array($this->failureMsg[$theField]) ? implode('<br />',$this->failureMsg[$theField]) : '';
00753 }
00754 }
00755 $this->failure=implode(',',$tempArr);
00756 }
00757
00766 function userProcess($mConfKey,$passVar) {
00767 if ($this->conf[$mConfKey]) {
00768 $funcConf = $this->conf[$mConfKey.'.'];
00769 $funcConf['parentObj']=&$this;
00770 $passVar = $GLOBALS['TSFE']->cObj->callUserFunction($this->conf[$mConfKey], $funcConf, $passVar);
00771 }
00772 return $passVar;
00773 }
00774
00784 function userProcess_alt($confVal,$confArr,$passVar) {
00785 if ($confVal) {
00786 $funcConf = $confArr;
00787 $funcConf['parentObj']=&$this;
00788 $passVar = $GLOBALS['TSFE']->cObj->callUserFunction($confVal, $funcConf, $passVar);
00789 }
00790 return $passVar;
00791 }
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00826 function save() {
00827 switch($this->cmd) {
00828 case 'edit':
00829 $theUid = $this->dataArr['uid'];
00830 $origArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable,$theUid);
00831 if ($this->conf['edit'] && ($GLOBALS['TSFE']->loginUser || $this->aCAuth($origArr))) {
00832 $newFieldList = implode(',',array_intersect(explode(',',$this->fieldList),t3lib_div::trimExplode(',',$this->conf['edit.']['fields'],1)));
00833 if ($this->aCAuth($origArr) || $this->cObj->DBmayFEUserEdit($this->theTable,$origArr,$GLOBALS['TSFE']->fe_user->user,$this->conf['allowedGroups'],$this->conf['fe_userEditSelf'])) {
00834 $this->cObj->DBgetUpdate($this->theTable, $theUid, $this->dataArr, $newFieldList, TRUE);
00835 $this->currentArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable,$theUid);
00836 $this->userProcess_alt($this->conf['edit.']['userFunc_afterSave'],$this->conf['edit.']['userFunc_afterSave.'],array('rec'=>$this->currentArr, 'origRec'=>$origArr));
00837 $this->saved=1;
00838 } else {
00839 $this->error='###TEMPLATE_NO_PERMISSIONS###';
00840 }
00841 }
00842 break;
00843 default:
00844 if ($this->conf['create']) {
00845 $newFieldList = implode(',',array_intersect(explode(',',$this->fieldList),t3lib_div::trimExplode(',',$this->conf['create.']['fields'],1)));
00846 $this->cObj->DBgetInsert($this->theTable, $this->thePid, $this->dataArr, $newFieldList, TRUE);
00847 $newId = $GLOBALS['TYPO3_DB']->sql_insert_id();
00848
00849 if ($this->theTable=='fe_users' && $this->conf['fe_userOwnSelf']) {
00850 $extraList='';
00851 $dataArr = array();
00852 if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id']) {
00853 $field=$GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id'];
00854 $dataArr[$field]=$newId;
00855 $extraList.=','.$field;
00856 }
00857 if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id']) {
00858 $field=$GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id'];
00859 list($dataArr[$field])=explode(',',$this->dataArr['usergroup']);
00860 $dataArr[$field]=intval($dataArr[$field]);
00861 $extraList.=','.$field;
00862 }
00863 if (count($dataArr)) {
00864 $this->cObj->DBgetUpdate($this->theTable, $newId, $dataArr, $extraList, TRUE);
00865 }
00866 }
00867
00868 $this->currentArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable,$newId);
00869 $this->userProcess_alt($this->conf['create.']['userFunc_afterSave'],$this->conf['create.']['userFunc_afterSave.'],array('rec'=>$this->currentArr));
00870 $this->saved=1;
00871 }
00872 break;
00873 }
00874 }
00875
00884 function deleteRecord() {
00885 if ($this->conf['delete']) {
00886 $origArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $this->recUid);
00887 if ($GLOBALS['TSFE']->loginUser || $this->aCAuth($origArr)) {
00888
00889 if (is_array($origArr)) {
00890 if ($this->aCAuth($origArr) || $this->cObj->DBmayFEUserEdit($this->theTable,$origArr, $GLOBALS['TSFE']->fe_user->user,$this->conf['allowedGroups'],$this->conf['fe_userEditSelf'])) {
00891 if (!$GLOBALS['TCA'][$this->theTable]['ctrl']['delete']) {
00892 $this->deleteFilesFromRecord($this->recUid);
00893 }
00894 $this->cObj->DBgetDelete($this->theTable, $this->recUid, TRUE);
00895 $this->currentArr = $origArr;
00896 $this->saved = 1;
00897 } else {
00898 $this->error = '###TEMPLATE_NO_PERMISSIONS###';
00899 }
00900 }
00901 }
00902 }
00903 }
00904
00914 function deleteFilesFromRecord($uid) {
00915 $table = $this->theTable;
00916 $rec = $GLOBALS['TSFE']->sys_page->getRawRecord($table,$uid);
00917
00918 $GLOBALS['TSFE']->includeTCA();
00919 t3lib_div::loadTCA($table);
00920 reset($GLOBALS['TCA'][$table]['columns']);
00921 $iFields=array();
00922 while(list($field,$conf)=each($GLOBALS['TCA'][$table]['columns'])) {
00923 if ($conf['config']['type']=='group' && $conf['config']['internal_type']=='file') {
00924
00925 $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), array($field => ''));
00926
00927 $delFileArr = explode(',',$rec[$field]);
00928 reset($delFileArr);
00929 while(list(,$n)=each($delFileArr)) {
00930 if ($n) {
00931 $fpath = $conf['config']['uploadfolder'].'/'.$n;
00932 unlink($fpath);
00933 }
00934 }
00935 }
00936 }
00937 }
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00971 function displayDeleteScreen() {
00972 if ($this->conf['delete']) {
00973 $origArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $this->recUid);
00974 if ($GLOBALS['TSFE']->loginUser || $this->aCAuth($origArr)) {
00975
00976 if (is_array($origArr)) {
00977 if ($this->aCAuth($origArr) || $this->cObj->DBmayFEUserEdit($this->theTable,$origArr, $GLOBALS['TSFE']->fe_user->user,$this->conf['allowedGroups'],$this->conf['fe_userEditSelf'])) {
00978 $this->markerArray['###HIDDENFIELDS###'].= '<input type="hidden" name="rU" value="'.$this->recUid.'" />';
00979 $content = $this->getPlainTemplate('###TEMPLATE_DELETE_PREVIEW###', $origArr);
00980 } else {
00981 $content = $this->getPlainTemplate('###TEMPLATE_NO_PERMISSIONS###');
00982 }
00983 }
00984 } else {
00985 $content = $this->getPlainTemplate('###TEMPLATE_AUTH###');
00986 }
00987 } else {
00988 $content.='Delete-option is not set in TypoScript';
00989 }
00990 return $content;
00991 }
00992
00999 function displayCreateScreen() {
01000 if ($this->conf['create']) {
01001 $templateCode = $this->cObj->getSubpart($this->templateCode, ((!$GLOBALS['TSFE']->loginUser||$this->conf['create.']['noSpecialLoginForm'])?'###TEMPLATE_CREATE'.$this->previewLabel.'###':'###TEMPLATE_CREATE_LOGIN'.$this->previewLabel.'###'));
01002 $failure = t3lib_div::_GP('noWarnings')?'':$this->failure;
01003 if (!$failure) $templateCode = $this->cObj->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELDS_WARNING###', '');
01004
01005 $templateCode = $this->removeRequired($templateCode,$failure);
01006 $this->setCObjects($templateCode);
01007
01008 $markerArray = $this->cObj->fillInMarkerArray($this->markerArray, $this->dataArr, '', TRUE, 'FIELD_', $this->recInMarkersHSC);
01009 if ($this->conf['create.']['preview'] && !$this->previewLabel) {$markerArray['###HIDDENFIELDS###'].= '<input type="hidden" name="preview" value="1" />';}
01010 $content = $this->cObj->substituteMarkerArray($templateCode, $markerArray);
01011 $content.=$this->cObj->getUpdateJS($this->modifyDataArrForFormUpdate($this->dataArr), $this->theTable.'_form', 'FE['.$this->theTable.']', $this->fieldList.$this->additionalUpdateFields);
01012 }
01013 return $content;
01014 }
01015
01022 function displayEditScreen() {
01023 if ($this->conf['edit']) {
01024 $origArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $this->dataArr['uid']?$this->dataArr['uid']:$this->recUid);
01025
01026 if ($GLOBALS['TSFE']->loginUser || $this->aCAuth($origArr)) {
01027
01028 if (is_array($origArr)) {
01029 if ($this->aCAuth($origArr) || $this->cObj->DBmayFEUserEdit($this->theTable,$origArr, $GLOBALS['TSFE']->fe_user->user,$this->conf['allowedGroups'],$this->conf['fe_userEditSelf'])) {
01030 $content=$this->displayEditForm($origArr);
01031 } else {
01032 $content = $this->getPlainTemplate('###TEMPLATE_NO_PERMISSIONS###');
01033 }
01034 } elseif ($GLOBALS['TSFE']->loginUser) {
01035 $lockPid = $this->conf['edit.']['menuLockPid'] ? ' AND pid='.intval($this->thePid) : '';
01036
01037 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $this->theTable, '1 '.$lockPid.$this->cObj->DBmayFEUserEditSelect($this->theTable,$GLOBALS['TSFE']->fe_user->user, $this->conf['allowedGroups'],$this->conf['fe_userEditSelf']).$GLOBALS['TSFE']->sys_page->deleteClause($this->theTable));
01038
01039 if ($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
01040 $templateCode = $this->getPlainTemplate('###TEMPLATE_EDITMENU###');
01041 $out='';
01042 $itemCode = $this->cObj->getSubpart($templateCode, '###ITEM###');
01043 while($menuRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01044 $markerArray = $this->cObj->fillInMarkerArray(array(), $menuRow, '', TRUE, 'FIELD_', $this->recInMarkersHSC);
01045 $markerArray = $this->setCObjects($itemCode,$menuRow,$markerArray,'ITEM_');
01046 $out.= $this->cObj->substituteMarkerArray($itemCode, $markerArray);
01047 }
01048 $content=$this->cObj->substituteSubpart($templateCode, '###ALLITEMS###', $out);
01049 } else {
01050 $content = $this->getPlainTemplate('###TEMPLATE_EDITMENU_NOITEMS###');
01051 }
01052 } else {
01053 $content = $this->getPlainTemplate('###TEMPLATE_AUTH###');
01054 }
01055 } else {
01056 $content = $this->getPlainTemplate('###TEMPLATE_AUTH###');
01057 }
01058 } else {
01059 $content.='Edit-option is not set in TypoScript';
01060 }
01061 return $content;
01062 }
01063
01073 function displayEditForm($origArr) {
01074 $currentArr = is_array($this->dataArr) ? $this->dataArr+$origArr : $origArr;
01075
01076 if ($this->conf['debug']) debug('displayEditForm(): '.'###TEMPLATE_EDIT'.$this->previewLabel.'###',1);
01077 $templateCode = $this->cObj->getSubpart($this->templateCode, '###TEMPLATE_EDIT'.$this->previewLabel.'###');
01078 $failure = t3lib_div::_GP('noWarnings')?'':$this->failure;
01079 if (!$failure) {$templateCode = $this->cObj->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELDS_WARNING###', '');}
01080
01081 $templateCode = $this->removeRequired($templateCode,$failure);
01082
01083 $this->setCObjects($templateCode,$currentArr);
01084
01085 $markerArray = $this->cObj->fillInMarkerArray($this->markerArray, $currentArr, '', TRUE, 'FIELD_', $this->recInMarkersHSC);
01086
01087 $markerArray['###HIDDENFIELDS###'].= '<input type="hidden" name="FE['.$this->theTable.'][uid]" value="'.$currentArr['uid'].'" />';
01088 if ($this->conf['edit.']['preview'] && !$this->previewLabel) {$markerArray['###HIDDENFIELDS###'].= '<input type="hidden" name="preview" value="1" />';}
01089 $content = $this->cObj->substituteMarkerArray($templateCode, $markerArray);
01090 $content.=$this->cObj->getUpdateJS($this->modifyDataArrForFormUpdate($currentArr), $this->theTable.'_form', 'FE['.$this->theTable.']', $this->fieldList.$this->additionalUpdateFields);
01091
01092 return $content;
01093 }
01094
01101 function procesSetFixed() {
01102 if ($this->conf['setfixed']) {
01103 $theUid = intval($this->recUid);
01104 $origArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $theUid);
01105 $fD = t3lib_div::_GP('fD');
01106 $sFK = t3lib_div::_GP('sFK');
01107
01108 $fieldArr=array();
01109 if (is_array($fD) || $sFK=='DELETE') {
01110 if (is_array($fD)) {
01111 reset($fD);
01112 while(list($field,$value)=each($fD)) {
01113 $origArr[$field]=$value;
01114 $fieldArr[]=$field;
01115 }
01116 }
01117 $theCode = $this->setfixedHash($origArr,$origArr['_FIELDLIST']);
01118 if (!strcmp($this->authCode,$theCode)) {
01119 if ($sFK=='DELETE') {
01120 $this->cObj->DBgetDelete($this->theTable, $theUid, TRUE);
01121 } else {
01122 $newFieldList = implode(',',array_intersect(t3lib_div::trimExplode(',',$this->fieldList),t3lib_div::trimExplode(',',implode($fieldArr,','),1)));
01123 $this->cObj->DBgetUpdate($this->theTable, $theUid, $fD, $newFieldList, TRUE);
01124 $this->currentArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable,$theUid);
01125 $this->userProcess_alt($this->conf['setfixed.']['userFunc_afterSave'],$this->conf['setfixed.']['userFunc_afterSave.'],array('rec'=>$this->currentArr, 'origRec'=>$origArr));
01126 }
01127
01128
01129 $this->markerArray = $this->cObj->fillInMarkerArray($this->markerArray, $origArr, '', TRUE, 'FIELD_', $this->recInMarkersHSC);
01130 $content = $this->getPlainTemplate('###TEMPLATE_SETFIXED_OK_'.$sFK.'###');
01131 if (!$content) {$content = $this->getPlainTemplate('###TEMPLATE_SETFIXED_OK###');}
01132
01133
01134 $this->compileMail(
01135 'SETFIXED_'.$sFK,
01136 array($origArr),
01137 $origArr[$this->conf['email.']['field']],
01138 $this->conf['setfixed.']
01139 );
01140
01141 $this->clearCacheIfSet();
01142 } else $content = $this->getPlainTemplate('###TEMPLATE_SETFIXED_FAILED###');
01143 } else $content = $this->getPlainTemplate('###TEMPLATE_SETFIXED_FAILED###');
01144 }
01145 return $content;
01146 }
01147
01148
01149
01150
01151
01152
01153
01154
01155
01156
01157
01158
01159
01160
01161
01162
01163
01164
01165
01166
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01190 function removeRequired($templateCode,$failure) {
01191 reset($this->requiredArr);
01192 while(list(,$theField)=each($this->requiredArr)) {
01193 if (!t3lib_div::inList($failure,$theField)) {
01194 $templateCode = $this->cObj->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELD_'.$theField.'###', '');
01195 }
01196 }
01197 return $templateCode;
01198 }
01199
01208 function getPlainTemplate($key,$r='') {
01209 if ($this->conf['debug']) debug('getPlainTemplate(): '.$key,1);
01210 $templateCode = $this->cObj->getSubpart($this->templateCode, $key);
01211 $this->setCObjects($templateCode,is_array($r)?$r:array());
01212 return $this->cObj->substituteMarkerArray(
01213 $templateCode,
01214 is_array($r) ? $this->cObj->fillInMarkerArray($this->markerArray, $r, '', TRUE, 'FIELD_', $this->recInMarkersHSC) : $this->markerArray
01215 );
01216 }
01217
01225 function modifyDataArrForFormUpdate($inputArr) {
01226 if (is_array($this->conf[$this->cmdKey.'.']['evalValues.'])) {
01227 reset($this->conf[$this->cmdKey.'.']['evalValues.']);
01228 while(list($theField,$theValue)=each($this->conf[$this->cmdKey.'.']['evalValues.'])) {
01229 $listOfCommands = t3lib_div::trimExplode(',',$theValue,1);
01230 while(list(,$cmd)=each($listOfCommands)) {
01231 $cmdParts = split('\[|\]',$cmd);
01232 $theCmd = trim($cmdParts[0]);
01233 switch($theCmd) {
01234 case 'twice':
01235 if (isset($inputArr[$theField])) {
01236 if (!isset($inputArr[$theField.'_again'])) {
01237 $inputArr[$theField.'_again'] = $inputArr[$theField];
01238 }
01239 $this->additionalUpdateFields.=','.$theField.'_again';
01240 }
01241 break;
01242 }
01243 }
01244 }
01245 }
01246 if (is_array($this->conf['parseValues.'])) {
01247 reset($this->conf['parseValues.']);
01248 while(list($theField,$theValue)=each($this->conf['parseValues.'])) {
01249 $listOfCommands = t3lib_div::trimExplode(',',$theValue,1);
01250 while(list(,$cmd)=each($listOfCommands)) {
01251 $cmdParts = split('\[|\]',$cmd);
01252 $theCmd = trim($cmdParts[0]);
01253 switch($theCmd) {
01254 case 'multiple':
01255 if (isset($inputArr[$theField]) && !$this->isPreview()) {
01256 $inputArr[$theField] = explode(',',$inputArr[$theField]);
01257 }
01258 break;
01259 case 'checkArray':
01260 if ($inputArr[$theField] && !$this->isPreview()) {
01261 for($a=0;$a<=30;$a++) {
01262 if ($inputArr[$theField] & pow(2,$a)) {
01263 $alt_theField = $theField.']['.$a;
01264 $inputArr[$alt_theField] = 1;
01265 $this->additionalUpdateFields.=','.$alt_theField;
01266 }
01267 }
01268 }
01269 break;
01270 }
01271 }
01272 }
01273 }
01274
01275
01276 $inputArr = $this->userProcess_alt(
01277 $this->conf['userFunc_updateArray'],
01278 $this->conf['userFunc_updateArray.'],
01279 $inputArr
01280 );
01281
01282 return $inputArr;
01283 }
01284
01294 function setCObjects($templateCode,$currentArr=array(),$markerArray='',$specialPrefix='') {
01295 if (is_array($this->conf['cObjects.'])) {
01296 reset($this->conf['cObjects.']);
01297
01298 while(list($theKey,$theConf)=each($this->conf['cObjects.'])) {
01299 if (!strstr($theKey,'.')) {
01300 if (strstr($templateCode,'###'.$specialPrefix.'CE_'.$theKey.'###')) {
01301 $cObjCode = $this->cObj->cObjGetSingle($this->conf['cObjects.'][$theKey], $this->conf['cObjects.'][$theKey.'.'], 'cObjects.'.$theKey);
01302
01303 if (!is_array($markerArray)) {
01304 $this->markerArray['###'.$specialPrefix.'CE_'.$theKey.'###'] = $cObjCode;
01305 } else {
01306 $markerArray['###'.$specialPrefix.'CE_'.$theKey.'###'] = $cObjCode;
01307 }
01308 }
01309 if (strstr($templateCode,'###'.$specialPrefix.'PCE_'.$theKey.'###')) {
01310 $local_cObj =t3lib_div::makeInstance('tslib_cObj');
01311 $local_cObj->start(count($currentArr)?$currentArr:$this->dataArr,$this->theTable);
01312 $cObjCode = $local_cObj->cObjGetSingle($this->conf['cObjects.'][$theKey], $this->conf['cObjects.'][$theKey.'.'], 'cObjects.'.$theKey);
01313
01314 if (!is_array($markerArray)) {
01315 $this->markerArray['###'.$specialPrefix.'PCE_'.$theKey.'###'] = $cObjCode;
01316 } else {
01317 $markerArray['###'.$specialPrefix.'PCE_'.$theKey.'###'] = $cObjCode;
01318 }
01319 }
01320 }
01321 }
01322 }
01323 return $markerArray;
01324 }
01325
01326
01327
01328
01329
01330
01331
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342
01343
01344
01345
01346
01347
01348
01349
01356 function sendInfoMail() {
01357 if ($this->conf['infomail'] && $this->conf['email.']['field']) {
01358 $fetch = t3lib_div::_GP('fetch');
01359 if ($fetch) {
01360
01361 $key= trim(t3lib_div::_GP('key'));
01362 if (is_array($this->conf['infomail.'][$key.'.'])) {
01363 $config = $this->conf['infomail.'][$key.'.'];
01364 } else {
01365 $config = $this->conf['infomail.']['default.'];
01366 }
01367 $pidLock='';
01368 if (!$config['dontLockPid']) {
01369 $pidLock='AND pid IN ('.$this->thePid.') ';
01370 }
01371
01372
01373 if (t3lib_div::testInt($fetch)) {
01374 $DBrows = $GLOBALS['TSFE']->sys_page->getRecordsByField($this->theTable,'uid',$fetch,$pidLock,'','','1');
01375 } elseif ($fetch) {
01376 $DBrows = $GLOBALS['TSFE']->sys_page->getRecordsByField($this->theTable,$this->conf['email.']['field'],$fetch,$pidLock,'','','100');
01377 }
01378
01379
01380 if (is_array($DBrows)) {
01381 $recipient = $DBrows[0][$this->conf['email.']['field']];
01382 $this->compileMail($config['label'], $DBrows, $recipient, $this->conf['setfixed.']);
01383 } elseif ($this->cObj->checkEmail($fetch)) {
01384 $this->sendMail($fetch, '', trim($this->cObj->getSubpart($this->templateCode, '###'.$this->emailMarkPrefix.'NORECORD###')));
01385 }
01386
01387 $content = $this->getPlainTemplate('###TEMPLATE_INFOMAIL_SENT###');
01388 } else {
01389 $content = $this->getPlainTemplate('###TEMPLATE_INFOMAIL###');
01390 }
01391 } else $content='Error: infomail option is not available or emailField is not setup in TypoScript';
01392 return $content;
01393 }
01394
01404 function compileMail($key, $DBrows, $recipient, $setFixedConfig=array()) {
01405 $GLOBALS['TT']->push('compileMail');
01406 $mailContent='';
01407 $key = $this->emailMarkPrefix.$key;
01408
01409 $userContent['all'] = trim($this->cObj->getSubpart($this->templateCode, '###'.$key.'###'));
01410 $adminContent['all'] = trim($this->cObj->getSubpart($this->templateCode, '###'.$key.'-ADMIN###'));
01411 $userContent['rec'] = $this->cObj->getSubpart($userContent['all'], '###SUB_RECORD###');
01412 $adminContent['rec'] = $this->cObj->getSubpart($adminContent['all'], '###SUB_RECORD###');
01413
01414 reset($DBrows);
01415 while(list(,$r)=each($DBrows)) {
01416 $markerArray = $this->cObj->fillInMarkerArray($this->markerArray, $r,'',0);
01417 $markerArray = $this->setCObjects($userContent['rec'].$adminContent['rec'],$r,$markerArray,'ITEM_');
01418 $markerArray['###SYS_AUTHCODE###'] = $this->authCode($r);
01419 $markerArray = $this->setfixed($markerArray, $setFixedConfig, $r);
01420
01421 if ($userContent['rec']) $userContent['accum'] .=$this->cObj->substituteMarkerArray($userContent['rec'], $markerArray);
01422 if ($adminContent['rec']) $adminContent['accum'].=$this->cObj->substituteMarkerArray($adminContent['rec'], $markerArray);
01423 }
01424
01425 if ($userContent['all']) $userContent['final'] .=$this->cObj->substituteSubpart($userContent['all'], '###SUB_RECORD###', $userContent['accum']);
01426 if ($adminContent['all']) $adminContent['final'].=$this->cObj->substituteSubpart($adminContent['all'], '###SUB_RECORD###', $adminContent['accum']);
01427
01428 if (t3lib_div::testInt($recipient)) {
01429 $fe_userRec = $GLOBALS['TSFE']->sys_page->getRawRecord('fe_users',$recipient);
01430 $recipient=$fe_userRec['email'];
01431 }
01432
01433 $GLOBALS['TT']->setTSlogMessage('Template key: ###'.$key.'###, userContentLength: '.strlen($userContent['final']).', adminContentLength: '.strlen($adminContent['final']));
01434
01435 $this->sendMail($recipient, $this->conf['email.']['admin'], $userContent['final'], $adminContent['final']);
01436 $GLOBALS['TT']->pull();
01437 }
01438
01450 function sendMail($recipient, $admin, $content='', $adminContent='') {
01451
01452 if ($admin && $adminContent) {
01453 if (!$this->isHTMLContent($adminContent)) {
01454 $admMail = $this->cObj->sendNotifyEmail($adminContent,
01455 $admin,
01456 '',
01457 $this->conf['email.']['from'],
01458 $this->conf['email.']['fromName'],
01459 $recipient
01460 );
01461 } else {
01462 $this->sendHTMLMail($adminContent,
01463 $admin,
01464 '',
01465 $this->conf['email.']['from'],
01466 $this->conf['email.']['fromName'],
01467 $recipient
01468 );
01469 }
01470 }
01471
01472 if (!$this->isHTMLContent($content)) {
01473 $this->cObj->sendNotifyEmail($content,
01474 $recipient,
01475 '',
01476 $this->conf['email.']['from'],
01477 $this->conf['email.']['fromName']
01478 );
01479 } else {
01480 $this->sendHTMLMail($content,
01481 $recipient,
01482 '',
01483 $this->conf['email.']['from'],
01484 $this->conf['email.']['fromName']
01485 );
01486 }
01487 }
01488
01495 function isHTMLContent($c) {
01496 $c = trim($c);
01497 $first = strtolower(substr($c,0,6));
01498 $last = strtolower(substr($c,-7));
01499 if ($first.$last=='<html></html>') return 1;
01500 }
01501
01516 function sendHTMLMail($content,$recipient,$dummy,$fromEmail,$fromName,$replyTo='') {
01517 if (trim($recipient) && trim($content)) {
01518 $cls=t3lib_div::makeInstanceClassName('t3lib_htmlmail');
01519 if (class_exists($cls)) {
01520 $parts = spliti('<title>|</title>',$content,3);
01521 $subject = trim($parts[1]) ? trim($parts[1]) : 'TYPO3 FE Admin message';
01522
01523 $Typo3_htmlmail = t3lib_div::makeInstance('t3lib_htmlmail');
01524 $Typo3_htmlmail->start();
01525 $Typo3_htmlmail->useBase64();
01526
01527 $Typo3_htmlmail->subject = $subject;
01528 $Typo3_htmlmail->from_email = $fromEmail;
01529 $Typo3_htmlmail->from_name = $fromName;
01530 $Typo3_htmlmail->replyto_email = $replyTo ? $replyTo : $fromEmail;
01531 $Typo3_htmlmail->replyto_name = $replyTo ? '' : $fromName;
01532 $Typo3_htmlmail->organisation = '';
01533 $Typo3_htmlmail->priority = 3;
01534
01535
01536 $Typo3_htmlmail->theParts['html']['content'] = $content;
01537 $Typo3_htmlmail->theParts['html']['path'] = '';
01538 $Typo3_htmlmail->extractMediaLinks();
01539 $Typo3_htmlmail->extractHyperLinks();
01540 $Typo3_htmlmail->fetchHTMLMedia();
01541 $Typo3_htmlmail->substMediaNamesInHTML(0);
01542 $Typo3_htmlmail->substHREFsInHTML();
01543 $Typo3_htmlmail->setHTML($Typo3_htmlmail->encodeMsg($Typo3_htmlmail->theParts['html']['content']));
01544
01545
01546 $Typo3_htmlmail->addPlain('');
01547
01548
01549 $Typo3_htmlmail->setHeaders();
01550 $Typo3_htmlmail->setContent();
01551 $Typo3_htmlmail->setRecipient($recipient);
01552
01553
01554 $Typo3_htmlmail->sendtheMail();
01555 } else {
01556 debug('SYSTEM ERROR: No HTML-mail library loaded. Set "page.config.incT3Lib_htmlmail = 1" is your TypoScript template.');
01557 }
01558 }
01559 }
01560
01561
01562
01563
01564
01565
01566
01567
01568
01569
01570
01571
01572
01573
01574
01575
01576
01577
01578
01579
01580
01581
01582
01583
01584
01585
01586
01587
01588
01589
01590
01600 function aCAuth($r) {
01601 if ($this->authCode && !strcmp($this->authCode,$this->authCode($r))) {
01602 return true;
01603 }
01604 }
01605
01614 function authCode($r,$extra='') {
01615 $l=$this->codeLength;
01616 if ($this->conf['authcodeFields']) {
01617 $fieldArr = t3lib_div::trimExplode(',', $this->conf['authcodeFields'], 1);
01618 $value='';
01619 while(list(,$field)=each($fieldArr)) {
01620 $value.=$r[$field].'|';
01621 }
01622 $value.=$extra.'|'.$this->conf['authcodeFields.']['addKey'];
01623 if ($this->conf['authcodeFields.']['addDate']) {
01624 $value.='|'.date($this->conf['authcodeFields.']['addDate']);
01625 }
01626 $value.=$GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
01627 return substr(md5($value), 0,$l);
01628 }
01629 }
01630
01640 function setfixed($markerArray, $setfixed, $r) {
01641 if (is_array($setfixed)) {
01642 reset($setfixed);
01643 while(list($theKey,$data)=each($setfixed)) {
01644 if (!strcmp($theKey,'DELETE')) {
01645 $recCopy = $r;
01646 $string='&cmd=setfixed&sFK='.rawurlencode($theKey).'&rU='.$r['uid'];
01647 $string.='&aC='.$this->setfixedHash($recCopy,$data['_FIELDLIST']);
01648 $markerArray['###SYS_SETFIXED_DELETE###'] = $string;
01649 $markerArray['###SYS_SETFIXED_HSC_DELETE###'] = htmlspecialchars($string);
01650 } elseif (strstr($theKey,'.')) {
01651 $theKey = substr($theKey,0,-1);
01652 if (is_array($data)) {
01653 reset($data);
01654 $recCopy = $r;
01655 $string='&cmd=setfixed&sFK='.rawurlencode($theKey).'&rU='.$r['uid'];
01656 while(list($fieldName,$fieldValue)=each($data)) {
01657 $string.='&fD['.$fieldName.']='.rawurlencode($fieldValue);
01658 $recCopy[$fieldName]=$fieldValue;
01659 }
01660 $string.='&aC='.$this->setfixedHash($recCopy,$data['_FIELDLIST']);
01661 $markerArray['###SYS_SETFIXED_'.$theKey.'###'] = $string;
01662 $markerArray['###SYS_SETFIXED_HSC_'.$theKey.'###'] = htmlspecialchars($string);
01663 }
01664 }
01665 }
01666 }
01667 return $markerArray;
01668 }
01669
01678 function setfixedHash($recCopy,$fields='') {
01679 if ($fields) {
01680 $fieldArr = t3lib_div::trimExplode(',',$fields,1);
01681 reset($fieldArr);
01682 while(list($k,$v)=each($fieldArr)) {
01683 $recCopy_temp[$k]=$recCopy[$v];
01684 }
01685 } else {
01686 $recCopy_temp=$recCopy;
01687 }
01688 $encStr = implode('|',$recCopy_temp).'|'.$this->conf['authcodeFields.']['addKey'].'|'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
01689 $hash = substr(md5($encStr),0,$this->codeLength);
01690 return $hash;
01691 }
01692
01693
01699 function isPreview() {
01700 return ($this->conf[$this->cmdKey.'.']['preview'] && $this->preview);
01701 }
01702
01708 function createFileFuncObj() {
01709 if (!$this->fileFunc) {
01710 $this->fileFunc = t3lib_div::makeInstance('t3lib_basicFileFunctions');
01711 }
01712 }
01713
01719 function clearCacheIfSet() {
01720 if ($this->conf['clearCacheOfPages']) {
01721 $cc_pidList = $GLOBALS['TYPO3_DB']->cleanIntList($this->conf['clearCacheOfPages']);
01722 $GLOBALS['TSFE']->clearPageCacheContent_pidList($cc_pidList);
01723 }
01724 }
01725
01734 function getFailure($theField, $theCmd, $label) {
01735 return isset($this->conf['evalErrors.'][$theField.'.'][$theCmd]) ? $this->conf['evalErrors.'][$theField.'.'][$theCmd] : $label;
01736 }
01737 }
01738
01739
01740 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['media/scripts/fe_adminLib.inc']) {
01741 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['media/scripts/fe_adminLib.inc']);
01742 }
01743 ?>