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
00123 class user_plaintext {
00124 var $cObj;
00125 var $conf=array();
00126 var $charWidth=76;
00127
00137 function main_plaintext($content,$conf) {
00138 $this->conf = $conf;
00139 $this->siteUrl=$conf['siteUrl'];
00140 $lines = array();
00141 $CType= (string)$this->cObj->data['CType'];
00142 switch($CType) {
00143 case 'header':
00144 $lines[]=$this->getHeader();
00145 if ($this->cObj->data['subheader']) {
00146 $lines[]=$this->breakContent(strip_tags($this->cObj->data['subheader']));
00147 }
00148 break;
00149 case 'text':
00150 case 'textpic':
00151 $lines[]=$this->getHeader();
00152 if ($CType=='textpic' && !($this->cObj->data['imageorient']&24)) {
00153 $lines[]=$this->getImages();
00154 $lines[]='';
00155 }
00156 $lines[]=$this->breakContent(strip_tags($this->parseBody($this->cObj->data['bodytext'])));
00157 if ($CType=='textpic' && ($this->cObj->data['imageorient']&24)) {
00158 $lines[]='';
00159 $lines[]=$this->getImages();
00160 }
00161 break;
00162 case 'image':
00163 $lines[]=$this->getHeader();
00164 $lines[]=$this->getImages();
00165 break;
00166 case 'uploads':
00167 $lines[]=$this->getHeader();
00168 $lines[]=$this->renderUploads($this->cObj->data['media']);
00169 break;
00170 case 'menu':
00171 $lines[]=$this->getHeader();
00172 $lines[]=$this->getMenuSitemap();
00173 break;
00174 case 'shortcut':
00175 $lines[]=$this->getShortcut();
00176 break;
00177 case 'bullets':
00178 $lines[]=$this->getHeader();
00179 $lines[]=$this->breakBulletlist(strip_tags($this->parseBody($this->cObj->data['bodytext'])));
00180 break;
00181 case 'table':
00182 $lines[]=$this->getHeader();
00183 $lines[]=$this->breakTable(strip_tags($this->parseBody($this->cObj->data['bodytext'])));
00184 break;
00185 case 'html':
00186 $lines[]=$this->getHTML();
00187 break;
00188 default:
00189 $defaultOutput = $this->getString($this->conf['defaultOutput']);
00190 if ($defaultOutput) {
00191 $lines[]=str_replace('###CType###',$CType,$defaultOutput);
00192 }
00193 break;
00194 }
00195
00196 $lines[]='';
00197 $content = implode(chr(10),$lines);
00198
00199
00200 $content=$this->userProcess('userProc',$content);
00201 return $content;
00202 }
00203
00209 function getMenuSitemap() {
00210 $str = $this->cObj->cObjGetSingle($this->conf['menu'],$this->conf['menu.']);
00211 $str = $this->breakBulletlist(trim(strip_tags(eregi_replace('<br[ /]*>',chr(10),$this->parseBody($str)))));
00212 return $str;
00213 }
00214
00220 function getShortcut() {
00221 $str = $this->cObj->cObjGetSingle($this->conf['shortcut'],$this->conf['shortcut.']);
00222 return $str;
00223 }
00224
00231 function getHTML($str=array()) {
00232 return $this->breakContent(strip_tags(eregi_replace('<br[ /]*>',chr(10),$this->parseBody(is_string($str)?$str:$this->cObj->data['bodytext']))));
00233 }
00234
00241 function getHeader() {
00242
00243 return $this->renderHeader($this->cObj->data['header'],$this->cObj->data['header_layout']);
00244 }
00245
00251 function getImages() {
00252 $images = $this->renderImages($this->cObj->data['image'],!$this->cObj->data['image_zoom']?$this->cObj->data['image_link']:'',$this->cObj->data['imagecaption']);
00253 return $images;
00254 }
00255
00262 function parseBody($str) {
00263
00264 $str = eregi_replace('<br[ /]*>',' ',$str);
00265 $str = $this->cObj->stdWrap($str,$this->conf['bodytext.']['stdWrap.']);
00266
00267 $aConf = array();
00268 $aConf['parseFunc.']['tags.']['a']='USER';
00269 $aConf['parseFunc.']['tags.']['a.']['userFunc']='user_plaintext->atag_to_http';
00270 $aConf['parseFunc.']['tags.']['a.']['siteUrl'] = $this->siteUrl;
00271
00272 $str = $this->cObj->stdWrap($str,$aConf);
00273 $str = str_replace(' ',' ',t3lib_div::htmlspecialchars_decode($str));
00274 return $str;
00275 }
00276
00284 function renderUploads($str,$upload_path='uploads/media/') {
00285 $files = explode(',',$str);
00286 reset($files);
00287 $lines=array();
00288 if ($this->conf['uploads.']['header']) {$lines[]=$this->getString($this->conf['uploads.']['header']);}
00289 while(list($k,$file)=each($files)) {
00290 $lines[]=$this->siteUrl.$upload_path.$file;
00291 }
00292 return implode(chr(10),$lines);
00293 }
00294
00302 function renderHeader($str,$type=0) {
00303 if ($str) {
00304 $hConf = $this->conf['header.'];
00305 $defaultType = t3lib_div::intInRange($hConf['defaultType'],1,5);
00306 $type=t3lib_div::intInRange($type,0,6);
00307 if (!$type) $type=$defaultType;
00308 if ($type!=6) {
00309 $tConf = $hConf[$type.'.'];
00310
00311 $lines=array();
00312
00313 $blanks = t3lib_div::intInRange($tConf['preBlanks'],0,1000);
00314 if ($blanks) {
00315 $lines[]=str_pad('', $blanks-1, chr(10));
00316 }
00317
00318 $lines=$this->pad($lines,$tConf['preLineChar'],$tConf['preLineLen']);
00319
00320 $blanks = t3lib_div::intInRange($tConf['preLineBlanks'],0,1000);
00321 if ($blanks) {$lines[]=str_pad('', $blanks-1, chr(10));}
00322
00323 if ($this->cObj->data['date']) {
00324 $lines[] = $this->getString($hConf['datePrefix']).date($hConf['date']?$hConf['date']:$GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'],$this->cObj->data['date']);
00325 }
00326 $prefix='';
00327 $str=$this->getString($tConf['prefix']).$str;
00328 if ($tConf['autonumber']) $str=$this->cObj->parentRecordNumber.$str;
00329 if ($this->cObj->data['header_position']=='right') {$prefix=str_pad(' ',($this->charWidth-strlen($str)));}
00330 if ($this->cObj->data['header_position']=='center') {$prefix=str_pad(' ',floor(($this->charWidth-strlen($str))/2));}
00331 $lines[]=$this->cObj->stdWrap($prefix.$str,$tConf['stdWrap.']);
00332 if ($this->cObj->data['header_link']) {$lines[] = $this->getString($hConf['linkPrefix']).$this->getLink($this->cObj->data['header_link']);}
00333
00334 $blanks = t3lib_div::intInRange($tConf['postLineBlanks'],0,1000);
00335 if ($blanks) {$lines[]=str_pad('', $blanks-1, chr(10));}
00336
00337 $lines=$this->pad($lines,$tConf['postLineChar'],$tConf['postLineLen']);
00338
00339 $blanks = t3lib_div::intInRange($tConf['postBlanks'],0,1000);
00340 if ($blanks) {$lines[]=str_pad('', $blanks-1, chr(10));}
00341 return implode(chr(10),$lines);
00342 }
00343 }
00344 }
00345
00355 function pad($lines,$preLineChar,$len) {
00356 $strPad = t3lib_div::intInRange($len,0,1000);
00357 $strPadChar = $preLineChar?$preLineChar:'-';
00358 if ($strPad) {
00359 $lines[]=str_pad('', $strPad, $strPadChar);
00360 }
00361 return $lines;
00362 }
00363
00371 function breakContent($str) {
00372 $cParts = explode(chr(10),$str);
00373 reset($cParts);
00374 $lines=array();
00375 while(list(,$substrs)=each($cParts)) {
00376 $lines[]=$this->breakLines($substrs);
00377 }
00378 return implode(chr(10),$lines);
00379 }
00380
00387 function breakBulletlist($str) {
00388 $type = $this->cObj->data['layout'];
00389 $type=t3lib_div::intInRange($type,0,3);
00390
00391 $tConf = $this->conf['bulletlist.'][$type.'.'];
00392
00393 $cParts = explode(chr(10),$str);
00394 reset($cParts);
00395 $lines=array();
00396 $c=0;
00397 while(list(,$substrs)=each($cParts)) {
00398 $c++;
00399 $bullet = $tConf['bullet'] ? $this->getString($tConf['bullet']) : ' - ';
00400 $bLen=strlen($bullet);
00401 $bullet = substr(str_replace('#',$c,$bullet),0,$bLen);
00402 $secondRow = substr($tConf['secondRow']?$this->getString($tConf['secondRow']):str_pad('',strlen($bullet),' '),0,$bLen);
00403
00404 $lines[]=$bullet.$this->breakLines($substrs,chr(10).$secondRow,$this->charWidth-$bLen);
00405
00406 $blanks = t3lib_div::intInRange($tConf['blanks'],0,1000);
00407 if ($blanks) {$lines[]=str_pad('', $blanks-1, chr(10));}
00408 }
00409 return implode(chr(10),$lines);
00410 }
00411
00418 function breakTable($str) {
00419 $cParts = explode(chr(10),$str);
00420 reset($cParts);
00421 $lines=array();
00422 $cols = intval($this->conf['cols']) ? intval($this->conf['cols']) : 0 ;
00423 $c=0;
00424 while(list(,$substrs)=each($cParts)) {
00425 $c++;
00426 if (trim($substrs)) {
00427 $lineParts=explode('|',$substrs);
00428 if (!$cols) $cols=count($lineParts);
00429
00430 for ($a=0;$a<$cols;$a++) {
00431 $jdu = explode(chr(10),$this->breakLines($lineParts[$a],chr(10),ceil($this->charWidth/$cols)));
00432 $lines[$c][$a]=$jdu;
00433 }
00434 }
00435 }
00436 $messure = $this->traverseTable($lines);
00437
00438
00439 $divChar='-';
00440 $joinChar='+';
00441 $colChar='|';
00442
00443
00444 $outLines = array();
00445 $outLines[]=$this->addDiv($messure,'',$divChar,$joinChar,$cols);
00446
00447 reset($lines);
00448 while(list($k,$v)=each($lines)) {
00449 $top = intval($messure[1][$k]);
00450 for ($aa=0;$aa<$top;$aa++) {
00451 $tempArr=array();
00452 for ($bb=0;$bb<$cols;$bb++) {
00453 $tempArr[$bb]=str_pad($v[$bb][$aa],$messure[0][$bb],' ');
00454 }
00455 $outLines[]=$colChar.implode($colChar,$tempArr).$colChar;
00456 }
00457 $outLines[]=$this->addDiv($messure,'',$divChar,$joinChar,$cols);
00458 }
00459 return implode(chr(10),$outLines);
00460 }
00461
00474 function addDiv($messure,$content,$divChar,$joinChar,$cols) {
00475 $tempArr=array();
00476 for ($a=0;$a<$cols;$a++) {
00477 $tempArr[$a]=str_pad($content,$messure[0][$a],$divChar);
00478 }
00479 return $joinChar.implode($joinChar,$tempArr).$joinChar;
00480 }
00481
00490 function traverseTable($tableLines) {
00491 $maxLen=array();
00492 $maxLines=array();
00493 reset($tableLines);
00494 while(list($k,$v)=each($tableLines)) {
00495 reset($v);
00496 while(list($kk,$vv)=each($v)) {
00497 reset($vv);
00498 while(list($lk,$lv)=each($vv)) {
00499 if (strlen($lv)>intval($maxLen[$kk])) $maxLen[$kk]=strlen($lv);
00500 }
00501 if (count($vv)>intval($maxLines[$k])) $maxLines[$k]=count($vv);
00502 }
00503 }
00504 return array($maxLen,$maxLines);
00505 }
00506
00517 function renderImages($str,$links,$caption,$upload_path='uploads/pics/') {
00518 $images = explode(',',$str);
00519 $linksArr = explode(',',$links);
00520 reset($images);
00521 $lines=array();
00522 if ($this->conf['images.']['header']) {$lines[]=$this->getString($this->conf['images.']['header']);}
00523 while(list($k,$file)=each($images)) {
00524 $lines[]=$this->siteUrl.$upload_path.$file;
00525 if ($links && count($linksArr)>1) {
00526 if (isset($linksArr[$k])) {
00527 $ll=$linksArr[$k];
00528 } else {
00529 $ll=$linksArr[0];
00530 }
00531
00532 $theLink = $this->getLink($ll);
00533 if ($theLink) {$lines[]=$this->getString($this->conf['images.']['linkPrefix']).$theLink;}
00534 }
00535 }
00536 if ($links && count($linksArr)==1) {
00537 $theLink = $this->getLink($links);
00538 if ($theLink) {$lines[]=$this->getString($this->conf['images.']['linkPrefix']).$theLink;}
00539 }
00540 if ($caption) {
00541 $lines[]='';
00542 $cHeader = trim($this->getString($this->conf['images.']['captionHeader']));
00543 if ($cHeader) $lines[]=$cHeader;
00544 $lines[]=$this->breakContent($caption);
00545 }
00546
00547 return implode(chr(10),$lines);
00548 }
00549
00556 function getLink($ll) {
00557 $theLink=$this->cObj->getTypoLink_URL($ll);
00558 if (substr($theLink,0,4)!='http') {
00559 $theLink=$this->siteUrl.$theLink;
00560 }
00561 return $theLink;
00562 }
00563
00573 function breakLines($str,$implChar="\n",$charWidth=0) {
00574 return t3lib_div::breakLinesForEmail($str,$implChar,$charWidth?$charWidth:$this->charWidth);
00575 }
00576
00585 function getString($str) {
00586 $parts = explode('|',$str);
00587 return strcmp($parts[1],'')?$parts[1]:$parts[0];
00588 }
00589
00597 function userProcess($mConfKey,$passVar) {
00598 if ($this->conf[$mConfKey]) {
00599 $funcConf = $this->conf[$mConfKey.'.'];
00600 $funcConf['parentObj']=&$this;
00601 $passVar = $GLOBALS['TSFE']->cObj->callUserFunction($this->conf[$mConfKey], $funcConf, $passVar);
00602 }
00603 return $passVar;
00604 }
00605
00615 function atag_to_http($content,$conf) {
00616 $this->conf = $conf;
00617 $this->siteUrl=$conf['siteUrl'];
00618 $theLink = trim($this->cObj->parameters['href']);
00619 if (strtolower(substr($theLink,0,7))=='mailto:') {
00620 $theLink=substr($theLink,7);
00621 } elseif (substr($theLink,0,4)!='http') {
00622 $theLink=$this->siteUrl.$theLink;
00623 }
00624 return $this->cObj->getCurrentVal().' (Link: '.$theLink.' )';
00625 }
00626
00634 function typolist($content,$conf) {
00635 $this->conf = $this->cObj->mergeTSRef($conf,'bulletlist');
00636 $this->siteUrl=$conf['siteUrl'];
00637 $str = trim($this->cObj->getCurrentVal());
00638 $this->cObj->data['layout'] = $this->cObj->parameters['type'];
00639 return $this->breakBulletlist($str);
00640 }
00641
00649 function typohead($content,$conf) {
00650 $this->conf = $this->cObj->mergeTSRef($conf,'header');
00651
00652 $this->siteUrl=$conf['siteUrl'];
00653 $str = trim($this->cObj->getCurrentVal());
00654 $this->cObj->data['header_layout'] = $this->cObj->parameters['type'];
00655 $this->cObj->data['header_position'] = $this->cObj->parameters['align'];
00656 $this->cObj->data['header']=$str;
00657
00658 return $this->getHeader();
00659 }
00660
00668 function typocode($content,$conf) {
00669
00670 $this->conf = $conf;
00671 $this->siteUrl=$conf['siteUrl'];
00672 return $this->cObj->getCurrentVal();
00673 }
00674 }
00675
00676
00677
00678
00679 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['media/scripts/plaintextLib.inc']) {
00680 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['media/scripts/plaintextLib.inc']);
00681 }
00682 ?>