6728bddc36eb71b1ff357e4fa24cf8e701aff6b8
2 /***************************************************************
5 * (c) 1999-2007 Kasper Skaarhoj (kasperYYYY@typo3.com)
8 * This script is part of the TYPO3 project. The TYPO3 project is
9 * free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * The GNU General Public License can be found at
15 * http://www.gnu.org/copyleft/gpl.html.
16 * A copy is found in the textfile GPL.txt and important notices to the license
17 * from the author is found in LICENSE.txt distributed with these scripts.
20 * This script is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
25 * This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
28 * Contains classes for Content Rendering based on TypoScript Template configuration
31 * Revised for TYPO3 3.6 June/2003 by Kasper Skaarhoj
34 * class tslib_cObj : All main TypoScript features, rendering of content objects (cObjects). This class is the backbone of TypoScript Template rendering.
35 * class tslib_controlTable : Makes a table CTABLE (TS cObject)
36 * class tslib_tableOffset : Makes a table-offset (TS)
37 * class tslib_frameset : Generates framesets (TS)
39 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
42 * [CLASS/FUNCTION INDEX of SCRIPT]
46 * 257: class tslib_cObj
47 * 351: function start($data,$table='')
48 * 366: function setParent($data,$currentRecord)
50 * SECTION: CONTENT_OBJ:
51 * 391: function getCurrentVal()
52 * 402: function setCurrentVal($value)
53 * 415: function cObjGet($setup,$addKey='')
54 * 439: function cObjGetSingle($name,$conf,$TSkey='__')
56 * SECTION: Functions rendering content objects (cObjects)
57 * 585: function HTML($conf)
58 * 596: function TEXT($conf)
59 * 607: function CLEARGIF($conf)
60 * 626: function COBJ_ARRAY($conf,$ext='')
61 * 662: function USER($conf,$ext='')
62 * 689: function FILE($conf)
63 * 705: function IMAGE($conf)
64 * 724: function IMG_RESOURCE($conf)
65 * 736: function IMGTEXT($conf)
66 * 1145: function CONTENT($conf)
67 * 1231: function RECORDS($conf)
68 * 1311: function HMENU($conf)
69 * 1343: function CTABLE ($conf)
70 * 1381: function OTABLE ($conf)
71 * 1396: function COLUMNS ($conf)
72 * 1475: function HRULER ($conf)
73 * 1500: function CASEFUNC ($conf)
74 * 1525: function LOAD_REGISTER($conf,$name)
75 * 1565: function FORM($conf,$formData='')
76 * 2062: function SEARCHRESULT($conf)
77 * 2228: function PHP_SCRIPT($conf,$ext='')
78 * 2271: function TEMPLATE($conf)
79 * 2422: function MULTIMEDIA($conf)
81 * SECTION: Various helper functions for content objects:
82 * 2509: function getSlidePids($pidList, $pidConf)
83 * 2582: function getFieldDefaultValue($noValueInsert, $fieldName, $defaultVal)
84 * 2600: function cImage($file,$conf)
85 * 2628: function getBorderAttr($borderAttr)
86 * 2644: function imageLinkWrap($string,$imageFile,$conf)
87 * 2724: function fileResource($fName, $addParams='alt="" title=""')
88 * 2747: function lastChanged($tstamp)
89 * 2764: function linkWrap($content,$wrap)
90 * 2782: function getAltParam($conf)
91 * 2817: function cleanFormName($name)
92 * 2833: function getATagParams($conf, $addGlobal=1)
94 * SECTION: HTML template processing functions
95 * 2880: function getSubpart($content, $marker)
96 * 2896: function substituteSubpart($content,$marker,$subpartContent,$recursive=1)
97 * 2909: function substituteMarker($content,$marker,$markContent)
98 * 2929: function substituteMarkerArrayCached($content,$markContentArray=array(),$subpartContentArray=array(),$wrappedSubpartContentArray=array())
99 * 3027: function substituteMarkerArray($content,$markContentArray,$wrap='',$uppercase=0)
100 * 3048: function substituteMarkerInObject(&$tree, $markContentArray)
101 * 3071: function fillInMarkerArray($markContentArray, $row, $fieldList='', $nl2br=TRUE, $prefix='FIELD_', $HSC=FALSE)
103 * SECTION: "stdWrap" + sub functions
104 * 3134: function stdWrap($content,$conf)
105 * 3308: function numRows($conf)
106 * 3329: function listNum($content,$listNum,$char)
107 * 3349: function checkIf($conf)
108 * 3412: function filelist($data)
109 * 3494: function clean_directory($theDir)
110 * 3512: function HTMLparser_TSbridge($theValue, $conf)
111 * 3526: function dataWrap($content,$wrap)
112 * 3539: function insertData($str)
113 * 3569: function prefixComment($str,$conf,$content)
114 * 3593: function substring($content,$options)
115 * 3611: function crop($content,$options)
116 * 3643: function removeBadHTML($text, $conf)
117 * 3687: function textStyle($theValue, $conf)
118 * 3754: function tableStyle($theValue, $conf)
119 * 3795: function addParams($content,$conf)
120 * 3838: function filelink($theValue, $conf)
121 * 3908: function locDataJU($jumpUrl,$conf)
122 * 3939: function calc($val)
123 * 3968: function calcIntExplode($delim, $string)
124 * 3988: function splitObj($value, $conf)
125 * 4050: function parseFunc($theValue, $conf, $ref='')
126 * 4160: function _parseFunc ($theValue, $conf)
127 * 4362: function encaps_lineSplit($theValue, $conf)
128 * 4445: function http_makelinks($data,$conf)
129 * 4512: function mailto_makelinks($data,$conf)
130 * 4555: function getImgResource($file,$fileArray)
132 * SECTION: Data retrieval etc.
133 * 4747: function getFieldVal($field)
134 * 4767: function getData($string,$fieldArray)
135 * 4897: function rootLineValue($key,$field,$slideBack=0,$altRootLine='')
136 * 4919: function getGlobal($var, $source=NULL)
137 * 4955: function getKey($key,$arr)
138 * 4978: function TCAlookup($inputValue,$conf)
140 * SECTION: Link functions (typolink)
141 * 5038: function typoLink($linktxt, $conf)
142 * 5335: function typoLink_URL($conf)
143 * 5353: function getTypoLink($label,$params,$urlParameters=array(),$target='')
144 * 5380: function getTypoLink_URL($params,$urlParameters=array(),$target='')
145 * 5392: function typolinkWrap($conf)
146 * 5405: function currentPageUrl($urlParameters=array(),$id=0)
147 * 5418: function getClosestMPvalueForPage($pageId, $raw=FALSE)
148 * 5468: function getMailTo($mailAddress,$linktxt,$initP='?')
149 * 5506: function getQueryArguments($conf,$overruleQueryArgs=array(),$forceArgs=FALSE)
151 * SECTION: Miscellaneous functions, stand alone
152 * 5591: function wrap($content,$wrap,$char='|')
153 * 5607: function noTrimWrap($content,$wrap)
154 * 5621: function wrapSpace($content, $wrap)
155 * 5647: function callUserFunction($funcName,$conf,$content)
156 * 5688: function processParams($params)
157 * 5706: function keywords($content)
158 * 5723: function caseshift($theValue, $case)
159 * 5748: function HTMLcaseshift($theValue, $case)
160 * 5777: function bytes($sizeInBytes,$labels)
161 * 5788: function calcAge($seconds,$labels)
162 * 5820: function sendNotifyEmail($msg, $recipients, $cc, $email_from, $email_fromName='', $replyTo='')
163 * 5847: function URLqMark($url,$params)
164 * 5863: function checkEmail($email)
165 * 5875: function clearTSProperties($TSArr,$propList)
166 * 5894: function mergeTSRef($confArr,$prop)
167 * 5917: function joinTSarrays($conf,$old_conf)
168 * 5940: function gifBuilderTextBox($gifbuilderConf, $conf, $text)
169 * 5996: function linebreaks($string,$chars,$maxLines=0)
170 * 6027: function getUpdateJS($dataArray, $formName, $arrPrefix, $fieldList)
172 * SECTION: Database functions, making of queries
173 * 6096: function DBgetDelete($table, $uid, $doExec=FALSE)
174 * 6128: function DBgetUpdate($table, $uid, $dataArr, $fieldList, $doExec=FALSE)
175 * 6170: function DBgetInsert($table, $pid, $dataArr, $fieldList, $doExec=FALSE)
176 * 6207: function DBmayFEUserEdit($table,$row, $feUserRow, $allowedGroups='',$feEditSelf=0)
177 * 6247: function DBmayFEUserEditSelect($table,$feUserRow,$allowedGroups='',$feEditSelf=0)
178 * 6287: function enableFields($table,$show_hidden=0)
179 * 6311: function getTreeList($id,$depth,$begin=0,$dontCheckEnableFields=FALSE,$addSelectFields='',$moreWhereClauses='', $prevId_array=array(), $recursionLevel=0)
180 * 6417: function whereSelectFromList($field,$value)
181 * 6435: function exec_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause='',$groupBy='',$orderBy='',$limit='')
182 * 6462: function exec_mm_query_uidList($select,$local_table_uidlist,$mm_table,$foreign_table='',$whereClause='',$groupBy='',$orderBy='',$limit='')
183 * 6483: function searchWhere($sw,$searchFieldList,$searchTable='')
184 * 6519: function exec_getQuery($table, $conf)
185 * 6537: function getQuery($table, $conf, $returnQueryArray=FALSE)
186 * 6616: function getWhere($table,$conf, $returnQueryArray=FALSE)
187 * 6711: function checkPidArray($listArr)
188 * 6734: function checkPid($uid)
190 * SECTION: Frontend editing functions
191 * 6790: function editPanel($content, $conf, $currentRecord='', $dataArr=array())
192 * 6965: function editIcons($content,$params, $conf=array(), $currentRecord='', $dataArr=array(),$addUrlParamStr='')
193 * 7033: function editPanelLinkWrap($string,$formName,$cmd,$currentRecord='',$confirm='',$nPid='')
194 * 7075: function editPanelLinkWrap_doWrap($string,$url,$currentRecord)
195 * 7103: function editPanelPreviewBorder($table,$row,$content,$thick,$conf=array())
196 * 7125: function isDisabled($table,$row)
199 * 7156: class tslib_frameset
200 * 7166: function make($setup)
201 * 7203: function frameParams($setup, $typeNum)
202 * 7246: function framesetParams($setup)
205 * 7279: class tslib_tableOffset
206 * 7291: function start($content,$offset)
209 * 7369: class tslib_controlTable
210 * 7404: function start($offset,$cMargins)
212 * TOTAL FUNCTIONS: 136
213 * (This index is automatically created/updated by the extension "extdeveval")
218 // Includes this class since it is used for parsing HTML
219 require_once(PATH_t3lib
."class.t3lib_parsehtml.php");
221 // Object TypoScript library included:
222 if(t3lib_extMgm
::isLoaded('obts')) {
223 require_once(t3lib_extMgm
::extPath('obts').'_tsobject/_tso.php');
243 * This class contains all main TypoScript features.
244 * This includes the rendering of TypoScript content objects (cObjects).
245 * Is the backbone of TypoScript Template rendering.
247 * There are lots of functions you can use from your include-scripts.
248 * The class "tslib_cObj" is normally instantiated and referred to as "cObj".
249 * When you call your own PHP-code typically through a USER or USER_INT cObject then it is this class that instantiates the object and calls the main method. Before it does so it will set (if you are using classes) a reference to itself in the internal variable "cObj" of the object. Thus you can access all functions and data from this class by $this->cObj->... from within you classes written to be USER or USER_INT content objects.
251 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
254 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&cHash=4ad9d7acb4
257 var $align = Array ('center', 'right', 'left');
260 * Holds ImageMagick parameters and extensions used for compression
265 * 1= Dont change! (removes all parameters for the image_object!!)
269 var $image_compression = Array(
270 10 => Array('params'=>'', 'ext'=>'gif'),
271 11 => Array('params'=>'-colors 128', 'ext'=>'gif'),
272 12 => Array('params'=>'-colors 64', 'ext'=>'gif'),
273 13 => Array('params'=>'-colors 32', 'ext'=>'gif'),
274 14 => Array('params'=>'-colors 16', 'ext'=>'gif'),
275 15 => Array('params'=>'-colors 8', 'ext'=>'gif'),
277 30 => Array('params'=>'-colors 256', 'ext'=>'png'),
278 31 => Array('params'=>'-colors 128', 'ext'=>'png'),
279 32 => Array('params'=>'-colors 64', 'ext'=>'png'),
280 33 => Array('params'=>'-colors 32', 'ext'=>'png'),
281 34 => Array('params'=>'-colors 16', 'ext'=>'png'),
282 35 => Array('params'=>'-colors 8', 'ext'=>'png'),
283 39 => Array('params'=>'', 'ext'=>'png'),
285 20 => Array('params'=>'-quality 100', 'ext'=>'jpg'),
286 21 => Array('params'=>'-quality 90', 'ext'=>'jpg'),
287 22 => Array('params'=>'-quality 80', 'ext'=>'jpg'),
288 23 => Array('params'=>'-quality 70', 'ext'=>'jpg'),
289 24 => Array('params'=>'-quality 60', 'ext'=>'jpg'),
290 25 => Array('params'=>'-quality 50', 'ext'=>'jpg'),
291 26 => Array('params'=>'-quality 40', 'ext'=>'jpg'),
292 27 => Array('params'=>'-quality 30', 'ext'=>'jpg'),
293 28 => Array('params'=>'-quality 20', 'ext'=>'jpg')
297 * ImageMagick parameters for image effects
301 var $image_effects = Array(
305 10 => '-colorspace GRAY',
314 * Loaded with the current data-record.
316 * If the instance of this class is used to render records from the database those records are found in this array.
317 * The function stdWrap has TypoScript properties that fetch field-data from this array.
321 var $oldData = Array(); // Used for backup...
322 var $alternativeData =''; // If this is set with an array before stdWrap, it's used instead of $this->data in the data-property in stdWrap
323 var $parameters = Array(); // Used by the parseFunc function and is loaded with tag-parameters when parsing tags.
324 var $currentValKey = 'currentValue_kidjls9dksoje';
325 var $currentRecord = ''; // This is set to the [table]:[uid] of the record delivered in the $data-array, if the cObjects CONTENT or RECORD is in operation. Note that $GLOBALS['TSFE']->currentRecord is set to an equal value but always indicating the latest record rendered.
326 var $currentRecordTotal = 0; // Set in cObj->RECORDS and cObj->CONTENT to the current number of records selected in a query.
327 var $currentRecordNumber = 0; // Incremented in cObj->RECORDS and cObj->CONTENT before each record rendering.
328 var $parentRecordNumber = 0; // Incremented in parent cObj->RECORDS and cObj->CONTENT before each record rendering.
329 var $parentRecord = array(); // If the tslib_cObj was started from CONTENT, RECORD or SEARCHRESULT cObject's this array has two keys, 'data' and 'currentRecord' which indicates the record and data for the parent cObj.
330 var $regObj; // This may be set as a reference to the calling object of eg. cObjGetSingle. Anyway, just use it as you like. It's used in productsLib.inc for example.
333 var $INT_include=0; // Is set to 1 if the instance of this cObj is executed from a PHP_SCRIPT_INT -include script (see pagegen, bottom of document)
334 var $checkPid_cache = Array(); // This is used by checkPid, that checks if pages are accessible. The $checkPid_cache['page_uid'] is set true or false upon this check featuring a caching function for the next request.
335 var $checkPid_badDoktypeList = '255';
336 var $lastTypoLinkUrl=''; // This will be set by typoLink() to the url of the most recent link created.
337 var $lastTypoLinkTarget=''; // DO. link target.
338 var $substMarkerCache=array(); // Caching substituteMarkerArrayCached function
339 var $recordRegister=array(); // Array that registers rendered content elements (or any table) to make sure they are not rendered recursively!
340 var $cObjHookObjectsArr = array(); // Containig hooks for userdefined cObjects
344 * Well, it has to be called manually since it is not a real constructor function.
345 * So after making an instance of the class, call this function and pass to it a database record and the tablename from where the record is from. That will then become the "current" record loaded into memory and accessed by the .fields property found in eg. stdWrap.
347 * @param array $data the record data that is rendered.
348 * @param string $table the table that the data record is from.
351 function start($data,$table='') {
352 global $TYPO3_CONF_VARS;
354 $this->currentRecord
= $table ?
$table.':'.$this->data
['uid'] : '';
355 $this->parameters
= Array();
356 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_content.php']['cObjTypeAndClass'])) {
357 foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_content.php']['cObjTypeAndClass'] as $classArr) {
358 $this->cObjHookObjectsArr
[$classArr[0]] = &t3lib_div
::getUserObj($classArr[1]);
364 * Sets the internal variable parentRecord with information about current record.
365 * If the tslib_cObj was started from CONTENT, RECORD or SEARCHRESULT cObject's this array has two keys, 'data' and 'currentRecord' which indicates the record and data for the parent cObj.
367 * @param array $data: The record array
368 * @param string $currentRecord: This is set to the [table]:[uid] of the record delivered in the $data-array, if the cObjects CONTENT or RECORD is in operation. Note that $GLOBALS['TSFE']->currentRecord is set to an equal value but always indicating the latest record rendered.
372 function setParent($data,$currentRecord) {
373 $this->parentRecord
=array('data'=>$data, 'currentRecord'=>$currentRecord);
383 /***********************************************
387 ***********************************************/
390 * Returns the "current" value.
391 * The "current" value is just an internal variable that can be used by functions to pass a single value on to another function later in the TypoScript processing.
392 * It's like "load accumulator" in the good old C64 days... basically a "register" you can use as you like.
393 * The TSref will tell if functions are setting this value before calling some other object so that you know if it holds any special information.
395 * @return mixed The "current" value
397 function getCurrentVal() {
398 return $this->data
[$this->currentValKey
];
402 * Sets the "current" value.
404 * @param mixed The variable that you want to set as "current"
406 * @see getCurrentVal()
408 function setCurrentVal($value) {
409 $this->data
[$this->currentValKey
] = $value;
413 * Rendering of a "numerical array" of cObjects from TypoScript
414 * Will call ->cObjGetSingle() for each cObject found and accumulate the output.
416 * @param array $setup: Array with cObjects as values.
417 * @param string $addKey: A prefix for the debugging information
418 * @return string Rendered output from the cObjects in the array.
419 * @see cObjGetSingle()
421 function cObjGet($setup,$addKey='') {
422 if (is_array($setup)) {
423 $sKeyArray=t3lib_TStemplate
::sortedKeyList($setup);
425 foreach($sKeyArray as $theKey) {
426 $theValue=$setup[$theKey];
427 if (intval($theKey) && !strstr($theKey,'.')) {
428 $conf=$setup[$theKey.'.'];
429 $content.=$this->cObjGetSingle($theValue,$conf,$addKey.$theKey); // Get the contentObject
437 * Renders a content object
439 * @param string The content object name, eg. "TEXT" or "USER" or "IMAGE"
440 * @param array The array with TypoScript properties for the content object
441 * @param string A string label used for the internal debugging tracking.
442 * @return string cObject output
443 * @example http://typo3.org/doc.0.html?&encryptionKey=&tx_extrepmgm_pi1[extUid]=267&tx_extrepmgm_pi1[tocEl]=153&cHash=7e74f4d331
445 function cObjGetSingle($name,$conf,$TSkey='__') {
447 // Checking that the function is not called eternally. This is done by interrupting at a depth of 100
448 $GLOBALS['TSFE']->cObjectDepthCounter
--;
449 if ($GLOBALS['TSFE']->cObjectDepthCounter
>0) {
451 if ($GLOBALS['TT']->LR
) $GLOBALS['TT']->push($TSkey, $name);
453 // Checking if the COBJ is a reference to another object. (eg. name of 'blabla.blabla = < styles.something')
454 if (substr($name,0,1)=='<') {
455 $key = trim(substr($name,1));
456 $cF = t3lib_div
::makeInstance('t3lib_TSparser');
457 // $name and $conf is loaded with the referenced values.
459 list($name, $conf) = $cF->getVal($key,$GLOBALS['TSFE']->tmpl
->setup
);
460 if (is_array($old_conf) && count($old_conf)) {
461 $conf = $this->joinTSarrays($conf,$old_conf);
464 // Getting the cObject
465 $GLOBALS['TT']->incStackPointer();
466 $content.=$this->cObjGetSingle($name,$conf,$key);
467 $GLOBALS['TT']->decStackPointer();
471 // Application defined cObjects
472 foreach ($this->cObjHookObjectsArr
as $cObjName => $hookObj) {
473 if (($name===$cObjName) && method_exists($hookObj, 'cObjGetSingleExt')) {
474 $content.= $hookObj->cObjGetSingleExt($name, $conf, $TSkey, $this);
478 if (!$hooked && t3lib_extMgm
::isLoaded('obts') && isset($GLOBALS['OBTS']['tso_list'][$name])) {
479 $content.= obts_dtutil
::renderDatatypeContent($name, $GLOBALS['OBTS']['tso_list'][$name], $conf, $this);
480 } elseif (!$hooked) {
481 // Traditional Content Object branching:
485 $content.=$this->COBJ_ARRAY($conf);
488 $content.=$this->COBJ_ARRAY($conf,'INT');
491 $content.=$this->HTML($conf);
494 $content.=$this->TEXT($conf);
497 $content.=$this->CLEARGIF($conf);
500 $content.=$this->FILE($conf);
503 $content.=$this->IMAGE($conf);
506 $content.=$this->IMG_RESOURCE($conf);
509 $content.=$this->IMGTEXT($conf);
512 $content.=$this->CONTENT($conf);
515 $content.=$this->RECORDS($conf);
518 $content.=$this->HMENU($conf);
521 $content.=$this->CTABLE($conf);
524 $content.=$this->OTABLE($conf);
527 $content.=$this->COLUMNS($conf);
530 $content.=$this->HRULER($conf);
533 $content.=$this->CASEFUNC($conf);
535 case 'LOAD_REGISTER':
536 case 'RESTORE_REGISTER':
537 $this->LOAD_REGISTER($conf,$name);
540 $content.=$this->FORM($conf);
543 $content.=$this->SEARCHRESULT($conf);
546 $content.=$this->PHP_SCRIPT($conf);
548 case 'PHP_SCRIPT_EXT':
549 $content.=$this->PHP_SCRIPT($conf,'EXT');
551 case 'PHP_SCRIPT_INT':
552 $content.=$this->PHP_SCRIPT($conf,'INT');
555 $content.=$this->USER($conf);
558 $content.=$this->USER($conf,'INT');
561 $content.=$this->TEMPLATE($conf);
564 if ($GLOBALS['TSFE']->beUserLogin
) {$content.=$this->editPanel($content, $conf);}
567 $content.=$this->MULTIMEDIA($conf);
572 if ($GLOBALS['TT']->LR
) $GLOBALS['TT']->pull($content);
574 // Increasing on exit...
575 $GLOBALS['TSFE']->cObjectDepthCounter++
;
585 /********************************************
587 * Functions rendering content objects (cObjects)
589 ********************************************/
592 * Rendering the cObject, HTML
594 * @param array Array of TypoScript properties
595 * @return string Output
596 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=349&cHash=d3fd0c70b4
598 function HTML($conf) {
599 return $this->stdWrap($conf['value'],$conf['value.']);
603 * Rendering the cObject, TEXT
605 * @param array Array of TypoScript properties
606 * @return string Output
607 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=350&cHash=b49de28f83
609 function TEXT($conf) {
610 return $this->stdWrap($conf['value'],$conf);
614 * Rendering the cObject, CLEARGIF
616 * @param array Array of TypoScript properties
617 * @return string Output
618 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=355&cHash=70c0f19915
620 function CLEARGIF($conf) {
621 $w = $this->stdWrap($conf['width'],$conf['width.']);
622 $h = $this->stdWrap($conf['height'],$conf['height.']);
625 $wrap = $conf['wrap'] ?
$conf['wrap'] : '|<br />';
626 $theValue = $this->wrap('<img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$w.'" height="'.$h.'"'.$this->getBorderAttr(' border="0"').' alt="" title="" />', $wrap);
628 return $this->stdWrap($theValue,$conf['stdWrap.']);
632 * Rendering the cObject, COBJ_ARRAY / COA and COBJ_ARRAY_INT
634 * @param array Array of TypoScript properties
635 * @param string If "INT" then the cObject is a "COBJ_ARRAY_INT" (non-cached), otherwise just "COBJ_ARRAY" (cached)
636 * @return string Output
637 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=351&cHash=a09db0329c
639 function COBJ_ARRAY($conf,$ext='') {
643 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
644 $content.='<!--'.$substKey.'-->';
645 $GLOBALS['TSFE']->config
[$ext.'incScript'][$substKey] = array(
648 'cObj'=>serialize($this),
653 if ($this->checkIf($conf['if.'])) {
654 $content=$this->cObjGet($conf);
656 $content=$this->wrap($content, $conf['wrap']);
658 if ($conf['stdWrap.']) {
659 $content=$this->stdWrap($content, $conf['stdWrap.']);
668 * Rendering the cObject, USER and USER_INT
670 * @param array Array of TypoScript properties
671 * @param string If "INT" then the cObject is a "USER_INT" (non-cached), otherwise just "USER" (cached)
672 * @return string Output
673 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=369&cHash=b623aca0a9
675 function USER($conf,$ext='') {
679 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
680 $content.='<!--'.$substKey.'-->';
681 $GLOBALS['TSFE']->config
[$ext.'incScript'][$substKey] = array(
684 'cObj' => serialize($this),
689 $content.=$this->callUserFunction($conf['userFunc'],$conf,'');
696 * Rendering the cObject, FILE
698 * @param array Array of TypoScript properties
699 * @return string Output
700 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=352&cHash=379c60f8bc
702 function FILE($conf) {
703 $theValue = $this->fileResource($this->stdWrap($conf['file'],$conf['file.']), trim($this->getAltParam($conf, false)));
704 if ($conf['linkWrap']) {
705 $theValue = $this->linkWrap($theValue,$conf['linkWrap']);
707 return $this->wrap($theValue,$conf['wrap']);
711 * Rendering the cObject, IMAGE
713 * @param array Array of TypoScript properties
714 * @return string Output
715 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=353&cHash=440681ea56
718 function IMAGE($conf) {
720 if ($this->checkIf($conf['if.'])) {
721 $theValue = $this->cImage($conf['file'],$conf);
722 if ($conf['stdWrap.']) {
723 $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
730 * Rendering the cObject, IMG_RESOURCE
732 * @param array Array of TypoScript properties
733 * @return string Output
734 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=354&cHash=46f9299706
735 * @see getImgResource()
737 function IMG_RESOURCE($conf) {
738 $GLOBALS['TSFE']->lastImgResourceInfo
= $this->getImgResource($conf['file'],$conf['file.']);
739 return $this->stdWrap($GLOBALS['TSFE']->lastImgResourceInfo
[3],$conf['stdWrap.']);
743 * Rendering the cObject, IMGTEXT
745 * @param array Array of TypoScript properties
746 * @return string Output
747 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=363&cHash=cf2969bce1
749 function IMGTEXT($conf) {
751 if (is_array($conf['text.'])) {
752 $content.= $this->stdWrap($this->cObjGet($conf['text.'],'text.'),$conf['text.']); // this gets the surrounding content
754 $imgList=trim($this->stdWrap($conf['imgList'],$conf['imgList.'])); // gets images
756 $imgs = t3lib_div
::trimExplode(',',$imgList);
757 $imgStart = intval($this->stdWrap($conf['imgStart'],$conf['imgStart.']));
759 $imgCount= count($imgs)-$imgStart;
761 $imgMax = intval($this->stdWrap($conf['imgMax'],$conf['imgMax.']));
763 $imgCount = t3lib_div
::intInRange($imgCount,0,$conf['imgMax']); // reduces the number of images.
766 $imgPath = $this->stdWrap($conf['imgPath'],$conf['imgPath.']);
770 $captionArray = array();
771 if (!$conf['captionSplit'] && !$conf['imageTextSplit'] && is_array($conf['caption.'])) {
772 $caption = $this->stdWrap($this->cObjGet($conf['caption.'], 'caption.'),$conf['caption.']); // global caption, no splitting
774 if ($conf['captionSplit'] && $conf['captionSplit.']['cObject']) {
775 $legacyCaptionSplit = 1;
776 $capSplit = $this->stdWrap($conf['captionSplit.']['token'], $conf['captionSplit.']['token.']);
777 if (!$capSplit) {$capSplit=chr(10);}
778 $captionArray = explode($capSplit, $this->cObjGetSingle($conf['captionSplit.']['cObject'], $conf['captionSplit.']['cObject.'], 'captionSplit.cObject'));
779 while (list($ca_key, $ca_val) = each($captionArray)) {
780 $captionArray[$ca_key] = $this->stdWrap(trim($captionArray[$ca_key]), $conf['captionSplit.']['stdWrap.']);
785 $position=$this->stdWrap($conf['textPos'],$conf['textPos.']);
787 $tmppos = $position&7;
788 $contentPosition = $position&24;
789 $align = $this->align
[$tmppos];
790 $cap = ($caption)?
1:0;
791 $txtMarg = intval($this->stdWrap($conf['textMargin'],$conf['textMargin.']));
792 if (!$conf['textMargin_outOfText'] && $contentPosition<16) {
796 $cols = intval($this->stdWrap($conf['cols'],$conf['cols.']));
797 $rows = intval($this->stdWrap($conf['rows'],$conf['rows.']));
798 $colspacing = intval($this->stdWrap($conf['colSpace'],$conf['colSpace.']));
799 $rowspacing = intval($this->stdWrap($conf['rowSpace'],$conf['rowSpace.']));
801 $border = intval($this->stdWrap($conf['border'],$conf['border.'])) ?
1:0;
802 $borderColor = $this->stdWrap($conf['borderCol'],$conf['borderCol.']);
803 $borderThickness = intval($this->stdWrap($conf['borderThick'],$conf['borderThick.']));
805 $borderColor=$borderColor?
$borderColor:'black';
806 $borderThickness=$borderThickness?
$borderThickness:1;
808 $caption_align = $this->stdWrap($conf['captionAlign'],$conf['captionAlign.']);
809 if (!$caption_align) {
810 $caption_align = $align;
813 $colCount = ($cols > 1) ?
$cols : 1;
814 if ($colCount > $imgCount) {$colCount = $imgCount;}
815 $rowCount = ($colCount > 1) ?
ceil($imgCount / $colCount) : $imgCount;
819 if ($rowCount > $imgCount) {$rowCount = $imgCount;}
820 $colCount = ($rowCount>1) ?
ceil($imgCount / $rowCount) : $imgCount;
824 $colRelations = trim($this->stdWrap($conf['colRelations'],$conf['colRelations.']));
825 $maxW = intval($this->stdWrap($conf['maxW'],$conf['maxW.']));
827 $maxWInText = intval($this->stdWrap($conf['maxWInText'],$conf['maxWInText.']));
828 if (!$maxWInText) { // If maxWInText is not set, it's calculated to the 50 % of the max...
829 $maxWInText = round($maxW/2);
832 if ($maxWInText && $contentPosition>=16) { // inText
836 if ($maxW && $colCount > 0) { // If there is a max width and if colCount is greater than column
837 /* debug($border*$borderThickness*2);
840 debug(($maxW-$colspacing*($colCount-1)-$colCount*$border*$borderThickness*2));
842 $maxW = ceil(($maxW-$colspacing*($colCount-1)-$colCount*$border*$borderThickness*2)/$colCount);
844 // create the relation between rows
847 $rel_parts = explode(':',$colRelations);
849 for ($a=0;$a<$colCount;$a++
) {
850 $rel_parts[$a] = intval($rel_parts[$a]);
851 $rel_total+
= $rel_parts[$a];
854 for ($a=0;$a<$colCount;$a++
) {
855 $colMaxW[$a] = round(($maxW*$colCount)/$rel_total*$rel_parts[$a]);
857 if (min($colMaxW)<=0 ||
max($rel_parts)/min($rel_parts)>10) { // The difference in size between the largest and smalles must be within a factor of ten.
862 $image_compression = intval($this->stdWrap($conf['image_compression'],$conf['image_compression.']));
863 $image_effects = intval($this->stdWrap($conf['image_effects'],$conf['image_effects.']));
864 $image_frames = intval($this->stdWrap($conf['image_frames.']['key'],$conf['image_frames.']['key.']));
868 $splitArr['imgObjNum']=$conf['imgObjNum'];
869 $splitArr = $GLOBALS['TSFE']->tmpl
->splitConfArray($splitArr,$imgCount);
872 $equalHeight = intval($this->stdWrap($conf['equalH'],$conf['equalH.']));
873 if ($equalHeight) { // Initiate gifbuilder object in order to get dimensions AND calculate the imageWidth's
874 $gifCreator = t3lib_div
::makeInstance('tslib_gifbuilder');
876 $relations = Array();
877 $relations_cols = Array();
878 $totalMaxW = $maxW*$colCount;
879 for($a=0;$a<$imgCount;$a++
) {
880 $imgKey = $a+
$imgStart;
881 $imgInfo = $gifCreator->getImageDimensions($imgPath.$imgs[$imgKey]);
882 $relations[$a] = $imgInfo[1] / $equalHeight; // relationship between the original height and the wished height
883 if ($relations[$a]) { // if relations is zero, then the addition of this value is omitted as the image is not expected to display because of some error.
884 $relations_cols[floor($a/$colCount)] +
= $imgInfo[0]/$relations[$a]; // counts the total width of the row with the new height taken into consideration.
889 $imageRowsFinalWidths = Array(); // contains the width of every image row
890 $imageRowsMaxHeights = Array();
893 for($a=0;$a<$imgCount;$a++
) {
894 $GLOBALS['TSFE']->register
['IMAGE_NUM'] = $a;
895 $GLOBALS['TSFE']->register
['IMAGE_NUM_CURRENT'] = $a;
897 $imgKey = $a+
$imgStart;
898 $totalImagePath = $imgPath.$imgs[$imgKey];
899 $this->data
[$this->currentValKey
] = $totalImagePath;
900 $imgObjNum = intval($splitArr[$a]['imgObjNum']);
901 $imgConf = $conf[$imgObjNum.'.'];
906 $rowTotalMaxW = $relations_cols[floor($a/$colCount)];
907 if ($rowTotalMaxW > $totalMaxW) {
908 $scale = $rowTotalMaxW / $totalMaxW;
911 // transfer info to the imageObject. Please note, that
912 $imgConf['file.']['height'] = round($equalHeight/$scale);
914 unset($imgConf['file.']['width']);
915 unset($imgConf['file.']['maxW']);
916 unset($imgConf['file.']['maxH']);
917 unset($imgConf['file.']['minW']);
918 unset($imgConf['file.']['minH']);
919 unset($imgConf['file.']['width.']);
920 unset($imgConf['file.']['maxW.']);
921 unset($imgConf['file.']['maxH.']);
922 unset($imgConf['file.']['minW.']);
923 unset($imgConf['file.']['minH.']);
924 $maxW = 0; // setting this to zero, so that it doesn't disturb
928 if (count($colMaxW)) {
929 $imgConf['file.']['maxW'] = $colMaxW[($a%
$colCount)];
931 $imgConf['file.']['maxW'] = $maxW;
935 // Image Object supplied:
936 if (is_array($imgConf)) {
937 if ($this->image_effects
[$image_effects]) {
938 $imgConf['file.']['params'].= ' '.$this->image_effects
[$image_effects];
941 if (is_array($conf['image_frames.'][$image_frames.'.'])) {
942 $imgConf['file.']['m.'] = $conf['image_frames.'][$image_frames.'.'];
945 if ($image_compression && $imgConf['file']!='GIFBUILDER') {
946 if ($image_compression==1) {
947 $tempImport = $imgConf['file.']['import'];
948 $tempImport_dot = $imgConf['file.']['import.'];
949 unset($imgConf['file.']);
950 $imgConf['file.']['import'] = $tempImport;
951 $imgConf['file.']['import.'] = $tempImport_dot;
952 } elseif (isset($this->image_compression
[$image_compression])) {
953 $imgConf['file.']['params'].= ' '.$this->image_compression
[$image_compression]['params'];
954 $imgConf['file.']['ext'] = $this->image_compression
[$image_compression]['ext'];
955 unset($imgConf['file.']['ext.']);
959 // "alt", "title" and "longdesc" attributes:
960 if (!strlen($imgConf['altText']) && !is_array($imgConf['altText.'])) {
961 $imgConf['altText'] = $conf['altText'];
962 $imgConf['altText.'] = $conf['altText.'];
964 if (!strlen($imgConf['titleText']) && !is_array($imgConf['titleText.'])) {
965 $imgConf['titleText'] = $conf['titleText'];
966 $imgConf['titleText.'] = $conf['titleText.'];
968 if (!strlen($imgConf['longdescURL']) && !is_array($imgConf['longdescURL.'])) {
969 $imgConf['longdescURL'] = $conf['longdescURL'];
970 $imgConf['longdescURL.'] = $conf['longdescURL.'];
974 'altText' => $conf['altText'],
975 'titleText' => $conf['titleText'],
976 'longdescURL' => $conf['longdescURL'],
977 'file' => $totalImagePath
981 $imgsTag[$imgKey] = $this->IMAGE($imgConf);
983 // Store the original filepath
984 $origImages[$imgKey]=$GLOBALS['TSFE']->lastImageInfo
;
986 $imageRowsFinalWidths[floor($a/$colCount)] +
= $GLOBALS['TSFE']->lastImageInfo
[0];
987 if ($GLOBALS['TSFE']->lastImageInfo
[1]>$imageRowsMaxHeights[floor($a/$colCount)]) {
988 $imageRowsMaxHeights[floor($a/$colCount)] = $GLOBALS['TSFE']->lastImageInfo
[1];
991 // calculating the tableWidth:
992 // TableWidth problems: It creates problems if the pictures are NOT as wide as the tableWidth.
993 $tableWidth = max($imageRowsFinalWidths)+
$colspacing*($colCount-1) +
$colCount*$border*$borderThickness*2;
995 // make table for pictures
998 $noRows = $this->stdWrap($conf['noRows'],$conf['noRows.']);
999 $noCols = $this->stdWrap($conf['noCols'],$conf['noCols.']);
1000 if ($noRows) {$noCols=0;} // noRows overrides noCols. They cannot exist at the same time.
1007 $colCount_temp=$colCount;
1009 $rowCount_temp = $rowCount;
1015 // col- and rowspans calculated
1016 $colspan = (($colspacing) ?
$colCount*2-1 : $colCount);
1017 $rowspan = (($rowspacing) ?
$rowCount*2-1 : $rowCount) +
$cap;
1021 $editIconsHTML = $conf['editIcons']&&$GLOBALS['TSFE']->beUserLogin ?
$this->editIcons('',$conf['editIcons'],$conf['editIcons.']) : '';
1023 // strech out table:
1026 if ($conf['noStretchAndMarginCells']!=1) {
1028 if ($txtMarg && $align=='right') { // If right aligned, the textborder is added on the right side
1029 $tablecode.='<td rowspan="'.($rowspan+
1).'" valign="top"><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$txtMarg.'" height="1" alt="" title="" />'.($editIconsHTML?
'<br />'.$editIconsHTML:'').'</td>';
1033 $tablecode.='<td colspan="'.$colspan.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$tableWidth.'" height="1" alt="" /></td>';
1034 if ($txtMarg && $align=='left') { // If left aligned, the textborder is added on the left side
1035 $tablecode.='<td rowspan="'.($rowspan+
1).'" valign="top"><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$txtMarg.'" height="1" alt="" title="" />'.($editIconsHTML?
'<br />'.$editIconsHTML:'').'</td>';
1039 if ($flag) $tableWidth+
=$txtMarg+
1;
1041 $tablecode.='</tr>';
1045 for ($c=0;$c<$rowCount;$c++
) { // Looping through rows. If 'noRows' is set, this is '1 time', but $rowCount_temp will hold the actual number of rows!
1046 if ($c && $rowspacing) { // If this is NOT the first time in the loop AND if space is required, a row-spacer is added. In case of "noRows" rowspacing is done further down.
1047 $tablecode.='<tr><td colspan="'.$colspan.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="1" height="'.$rowspacing.'"'.$this->getBorderAttr(' border="0"').' alt="" title="" /></td></tr>';
1049 $tablecode.='<tr>'; // starting row
1050 for ($b=0; $b<$colCount_temp; $b++
) { // Looping through the columns
1051 if ($b && $colspacing) { // If this is NOT the first iteration AND if column space is required. In case of "noCols", the space is done without a separate cell.
1053 $tablecode.='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$colspacing.'" height="1"'.$this->getBorderAttr(' border="0"').' alt="" title="" /></td>';
1055 $colSpacer='<img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.($border?
$colspacing-6:$colspacing).'" height="'.($imageRowsMaxHeights[$c]+
($border?
$borderThickness*2:0)).'"'.$this->getBorderAttr(' border="0"').' align="'.($border?
'left':'top').'" alt="" title="" />';
1056 $colSpacer='<td valign="top">'.$colSpacer.'</td>'; // added 160301, needed for the new "noCols"-table...
1057 $tablecode.=$colSpacer;
1060 if (!$noCols ||
($noCols && !$b)) {
1061 $tablecode.='<td valign="top">'; // starting the cell. If "noCols" this cell will hold all images in the row, otherwise only a single image.
1062 if ($noCols) {$tablecode.='<table width="'.$imageRowsFinalWidths[$c].'" border="0" cellpadding="0" cellspacing="0"><tr>';} // In case of "noCols" we must set the table-tag that surrounds the images in the row.
1064 for ($a=0;$a<$rowCount_temp;$a++
) { // Looping through the rows IF "noRows" is set. "noRows" means that the rows of images is not rendered by physical table rows but images are all in one column and spaced apart with clear-gifs. This loop is only one time if "noRows" is not set.
1065 $GLOBALS['TSFE']->register
['IMAGE_NUM'] = $imgIndex; // register previous imgIndex
1066 $imgIndex = $index+
$a*$colCount_temp;
1067 $GLOBALS['TSFE']->register
['IMAGE_NUM_CURRENT'] = $imgIndex;
1068 if ($imgsTag[$imgIndex]) {
1069 if ($rowspacing && $noRows && $a) { // Puts distance between the images IF "noRows" is set and this is the first iteration of the loop
1070 $tablecode.= '<img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="1" height="'.$rowspacing.'" alt="" title="" /><br />';
1072 if ($legacyCaptionSplit) {
1073 $thisCaption = $captionArray[$imgIndex];
1074 } else if ($conf['captionSplit'] ||
$conf['imageTextSplit']) {
1075 $thisCaption = $this->stdWrap($this->cObjGet($conf['caption.'], 'caption.'), $conf['caption.']);
1077 $imageHTML = $imgsTag[$imgIndex].'<br />';
1078 $Talign = (!trim($thisCaption) && !$noRows) ?
' align="left"' : ''; // this is necessary if the tablerows are supposed to space properly together! "noRows" is excluded because else the images "layer" together.
1079 if ($border) {$imageHTML='<table border="0" cellpadding="'.$borderThickness.'" cellspacing="0" bgcolor="'.$borderColor.'"'.$Talign.'><tr><td>'.$imageHTML.'</td></tr></table>';}
1080 $imageHTML.=$editIconsHTML;
1082 $imageHTML.=$thisCaption; // Adds caption.
1083 if ($noCols) {$imageHTML='<td valign="top">'.$imageHTML.'</td>';} // If noCols, put in table cell.
1084 $tablecode.=$imageHTML;
1088 if (!$noCols ||
($noCols && $b+
1==$colCount_temp)) {
1089 if ($noCols) {$tablecode.='</tr></table>';} // In case of "noCols" we must finish the table that surrounds the images in the row.
1090 $tablecode.='</td>'; // Ending the cell. In case of "noCols" the cell holds all pictures!
1093 $tablecode.='</tr>'; // ending row
1096 switch ($contentPosition) {
1099 switch ($align) { // These settings are needed for Firefox
1101 $table_align = 'margin-left: auto; margin-right: auto';
1104 $table_align = 'margin-left: auto; margin-right: 0px';
1106 default: // Most of all: left
1107 $table_align = 'margin-left: 0px; margin-right: auto';
1109 $table_align = 'style="'.$table_align.'"';
1111 case '16': // in text
1112 $table_align = 'align="'.$align.'"';
1118 // Table-tag is inserted
1119 $tablecode = '<table'.($tableWidth?
' width="'.$tableWidth.'"':'').' border="0" cellspacing="0" cellpadding="0" '.$table_align.' class="imgtext-table">'.$tablecode;
1120 if ($editIconsHTML) { // IF this value is not long since reset.
1121 $tablecode.='<tr><td colspan="'.$colspan.'">'.$editIconsHTML.'</td></tr>';
1125 $tablecode.='<tr><td colspan="'.$colspan.'" align="'.$caption_align.'">'.$caption.'</td></tr>';
1127 $tablecode.='</table>';
1128 if ($conf['tableStdWrap.']) {$tablecode=$this->stdWrap($tablecode,$conf['tableStdWrap.']);}
1131 $spaceBelowAbove = intval($this->stdWrap($conf['spaceBelowAbove'],$conf['spaceBelowAbove.']));
1132 switch ($contentPosition) {
1134 $output= '<div style="text-align:'.$align.';">'.$tablecode.'</div>'.$this->wrapSpace($content, $spaceBelowAbove.'|0');
1137 $output= $this->wrapSpace($content, '0|'.$spaceBelowAbove).'<div style="text-align:'.$align.';">'.$tablecode.'</div>';
1139 case '16': // in text
1140 $output= $tablecode.$content;
1142 case '24': // in text, no wrap
1144 $theResult.= '<table border="0" cellspacing="0" cellpadding="0" class="imgtext-nowrap"><tr>';
1145 if ($align=='right') {
1146 $theResult.= '<td valign="top">'.$content.'</td><td valign="top">'.$tablecode.'</td>';
1148 $theResult.= '<td valign="top">'.$tablecode.'</td><td valign="top">'.$content.'</td>';
1150 $theResult.= '</tr></table>';
1151 $output= $theResult;
1158 if ($conf['stdWrap.']) {
1159 $output = $this->stdWrap($output, $conf['stdWrap.']);
1166 * Rendering the cObject, CONTENT
1168 * @param array Array of TypoScript properties
1169 * @return string Output
1170 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=356&cHash=9f3b5c6ba2
1172 function CONTENT($conf) {
1175 $originalRec = $GLOBALS['TSFE']->currentRecord
;
1176 if ($originalRec) { // If the currentRecord is set, we register, that this record has invoked this function. It's should not be allowed to do this again then!!
1177 $GLOBALS['TSFE']->recordRegister
[$originalRec]++
;
1180 if ($conf['table']=='pages' ||
substr($conf['table'],0,3)=='tt_' ||
substr($conf['table'],0,3)=='fe_' ||
substr($conf['table'],0,3)=='tx_' ||
substr($conf['table'],0,4)=='ttx_' ||
substr($conf['table'],0,5)=='user_') {
1182 $renderObjName = $conf['renderObj'] ?
$conf['renderObj'] : '<'.$conf['table'];
1183 $renderObjKey = $conf['renderObj'] ?
'renderObj' : '';
1184 $renderObjConf = $conf['renderObj.'];
1186 $slide = intval($conf['slide'])?
intval($conf['slide']):0;
1187 $slideCollect = intval($conf['slide.']['collect'])?
intval($conf['slide.']['collect']):0;
1188 $slideCollectReverse = intval($conf['slide.']['collectReverse'])?
true:false;
1189 $slideCollectFuzzy = $slideCollect?
(intval($conf['slide.']['collectFuzzy'])?
true:false):true;
1193 $res = $this->exec_getQuery($conf['table'],$conf['select.']);
1194 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
1195 $GLOBALS['TT']->setTSlogMessage($error,3);
1197 $this->currentRecordTotal
= $GLOBALS['TYPO3_DB']->sql_num_rows($res);
1198 $GLOBALS['TT']->setTSlogMessage('NUMROWS: '.$GLOBALS['TYPO3_DB']->sql_num_rows($res));
1199 $cObj =t3lib_div
::makeInstance('tslib_cObj');
1200 $cObj->setParent($this->data
,$this->currentRecord
);
1201 $this->currentRecordNumber
=0;
1203 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
1205 // Versioning preview:
1206 $GLOBALS['TSFE']->sys_page
->versionOL($conf['table'],$row,TRUE);
1208 // Language Overlay:
1209 if (is_array($row) && $GLOBALS['TSFE']->sys_language_contentOL
) {
1210 $row = $GLOBALS['TSFE']->sys_page
->getRecordOverlay($conf['table'],$row,$GLOBALS['TSFE']->sys_language_content
,$GLOBALS['TSFE']->sys_language_contentOL
);
1213 if (is_array($row)) { // Might be unset in the sys_language_contentOL
1214 if (!$GLOBALS['TSFE']->recordRegister
[$conf['table'].':'.$row['uid']]) {
1215 $this->currentRecordNumber++
;
1216 $cObj->parentRecordNumber
= $this->currentRecordNumber
;
1217 $GLOBALS['TSFE']->currentRecord
= $conf['table'].':'.$row['uid'];
1218 $this->lastChanged($row['tstamp']);
1219 $cObj->start($row,$conf['table']);
1220 $tmpValue = $cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey);
1221 $cobjValue .= $tmpValue;
1222 }# else debug($GLOBALS['TSFE']->recordRegister,'CONTENT');
1226 if ($slideCollectReverse) {
1227 $theValue = $cobjValue.$theValue;
1229 $theValue .= $cobjValue;
1231 if ($slideCollect>0) {
1238 $conf['select.']['pidInList'] = $this->getSlidePids($conf['select.']['pidInList'], $conf['select.']['pidInList.']);
1239 $again = strlen($conf['select.']['pidInList'])?
true:false;
1241 } while ($again&&(($slide&&!strlen($tmpValue)&&$slideCollectFuzzy)||
($slide&&$slideCollect)));
1244 $theValue = $this->wrap($theValue,$conf['wrap']);
1245 if ($conf['stdWrap.']) $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
1247 $GLOBALS['TSFE']->currentRecord
= $originalRec; // Restore
1252 * Rendering the cObject, RECORDS
1254 * @param array Array of TypoScript properties
1255 * @return string Output
1256 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=357&cHash=303e959472
1258 function RECORDS($conf) {
1261 $originalRec = $GLOBALS['TSFE']->currentRecord
;
1262 if ($originalRec) { // If the currentRecord is set, we register, that this record has invoked this function. It's should not be allowed to do this again then!!
1263 $GLOBALS['TSFE']->recordRegister
[$originalRec]++
;
1266 $conf['source'] = $this->stdWrap($conf['source'],$conf['source.']);
1267 if ($conf['tables'] && $conf['source']) {
1268 $allowedTables = $conf['tables'];
1269 if (is_array($conf['conf.'])) {
1270 reset($conf['conf.']);
1271 while(list($k)=each($conf['conf.'])) {
1272 if (substr($k,-1)!='.') $allowedTables.=','.$k;
1276 $loadDB = t3lib_div
::makeInstance('FE_loadDBGroup');
1277 $loadDB->start($conf['source'], $allowedTables);
1278 reset($loadDB->tableArray
);
1279 while(list($table,)=each($loadDB->tableArray
)) {
1280 if (is_array($GLOBALS['TCA'][$table])) {
1281 $loadDB->additionalWhere
[$table]=$this->enableFields($table);
1284 $loadDB->getFromDB();
1286 reset($loadDB->itemArray
);
1287 $data = $loadDB->results
;
1289 $cObj =t3lib_div
::makeInstance('tslib_cObj');
1290 $cObj->setParent($this->data
,$this->currentRecord
);
1291 $this->currentRecordNumber
=0;
1292 $this->currentRecordTotal
= count($loadDB->itemArray
);
1293 reset($loadDB->itemArray
);
1294 while(list(,$val)=each($loadDB->itemArray
)) {
1295 $row = $data[$val['table']][$val['id']];
1297 // Versioning preview:
1298 $GLOBALS['TSFE']->sys_page
->versionOL($val['table'],$row);
1300 // Language Overlay:
1301 if (is_array($row) && $GLOBALS['TSFE']->sys_language_contentOL
) {
1302 $row = $GLOBALS['TSFE']->sys_page
->getRecordOverlay($val['table'],$row,$GLOBALS['TSFE']->sys_language_content
,$GLOBALS['TSFE']->sys_language_contentOL
);
1305 if (is_array($row)) { // Might be unset in the content overlay things...
1306 if (!$conf['dontCheckPid']) {
1307 $row = $this->checkPid($row['pid']) ?
$row : '';
1309 if ($row && !$GLOBALS['TSFE']->recordRegister
[$val['table'].':'.$val['id']]) {
1310 $renderObjName = $conf['conf.'][$val['table']] ?
$conf['conf.'][$val['table']] : '<'.$val['table'];
1311 $renderObjKey = $conf['conf.'][$val['table']] ?
'conf.'.$val['table'] : '';
1312 $renderObjConf = $conf['conf.'][$val['table'].'.'];
1313 $this->currentRecordNumber++
;
1314 $cObj->parentRecordNumber
=$this->currentRecordNumber
;
1315 $GLOBALS['TSFE']->currentRecord
= $val['table'].':'.$val['id'];
1316 $this->lastChanged($row['tstamp']);
1317 $cObj->start($row,$val['table']);
1318 $tmpValue = $cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey);
1319 $theValue .= $tmpValue;
1320 }# else debug($GLOBALS['TSFE']->recordRegister,'RECORDS');
1324 if ($conf['wrap']) $theValue = $this->wrap($theValue,$conf['wrap']);
1325 if ($conf['stdWrap.']) $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
1327 $GLOBALS['TSFE']->currentRecord
= $originalRec; // Restore
1332 * Rendering the cObject, HMENU
1334 * @param array Array of TypoScript properties
1335 * @return string Output
1336 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=358&cHash=5400c1c06a
1338 function HMENU($conf) {
1340 if ($this->checkIf($conf['if.'])) {
1341 $cls = strtolower($conf[1]);
1342 if (t3lib_div
::inList($GLOBALS['TSFE']->tmpl
->menuclasses
,$cls)) {
1343 if ($conf['special.']['value.']) {
1344 $conf['special.']['value'] = $this->stdWrap($conf['special.']['value'], $conf['special.']['value.']);
1346 $GLOBALS['TSFE']->register
['count_HMENU']++
;
1347 $GLOBALS['TSFE']->register
['count_HMENU_MENUOBJ']=0;
1348 $GLOBALS['TSFE']->applicationData
['GMENU_LAYERS']['WMid']=array();
1349 $GLOBALS['TSFE']->applicationData
['GMENU_LAYERS']['WMparentId']=array();
1351 $menu = t3lib_div
::makeInstance('tslib_'.$cls);
1352 $menu->parent_cObj
= $this;
1353 $menu->start($GLOBALS['TSFE']->tmpl
, $GLOBALS['TSFE']->sys_page
, '', $conf, 1);
1355 $content.=$menu->writeMenu();
1357 if ($conf['wrap']) $content=$this->wrap($content, $conf['wrap']);
1358 if ($conf['stdWrap.']) $content = $this->stdWrap($content, $conf['stdWrap.']);
1364 * Rendering the cObject, CTABLE
1366 * @param array Array of TypoScript properties
1367 * @return string Output
1368 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=359&cHash=2e0065b4e7
1370 function CTABLE ($conf) {
1371 $controlTable = t3lib_div
::makeInstance('tslib_controlTable');
1372 if ($conf['tableParams']) {
1373 $controlTable->tableParams
= $conf['tableParams'];
1375 // loads the pagecontent
1376 $controlTable->contentW
= $conf['cWidth'];
1377 // loads the menues if any
1378 if (is_array($conf['c.'])) {
1379 $controlTable->content
= $this->cObjGet($conf['c.'],'c.');
1380 $controlTable->contentTDparams
= isset($conf['c.']['TDParams']) ?
$conf['c.']['TDParams'] : 'valign="top"';
1382 if (is_array($conf['lm.'])) {
1383 $controlTable->lm
= $this->cObjGet($conf['lm.'],'lm.');
1384 $controlTable->lmTDparams
= isset($conf['lm.']['TDParams']) ?
$conf['lm.']['TDParams'] : 'valign="top"';
1386 if (is_array($conf['tm.'])) {
1387 $controlTable->tm
= $this->cObjGet($conf['tm.'],'tm.');
1388 $controlTable->tmTDparams
= isset($conf['tm.']['TDParams']) ?
$conf['tm.']['TDParams'] : 'valign="top"';
1390 if (is_array($conf['rm.'])) {
1391 $controlTable->rm
= $this->cObjGet($conf['rm.'],'rm.');
1392 $controlTable->rmTDparams
= isset($conf['rm.']['TDParams']) ?
$conf['rm.']['TDParams'] : 'valign="top"';
1394 if (is_array($conf['bm.'])) {
1395 $controlTable->bm
= $this->cObjGet($conf['bm.'],'bm.');
1396 $controlTable->bmTDparams
= isset($conf['bm.']['TDParams']) ?
$conf['bm.']['TDParams'] : 'valign="top"';
1398 return $controlTable->start($conf['offset'],$conf['cMargins']);
1402 * Rendering the cObject, OTABLE
1404 * @param array Array of TypoScript properties
1405 * @return string Output
1406 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=360&cHash=02c9552d38
1408 function OTABLE ($conf) {
1409 $controlTable = t3lib_div
::makeInstance('tslib_tableOffset');
1410 if ($conf['tableParams']) {
1411 $controlTable->tableParams
= $conf['tableParams'];
1413 return $controlTable->start($this->cObjGet($conf),$conf['offset']);
1417 * Rendering the cObject, COLUMNS
1419 * @param array Array of TypoScript properties
1420 * @return string Output
1421 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=361&cHash=7e4e228cad
1423 function COLUMNS ($conf) {
1425 if (is_array($conf) && $this->checkIf($conf['if.'])) {
1427 $tableParams = $conf['tableParams'] ?
' '.$conf['tableParams'] : ' border="0" cellspacing="0" cellpadding="0"';
1428 $TDparams = $conf['TDparams'] ?
' '.$conf['TDparams']:' valign="top"';
1429 $rows = t3lib_div
::intInRange($conf['rows'],2,20);
1430 $totalWidth = intval($conf['totalWidth']);
1435 'gapWidth' => $this->stdWrap($conf['gapWidth'],$conf['gapWidth.']),
1436 'gapBgCol' => $this->stdWrap($conf['gapBgCol'],$conf['gapBgCol.']),
1437 'gapLineThickness' => $this->stdWrap($conf['gapLineThickness'],$conf['gapLineThickness.']),
1438 'gapLineCol' => $this->stdWrap($conf['gapLineCol'],$conf['gapLineCol.'])
1440 $gapData = $GLOBALS['TSFE']->tmpl
->splitConfArray($gapData,$rows-1);
1442 while(list(,$val)=each($gapData)) {
1443 $totalGapWidth+
=intval($val['gapWidth']);
1447 $columnWidth = ceil(($totalWidth-$totalGapWidth)/$rows);
1448 $TDparams.=' width="'.$columnWidth.'"';
1449 $tableParams.=' width="'.$totalWidth.'"';
1451 $TDparams.=' width="'.floor(100/$rows).'%"';
1452 $tableParams.=' width="100%"';
1455 for ($a=1;$a<=$rows;$a++
) {
1457 $content.='<td'.$TDparams.'>';
1458 $content.=$this->cObjGetSingle($conf[$a],$conf[$a.'.'], $a);
1461 $gapConf = $gapData[($a-1)];
1462 $gapWidth = intval($gapConf['gapWidth']);
1464 $tdPar = $gapConf['gapBgCol'] ?
' bgcolor="'.$gapConf['gapBgCol'].'"' : '';
1465 $gapLine = intval($gapConf['gapLineThickness']);
1467 $gapSurround = t3lib_div
::intInRange(($gapWidth-$gapLine)/2, 1, 1000);
1469 $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$gapSurround.'" height="1" alt="" title="" /></td>';
1472 $GtdPar = $gapConf['gapLineCol'] ?
' bgcolor="'.$gapConf['gapLineCol'].'"' : ' bgcolor="black"';
1473 $content.='<td'.$GtdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$gapLine.'" height="1" alt="" title="" /></td>';
1476 $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$gapSurround.'" height="1" alt="" title="" /></td>';
1479 $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$gapWidth.'" height="1" alt="" title="" /></td>';
1485 $content = '<tr>'.$content.'</tr>';
1486 $content = '<table'.$tableParams.'>'.$content.'</table>';
1487 $content.= $this->cObjGetSingle($conf['after'],$conf['after.'], 'after');
1488 if ($conf['stdWrap.']) {
1489 $content = $this->stdWrap($content,$conf['stdWrap.']);
1496 * Rendering the cObject, HRULER
1498 * @param array Array of TypoScript properties
1499 * @return string Output
1500 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=362&cHash=2a462aa084
1502 function HRULER ($conf) {
1503 $lineThickness = t3lib_div
::intInRange($this->stdWrap($conf['lineThickness'],$conf['lineThickness.']),1,50);
1504 $lineColor = $conf['lineColor'] ?
$conf['lineColor'] : 'black';
1505 $spaceBefore = intval($conf['spaceLeft']);
1506 $spaceAfter = intval($conf['spaceRight']);
1507 $tableWidth = $conf['tableWidth'] ?
$conf['tableWidth'] : '99%';
1510 $content.='<table border="0" cellspacing="0" cellpadding="0" width="'.htmlspecialchars($tableWidth).'" summary=""><tr>';
1511 if ($spaceBefore) {$content.='<td width="1"><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$spaceBefore.'" height="1" alt="" title="" /></td>'; }
1512 $content.='<td bgcolor="'.$lineColor.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="1" height="'.$lineThickness.'" alt="" title="" /></td>';
1513 if ($spaceAfter) {$content.='<td width="1"><img src="'.$GLOBALS['TSFE']->absRefPrefix
.'clear.gif" width="'.$spaceAfter.'" height="1" alt="" title="" /></td>'; }
1514 $content.='</tr></table>';
1516 $content = $this->stdWrap($content, $conf['stdWrap.']);
1521 * Rendering the cObject, CASE
1523 * @param array Array of TypoScript properties
1524 * @return string Output
1525 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=364&cHash=cffedd09e3
1527 function CASEFUNC ($conf){
1529 if ($this->checkIf($conf['if.'])) {
1530 if ($conf['setCurrent'] ||
$conf['setCurrent.']){$this->data
[$this->currentValKey
] = $this->stdWrap($conf['setCurrent'], $conf['setCurrent.']);}
1531 $key = $this->stdWrap($conf['key'],$conf['key.']);
1532 $key = strlen($conf[$key]) ?
$key : 'default';
1533 $name = $conf[$key];
1534 $theValue = $this->cObjGetSingle($name,$conf[$key.'.'], $key);
1535 if ($conf['stdWrap.']) {
1536 $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
1543 * Rendering the cObject, LOAD_REGISTER and RESTORE_REGISTER
1544 * NOTICE: This cObject does NOT return any content since it just sets internal data based on the TypoScript properties.
1546 * @param array Array of TypoScript properties
1547 * @param string If "RESTORE_REGISTER" then the cObject rendered is "RESTORE_REGISTER", otherwise "LOAD_REGISTER"
1548 * @return string Empty string (the cObject only sets internal data!)
1549 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=365&cHash=4935524e2e
1550 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=366&cHash=4f9485e8cc
1552 function LOAD_REGISTER($conf,$name) {
1553 if ($name=='RESTORE_REGISTER') {
1554 $GLOBALS['TSFE']->register
= array_pop($GLOBALS['TSFE']->registerStack
);
1556 array_push($GLOBALS['TSFE']->registerStack
,$GLOBALS['TSFE']->register
);
1557 if (is_array($conf)) {
1559 while(list($theKey,$theValue)=each($conf)) {
1560 if (!strstr($theKey,'.') ||
!isset($conf[substr($theKey,0,-1)])) { // Only if 1) the property is set but not the value itself, 2) the value and/or any property
1561 if (strstr($theKey,'.')) {
1562 $theKey = substr($theKey,0,-1);
1564 $GLOBALS['TSFE']->register
[$theKey] = $this->stdWrap($conf[$theKey],$conf[$theKey.'.']);
1573 * Rendering the cObject, FORM
1575 * Note on $formData:
1576 * In the optional $formData array each entry represents a line in the ordinary setup.
1577 * In those entries each entry (0,1,2...) represents a space normally divided by the '|' line.
1579 * $formData [] = array('Name:', 'name=input, 25 ', 'Default value....');
1580 * $formData [] = array('Email:', 'email=input, 25 ', 'Default value for email....');
1582 * - corresponds to the $conf['data'] value being :
1583 * Name:|name=input, 25 |Default value....||Email:|email=input, 25 |Default value for email....
1585 * If $formData is an array the value of $conf['data'] is ignored.
1587 * @param array Array of TypoScript properties
1588 * @param array Alternative formdata overriding whatever comes from TypoScript
1589 * @return string Output
1590 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=367&cHash=bbc518d930
1592 function FORM($conf,$formData='') {
1594 if (is_array($formData)) {
1595 $dataArr = $formData;
1597 $data = $this->stdWrap($conf['data'],$conf['data.']);
1600 // Getting the original config
1602 $data = str_replace(chr(10),'||',$data);
1603 $dataArr = explode('||',$data);
1605 // Adding the new dataArray config form:
1606 if (is_array($conf['dataArray.'])) { // dataArray is supplied
1607 $sKeyArray = t3lib_TStemplate
::sortedKeyList($conf['dataArray.'], TRUE);
1608 foreach ($sKeyArray as $theKey) {
1609 $dAA = $conf['dataArray.'][$theKey.'.'];
1610 if (is_array($dAA)) {
1612 list($temp[0]) = explode('|',$dAA['label.'] ?
$this->stdWrap($dAA['label'],$dAA['label.']) : $dAA['label']);
1613 list($temp[1]) = explode('|',$dAA['type']);
1614 if ($dAA['required']) {
1615 $temp[1] = '*'.$temp[1];
1617 list($temp[2]) = explode('|',$dAA['value.'] ?
$this->stdWrap($dAA['value'],$dAA['value.']) : $dAA['value']);
1618 // If value Array is set, then implode those values.
1619 if (is_array($dAA['valueArray.'])) {
1620 reset($dAA['valueArray.']);
1621 $temp_accum = array();
1622 while (list($dAKey_vA,$dAA_vA) = each($dAA['valueArray.'])) {
1623 if (is_array($dAA_vA) && !strcmp(intval($dAKey_vA).'.',$dAKey_vA)) {
1625 list($temp_vA[0])= explode('=',$dAA_vA['label.'] ?
$this->stdWrap($dAA_vA['label'],$dAA_vA['label.']) : $dAA_vA['label']);
1626 if ($dAA_vA['selected']) {$temp_vA[0]='*'.$temp_vA[0];}
1627 list($temp_vA[1])= explode(',',$dAA_vA['value']);
1629 $temp_accum[] = implode('=',$temp_vA);
1631 $temp[2] = implode(',',$temp_accum);
1633 list($temp[3]) = explode('|',$dAA['specialEval.'] ?
$this->stdWrap($dAA['specialEval'],$dAA['specialEval.']) : $dAA['specialEval']);
1635 // adding the form entry to the dataArray
1636 $dataArr[] = implode('|',$temp);
1642 $attachmentCounter = '';
1644 $fieldlist = Array();
1645 $propertyOverride = Array();
1646 $fieldname_hashArray = Array();
1649 $xhtmlStrict = t3lib_div
::inList('xhtml_strict,xhtml_11,xhtml_2',$GLOBALS['TSFE']->xhtmlDoctype
);
1651 if ($conf['formName']) {
1652 $formname = $this->cleanFormName($conf['formName']);
1654 $formname = $GLOBALS['TSFE']->uniqueHash();
1655 $formname = 'a'.$formname; // form name has to start with a letter to reach XHTML compliance
1658 if (isset($conf['fieldPrefix'])) {
1659 if ($conf['fieldPrefix']) {
1660 $prefix = $this->cleanFormName($conf['fieldPrefix']);
1665 $prefix = $formname;
1668 foreach ($dataArr as $val) {
1672 if (is_array($formData)) {
1674 $val = 1; // true...
1677 $parts = explode('|',$val);
1679 if ($val && strcspn($val,'#/')) {
1681 $confData['label'] = trim($parts[0]);
1683 $fParts = explode(',',$parts[1]);
1684 $fParts[0]=trim($fParts[0]);
1685 if (substr($fParts[0],0,1)=='*') {
1686 $confData['required']=1;
1687 $fParts[0] = substr($fParts[0],1);
1689 $typeParts = explode('=',$fParts[0]);
1690 $confData['type'] = trim(strtolower(end($typeParts)));
1691 if (count($typeParts)==1) {
1692 $confData['fieldname'] = $this->cleanFormName($parts[0]);
1693 if (strtolower(ereg_replace('[^[:alnum:]]','',$confData['fieldname']))=='email') {$confData['fieldname']='email';}
1694 // Duplicate fieldnames resolved
1695 if (isset($fieldname_hashArray[md5($confData['fieldname'])])) {
1696 $confData['fieldname'].='_'.$cc;
1698 $fieldname_hashArray[md5($confData['fieldname'])]=$confData['fieldname'];
1699 // Attachment names...
1700 if ($confData['type']=='file') {
1701 $confData['fieldname']='attachment'.$attachmentCounter;
1702 $attachmentCounter=intval($attachmentCounter)+
1;
1705 $confData['fieldname'] = str_replace(' ','_',trim($typeParts[0]));
1709 if ($conf['wrapFieldName']) {
1710 $confData['fieldname'] = $this->wrap($confData['fieldname'],$conf['wrapFieldName']);
1713 // Set field name as current:
1714 $this->setCurrentVal($confData['fieldname']);
1716 // Additional parameters
1717 if (trim($confData['type'])) {
1718 $addParams=trim($conf['params']);
1719 if (is_array($conf['params.']) && isset($conf['params.'][$confData['type']])) {
1720 $addParams=trim($conf['params.'][$confData['type']]);
1722 if (strcmp('',$addParams)) { $addParams=' '.$addParams; }
1723 } else $addParams='';
1725 if ($conf['dontMd5FieldNames']) {
1726 $fName = $confData['fieldname'];
1728 $fName = md5($confData['fieldname']);
1731 // Accessibility: Set id = fieldname attribute:
1732 if ($conf['accessibility'] ||
$xhtmlStrict) {
1733 $elementIdAttribute = ' id="'.$prefix.$fName.'"';
1735 $elementIdAttribute = '';
1738 // Create form field based on configuration/type:
1739 switch ($confData['type']) {
1741 $cols=trim($fParts[1]) ?
intval($fParts[1]) : 20;
1742 $compWidth = doubleval($conf['compensateFieldWidth'] ?
$conf['compensateFieldWidth'] : $GLOBALS['TSFE']->compensateFieldWidth
);
1743 $compWidth = $compWidth ?
$compWidth : 1;
1744 $cols = t3lib_div
::intInRange($cols*$compWidth, 1, 120);
1746 $rows=trim($fParts[2]) ? t3lib_div
::intInRange($fParts[2],1,30) : 5;
1747 $wrap=trim($fParts[3]);
1748 if ($conf['noWrapAttr'] ||
$wrap === 'disabled') {
1751 $wrap = $wrap ?
' wrap="'.$wrap.'"' : ' wrap="virtual"';
1753 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], str_replace('\n',chr(10),trim($parts[2])));
1754 $fieldCode=sprintf('<textarea name="%s"%s cols="%s" rows="%s"%s%s>%s</textarea>',
1755 $confData['fieldname'], $elementIdAttribute, $cols, $rows, $wrap, $addParams, t3lib_div
::formatForTextarea($default));
1759 $size=trim($fParts[1]) ?
intval($fParts[1]) : 20;
1760 $compWidth = doubleval($conf['compensateFieldWidth'] ?
$conf['compensateFieldWidth'] : $GLOBALS['TSFE']->compensateFieldWidth
);
1761 $compWidth = $compWidth ?
$compWidth : 1;
1762 $size = t3lib_div
::intInRange($size*$compWidth, 1, 120);
1763 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], trim($parts[2]));
1765 if ($confData['type']=='password') {
1769 $max=trim($fParts[2]) ?
' maxlength="'.t3lib_div
::intInRange($fParts[2],1,1000).'"' : "";
1770 $theType = $confData['type']=='input' ?
'text' : 'password';
1772 $fieldCode=sprintf('<input type="%s" name="%s"%s size="%s"%s value="%s"%s />',
1773 $theType, $confData['fieldname'], $elementIdAttribute, $size, $max, htmlspecialchars($default), $addParams);
1777 $size=trim($fParts[1]) ? t3lib_div
::intInRange($fParts[1],1,60) : 20;
1778 $fieldCode=sprintf('<input type="file" name="%s"%s size="%s"%s />',
1779 $confData['fieldname'], $elementIdAttribute, $size, $addParams);
1782 // alternative default value:
1783 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], trim($parts[2]));
1784 $checked = $default ?
' checked="checked"' : '';
1785 $fieldCode=sprintf('<input type="checkbox" value="%s" name="%s"%s%s%s />',
1786 1, $confData['fieldname'], $elementIdAttribute, $checked, $addParams);
1790 $valueParts = explode(',',$parts[2]);
1792 if (strtolower(trim($fParts[1]))=='auto') {$fParts[1]=count($valueParts);} // Auto size set here. Max 20
1793 $size=trim($fParts[1]) ? t3lib_div
::intInRange($fParts[1],1,20) : 1;
1795 $multiple = strtolower(trim($fParts[2]))=='m' ?
' multiple="multiple"' : '';
1797 $items=array(); // Where the items will be
1798 $defaults=array(); //RTF
1799 $pCount = count($valueParts);
1800 for($a=0;$a<$pCount;$a++
) {
1801 $valueParts[$a]=trim($valueParts[$a]);
1802 if (substr($valueParts[$a],0,1)=='*') { // Finding default value
1804 $valueParts[$a] = substr($valueParts[$a],1);
1807 $subParts=explode('=',$valueParts[$a]);
1808 $subParts[1] = (isset($subParts[1])?
trim($subParts[1]):trim($subParts[0])); // Sets the value
1809 $items[] = $subParts; // Adds the value/label pair to the items-array
1810 if ($sel) {$defaults[]=$subParts[1];} // Sets the default value if value/label pair is marked as default.
1812 // alternative default value:
1813 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], $defaults);
1814 if (!is_array($default)) {
1816 $defaults[] = $default;
1817 } else $defaults=$default;
1818 // Create the select-box:
1819 $iCount = count($items);
1820 for($a=0;$a<$iCount;$a++
) {
1821 $option.='<option value="'.$items[$a][1].'"'.(in_array($items[$a][1],$defaults)?
' selected="selected"':'').'>'.trim($items[$a][0]).'</option>'; //RTF
1824 if ($multiple) $confData['fieldname'].='[]'; // The fieldname must be prepended '[]' if multiple select. And the reason why it's prepended is, because the required-field list later must also have [] prepended.
1825 $fieldCode=sprintf('<select name="%s"%s size="%s"%s%s>%s</select>',
1826 $confData['fieldname'], $elementIdAttribute, $size, $multiple, $addParams, $option); //RTF
1830 if ($conf['accessibility']) {
1831 $option.='<fieldset'.$elementIdAttribute.'><legend>'.$confData['label'].'</legend>';
1833 $valueParts = explode(',',$parts[2]);
1834 $items=array(); // Where the items will be
1836 $pCount = count($valueParts);
1837 for($a=0;$a<$pCount;$a++
) {
1838 $valueParts[$a]=trim($valueParts[$a]);
1839 if (substr($valueParts[$a],0,1)=='*') {
1841 $valueParts[$a] = substr($valueParts[$a],1);
1844 $subParts=explode('=',$valueParts[$a]);
1845 $subParts[1] = (isset($subParts[1])?
trim($subParts[1]):trim($subParts[0])); // Sets the value
1846 $items[] = $subParts; // Adds the value/label pair to the items-array
1847 if ($sel) {$default=$subParts[1];} // Sets the default value if value/label pair is marked as default.
1849 // alternative default value:
1850 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], $default);
1851 // Create the select-box:
1852 $iCount = count($items);
1853 for($a=0;$a<$iCount;$a++
) {
1854 $radioId = $prefix.$fName.$this->cleanFormName($items[$a][0]);
1855 if ($conf['accessibility']) {
1856 $radioLabelIdAttribute = ' id="'.$radioId.'"';
1858 $radioLabelIdAttribute = '';
1860 $option .= '<input type="radio" name="'.$confData['fieldname'].'"'.$radioLabelIdAttribute.' value="'.$items[$a][1].'"'.(!strcmp($items[$a][1],$default)?
' checked="checked"':'').$addParams.' />';
1861 if ($conf['accessibility']) {
1862 $option .= '<label for="'.$radioId.'">' . $this->stdWrap(trim($items[$a][0]), $conf['radioWrap.']) . '</label>';
1864 $option .= $this->stdWrap(trim($items[$a][0]), $conf['radioWrap.']);
1867 if ($conf['accessibility']) {
1868 $option.='</fieldset>';
1870 $fieldCode = $option;
1873 $value = trim($parts[2]);
1874 if (strlen($value) && t3lib_div
::inList('recipient_copy,recipient',$confData['fieldname']) && $GLOBALS['TYPO3_CONF_VARS']['FE']['secureFormmail']) {
1877 if (strlen($value) && t3lib_div
::inList('recipient_copy,recipient',$confData['fieldname'])) {
1878 $value = $GLOBALS['TSFE']->codeString($value);
1880 $hiddenfields.= sprintf('<input type="hidden" name="%s"%s value="%s" />',
1881 $confData['fieldname'], $elementIdAttribute, htmlspecialchars($value));
1884 if (t3lib_div
::inList('type,locationData,goodMess,badMess,emailMess',$confData['fieldname'])) {
1885 $value=trim($parts[2]);
1886 $propertyOverride[$confData['fieldname']] = $value;
1887 $conf[$confData['fieldname']] = $value;
1891 $value=trim($parts[2]);
1892 if ($conf['image.']) {
1893 $this->data
[$this->currentValKey
] = $value;
1894 $image = $this->IMG_RESOURCE($conf['image.']);
1895 $params = $conf['image.']['params'] ?
' '.$conf['image.']['params'] : '';
1896 $params.= $this->getAltParam($conf['image.'], false);
1897 $params.= $addParams;
1902 $fieldCode=sprintf('<input type="image" name="%s"%s src="%s"%s />',
1903 $confData['fieldname'], $elementIdAttribute, $image, $params);
1905 $fieldCode=sprintf('<input type="submit" name="%s"%s value="%s"%s />',
1906 $confData['fieldname'], $elementIdAttribute, t3lib_div
::deHSCentities(htmlspecialchars($value)), $addParams);
1910 $value=trim($parts[2]);
1911 $fieldCode=sprintf('<input type="reset" name="%s"%s value="%s"%s />',
1912 $confData['fieldname'], $elementIdAttribute, t3lib_div
::deHSCentities(htmlspecialchars($value)), $addParams);
1915 $fieldCode = nl2br(htmlspecialchars(trim($parts[2])));
1918 $confData['type'] = 'comment';
1919 $fieldCode = trim($parts[2]).' ';
1924 // Checking for special evaluation modes:
1925 if (t3lib_div
::inList('textarea,input,password',$confData['type']) && strlen(trim($parts[3]))) {
1926 $modeParameters = t3lib_div
::trimExplode(':',$parts[3]);
1928 $modeParameters = array();
1931 // Adding evaluation based on settings:
1932 switch ((string)$modeParameters[0]) {
1934 $fieldlist[] = '_EREG';
1935 $fieldlist[] = rawurlencode($modeParameters[1]);
1936 $fieldlist[] = rawurlencode($modeParameters[2]);
1937 $fieldlist[] = rawurlencode($confData['fieldname']);
1938 $fieldlist[] = rawurlencode($confData['label']);
1939 $confData['required'] = 1; // Setting this so "required" layout is used.
1942 $fieldlist[] = '_EMAIL';
1943 $fieldlist[] = rawurlencode($confData['fieldname']);
1944 $fieldlist[] = rawurlencode($confData['label']);
1945 $confData['required'] = 1; // Setting this so "required" layout is used.
1948 if ($confData['required']) {
1949 $fieldlist[] = rawurlencode($confData['fieldname']);
1950 $fieldlist[] = rawurlencode($confData['label']);
1956 $fieldLabel = $confData['label'];
1957 if ($conf['accessibility'] && trim($fieldLabel) && !preg_match('/^(label|hidden|comment)$/',$confData['type'])) {
1958 $fieldLabel = '<label for="'.$prefix.$fName.'">'.$fieldLabel.'</label>';
1961 // Getting template code:
1962 $fieldCode = $this->stdWrap($fieldCode, $conf['fieldWrap.']);
1963 $labelCode = $this->stdWrap($fieldLabel, $conf['labelWrap.']);
1964 $commentCode = $this->stdWrap($confData['label'], $conf['commentWrap.']); // RTF
1965 $result = $conf['layout'];
1966 if ($conf['REQ'] && $confData['required']) {
1967 if (is_array($conf['REQ.']['fieldWrap.']))
1968 $fieldCode = $this->stdWrap($fieldCode, $conf['REQ.']['fieldWrap.']);
1969 if (is_array($conf['REQ.']['labelWrap.']))
1970 $labelCode = $this->stdWrap($fieldLabel, $conf['REQ.']['labelWrap.']);
1971 if ($conf['REQ.']['layout']) {
1972 $result = $conf['REQ.']['layout'];
1975 if ($confData['type']=='comment' && $conf['COMMENT.']['layout']) {
1976 $result = $conf['COMMENT.']['layout'];
1978 if ($confData['type']=='check' && $conf['CHECK.']['layout']) {
1979 $result = $conf['CHECK.']['layout'];
1981 if ($confData['type']=='radio' && $conf['RADIO.']['layout']) {
1982 $result = $conf['RADIO.']['layout'];
1984 if ($confData['type']=='label' && $conf['LABEL.']['layout']) {
1985 $result = $conf['LABEL.']['layout'];
1987 $result = str_replace('###FIELD###',$fieldCode,$result);
1988 $result = str_replace('###LABEL###',$labelCode,$result);
1989 $result = str_replace('###COMMENT###',$commentCode,$result); //RTF
1994 if ($conf['stdWrap.']) { $content = $this->stdWrap($content, $conf['stdWrap.']); }
1997 // redirect (external: where to go afterwards. internal: where to submit to)
1998 $theRedirect = $this->stdWrap($conf['redirect'], $conf['redirect.']); // redirect should be set to the page to redirect to after an external script has been used. If internal scripts is used, and if no 'type' is set that dictates otherwise, redirect is used as the url to jump to as long as it's an integer (page)
1999 $page = $GLOBALS['TSFE']->page
;
2000 if (!$theRedirect) { // Internal: Just submit to current page
2001 $LD = $GLOBALS['TSFE']->tmpl
->linkData($page, $conf['target'], $conf['no_cache'],'index.php', '', $this->getClosestMPvalueForPage($page['uid']));
2002 } elseif (t3lib_div
::testInt($theRedirect)) { // Internal: Submit to page with ID $theRedirect
2003 $page = $GLOBALS['TSFE']->sys_page
->getPage_noCheck($theRedirect);
2004 $LD = $GLOBALS['TSFE']->tmpl
->linkData($page, $conf['target'], $conf['no_cache'],'index.php', '', $this->getClosestMPvalueForPage($page['uid']));
2005 } else { // External URL, redirect-hidden field is rendered!
2006 $LD = $GLOBALS['TSFE']->tmpl
->linkData($page, $conf['target'], $conf['no_cache'],'', '', $this->getClosestMPvalueForPage($page['uid']));
2007 $LD['totalURL'] = $theRedirect;
2008 $hiddenfields.= '<input type="hidden" name="redirect" value="'.htmlspecialchars($LD['totalURL']).'" />'; // 18-09-00 added
2011 // Formtype (where to submit to!):
2012 $formtype = $propertyOverride['type'] ?
$propertyOverride['type'] : $this->stdWrap($conf['type'], $conf['type.']);
2013 if (t3lib_div
::testInt($formtype)) { // Submit to a specific page
2014 $page = $GLOBALS['TSFE']->sys_page
->getPage_noCheck($formtype);
2015 $LD_A = $GLOBALS['TSFE']->tmpl
->linkData($page, $conf['target'], $conf['no_cache'], '', '', $this->getClosestMPvalueForPage($page['uid']));
2016 $action = $LD_A['totalURL'];
2017 } elseif ($formtype) { // Submit to external script
2019 $action = $formtype;
2020 } elseif (t3lib_div
::testInt($theRedirect)) {
2022 $action = $LD_A['totalURL'];
2023 } else { // Submit to "nothing" - which is current page
2024 $LD_A = $GLOBALS['TSFE']->tmpl
->linkData($GLOBALS['TSFE']->page
, $conf['target'], $conf['no_cache'], '', '', $this->getClosestMPvalueForPage($page['uid']));
2025 $action = $LD_A['totalURL'];
2029 $theEmail = $this->stdWrap($conf['recipient'], $conf['recipient.']);
2030 if ($theEmail && !$GLOBALS['TYPO3_CONF_VARS']['FE']['secureFormmail']) {
2031 $theEmail = $GLOBALS['TSFE']->codeString($theEmail);
2032 $hiddenfields.= '<input type="hidden" name="recipient" value="'.htmlspecialchars($theEmail).'" />';
2036 if ($conf['locationData']) {
2037 if ($conf['locationData']=='HTTP_POST_VARS' && isset($_POST['locationData'])) {
2038 $locationData = t3lib_div
::_POST('locationData');
2040 $locationData = $GLOBALS['TSFE']->id
.':'.$this->currentRecord
; // locationData is [hte page id]:[tablename]:[uid of record]. Indicates on which page the record (from tablename with uid) is shown. Used to check access.
2042 $hiddenfields.='<input type="hidden" name="locationData" value="'.htmlspecialchars($locationData).'" />';
2046 if (is_array($conf['hiddenFields.'])) {
2047 reset($conf['hiddenFields.']);
2048 while (list($hF_key,$hF_conf) = each($conf['hiddenFields.'])) {
2049 if (substr($hF_key,-1)!='.') {
2050 $hF_value = $this->cObjGetSingle($hF_conf,$conf['hiddenFields.'][$hF_key.'.'],'hiddenfields');
2051 if (strlen($hF_value) && t3lib_div
::inList('recipient_copy,recipient',$hF_key)) {
2052 if ($GLOBALS['TYPO3_CONF_VARS']['FE']['secureFormmail']) {
2055 $hF_value = $GLOBALS['TSFE']->codeString($hF_value);
2057 $hiddenfields.= '<input type="hidden" name="'.$hF_key.'" value="'.htmlspecialchars($hF_value).'" />';
2062 // Wrap all hidden fields in a div tag (see http://bugs.typo3.org/view.php?id=678)
2063 $hiddenfields = '<div style="display:none;">'.$hiddenfields.'</div>';
2066 $validateForm=' onsubmit="return validateForm(\''.$formname.'\',\''.implode(',',$fieldlist).'\','.t3lib_div
::quoteJSvalue($conf['goodMess']).','.t3lib_div
::quoteJSvalue($conf['badMess']).','.t3lib_div
::quoteJSvalue($conf['emailMess']).')"';
2067 $GLOBALS['TSFE']->additionalHeaderData
['JSFormValidate'] = '<script type="text/javascript" src="'.$GLOBALS['TSFE']->absRefPrefix
.'t3lib/jsfunc.validateform.js"></script>';
2068 } else $validateForm='';
2071 $theTarget = ($theRedirect?
$LD['target']:$LD_A['target']);
2074 ' action="'.htmlspecialchars($action).'"'.
2075 ' id="'.$formname.'"'.($xhtmlStrict ?
'' : ' name="'.$formname.'"').
2076 ' enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'"'.
2077 ' method="'.($conf['method']?
$conf['method']:'post').'"'.
2078 ($theTarget ?
' target="'.$theTarget.'"' : '').
2081 $hiddenfields.$content,
2085 if ($conf['arrayReturnMode']) {
2086 $content['validateForm']=$validateForm;
2087 $content['formname']=$formname;
2090 return implode('',$content);
2095 * Rendering the cObject, SEARCHRESULT
2097 * @param array Array of TypoScript properties
2098 * @return string Output
2099 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=368&cHash=d00731cd7b
2101 function SEARCHRESULT($conf) {
2102 if (t3lib_div
::_GP('sword') && t3lib_div
::_GP('scols')) {
2103 $search = t3lib_div
::makeInstance('tslib_search');
2104 $search->register_and_explode_search_string(t3lib_div
::_GP('sword'));
2105 $search->register_tables_and_columns(t3lib_div
::_GP('scols'),$conf['allowedCols']);
2108 // the startId is found
2110 if (t3lib_div
::testInt(t3lib_div
::_GP('stype'))) {
2111 $temp_theStartId=t3lib_div
::_GP('stype');
2112 $rootLine = $GLOBALS['TSFE']->sys_page
->getRootLine($temp_theStartId);
2113 // The page MUST have a rootline with the Level0-page of the current site inside!!
2114 while(list(,$val)=each($rootLine)) {
2115 if($val['uid']==$GLOBALS['TSFE']->tmpl
->rootLine
[0]['uid']) {
2116 $theStartId=$temp_theStartId;
2119 } else if (t3lib_div
::_GP('stype')) {
2120 if (substr(t3lib_div
::_GP('stype'),0,1)=='L') {
2121 $pointer = intval(substr(t3lib_div
::_GP('stype'),1));
2122 $theRootLine = $GLOBALS['TSFE']->tmpl
->rootLine
;
2124 $locDat_arr = explode(':',t3lib_div
::_POST('locationData'));
2125 $pId = intval($locDat_arr[0]);
2127 $altRootLine = $GLOBALS['TSFE']->sys_page
->getRootLine($pId);
2128 ksort($altRootLine);
2129 if (count($altRootLine)) {
2130 // check if the rootline has the real Level0 in it!!
2131 reset($altRootLine);
2133 $theNewRoot=array();
2134 while(list(,$val)=each($altRootLine)) {
2135 if($hitRoot ||
$val['uid']==$GLOBALS['TSFE']->tmpl
->rootLine
[0]['uid']) {
2141 $theRootLine = $theNewRoot; // Override the real rootline if any thing
2145 $key = $this->getKey($pointer,$theRootLine);
2146 $theStartId = $theRootLine[$key]['uid'];
2150 // If not set, we use current page
2151 $theStartId = $GLOBALS['TSFE']->id
;
2153 // generate page-tree
2154 $search->pageIdList
.= $this->getTreeList(-1*$theStartId,$depth);
2156 $endClause = 'pages.uid IN ('.$search->pageIdList
.')
2157 AND pages.doktype in ('.$GLOBALS['TYPO3_CONF_VARS']['FE']['content_doktypes'].($conf['addExtUrlsAndShortCuts']?
',3,4':'').')
2158 AND pages.no_search=0'.
2159 $this->enableFields($search->fTable
).
2160 $this->enableFields('pages');
2162 if ($conf['languageField.'][$search->fTable
]) {
2163 $endClause.= ' AND '.$search->fTable
.'.'.$conf['languageField.'][$search->fTable
].' = '.intval($GLOBALS['TSFE']->sys_language_uid
); // (using sys_language_uid which is the ACTUAL language of the page. sys_language_content is only for selecting DISPLAY content!)
2167 $search->build_search_query($endClause);
2170 if (t3lib_div
::testInt(t3lib_div
::_GP('scount'))) {
2171 $search->res_count
= t3lib_div
::_GP('scount');
2173 $search->count_query();
2177 $spointer = intval(t3lib_div
::_GP('spointer'));
2178 if (isset($conf['range'])) {
2179 $theRange = intval($conf['range']);
2185 if (!$conf['noOrderBy']) {
2186 $search->queryParts
['ORDERBY'] = 'pages.lastUpdated, pages.tstamp';
2189 $search->queryParts
['LIMIT'] = $spointer.','.$theRange;
2192 $search->execute_query();
2193 if ($GLOBALS['TYPO3_DB']->sql_num_rows($search->result
)) {
2194 $GLOBALS['TSFE']->register
['SWORD_PARAMS'] = $search->get_searchwords();
2196 $total = $search->res_count
;
2197 $rangeLow = t3lib_div
::intInRange($spointer+
1,1,$total);
2198 $rangeHigh = t3lib_div
::intInRange($spointer+
$theRange,1,$total);
2200 $LD = $GLOBALS['TSFE']->tmpl
->linkData($GLOBALS['TSFE']->page
,$conf['target'],1,'', '', $this->getClosestMPvalueForPage($GLOBALS['TSFE']->page
['uid']));
2201 $targetPart = $LD['target'] ?
' target="'.htmlspecialchars($LD['target']).'"' : '';
2202 $urlParams = $this->URLqMark($LD['totalURL'],
2203 '&sword='.rawurlencode(t3lib_div
::_GP('sword')).
2204 '&scols='.rawurlencode(t3lib_div
::_GP('scols')).
2205 '&stype='.rawurlencode(t3lib_div
::_GP('stype')).
2208 $result= $this->cObjGetSingle($conf['layout'],$conf['layout.'], 'layout');
2209 $result = str_replace('###RANGELOW###',$rangeLow,$result);
2210 $result = str_replace('###RANGEHIGH###',$rangeHigh,$result);
2211 $result = str_replace('###TOTAL###',$total,$result);
2213 if ($rangeHigh<$total) {
2214 $next = $this->cObjGetSingle($conf['next'], $conf['next.'], 'next');
2215 $next = '<a href="'.htmlspecialchars($urlParams.'&spointer='.($spointer+
$theRange)).'"'.$targetPart.$GLOBALS['TSFE']->ATagParams
.'>'.$next.'</a>';
2217 $result = str_replace('###NEXT###',$next,$result);
2220 $prev = $this->cObjGetSingle($conf['prev'], $conf['prev.'], 'prev');
2221 $prev = '<a href="'.htmlspecialchars($urlParams.'&spointer='.($spointer-$theRange)).'"'.$targetPart.$GLOBALS['TSFE']->ATagParams
.'>'.$prev.'</a>';
2223 $result = str_replace('###PREV###',$prev,$result);
2226 $theValue = $this->cObjGetSingle($conf['resultObj'], $conf['resultObj.'],'resultObj');
2227 $cObj = t3lib_div
::makeInstance('tslib_cObj');
2228 $cObj->setParent($this->data
,$this->currentRecord
);
2230 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($search->result
)) {
2231 // versionOL() here? This is search result displays, is that possible to preview anyway? Or are records selected here already future versions?
2233 $renderCode.=$cObj->cObjGetSingle($conf['renderObj'], $conf['renderObj.'],'renderObj');
2235 $theValue.=$this->wrap($renderCode,$conf['renderWrap']);
2236 $theValue = str_replace('###RESULT###',$theValue,$result);
2238 $theValue = $this->cObjGetSingle($conf['noResultObj'], $conf['noResultObj.'],'noResultObj');
2241 $GLOBALS['TT']->setTSlogMessage('Search in fields: '.$search->listOfSearchFields
);
2245 if ($conf['wrap']) {
2246 $content=$this->wrap($content, $conf['wrap']);
2248 if ($conf['stdWrap.']) {
2249 $content=$this->stdWrap($content, $conf['stdWrap.']);
2252 $GLOBALS['TSFE']->set_no_cache();
2258 * Rendering the cObject, PHP_SCRIPT, PHP_SCRIPT_INT and PHP_SCRIPT_EXT
2260 * @param array Array of TypoScript properties
2261 * @param string If "INT", then rendering "PHP_SCRIPT_INT"; If "EXT", then rendering "PHP_SCRIPT_EXT"; Default is rendering "PHP_SCRIPT" (cached)
2262 * @return string Output
2263 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=370&cHash=aa107f2ad8
2264 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=371&cHash=53f71d025e
2265 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=372&cHash=91fe391e1c
2267 function PHP_SCRIPT($conf,$ext='') {
2268 $incFile = $GLOBALS['TSFE']->tmpl
->getFileName($conf['file']);
2270 if ($incFile && $GLOBALS['TSFE']->checkFileInclude($incFile)) {
2274 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
2275 $content.='<!--'.$substKey.'-->';
2276 $GLOBALS['TSFE']->config
[$ext.'incScript'][$substKey] = array(
2282 $GLOBALS['TSFE']->config
[$ext.'incScript'][$substKey]['cObj'] = serialize($this);
2284 $GLOBALS['TSFE']->config
[$ext.'incScript'][$substKey]['data'] = $this->data
;
2288 // Added 31-12-00: Make backup...
2289 $this->oldData
= $this->data
;
2291 include('./'.$incFile);
2292 // Added 31-12-00: restore...
2293 if ($RESTORE_OLD_DATA) {
2294 $this->data
= $this->oldData
;
2303 * Rendering the cObject, TEMPLATE
2305 * @param array Array of TypoScript properties
2306 * @return string Output
2307 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=373&cHash=109a171b1e
2308 * @see substituteMarkerArrayCached()
2310 function TEMPLATE($conf) {
2311 $subparts = Array();
2316 list($PRE,$POST) = explode('|',$conf['markerWrap'] ?
$conf['markerWrap'] : '### | ###');
2317 $POST = trim($POST);
2320 // Getting the content
2321 $content = $this->cObjGetSingle($conf['template'],$conf['template.'],'template');
2322 if ($conf['workOnSubpart']) {
2323 $content = $this->getSubpart($content, $PRE.$conf['workOnSubpart'].$POST);
2326 // Fixing all relative paths found:
2327 if ($conf['relPathPrefix']) {
2328 $htmlParser = t3lib_div
::makeInstance('t3lib_parsehtml');
2329 $content = $htmlParser->prefixResourcePath($conf['relPathPrefix'],$content,$conf['relPathPrefix.']);
2333 if ($conf['nonCachedSubst']) { // NON-CACHED:
2335 if (is_array($conf['marks.'])) {
2336 reset($conf['marks.']);
2337 while(list($theKey,$theValue)=each($conf['marks.'])) {
2338 if (!strstr($theKey,'.')) {
2339 $content = str_replace(
2341 $this->cObjGetSingle($theValue,$conf['marks.'][$theKey.'.'],'marks.'.$theKey),
2347 // Getting subparts.
2348 if (is_array($conf['subparts.'])) {
2349 reset($conf['subparts.']);
2350 while(list($theKey,$theValue)=each($conf['subparts.'])) {
2351 if (!strstr($theKey,'.')) {
2352 $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
2354 $this->setCurrentVal($subpart);
2355 $content = $this->substituteSubpart(
2358 $this->cObjGetSingle($theValue,$conf['subparts.'][$theKey.'.'],'subparts.'.$theKey),
2365 // Getting subpart wraps
2366 if (is_array($conf['wraps.'])) {
2367 reset($conf['wraps.']);
2368 while(list($theKey,$theValue)=each($conf['wraps.'])) {
2369 if (!strstr($theKey,'.')) {
2370 $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
2372 $this->setCurrentVal($subpart);
2373 $content = $this->substituteSubpart(
2376 explode('|',$this->cObjGetSingle($theValue,$conf['wraps.'][$theKey.'.'],'wraps.'.$theKey)),
2384 // Getting subparts.
2385 if (is_array($conf['subparts.'])) {
2386 reset($conf['subparts.']);
2387 while(list($theKey,$theValue)=each($conf['subparts.'])) {
2388 if (!strstr($theKey,'.')) {
2389 $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
2391 $GLOBALS['TSFE']->register
['SUBPART_'.$theKey] = $subpart;
2392 $subparts[$theKey]['name'] = $theValue;
2393 $subparts[$theKey]['conf'] = $conf['subparts.'][$theKey.'.'];
2399 if (is_array($conf['marks.'])) {
2400 reset($conf['marks.']);
2401 while(list($theKey,$theValue)=each($conf['marks.'])) {
2402 if (!strstr($theKey,'.')) {
2403 $marks[$theKey]['name'] = $theValue;
2404 $marks[$theKey]['conf'] = $conf['marks.'][$theKey.'.'];
2408 // Getting subpart wraps
2409 if (is_array($conf['wraps.'])) {
2410 reset($conf['wraps.']);
2411 while(list($theKey,$theValue)=each($conf['wraps.'])) {
2412 if (!strstr($theKey,'.')) {
2413 $wraps[$theKey]['name'] = $theValue;
2414 $wraps[$theKey]['conf'] = $conf['wraps.'][$theKey.'.'];
2419 $subpartArray =array();
2421 while(list($theKey,$theValue)=each($subparts)) {
2422 // Set current with the content of the subpart...
2423 $this->data
[$this->currentValKey
] = $GLOBALS['TSFE']->register
['SUBPART_'.$theKey];
2424 // Get subpart cObject and substitute it!
2425 $subpartArray[$PRE.$theKey.$POST] = $this->cObjGetSingle($theValue['name'],$theValue['conf'],'subparts.'.$theKey);
2427 $this->data
[$this->currentValKey
] = ''; // Reset current to empty
2430 $markerArray =array();
2432 while(list($theKey,$theValue)=each($marks)) {
2433 $markerArray[$PRE.$theKey.$POST] = $this->cObjGetSingle($theValue['name'],$theValue['conf'],'marks.'.$theKey);
2436 $subpartWraps =array();
2438 while(list($theKey,$theValue)=each($wraps)) {
2439 $subpartWraps[$PRE.$theKey.$POST] = explode('|',$this->cObjGetSingle($theValue['name'],$theValue['conf'],'wraps.'.$theKey));
2443 if ($conf['substMarksSeparately']) {
2444 $content = $this->substituteMarkerArrayCached($content,array(),$subpartArray,$subpartWraps);
2445 $content = $this->substituteMarkerArray($content, $markerArray);
2447 $content = $this->substituteMarkerArrayCached($content,$markerArray,$subpartArray,$subpartWraps);
2455 * Rendering the cObject, MULTIMEDIA
2457 * @param array Array of TypoScript properties
2458 * @return string Output
2459 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=374&cHash=efd88ab4a9
2461 function MULTIMEDIA($conf) {
2463 $filename=$this->stdWrap($conf['file'],$conf['file.']);
2464 $incFile = $GLOBALS['TSFE']->tmpl
->getFileName($filename);
2466 $fileinfo = t3lib_div
::split_fileref($incFile);
2467 if (t3lib_div
::inList('txt,html,htm',$fileinfo['fileext'])) {
2468 $content = $GLOBALS['TSFE']->tmpl
->fileContent($incFile);
2470 // default params...
2473 $parArray['src']='src="'.$GLOBALS['TSFE']->absRefPrefix
.$incFile.'"';
2474 if (t3lib_div
::inList('au,wav,mp3',$fileinfo['fileext'])) {
2476 if (t3lib_div
::inList('avi,mov,mpg,asf,wmv',$fileinfo['fileext'])) {
2477 $parArray['width'] = 'width="200"';
2478 $parArray['height'] = 'height="200"';
2480 if (t3lib_div
::inList('swf,swa,dcr',$fileinfo['fileext'])) {
2481 $parArray['quality'] = 'quality="high"';
2483 if (t3lib_div
::inList('class',$fileinfo['fileext'])) {
2484 $parArray['width'] = 'width="200"';
2485 $parArray['height'] = 'height="200"';
2489 $lines = explode(chr(10), $this->stdWrap($conf['params'],$conf['params.']));
2490 while(list(,$l)=each($lines)) {
2491 $parts = explode('=', $l);
2492 $parameter = strtolower(trim($parts[0]));
2493 $value = trim($parts[1]);
2494 if ((string)$value!='') {
2495 $parArray[$parameter] = $parameter.'="'.htmlspecialchars($value).'"';
2497 unset($parArray[$parameter]);
2500 if ($fileinfo['fileext']=='class') {
2501 unset($parArray['src']);
2502 $parArray['code'] = 'code="'.htmlspecialchars($fileinfo['file']).'"';
2503 $parArray['codebase'] = 'codebase="'.htmlspecialchars($fileinfo['path']).'"';