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,(array)$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,(array)$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
00456 function pi_list_browseresults($showResultCount=1,$tableParams='',$wrapArr=array(), $pointerName = 'pointer', $hscText = TRUE) {
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470 $pointer = intval($this->piVars[$pointerName]);
00471 $count = intval($this->internal['res_count']);
00472 $results_at_a_time = t3lib_div::intInRange($this->internal['results_at_a_time'],1,1000);
00473 $totalPages = ceil($count/$results_at_a_time);
00474 $maxPages = t3lib_div::intInRange($this->internal['maxPages'],1,100);
00475 $pi_isOnlyFields = $this->pi_isOnlyFields($this->pi_isOnlyFields);
00476
00477
00478
00479
00480
00481 $showResultCount = intval($showResultCount);
00482
00483
00484 $showFirstLast = $this->internal['showFirstLast'];
00485
00486
00487 $alwaysPrev = $showFirstLast?1:$this->pi_alwaysPrev;
00488
00489 if (isset($this->internal['pagefloat'])) {
00490 if (strtoupper($this->internal['pagefloat']) == 'CENTER') {
00491 $pagefloat = ceil(($maxPages - 1)/2);
00492 } else {
00493
00494 $pagefloat = t3lib_div::intInRange($this->internal['pagefloat'],-1,$maxPages-1);
00495 }
00496 } else {
00497 $pagefloat = -1;
00498 }
00499
00500
00501 $wrapper['disabledLinkWrap'] = '<td nowrap="nowrap"><p>|</p></td>';
00502 $wrapper['inactiveLinkWrap'] = '<td nowrap="nowrap"><p>|</p></td>';
00503 $wrapper['activeLinkWrap'] = '<td'.$this->pi_classParam('browsebox-SCell').' nowrap="nowrap"><p>|</p></td>';
00504 $wrapper['browseLinksWrap'] = trim('<table '.$tableParams).'><tr>|</tr></table>';
00505 $wrapper['showResultsWrap'] = '<p>|</p>';
00506 $wrapper['browseBoxWrap'] = '
00507 <!--
00508 List browsing box:
00509 -->
00510 <div '.$this->pi_classParam('browsebox').'>
00511 |
00512 </div>';
00513
00514
00515 $wrapper = array_merge($wrapper,$wrapArr);
00516
00517 if ($showResultCount != 2) {
00518 if ($pagefloat > -1) {
00519 $lastPage = min($totalPages,max($pointer+1 + $pagefloat,$maxPages));
00520 $firstPage = max(0,$lastPage-$maxPages);
00521 } else {
00522 $firstPage = 0;
00523 $lastPage = t3lib_div::intInRange($totalPages,1,$maxPages);
00524 }
00525 $links=array();
00526
00527
00528 if ($showFirstLast) {
00529 if ($pointer>0) {
00530 $links[]=$this->cObj->wrap($this->pi_linkTP_keepPIvars($this->pi_getLL('pi_list_browseresults_first','<< First',$hscText),array($pointerName => null),$pi_isOnlyFields),$wrapper['inactiveLinkWrap']);
00531 } else {
00532 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_first','<< First',$hscText),$wrapper['disabledLinkWrap']);
00533 }
00534 }
00535 if ($alwaysPrev>=0) {
00536 if ($pointer>0) {
00537 $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']);
00538 } elseif ($alwaysPrev) {
00539 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_prev','< Previous',$hscText),$wrapper['disabledLinkWrap']);
00540 }
00541 }
00542 for($a=$firstPage;$a<$lastPage;$a++) {
00543 if ($this->internal['showRange']) {
00544 $pageText = (($a*$results_at_a_time)+1).'-'.min($count,(($a+1)*$results_at_a_time));
00545 } else {
00546 $pageText = trim($this->pi_getLL('pi_list_browseresults_page','Page',$hscText).' '.($a+1));
00547 }
00548 if ($pointer == $a) {
00549 if ($this->internal['dontLinkActivePage']) {
00550 $links[] = $this->cObj->wrap($pageText,$wrapper['activeLinkWrap']);
00551 } else {
00552 $links[] = $this->cObj->wrap($this->pi_linkTP_keepPIvars($pageText,array($pointerName => ($a?$a:'')),$pi_isOnlyFields),$wrapper['activeLinkWrap']);
00553 }
00554 } else {
00555 $links[] = $this->cObj->wrap($this->pi_linkTP_keepPIvars($pageText,array($pointerName => ($a?$a:'')),$pi_isOnlyFields),$wrapper['inactiveLinkWrap']);
00556 }
00557 }
00558 if ($pointer<$totalPages-1 || $showFirstLast) {
00559 if ($pointer==$totalPages-1) {
00560 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_next','Next >',$hscText),$wrapper['disabledLinkWrap']);
00561 } else {
00562 $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']);
00563 }
00564 }
00565 if ($showFirstLast) {
00566 if ($pointer<$totalPages-1) {
00567 $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']);
00568 } else {
00569 $links[]=$this->cObj->wrap($this->pi_getLL('pi_list_browseresults_last','Last >>',$hscText),$wrapper['disabledLinkWrap']);
00570 }
00571 }
00572 $theLinks = $this->cObj->wrap(implode(chr(10),$links),$wrapper['browseLinksWrap']);
00573 } else {
00574 $theLinks = '';
00575 }
00576
00577 $pR1 = $pointer*$results_at_a_time+1;
00578 $pR2 = $pointer*$results_at_a_time+$results_at_a_time;
00579
00580 if ($showResultCount) {
00581 if ($wrapper['showResultsNumbersWrap']) {
00582
00583
00584
00585 $markerArray['###FROM###'] = $this->cObj->wrap($this->internal['res_count'] > 0 ? $pR1 : 0,$wrapper['showResultsNumbersWrap']);
00586 $markerArray['###TO###'] = $this->cObj->wrap(min($this->internal['res_count'],$pR2),$wrapper['showResultsNumbersWrap']);
00587 $markerArray['###OUT_OF###'] = $this->cObj->wrap($this->internal['res_count'],$wrapper['showResultsNumbersWrap']);
00588 $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']);
00589 $markerArray['###CURRENT_PAGE###'] = $this->cObj->wrap($pointer+1,$wrapper['showResultsNumbersWrap']);
00590 $markerArray['###TOTAL_PAGES###'] = $this->cObj->wrap($totalPages,$wrapper['showResultsNumbersWrap']);
00591
00592 $resultCountMsg = $this->cObj->substituteMarkerArray($this->pi_getLL('pi_list_browseresults_displays','Displaying results ###FROM### to ###TO### out of ###OUT_OF###'),$markerArray);
00593 } else {
00594
00595 $resultCountMsg = sprintf(
00596 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>')),
00597 $count > 0 ? $pR1 : 0,
00598 min($count,$pR2),
00599 $count);
00600 }
00601 $resultCountMsg = $this->cObj->wrap($resultCountMsg,$wrapper['showResultsWrap']);
00602 } else {
00603 $resultCountMsg = '';
00604 }
00605
00606 $sTables = $this->cObj->wrap($resultCountMsg.$theLinks,$wrapper['browseBoxWrap']);
00607
00608 return $sTables;
00609 }
00610
00618 function pi_list_searchBox($tableParams='') {
00619
00620 $sTables = '
00621
00622 <!--
00623 List search box:
00624 -->
00625 <div'.$this->pi_classParam('searchbox').'>
00626 <form action="'.htmlspecialchars(t3lib_div::getIndpEnv('REQUEST_URI')).'" method="post" style="margin: 0 0 0 0;">
00627 <'.trim('table '.$tableParams).'>
00628 <tr>
00629 <td><input type="text" name="'.$this->prefixId.'[sword]" value="'.htmlspecialchars($this->piVars['sword']).'"'.$this->pi_classParam('searchbox-sword').' /></td>
00630 <td><input type="submit" value="'.$this->pi_getLL('pi_list_searchBox_search','Search',TRUE).'"'.$this->pi_classParam('searchbox-button').' />'.
00631 '<input type="hidden" name="no_cache" value="1" />'.
00632 '<input type="hidden" name="'.$this->prefixId.'[pointer]" value="" />'.
00633 '</td>
00634 </tr>
00635 </table>
00636 </form>
00637 </div>';
00638
00639 return $sTables;
00640 }
00641
00649 function pi_list_modeSelector($items=array(),$tableParams='') {
00650 $cells=array();
00651 reset($items);
00652 while(list($k,$v)=each($items)) {
00653 $cells[]='
00654 <td'.($this->piVars['mode']==$k?$this->pi_classParam('modeSelector-SCell'):'').'><p>'.
00655 $this->pi_linkTP_keepPIvars(htmlspecialchars($v),array('mode'=>$k),$this->pi_isOnlyFields($this->pi_isOnlyFields)).
00656 '</p></td>';
00657 }
00658
00659 $sTables = '
00660
00661 <!--
00662 Mode selector (menu for list):
00663 -->
00664 <div'.$this->pi_classParam('modeSelector').'>
00665 <'.trim('table '.$tableParams).'>
00666 <tr>
00667 '.implode('',$cells).'
00668 </tr>
00669 </table>
00670 </div>';
00671
00672 return $sTables;
00673 }
00674
00687 function pi_list_makelist($res,$tableParams='') {
00688
00689 $tRows=array();
00690 $this->internal['currentRow']='';
00691 $tRows[] = $this->pi_list_header();
00692
00693
00694 $c=0;
00695 while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00696 $tRows[] = $this->pi_list_row($c);
00697 $c++;
00698 }
00699
00700 $out = '
00701
00702 <!--
00703 Record list:
00704 -->
00705 <div'.$this->pi_classParam('listrow').'>
00706 <'.trim('table '.$tableParams).'>
00707 '.implode('',$tRows).'
00708 </table>
00709 </div>';
00710
00711 return $out;
00712 }
00713
00722 function pi_list_row($c) {
00723
00724 return '<tr'.($c%2 ? $this->pi_classParam('listrow-odd') : '').'><td><p>[dummy row]</p></td></tr>';
00725 }
00726
00734 function pi_list_header() {
00735 return '<tr'.$this->pi_classParam('listrow-header').'><td><p>[dummy header row]</p></td></tr>';
00736 }
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00765 function pi_getClassName($class) {
00766 return str_replace('_','-',$this->prefixId).($this->prefixId?'-':'').$class;
00767 }
00768
00777 function pi_classParam($class) {
00778 return ' class="'.$this->pi_getClassName($class).'"';
00779 }
00780
00791 function pi_setClassStyle($class,$data,$selector='') {
00792 $GLOBALS['TSFE']->setCSS($this->pi_getClassName($class).($selector?' '.$selector:''),'.'.$this->pi_getClassName($class).($selector?' '.$selector:'').' {'.$data.'}');
00793 }
00794
00802 function pi_wrapInBaseClass($str) {
00803 $content = '<div class="'.str_replace('_','-',$this->prefixId).'">
00804 '.$str.'
00805 </div>
00806 ';
00807
00808 if(!$GLOBALS['TSFE']->config['config']['disablePrefixComment']) {
00809 $content = '
00810
00811
00812 <!--
00813
00814 BEGIN: Content of extension "'.$this->extKey.'", plugin "'.$this->prefixId.'"
00815
00816 -->
00817 '.$content.'
00818 <!-- END: Content of extension "'.$this->extKey.'", plugin "'.$this->prefixId.'" -->
00819
00820 ';
00821 }
00822
00823 return $content;
00824 }
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00858 function pi_getEditPanel($row='',$tablename='',$label='',$conf=Array()) {
00859 $panel='';
00860 if (!$row || !$tablename) {
00861 $row = $this->internal['currentRow'];
00862 $tablename = $this->internal['currentTable'];
00863 }
00864
00865 if ($GLOBALS['TSFE']->beUserLogin) {
00866
00867 if (!is_object($this->pi_EPtemp_cObj)) {
00868 $this->pi_EPtemp_cObj = t3lib_div::makeInstance('tslib_cObj');
00869 $this->pi_EPtemp_cObj->setParent($this->cObj->data,$this->cObj->currentRecord);
00870 }
00871
00872
00873 $this->pi_EPtemp_cObj->start($row,$tablename);
00874
00875
00876 $conf['allow'] = 'edit,new,delete,move,hide';
00877 $panel = $this->pi_EPtemp_cObj->cObjGetSingle('EDITPANEL',$conf,'editpanel');
00878 }
00879
00880 if ($panel) {
00881 if ($label) {
00882 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 -->';
00883 } else return '<!-- BEGIN: EDIT PANEL -->'.$panel.'<!-- END: EDIT PANEL -->';
00884 } else return $label;
00885 }
00886
00900 function pi_getEditIcon($content,$fields,$title='',$row='',$tablename='',$oConf=array()) {
00901 if ($GLOBALS['TSFE']->beUserLogin){
00902 if (!$row || !$tablename) {
00903 $row = $this->internal['currentRow'];
00904 $tablename = $this->internal['currentTable'];
00905 }
00906 $conf=array_merge(array(
00907 'beforeLastTag'=>1,
00908 'iconTitle' => $title
00909 ),$oConf);
00910 $content=$this->cObj->editIcons($content,$tablename.':'.$fields,$conf,$tablename.':'.$row['uid'],$row,'&viewUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI')));
00911 }
00912 return $content;
00913 }
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933
00934
00935
00936
00937
00947 function pi_getLL($key,$alt='',$hsc=FALSE) {
00948 if (isset($this->LOCAL_LANG[$this->LLkey][$key])) {
00949 $word = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->LLkey][$key], $this->LOCAL_LANG_charset[$this->LLkey][$key]);
00950 } elseif ($this->altLLkey && isset($this->LOCAL_LANG[$this->altLLkey][$key])) {
00951 $word = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->altLLkey][$key], $this->LOCAL_LANG_charset[$this->altLLkey][$key]);
00952 } elseif (isset($this->LOCAL_LANG['default'][$key])) {
00953 $word = $this->LOCAL_LANG['default'][$key];
00954 } else {
00955 $word = $this->LLtestPrefixAlt.$alt;
00956 }
00957
00958 $output = $this->LLtestPrefix.$word;
00959 if ($hsc) $output = htmlspecialchars($output);
00960
00961 return $output;
00962 }
00963
00970 function pi_loadLL() {
00971 if (!$this->LOCAL_LANG_loaded && $this->scriptRelPath) {
00972 $basePath = t3lib_extMgm::extPath($this->extKey).dirname($this->scriptRelPath).'/locallang.php';
00973
00974
00975
00976 $this->LOCAL_LANG = t3lib_div::readLLfile($basePath,$this->LLkey);
00977 if ($this->altLLkey) {
00978 $tempLOCAL_LANG = t3lib_div::readLLfile($basePath,$this->altLLkey);
00979 $this->LOCAL_LANG = array_merge(is_array($this->LOCAL_LANG) ? $this->LOCAL_LANG : array(),$tempLOCAL_LANG);
00980 }
00981
00982
00983 if (is_array($this->conf['_LOCAL_LANG.'])) {
00984 reset($this->conf['_LOCAL_LANG.']);
00985 while(list($k,$lA)=each($this->conf['_LOCAL_LANG.'])) {
00986 if (is_array($lA)) {
00987 $k = substr($k,0,-1);
00988 foreach($lA as $llK => $llV) {
00989 if (!is_array($llV)) {
00990 $this->LOCAL_LANG[$k][$llK] = $llV;
00991 if ($k != 'default') {
00992 $this->LOCAL_LANG_charset[$k][$llK] = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'];
00993 }
00994 }
00995 }
00996 }
00997 }
00998 }
00999 }
01000 $this->LOCAL_LANG_loaded = 1;
01001 }
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01048 function pi_list_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='',$returnQueryArray=FALSE) {
01049
01050
01051 if (!$query) {
01052
01053
01054
01055 $pidList = $this->pi_getPidList($this->conf['pidList'],$this->conf['recursive']);
01056 if (is_array($mm_cat)) {
01057 $query='FROM '.$table.','.$mm_cat['table'].','.$mm_cat['mmtable'].chr(10).
01058 ' WHERE '.$table.'.uid='.$mm_cat['mmtable'].'.uid_local AND '.$mm_cat['table'].'.uid='.$mm_cat['mmtable'].'.uid_foreign '.chr(10).
01059 (strcmp($mm_cat['catUidList'],'')?' AND '.$mm_cat['table'].'.uid IN ('.$mm_cat['catUidList'].')':'').chr(10).
01060 ' AND '.$table.'.pid IN ('.$pidList.')'.chr(10).
01061 $this->cObj->enableFields($table).chr(10);
01062 } else {
01063 $query='FROM '.$table.' WHERE pid IN ('.$pidList.')'.chr(10).
01064 $this->cObj->enableFields($table).chr(10);
01065 }
01066 }
01067
01068
01069 list($TABLENAMES,$WHERE) = spliti('WHERE', trim($query), 2);
01070 $TABLENAMES = trim(substr(trim($TABLENAMES),5));
01071 $WHERE = trim($WHERE);
01072
01073
01074 if ($addWhere) {$WHERE.=' '.$addWhere.chr(10);}
01075
01076
01077 if ($this->piVars['sword'] && $this->internal['searchFieldList']) {
01078 $WHERE.=$this->cObj->searchWhere($this->piVars['sword'],$this->internal['searchFieldList'],$table).chr(10);
01079 }
01080
01081 if ($count) {
01082 $queryParts = array(
01083 'SELECT' => 'count(*)',
01084 'FROM' => $TABLENAMES,
01085 'WHERE' => $WHERE,
01086 'GROUPBY' => '',
01087 'ORDERBY' => '',
01088 'LIMIT' => ''
01089 );
01090 } else {
01091
01092 if (!$orderBy && $this->internal['orderBy']) {
01093 if (t3lib_div::inList($this->internal['orderByList'],$this->internal['orderBy'])) {
01094 $orderBy = 'ORDER BY '.$table.'.'.$this->internal['orderBy'].($this->internal['descFlag']?' DESC':'');
01095 }
01096 }
01097
01098
01099 $pointer = $this->piVars['pointer'];
01100 $pointer = intval($pointer);
01101 $results_at_a_time = t3lib_div::intInRange($this->internal['results_at_a_time'],1,1000);
01102 $LIMIT = ($pointer*$results_at_a_time).','.$results_at_a_time;
01103
01104
01105 $queryParts = array(
01106 'SELECT' => $this->pi_prependFieldsWithTable($table,$this->pi_listFields),
01107 'FROM' => $TABLENAMES,
01108 'WHERE' => $WHERE,
01109 'GROUPBY' => $GLOBALS['TYPO3_DB']->stripGroupBy($groupBy),
01110 'ORDERBY' => $GLOBALS['TYPO3_DB']->stripOrderBy($orderBy),
01111 'LIMIT' => $LIMIT
01112 );
01113 }
01114
01115 $query = $GLOBALS['TYPO3_DB']->SELECTquery (
01116 $queryParts['SELECT'],
01117 $queryParts['FROM'],
01118 $queryParts['WHERE'],
01119 $queryParts['GROUPBY'],
01120 $queryParts['ORDERBY'],
01121 $queryParts['LIMIT']
01122 );
01123 return $returnQueryArray ? $queryParts : $query;
01124 }
01125
01140 function pi_exec_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='') {
01141 $queryParts = $this->pi_list_query($table,$count,$addWhere,$mm_cat,$groupBy,$orderBy,$query, TRUE);
01142
01143 return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
01144 }
01145
01155 function pi_getRecord($table,$uid,$checkPage=0) {
01156 return $GLOBALS['TSFE']->sys_page->checkRecord($table,$uid,$checkPage);
01157 }
01158
01166 function pi_getPidList($pid_list,$recursive=0) {
01167 if (!strcmp($pid_list,'')) $pid_list = $GLOBALS['TSFE']->id;
01168 $recursive = t3lib_div::intInRange($recursive,0);
01169
01170 $pid_list_arr = array_unique(t3lib_div::trimExplode(',',$pid_list,1));
01171 $pid_list = array();
01172
01173 foreach($pid_list_arr as $val) {
01174 $val = t3lib_div::intInRange($val,0);
01175 if ($val) {
01176 $_list = $this->cObj->getTreeList(-1*$val, $recursive);
01177 if ($_list) $pid_list[] = $_list;
01178 }
01179 }
01180
01181 return implode(',', $pid_list);
01182 }
01183
01191 function pi_prependFieldsWithTable($table,$fieldList) {
01192 $list=t3lib_div::trimExplode(',',$fieldList,1);
01193 $return=array();
01194 while(list(,$listItem)=each($list)) {
01195 $return[]=$table.'.'.$listItem;
01196 }
01197 return implode(',',$return);
01198 }
01199
01211 function pi_getCategoryTableContents($table,$pid,$whereClause='',$groupBy='',$orderBy='',$limit='') {
01212 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
01213 '*',
01214 $table,
01215 'pid='.intval($pid).
01216 $this->cObj->enableFields($table).' '.
01217 $whereClause,
01218 $groupBy,
01219 $orderBy,
01220 $limit
01221 );
01222 $outArr = array();
01223 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01224 $outArr[$row['uid']] = $row;
01225 }
01226 $GLOBALS['TYPO3_DB']->sql_free_result($res);
01227 return $outArr;
01228 }
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01255 function pi_isOnlyFields($fList,$lowerThan=-1) {
01256 $lowerThan = $lowerThan==-1 ? $this->pi_lowerThan : $lowerThan;
01257
01258 $fList = t3lib_div::trimExplode(',',$fList,1);
01259 $tempPiVars = $this->piVars;
01260 while(list(,$k)=each($fList)) {
01261 if (!t3lib_div::testInt($tempPiVars[$k]) || $tempPiVars[$k]<$lowerThan) unset($tempPiVars[$k]);
01262 }
01263 if (!count($tempPiVars)) return 1;
01264 }
01265
01275 function pi_autoCache($inArray) {
01276 if (is_array($inArray)) {
01277 reset($inArray);
01278 while(list($fN,$fV)=each($inArray)) {
01279 if (!strcmp($inArray[$fN],'')) {
01280 unset($inArray[$fN]);
01281 } elseif (is_array($this->pi_autoCacheFields[$fN])) {
01282 if (is_array($this->pi_autoCacheFields[$fN]['range'])
01283 && intval($inArray[$fN])>=intval($this->pi_autoCacheFields[$fN]['range'][0])
01284 && intval($inArray[$fN])<=intval($this->pi_autoCacheFields[$fN]['range'][1])) {
01285 unset($inArray[$fN]);
01286 }
01287 if (is_array($this->pi_autoCacheFields[$fN]['list'])
01288 && in_array($inArray[$fN],$this->pi_autoCacheFields[$fN]['list'])) {
01289 unset($inArray[$fN]);
01290 }
01291 }
01292 }
01293 }
01294 if (!count($inArray)) return 1;
01295 }
01296
01306 function pi_RTEcssText($str) {
01307 $parseFunc = $GLOBALS['TSFE']->tmpl->setup['lib.']['parseFunc_RTE.'];
01308 if (is_array($parseFunc)) $str = $this->cObj->parseFunc($str, $parseFunc);
01309 return $str;
01310 }
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01328 function pi_initPIflexForm($field='pi_flexform') {
01329
01330 if (!is_array($this->cObj->data[$field]) && $this->cObj->data[$field]) {
01331 $this->cObj->data[$field] = t3lib_div::xml2array($this->cObj->data[$field]);
01332 if (!is_array($this->cObj->data[$field])) $this->cObj->data[$field]=array();
01333 }
01334 }
01335
01346 function pi_getFFvalue($T3FlexForm_array,$fieldName,$sheet='sDEF',$lang='lDEF',$value='vDEF') {
01347 $sheetArray = is_array($T3FlexForm_array) ? $T3FlexForm_array['data'][$sheet][$lang] : '';
01348 if (is_array($sheetArray)) {
01349 return $this->pi_getFFvalueFromSheetArray($sheetArray,explode('/',$fieldName),$value);
01350 }
01351 }
01352
01363 function pi_getFFvalueFromSheetArray($sheetArray,$fieldNameArr,$value) {
01364
01365 $tempArr=$sheetArray;
01366 foreach($fieldNameArr as $k => $v) {
01367 if (t3lib_div::testInt($v)) {
01368 if (is_array($tempArr)) {
01369 $c=0;
01370 foreach($tempArr as $values) {
01371 if ($c==$v) {
01372 #debug($values);
01373 $tempArr=$values;
01374 break;
01375 }
01376 $c++;
01377 }
01378 }
01379 } else {
01380 $tempArr = $tempArr[$v];
01381 }
01382 }
01383 return $tempArr[$value];
01384 }
01385 }
01386
01387
01388 ?>