00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00132 class tslib_pibase {
00133
00134
00135 var $cObj;
00136 var $prefixId;
00137 var $scriptRelPath;
00138 var $extKey;
00139 var $piVars = Array (
00140 'pointer' => '',
00141 'mode' => '',
00142 'sword' => '',
00143 'sort' => '',
00144 );
00145 var $internal = Array(
00146 'res_count' => 0,
00147 'results_at_a_time' => 20,
00148 'maxPages' => 10,
00149 'currentRow' => Array(),
00150 'currentTable' => '',
00151 );
00152
00153 var $LOCAL_LANG = Array();
00154 var $LOCAL_LANG_charset = Array();
00155 var $LOCAL_LANG_loaded = 0;
00156 var $LLkey='default';
00157 var $altLLkey='';
00158 var $LLtestPrefix='';
00159 var $LLtestPrefixAlt='';
00160
00161 var $pi_isOnlyFields = 'mode,pointer';
00162 var $pi_alwaysPrev = 0;
00163 var $pi_lowerThan = 5;
00164 var $pi_moreParams='';
00165 var $pi_listFields='*';
00166
00167 var $pi_autoCacheFields=array();
00168 var $pi_autoCacheEn=0;
00169
00170 var $pi_USER_INT_obj = FALSE;
00171 var $pi_checkCHash = FALSE;
00172
00179 var $conf = Array();
00180
00181
00182 var $pi_EPtemp_cObj;
00183 var $pi_tmpPageId=0;
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00214 function tslib_pibase() {
00215
00216
00217 if ($this->prefixId) {
00218 $this->piVars = t3lib_div::GParrayMerged($this->prefixId);
00219
00220
00221
00222
00223 if ($this->pi_checkCHash && count($this->piVars)) {
00224 $GLOBALS['TSFE']->reqCHash();
00225 }
00226 }
00227 if ($GLOBALS['TSFE']->config['config']['language']) {
00228 $this->LLkey = $GLOBALS['TSFE']->config['config']['language'];
00229 if ($GLOBALS['TSFE']->config['config']['language_alt']) {
00230 $this->altLLkey = $GLOBALS['TSFE']->config['config']['language_alt'];
00231 }
00232 }
00233 }
00234
00240 function pi_setPiVarDefaults() {
00241 if (is_array($this->conf['_DEFAULT_PI_VARS.'])) {
00242 $this->piVars = t3lib_div::array_merge_recursive_overrule($this->conf['_DEFAULT_PI_VARS.'],is_array($this->piVars)?$this->piVars:array());
00243 }
00244 }
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00277 function pi_getPageLink($id,$target='',$urlParameters=array()) {
00278 return $this->cObj->getTypoLink_URL($id,$urlParameters,$target);
00279 }
00280
00293 function pi_linkToPage($str,$id,$target='',$urlParameters=array()) {
00294 return $this->cObj->getTypoLink($str,$id,$urlParameters,$target);
00295 }
00296
00308 function pi_linkTP($str,$urlParameters=array(),$cache=0,$altPageId=0) {
00309 $conf=array();
00310 $conf['useCacheHash'] = $this->pi_USER_INT_obj ? 0 : $cache;
00311 $conf['no_cache'] = $this->pi_USER_INT_obj ? 0 : !$cache;
00312 $conf['parameter'] = $altPageId ? $altPageId : ($this->pi_tmpPageId ? $this->pi_tmpPageId : $GLOBALS['TSFE']->id);
00313 $conf['additionalParams'] = $this->conf['parent.']['addParams'].t3lib_div::implodeArrayForUrl('',$urlParameters,'',1).$this->pi_moreParams;
00314
00315 return $this->cObj->typoLink($str, $conf);
00316 }
00317
00331 function pi_linkTP_keepPIvars($str,$overrulePIvars=array(),$cache=0,$clearAnyway=0,$altPageId=0) {
00332 if (is_array($this->piVars) && is_array($overrulePIvars) && !$clearAnyway) {
00333 $piVars = $this->piVars;
00334 unset($piVars['DATA']);
00335 $overrulePIvars = t3lib_div::array_merge_recursive_overrule($piVars,$overrulePIvars);
00336 if ($this->pi_autoCacheEn) {
00337 $cache = $this->pi_autoCache($overrulePIvars);
00338 }
00339 }
00340 $res = $this->pi_linkTP($str,Array($this->prefixId=>$overrulePIvars),$cache,$altPageId);
00341 return $res;
00342 }
00343
00355 function pi_linkTP_keepPIvars_url($overrulePIvars=array(),$cache=0,$clearAnyway=0,$altPageId=0) {
00356 $this->pi_linkTP_keepPIvars('|',$overrulePIvars,$cache,$clearAnyway,$altPageId);
00357 return $this->cObj->lastTypoLinkUrl;
00358 }
00359
00373 function pi_list_linkSingle($str,$uid,$cache=FALSE,$mergeArr=array(),$urlOnly=FALSE,$altPageId=0) {
00374 if ($this->prefixId) {
00375 if ($cache) {
00376 $overrulePIvars=$uid?array('showUid'=>$uid):Array();
00377 $overrulePIvars=array_merge($overrulePIvars,$mergeArr);
00378 $str = $this->pi_linkTP($str,Array($this->prefixId=>$overrulePIvars),$cache,$altPageId);
00379 } else {
00380 $overrulePIvars=array('showUid'=>$uid?$uid:'');
00381 $overrulePIvars=array_merge($overrulePIvars,$mergeArr);
00382 $str = $this->pi_linkTP_keepPIvars($str,$overrulePIvars,$cache,0,$altPageId);
00383 }
00384
00385
00386 if ($urlOnly) {
00387 $str = $this->cObj->lastTypoLinkUrl;
00388 }
00389 }
00390 return $str;
00391 }
00392
00401 function pi_openAtagHrefInJSwindow($str,$winName='',$winParams='width=670,height=500,status=0,menubar=0,scrollbars=1,resizable=1') {
00402 if (eregi('(.*)(<a[^>]*>)(.*)',$str,$match)) {
00403 $aTagContent = t3lib_div::get_tag_attributes($match[2]);
00404 $match[2]='<a href="#" onclick="'.
00405 htmlspecialchars('vHWin=window.open(\''.$GLOBALS['TSFE']->baseUrlWrap($aTagContent['href']).'\',\''.($winName?$winName:md5($aTagContent['href'])).'\',\''.$winParams.'\');vHWin.focus();return false;').
00406 '">';
00407 $str=$match[1].$match[2].$match[3];
00408 }
00409 return $str;
00410 }
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00455 function pi_list_browseresults($showResultCount=1,$tableParams='',$wrapArr=array(), $pointerName = 'pointer', $hscText = TRUE) {
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469 $pointer = intval($this->piVars[$pointerName]);
00470 $count = intval($this->internal['res_count']);
00471 $results_at_a_time = t3lib_div::intInRange($this->internal['results_at_a_time'],1,1000);
00472 $totalPages = ceil($count/$results_at_a_time);
00473 $maxPages = t3lib_div::intInRange($this->internal['maxPages'],1,100);
00474 $pi_isOnlyFields = $this->pi_isOnlyFields($this->pi_isOnlyFields);
00475
00476
00477
00478
00479
00480 $showResultCount = intval($showResultCount);
00481
00482
00483 $showFirstLast = $this->internal['showFirstLast'];
00484
00485
00486 $alwaysPrev = $showFirstLast?1:$this->pi_alwaysPrev;
00487
00488 if (isset($this->internal['pagefloat'])) {
00489 if (strtoupper($this->internal['pagefloat']) == 'CENTER') {
00490 $pagefloat = ceil(($maxPages - 1)/2);
00491 } else {
00492
00493 $pagefloat = t3lib_div::intInRange($this->internal['pagefloat'],-1,$maxPages-1);
00494 }
00495 } else {
00496 $pagefloat = -1;
00497 }
00498
00499
00500 $wrapper['disabledLinkWrap'] = '<td nowrap="nowrap"><p>|</p></td>';
00501 $wrapper['inactiveLinkWrap'] = '<td nowrap="nowrap"><p>|</p></td>';
00502 $wrapper['activeLinkWrap'] = '<td'.$this->pi_classParam('browsebox-SCell').' nowrap="nowrap"><p>|</p></td>';
00503 $wrapper['browseLinksWrap'] = trim('<table '.$tableParams).'><tr>|</tr></table>';
00504 $wrapper['showResultsWrap'] = '<p>|</p>';
00505 $wrapper['browseBoxWrap'] = '
00506 <!--
00507 List browsing box:
00508 -->
00509 <div '.$this->pi_classParam('browsebox').'>
00510 |
00511 </div>';
00512
00513
00514 $wrapper = array_merge($wrapper,$wrapArr);
00515
00516 if ($showResultCount != 2) {
00517 if ($pagefloat > -1) {
00518 $lastPage = min($totalPages,max($pointer+1 + $pagefloat,$maxPages));
00519 $firstPage = max(0,$lastPage-$maxPages);
00520 } else {
00521 $firstPage = 0;
00522 $lastPage = t3lib_div::intInRange($totalPages,1,$maxPages);
00523 }
00524 $links=array();
00525
00526
00527 if ($showFirstLast) {
00528 if ($pointer>0) {
00529 $links[]=$this->cObj->wrap($this->pi_linkTP_keepPIvars($this->pi_getLL('pi_list_browseresults_first','<< First',$hscText),array($pointerName => null),$pi_isOnlyFields),$wrapper['inactiveLinkWrap']);
00530 } else {
00531 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_first','<< First',$hscText),$wrapper['disabledLinkWrap']);
00532 }
00533 }
00534 if ($alwaysPrev>=0) {
00535 if ($pointer>0) {
00536 $links[]=$this->cObj->wrap($this->pi_linkTP_keepPIvars($this->pi_getLL('pi_list_browseresults_prev','< Previous',$hscText),array($pointerName => ($pointer-1?$pointer-1:'')),$pi_isOnlyFields),$wrapper['inactiveLinkWrap']);
00537 } elseif ($alwaysPrev) {
00538 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_prev','< Previous',$hscText),$wrapper['disabledLinkWrap']);
00539 }
00540 }
00541 for($a=$firstPage;$a<$lastPage;$a++) {
00542 if ($this->internal['showRange']) {
00543 $pageText = (($a*$results_at_a_time)+1).'-'.min($count,(($a+1)*$results_at_a_time));
00544 } else {
00545 $pageText = trim($this->pi_getLL('pi_list_browseresults_page','Page',$hscText).' '.($a+1));
00546 }
00547 if ($pointer == $a) {
00548 if ($this->internal['dontLinkActivePage']) {
00549 $links[] = $this->cObj->wrap($pageText,$wrapper['activeLinkWrap']);
00550 } else {
00551 $links[] = $this->cObj->wrap($this->pi_linkTP_keepPIvars($pageText,array($pointerName => ($a?$a:'')),$pi_isOnlyFields),$wrapper['activeLinkWrap']);
00552 }
00553 } else {
00554 $links[] = $this->cObj->wrap($this->pi_linkTP_keepPIvars($pageText,array($pointerName => ($a?$a:'')),$pi_isOnlyFields),$wrapper['inactiveLinkWrap']);
00555 }
00556 }
00557 if ($pointer<$totalPages-1 || $showFirstLast) {
00558 if ($pointer==$totalPages-1) {
00559 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_next','Next >',$hscText),$wrapper['disabledLinkWrap']);
00560 } else {
00561 $links[]=$this->cObj->wrap($this->pi_linkTP_keepPIvars($this->pi_getLL('pi_list_browseresults_next','Next >',$hscText),array($pointerName => $pointer+1),$pi_isOnlyFields),$wrapper['inactiveLinkWrap']);
00562 }
00563 }
00564 if ($showFirstLast) {
00565 if ($pointer<$totalPages-1) {
00566 $links[]=$this->cObj->wrap($this->pi_linkTP_keepPIvars($this->pi_getLL('pi_list_browseresults_last','Last >>',$hscText),array($pointerName => $totalPages-1),$pi_isOnlyFields),$wrapper['inactiveLinkWrap']);
00567 } else {
00568 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_last','Last >>',$hscText),$wrapper['disabledLinkWrap']);
00569 }
00570 }
00571 $theLinks = $this->cObj->wrap(implode(chr(10),$links),$wrapper['browseLinksWrap']);
00572 } else {
00573 $theLinks = '';
00574 }
00575
00576 $pR1 = $pointer*$results_at_a_time+1;
00577 $pR2 = $pointer*$results_at_a_time+$results_at_a_time;
00578
00579 if ($showResultCount) {
00580 if ($wrapper['showResultsNumbersWrap']) {
00581
00582
00583
00584 $markerArray['###FROM###'] = $this->cObj->wrap($this->internal['res_count'] > 0 ? $pR1 : 0,$wrapper['showResultsNumbersWrap']);
00585 $markerArray['###TO###'] = $this->cObj->wrap(min($this->internal['res_count'],$pR2),$wrapper['showResultsNumbersWrap']);
00586 $markerArray['###OUT_OF###'] = $this->cObj->wrap($this->internal['res_count'],$wrapper['showResultsNumbersWrap']);
00587 $markerArray['###FROM_TO###'] = $this->cObj->wrap(($this->internal['res_count'] > 0 ? $pR1 : 0).' '.$this->pi_getLL('pi_list_browseresults_to','to').' '.min($this->internal['res_count'],$pR2),$wrapper['showResultsNumbersWrap']);
00588 $markerArray['###CURRENT_PAGE###'] = $this->cObj->wrap($pointer+1,$wrapper['showResultsNumbersWrap']);
00589 $markerArray['###TOTAL_PAGES###'] = $this->cObj->wrap($totalPages,$wrapper['showResultsNumbersWrap']);
00590
00591 $resultCountMsg = $this->cObj->substituteMarkerArray($this->pi_getLL('pi_list_browseresults_displays','Displaying results ###FROM### to ###TO### out of ###OUT_OF###'),$markerArray);
00592 } else {
00593
00594 $resultCountMsg = sprintf(
00595 str_replace('###SPAN_BEGIN###','<span'.$this->pi_classParam('browsebox-strong').'>',$this->pi_getLL('pi_list_browseresults_displays','Displaying results ###SPAN_BEGIN###%s to %s</span> out of ###SPAN_BEGIN###%s</span>')),
00596 $count > 0 ? $pR1 : 0,
00597 min($count,$pR2),
00598 $count);
00599 }
00600 $resultCountMsg = $this->cObj->wrap($resultCountMsg,$wrapper['showResultsWrap']);
00601 } else {
00602 $resultCountMsg = '';
00603 }
00604
00605 $sTables = $this->cObj->wrap($resultCountMsg.$theLinks,$wrapper['browseBoxWrap']);
00606
00607 return $sTables;
00608 }
00609
00617 function pi_list_searchBox($tableParams='') {
00618
00619 $sTables = '
00620
00621 <!--
00622 List search box:
00623 -->
00624 <div'.$this->pi_classParam('searchbox').'>
00625 <form action="'.htmlspecialchars(t3lib_div::getIndpEnv('REQUEST_URI')).'" method="post" style="margin: 0 0 0 0;">
00626 <'.trim('table '.$tableParams).'>
00627 <tr>
00628 <td><input type="text" name="'.$this->prefixId.'[sword]" value="'.htmlspecialchars($this->piVars['sword']).'"'.$this->pi_classParam('searchbox-sword').' /></td>
00629 <td><input type="submit" value="'.$this->pi_getLL('pi_list_searchBox_search','Search',TRUE).'"'.$this->pi_classParam('searchbox-button').' />'.
00630 '<input type="hidden" name="no_cache" value="1" />'.
00631 '<input type="hidden" name="'.$this->prefixId.'[pointer]" value="" />'.
00632 '</td>
00633 </tr>
00634 </table>
00635 </form>
00636 </div>';
00637
00638 return $sTables;
00639 }
00640
00648 function pi_list_modeSelector($items=array(),$tableParams='') {
00649 $cells=array();
00650 reset($items);
00651 while(list($k,$v)=each($items)) {
00652 $cells[]='
00653 <td'.($this->piVars['mode']==$k?$this->pi_classParam('modeSelector-SCell'):'').'><p>'.
00654 $this->pi_linkTP_keepPIvars(htmlspecialchars($v),array('mode'=>$k),$this->pi_isOnlyFields($this->pi_isOnlyFields)).
00655 '</p></td>';
00656 }
00657
00658 $sTables = '
00659
00660 <!--
00661 Mode selector (menu for list):
00662 -->
00663 <div'.$this->pi_classParam('modeSelector').'>
00664 <'.trim('table '.$tableParams).'>
00665 <tr>
00666 '.implode('',$cells).'
00667 </tr>
00668 </table>
00669 </div>';
00670
00671 return $sTables;
00672 }
00673
00686 function pi_list_makelist($res,$tableParams='') {
00687
00688 $tRows=array();
00689 $this->internal['currentRow']='';
00690 $tRows[] = $this->pi_list_header();
00691
00692
00693 $c=0;
00694 while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00695 $tRows[] = $this->pi_list_row($c);
00696 $c++;
00697 }
00698
00699 $out = '
00700
00701 <!--
00702 Record list:
00703 -->
00704 <div'.$this->pi_classParam('listrow').'>
00705 <'.trim('table '.$tableParams).'>
00706 '.implode('',$tRows).'
00707 </table>
00708 </div>';
00709
00710 return $out;
00711 }
00712
00721 function pi_list_row($c) {
00722
00723 return '<tr'.($c%2 ? $this->pi_classParam('listrow-odd') : '').'><td><p>[dummy row]</p></td></tr>';
00724 }
00725
00733 function pi_list_header() {
00734 return '<tr'.$this->pi_classParam('listrow-header').'><td><p>[dummy header row]</p></td></tr>';
00735 }
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00764 function pi_getClassName($class) {
00765 return str_replace('_','-',$this->prefixId).($this->prefixId?'-':'').$class;
00766 }
00767
00776 function pi_classParam($class) {
00777 return ' class="'.$this->pi_getClassName($class).'"';
00778 }
00779
00790 function pi_setClassStyle($class,$data,$selector='') {
00791 $GLOBALS['TSFE']->setCSS($this->pi_getClassName($class).($selector?' '.$selector:''),'.'.$this->pi_getClassName($class).($selector?' '.$selector:'').' {'.$data.'}');
00792 }
00793
00801 function pi_wrapInBaseClass($str) {
00802 return '
00803
00804
00805 <!--
00806
00807 BEGIN: Content of extension "'.$this->extKey.'", plugin "'.$this->prefixId.'"
00808
00809 -->
00810 <div class="'.str_replace('_','-',$this->prefixId).'">
00811 '.$str.'
00812 </div>
00813 <!-- END: Content of extension "'.$this->extKey.'", plugin "'.$this->prefixId.'" -->
00814
00815 ';
00816 }
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00850 function pi_getEditPanel($row='',$tablename='',$label='',$conf=Array()) {
00851 $panel='';
00852 if (!$row || !$tablename) {
00853 $row = $this->internal['currentRow'];
00854 $tablename = $this->internal['currentTable'];
00855 }
00856
00857 if ($GLOBALS['TSFE']->beUserLogin) {
00858
00859 if (!is_object($this->pi_EPtemp_cObj)) {
00860 $this->pi_EPtemp_cObj = t3lib_div::makeInstance('tslib_cObj');
00861 $this->pi_EPtemp_cObj->setParent($this->cObj->data,$this->cObj->currentRecord);
00862 }
00863
00864
00865 $this->pi_EPtemp_cObj->start($row,$tablename);
00866
00867
00868 $conf['allow'] = 'edit,new,delete,move,hide';
00869 $panel = $this->pi_EPtemp_cObj->cObjGetSingle('EDITPANEL',$conf,'editpanel');
00870 }
00871
00872 if ($panel) {
00873 if ($label) {
00874 return '<!-- BEGIN: EDIT PANEL --><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td valign="top">'.$label.'</td><td valign="top" align="right">'.$panel.'</td></tr></table><!-- END: EDIT PANEL -->';
00875 } else return '<!-- BEGIN: EDIT PANEL -->'.$panel.'<!-- END: EDIT PANEL -->';
00876 } else return $label;
00877 }
00878
00892 function pi_getEditIcon($content,$fields,$title='',$row='',$tablename='',$oConf=array()) {
00893 if ($GLOBALS['TSFE']->beUserLogin){
00894 if (!$row || !$tablename) {
00895 $row = $this->internal['currentRow'];
00896 $tablename = $this->internal['currentTable'];
00897 }
00898 $conf=array_merge(array(
00899 'beforeLastTag'=>1,
00900 'iconTitle' => $title
00901 ),$oConf);
00902 $content=$this->cObj->editIcons($content,$tablename.':'.$fields,$conf,$tablename.':'.$row['uid'],$row,'&viewUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI')));
00903 }
00904 return $content;
00905 }
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00939 function pi_getLL($key,$alt='',$hsc=FALSE) {
00940 if (isset($this->LOCAL_LANG[$this->LLkey][$key])) {
00941 $word = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->LLkey][$key], $this->LOCAL_LANG_charset[$this->LLkey][$key]);
00942 } elseif ($this->altLLkey && isset($this->LOCAL_LANG[$this->altLLkey][$key])) {
00943 $word = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->altLLkey][$key], $this->LOCAL_LANG_charset[$this->altLLkey][$key]);
00944 } elseif (isset($this->LOCAL_LANG['default'][$key])) {
00945 $word = $this->LOCAL_LANG['default'][$key];
00946 } else {
00947 $word = $this->LLtestPrefixAlt.$alt;
00948 }
00949
00950 $output = $this->LLtestPrefix.$word;
00951 if ($hsc) $output = htmlspecialchars($output);
00952
00953 return $output;
00954 }
00955
00962 function pi_loadLL() {
00963 if (!$this->LOCAL_LANG_loaded && $this->scriptRelPath) {
00964 $basePath = t3lib_extMgm::extPath($this->extKey).dirname($this->scriptRelPath).'/locallang.php';
00965
00966
00967
00968 $this->LOCAL_LANG = t3lib_div::readLLfile($basePath,$this->LLkey);
00969 if ($this->altLLkey) {
00970 $tempLOCAL_LANG = t3lib_div::readLLfile($basePath,$this->altLLkey);
00971 $this->LOCAL_LANG = array_merge(is_array($this->LOCAL_LANG) ? $this->LOCAL_LANG : array(),$tempLOCAL_LANG);
00972 }
00973
00974
00975 if (is_array($this->conf['_LOCAL_LANG.'])) {
00976 reset($this->conf['_LOCAL_LANG.']);
00977 while(list($k,$lA)=each($this->conf['_LOCAL_LANG.'])) {
00978 if (is_array($lA)) {
00979 $k = substr($k,0,-1);
00980 foreach($lA as $llK => $llV) {
00981 if (!is_array($llV)) {
00982 $this->LOCAL_LANG[$k][$llK] = $llV;
00983 if ($k != 'default') {
00984 $this->LOCAL_LANG_charset[$k][$llK] = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'];
00985 }
00986 }
00987 }
00988 }
00989 }
00990 }
00991 }
00992 $this->LOCAL_LANG_loaded = 1;
00993 }
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01040 function pi_list_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='',$returnQueryArray=FALSE) {
01041
01042
01043 if (!$query) {
01044
01045
01046
01047 $pidList = $this->pi_getPidList($this->conf['pidList'],$this->conf['recursive']);
01048 if (is_array($mm_cat)) {
01049 $query='FROM '.$table.','.$mm_cat['table'].','.$mm_cat['mmtable'].chr(10).
01050 ' WHERE '.$table.'.uid='.$mm_cat['mmtable'].'.uid_local AND '.$mm_cat['table'].'.uid='.$mm_cat['mmtable'].'.uid_foreign '.chr(10).
01051 (strcmp($mm_cat['catUidList'],'')?' AND '.$mm_cat['table'].'.uid IN ('.$mm_cat['catUidList'].')':'').chr(10).
01052 ' AND '.$table.'.pid IN ('.$pidList.')'.chr(10).
01053 $this->cObj->enableFields($table).chr(10);
01054 } else {
01055 $query='FROM '.$table.' WHERE pid IN ('.$pidList.')'.chr(10).
01056 $this->cObj->enableFields($table).chr(10);
01057 }
01058 }
01059
01060
01061 list($TABLENAMES,$WHERE) = spliti('WHERE', trim($query), 2);
01062 $TABLENAMES = trim(substr(trim($TABLENAMES),5));
01063 $WHERE = trim($WHERE);
01064
01065
01066 if ($addWhere) {$WHERE.=' '.$addWhere.chr(10);}
01067
01068
01069 if ($this->piVars['sword'] && $this->internal['searchFieldList']) {
01070 $WHERE.=$this->cObj->searchWhere($this->piVars['sword'],$this->internal['searchFieldList'],$table).chr(10);
01071 }
01072
01073 if ($count) {
01074 $queryParts = array(
01075 'SELECT' => 'count(*)',
01076 'FROM' => $TABLENAMES,
01077 'WHERE' => $WHERE,
01078 'GROUPBY' => '',
01079 'ORDERBY' => '',
01080 'LIMIT' => ''
01081 );
01082 } else {
01083
01084 if (!$orderBy && $this->internal['orderBy']) {
01085 if (t3lib_div::inList($this->internal['orderByList'],$this->internal['orderBy'])) {
01086 $orderBy = 'ORDER BY '.$table.'.'.$this->internal['orderBy'].($this->internal['descFlag']?' DESC':'');
01087 }
01088 }
01089
01090
01091 $pointer = $this->piVars['pointer'];
01092 $pointer = intval($pointer);
01093 $results_at_a_time = t3lib_div::intInRange($this->internal['results_at_a_time'],1,1000);
01094 $LIMIT = ($pointer*$results_at_a_time).','.$results_at_a_time;
01095
01096
01097 $queryParts = array(
01098 'SELECT' => $this->pi_prependFieldsWithTable($table,$this->pi_listFields),
01099 'FROM' => $TABLENAMES,
01100 'WHERE' => $WHERE,
01101 'GROUPBY' => $GLOBALS['TYPO3_DB']->stripGroupBy($groupBy),
01102 'ORDERBY' => $GLOBALS['TYPO3_DB']->stripOrderBy($orderBy),
01103 'LIMIT' => $LIMIT
01104 );
01105 }
01106
01107 $query = $GLOBALS['TYPO3_DB']->SELECTquery (
01108 $queryParts['SELECT'],
01109 $queryParts['FROM'],
01110 $queryParts['WHERE'],
01111 $queryParts['GROUPBY'],
01112 $queryParts['ORDERBY'],
01113 $queryParts['LIMIT']
01114 );
01115 return $returnQueryArray ? $queryParts : $query;
01116 }
01117
01132 function pi_exec_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='') {
01133 $queryParts = $this->pi_list_query($table,$count,$addWhere,$mm_cat,$groupBy,$orderBy,$query, TRUE);
01134
01135 return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
01136 }
01137
01147 function pi_getRecord($table,$uid,$checkPage=0) {
01148 return $GLOBALS['TSFE']->sys_page->checkRecord($table,$uid,$checkPage);
01149 }
01150
01158 function pi_getPidList($pid_list,$recursive=0) {
01159 if (!strcmp($pid_list,'')) $pid_list = $GLOBALS['TSFE']->id;
01160 $recursive = t3lib_div::intInRange($recursive,0);
01161
01162 $pid_list_arr = array_unique(t3lib_div::trimExplode(',',$pid_list,1));
01163 $pid_list = array();
01164
01165 foreach($pid_list_arr as $val) {
01166 $val = t3lib_div::intInRange($val,0);
01167 if ($val) {
01168 $_list = $this->cObj->getTreeList(-1*$val, $recursive);
01169 if ($_list) $pid_list[] = $_list;
01170 }
01171 }
01172
01173 return implode(',', $pid_list);
01174 }
01175
01183 function pi_prependFieldsWithTable($table,$fieldList) {
01184 $list=t3lib_div::trimExplode(',',$fieldList,1);
01185 $return=array();
01186 while(list(,$listItem)=each($list)) {
01187 $return[]=$table.'.'.$listItem;
01188 }
01189 return implode(',',$return);
01190 }
01191
01203 function pi_getCategoryTableContents($table,$pid,$whereClause='',$groupBy='',$orderBy='',$limit='') {
01204 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
01205 '*',
01206 $table,
01207 'pid='.intval($pid).
01208 $this->cObj->enableFields($table).' '.
01209 $whereClause,
01210 $groupBy,
01211 $orderBy,
01212 $limit
01213 );
01214 $outArr = array();
01215 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01216 $outArr[$row['uid']] = $row;
01217 }
01218 $GLOBALS['TYPO3_DB']->sql_free_result($res);
01219 return $outArr;
01220 }
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01247 function pi_isOnlyFields($fList,$lowerThan=-1) {
01248 $lowerThan = $lowerThan==-1 ? $this->pi_lowerThan : $lowerThan;
01249
01250 $fList = t3lib_div::trimExplode(',',$fList,1);
01251 $tempPiVars = $this->piVars;
01252 while(list(,$k)=each($fList)) {
01253 if (!t3lib_div::testInt($tempPiVars[$k]) || $tempPiVars[$k]<$lowerThan) unset($tempPiVars[$k]);
01254 }
01255 if (!count($tempPiVars)) return 1;
01256 }
01257
01267 function pi_autoCache($inArray) {
01268 if (is_array($inArray)) {
01269 reset($inArray);
01270 while(list($fN,$fV)=each($inArray)) {
01271 if (!strcmp($inArray[$fN],'')) {
01272 unset($inArray[$fN]);
01273 } elseif (is_array($this->pi_autoCacheFields[$fN])) {
01274 if (is_array($this->pi_autoCacheFields[$fN]['range'])
01275 && intval($inArray[$fN])>=intval($this->pi_autoCacheFields[$fN]['range'][0])
01276 && intval($inArray[$fN])<=intval($this->pi_autoCacheFields[$fN]['range'][1])) {
01277 unset($inArray[$fN]);
01278 }
01279 if (is_array($this->pi_autoCacheFields[$fN]['list'])
01280 && in_array($inArray[$fN],$this->pi_autoCacheFields[$fN]['list'])) {
01281 unset($inArray[$fN]);
01282 }
01283 }
01284 }
01285 }
01286 if (!count($inArray)) return 1;
01287 }
01288
01298 function pi_RTEcssText($str) {
01299 $parseFunc = $GLOBALS['TSFE']->tmpl->setup['lib.']['parseFunc_RTE.'];
01300 if (is_array($parseFunc)) $str = $this->cObj->parseFunc($str, $parseFunc);
01301 return $str;
01302 }
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01319 function pi_initPIflexForm() {
01320
01321 if (!is_array($this->cObj->data['pi_flexform']) && $this->cObj->data['pi_flexform']) {
01322 $this->cObj->data['pi_flexform'] = t3lib_div::xml2array($this->cObj->data['pi_flexform']);
01323 if (!is_array($this->cObj->data['pi_flexform'])) $this->cObj->data['pi_flexform']=array();
01324 }
01325 }
01326
01337 function pi_getFFvalue($T3FlexForm_array,$fieldName,$sheet='sDEF',$lang='lDEF',$value='vDEF') {
01338 $sheetArray = is_array($T3FlexForm_array) ? $T3FlexForm_array['data'][$sheet][$lang] : '';
01339 if (is_array($sheetArray)) {
01340 return $this->pi_getFFvalueFromSheetArray($sheetArray,explode('/',$fieldName),$value);
01341 }
01342 }
01343
01354 function pi_getFFvalueFromSheetArray($sheetArray,$fieldNameArr,$value) {
01355
01356 $tempArr=$sheetArray;
01357 foreach($fieldNameArr as $k => $v) {
01358 if (t3lib_div::testInt($v)) {
01359 if (is_array($tempArr)) {
01360 $c=0;
01361 foreach($tempArr as $values) {
01362 if ($c==$v) {
01363 #debug($values);
01364 $tempArr=$values;
01365 break;
01366 }
01367 $c++;
01368 }
01369 }
01370 } else {
01371 $tempArr = $tempArr[$v];
01372 }
01373 }
01374 return $tempArr[$value];
01375 }
01376 }
01377
01378
01379 ?>