Main Page | Directories | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages | Examples

class.tslib_pibase.php

Go to the documentation of this file.
00001 <?php
00002 /***************************************************************
00003 *  Copyright notice
00004 *
00005 *  (c) 1999-2004 Kasper Skaarhoj (kasperYYYY@typo3.com)
00006 *  All rights reserved
00007 *
00008 *  This script is part of the TYPO3 project. The TYPO3 project is
00009 *  free software; you can redistribute it and/or modify
00010 *  it under the terms of the GNU General Public License as published by
00011 *  the Free Software Foundation; either version 2 of the License, or
00012 *  (at your option) any later version.
00013 *
00014 *  The GNU General Public License can be found at
00015 *  http://www.gnu.org/copyleft/gpl.html.
00016 *  A copy is found in the textfile GPL.txt and important notices to the license
00017 *  from the author is found in LICENSE.txt distributed with these scripts.
00018 *
00019 *
00020 *  This script is distributed in the hope that it will be useful,
00021 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00022 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023 *  GNU General Public License for more details.
00024 *
00025 *  This copyright notice MUST APPEAR in all copies of the script!
00026 ***************************************************************/
00132 class tslib_pibase {
00133 
00134       // Reserved variables:
00135    var $cObj;        // The backReference to the mother cObj object set at call time
00136    var $prefixId;    // Should be same as classname of the plugin, used for CSS classes, variables
00137    var $scriptRelPath;  // Path to the plugin class script relative to extension directory, eg. 'pi1/class.tx_newfaq_pi1.php'
00138    var $extKey;      // Extension key.
00139    var $piVars = Array (   // This is the incomming array by name $this->prefixId merged between POST and GET, POST taking precedence. Eg. if the class name is 'tx_myext' then the content of this array will be whatever comes into &tx_myext[...]=...
00140       'pointer' => '',        // Used as a pointer for lists
00141       'mode' => '',           // List mode
00142       'sword' => '',          // Search word
00143       'sort' => '',           // [Sorting column]:[ASC=0/DESC=1]
00144    );
00145    var $internal = Array(  // Used internally for general storage of values between methods
00146       'res_count' => 0,       // Total query count
00147       'results_at_a_time' => 20, // pi_list_browseresults(): Show number of results at a time
00148       'maxPages' => 10,       // pi_list_browseresults(): Max number of 'Page 1 - Page 2 - ...' in the list browser
00149       'currentRow' => Array(),   // Current result row
00150       'currentTable' => '',      // Current table
00151    );
00152 
00153    var $LOCAL_LANG = Array(); // Local Language content
00154    var $LOCAL_LANG_loaded = 0;   // Flag that tells if the locallang file has been fetch (or tried to be fetched) already.
00155    var $LLkey='default';      // Pointer to the language to use.
00156    var $LLtestPrefix='';      // You can set this during development to some value that makes it easy for you to spot all labels that ARe delivered by the getLL function.
00157    var $LLtestPrefixAlt='';   // Save as LLtestPrefix, but additional prefix for the alternative value in getLL() function calls
00158 
00159    var $pi_isOnlyFields = 'mode,pointer';
00160    var $pi_alwaysPrev = 0;
00161    var $pi_lowerThan = 5;
00162    var $pi_moreParams='';
00163    var $pi_listFields='*';
00164 
00165    var $pi_autoCacheFields=array();
00166    var $pi_autoCacheEn=0;
00167 
00168    var $pi_USER_INT_obj = 0;  // If set, then links are 1) not using cHash and 2) allowing pages to be cached.
00169 
00176    var $conf = Array();
00177 
00178    // internal, don't mess with...
00179    var $pi_EPtemp_cObj;
00180    var $pi_tmpPageId=0;
00181 
00182 
00183 
00184 
00185 
00186 
00187 
00188 
00189 
00190 
00191 
00192 
00193 
00194 
00195 
00196 
00197 
00198    /***************************
00199     *
00200     * Init functions
00201     *
00202     **************************/
00203 
00211    function tslib_pibase() {
00212       if ($this->prefixId) {
00213          $this->piVars = t3lib_div::GParrayMerged($this->prefixId);
00214       }
00215       if ($GLOBALS['TSFE']->config['config']['language'])   {
00216          $this->LLkey = $GLOBALS['TSFE']->config['config']['language'];
00217       }
00218    }
00219 
00225    function pi_setPiVarDefaults()   {
00226       if (is_array($this->conf['_DEFAULT_PI_VARS.'])) {
00227          $this->piVars = t3lib_div::array_merge_recursive_overrule($this->conf['_DEFAULT_PI_VARS.'],is_array($this->piVars)?$this->piVars:array());
00228       }
00229    }
00230 
00231 
00232 
00233 
00234 
00235 
00236 
00237 
00238 
00239 
00240 
00241 
00242 
00243 
00244 
00245    /***************************
00246     *
00247     * Link functions
00248     *
00249     **************************/
00250 
00264    function pi_getPageLink($id,$target='',$urlParameters=array()) {
00265       return $this->cObj->getTypoLink_URL($id,$urlParameters,$target);  // ?$target:$GLOBALS['TSFE']->sPre
00266    }
00267 
00280    function pi_linkToPage($str,$id,$target='',$urlParameters=array())   {
00281       return $this->cObj->getTypoLink($str,$id,$urlParameters,$target); // ?$target:$GLOBALS['TSFE']->sPre
00282    }
00283 
00295    function pi_linkTP($str,$urlParameters=array(),$cache=0,$altPageId=0)   {
00296       $conf=array();
00297       $conf['useCacheHash'] = $this->pi_USER_INT_obj ? 0 : $cache;
00298       $conf['no_cache'] = $this->pi_USER_INT_obj ? 0 : !$cache;
00299       $conf['parameter'] = $altPageId ? $altPageId : ($this->pi_tmpPageId ? $this->pi_tmpPageId : $GLOBALS['TSFE']->id);
00300       $conf['additionalParams'] = $this->conf['parent.']['addParams'].t3lib_div::implodeArrayForUrl('',$urlParameters,'',1).$this->pi_moreParams;
00301 
00302       return $this->cObj->typoLink($str, $conf);
00303    }
00304 
00318    function pi_linkTP_keepPIvars($str,$overrulePIvars=array(),$cache=0,$clearAnyway=0,$altPageId=0)   {
00319       if (is_array($this->piVars) && is_array($overrulePIvars) && !$clearAnyway) {
00320          $piVars = $this->piVars;
00321          unset($piVars['DATA']);
00322          $overrulePIvars = t3lib_div::array_merge_recursive_overrule($piVars,$overrulePIvars);
00323          if ($this->pi_autoCacheEn) {
00324             $cache = $this->pi_autoCache($overrulePIvars);
00325          }
00326       }
00327       $res = $this->pi_linkTP($str,Array($this->prefixId=>$overrulePIvars),$cache,$altPageId);
00328       return $res;
00329    }
00330 
00342    function pi_linkTP_keepPIvars_url($overrulePIvars=array(),$cache=0,$clearAnyway=0,$altPageId=0) {
00343       $this->pi_linkTP_keepPIvars('|',$overrulePIvars,$cache,$clearAnyway,$altPageId);
00344       return $this->cObj->lastTypoLinkUrl;
00345    }
00346 
00360    function pi_list_linkSingle($str,$uid,$cache=FALSE,$mergeArr=array(),$urlOnly=FALSE,$altPageId=0)  {
00361       if ($this->prefixId) {
00362          if ($cache) {
00363             $overrulePIvars=$uid?array('showUid'=>$uid):Array();
00364             $overrulePIvars=array_merge($overrulePIvars,$mergeArr);
00365             $str = $this->pi_linkTP($str,Array($this->prefixId=>$overrulePIvars),$cache,$altPageId);
00366          } else {
00367             $overrulePIvars=array('showUid'=>$uid?$uid:'');
00368             $overrulePIvars=array_merge($overrulePIvars,$mergeArr);
00369             $str = $this->pi_linkTP_keepPIvars($str,$overrulePIvars,$cache,0,$altPageId);
00370          }
00371 
00372             // If urlOnly flag, return only URL as it has recently be generated.
00373          if ($urlOnly)  {
00374             $str = $this->cObj->lastTypoLinkUrl;
00375          }
00376       }
00377       return $str;
00378    }
00379 
00388    function pi_openAtagHrefInJSwindow($str,$winName='',$winParams='width=670,height=500,status=0,menubar=0,scrollbars=1,resizable=1')  {
00389       if (eregi('(.*)(<a[^>]*>)(.*)',$str,$match)) {
00390          $aTagContent = t3lib_div::get_tag_attributes($match[2]);
00391          $match[2]='<a href="#" onclick="'.
00392             htmlspecialchars('vHWin=window.open(\''.$GLOBALS['TSFE']->baseUrlWrap($aTagContent['href']).'\',\''.($winName?$winName:md5($aTagContent['href'])).'\',\''.$winParams.'\');vHWin.focus();return false;').
00393             '">';
00394          $str=$match[1].$match[2].$match[3];
00395       }
00396       return $str;
00397    }
00398 
00399 
00400 
00401 
00402 
00403 
00404 
00405 
00406 
00407 
00408 
00409 
00410 
00411 
00412 
00413    /***************************
00414     *
00415     * Functions for listing, browsing, searching etc.
00416     *
00417     **************************/
00418 
00428    function pi_list_browseresults($showResultCount=1,$tableParams='')   {
00429 
00430          // Initializing variables:
00431       $pointer=$this->piVars['pointer'];
00432       $count=$this->internal['res_count'];
00433       $results_at_a_time = t3lib_div::intInRange($this->internal['results_at_a_time'],1,1000);
00434       $maxPages = t3lib_div::intInRange($this->internal['maxPages'],1,100);
00435       $max = t3lib_div::intInRange(ceil($count/$results_at_a_time),1,$maxPages);
00436       $pointer=intval($pointer);
00437       $links=array();
00438 
00439          // Make browse-table/links:
00440       if ($this->pi_alwaysPrev>=0)  {
00441          if ($pointer>0)   {
00442             $links[]='
00443                <td nowrap="nowrap"><p>'.$this->pi_linkTP_keepPIvars($this->pi_getLL('pi_list_browseresults_prev','< Previous',TRUE),array('pointer'=>($pointer-1?$pointer-1:'')),0).'</p></td>';
00444          } elseif ($this->pi_alwaysPrev)  {
00445             $links[]='
00446                <td nowrap="nowrap"><p>'.$this->pi_getLL('pi_list_browseresults_prev','< Previous',TRUE).'</p></td>';
00447          }
00448       }
00449       for($a=0;$a<$max;$a++)  {
00450          $links[]='
00451                <td'.($pointer==$a?$this->pi_classParam('browsebox-SCell'):'').' nowrap="nowrap"><p>'.
00452             $this->pi_linkTP_keepPIvars(trim($this->pi_getLL('pi_list_browseresults_page','Page',TRUE).' '.($a+1)),array('pointer'=>($a?$a:'')),$this->pi_isOnlyFields($this->pi_isOnlyFields)).
00453             '</p></td>';
00454       }
00455       if ($pointer<ceil($count/$results_at_a_time)-1) {
00456          $links[]='
00457                <td nowrap="nowrap"><p>'.
00458             $this->pi_linkTP_keepPIvars($this->pi_getLL('pi_list_browseresults_next','Next >',TRUE),array('pointer'=>$pointer+1)).
00459             '</p></td>';
00460       }
00461 
00462       $pR1 = $pointer*$results_at_a_time+1;
00463       $pR2 = $pointer*$results_at_a_time+$results_at_a_time;
00464       $sTables = '
00465 
00466       <!--
00467          List browsing box:
00468       -->
00469       <div'.$this->pi_classParam('browsebox').'>'.
00470          ($showResultCount ? '
00471          <p>'.
00472             ($this->internal['res_count'] ?
00473             sprintf(
00474                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>')),
00475                $this->internal['res_count'] > 0 ? $pR1 : 0,
00476                min(array($this->internal['res_count'],$pR2)),
00477                $this->internal['res_count']
00478             ) :
00479             $this->pi_getLL('pi_list_browseresults_noResults','Sorry, no items were found.')).'</p>':''
00480          ).
00481       '
00482 
00483          <'.trim('table '.$tableParams).'>
00484             <tr>
00485                '.implode('',$links).'
00486             </tr>
00487          </table>
00488       </div>';
00489 
00490       return $sTables;
00491    }
00492 
00500    function pi_list_searchBox($tableParams='')  {
00501          // Search box design:
00502       $sTables = '
00503 
00504       <!--
00505          List search box:
00506       -->
00507       <div'.$this->pi_classParam('searchbox').'>
00508          <form action="'.htmlspecialchars(t3lib_div::getIndpEnv('REQUEST_URI')).'" method="post" style="margin: 0 0 0 0;">
00509          <'.trim('table '.$tableParams).'>
00510             <tr>
00511                <td><input type="text" name="'.$this->prefixId.'[sword]" value="'.htmlspecialchars($this->piVars['sword']).'"'.$this->pi_classParam('searchbox-sword').' /></td>
00512                <td><input type="submit" value="'.$this->pi_getLL('pi_list_searchBox_search','Search',TRUE).'"'.$this->pi_classParam('searchbox-button').' />'.
00513                   '<input type="hidden" name="no_cache" value="1" />'.
00514                   '<input type="hidden" name="'.$this->prefixId.'[pointer]" value="" />'.
00515                   '</td>
00516             </tr>
00517          </table>
00518          </form>
00519       </div>';
00520 
00521       return $sTables;
00522    }
00523 
00531    function pi_list_modeSelector($items=array(),$tableParams='')  {
00532       $cells=array();
00533       reset($items);
00534       while(list($k,$v)=each($items))  {
00535          $cells[]='
00536                <td'.($this->piVars['mode']==$k?$this->pi_classParam('modeSelector-SCell'):'').'><p>'.
00537             $this->pi_linkTP_keepPIvars(htmlspecialchars($v),array('mode'=>$k),$this->pi_isOnlyFields($this->pi_isOnlyFields)).
00538             '</p></td>';
00539       }
00540 
00541       $sTables = '
00542 
00543       <!--
00544          Mode selector (menu for list):
00545       -->
00546       <div'.$this->pi_classParam('modeSelector').'>
00547          <'.trim('table '.$tableParams).'>
00548             <tr>
00549                '.implode('',$cells).'
00550             </tr>
00551          </table>
00552       </div>';
00553 
00554       return $sTables;
00555    }
00556 
00569    function pi_list_makelist($res,$tableParams='') {
00570          // Make list table header:
00571       $tRows=array();
00572       $this->internal['currentRow']='';
00573       $tRows[] = $this->pi_list_header();
00574 
00575          // Make list table rows
00576       $c=0;
00577       while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))  {
00578          $tRows[] = $this->pi_list_row($c);
00579          $c++;
00580       }
00581 
00582       $out = '
00583 
00584       <!--
00585          Record list:
00586       -->
00587       <div'.$this->pi_classParam('listrow').'>
00588          <'.trim('table '.$tableParams).'>
00589             '.implode('',$tRows).'
00590          </table>
00591       </div>';
00592 
00593       return $out;
00594    }
00595 
00604    function pi_list_row($c)   {
00605       // Dummy
00606       return '<tr'.($c%2 ? $this->pi_classParam('listrow-odd') : '').'><td><p>[dummy row]</p></td></tr>';
00607    }
00608 
00616    function pi_list_header()  {
00617       return '<tr'.$this->pi_classParam('listrow-header').'><td><p>[dummy header row]</p></td></tr>';
00618    }
00619 
00620 
00621 
00622 
00623 
00624 
00625 
00626 
00627 
00628 
00629 
00630 
00631 
00632 
00633 
00634    /***************************
00635     *
00636     * Stylesheet, CSS
00637     *
00638     **************************/
00639 
00640 
00647    function pi_getClassName($class) {
00648       return str_replace('_','-',$this->prefixId).($this->prefixId?'-':'').$class;
00649    }
00650 
00659    function pi_classParam($class)   {
00660       return ' class="'.$this->pi_getClassName($class).'"';
00661    }
00662 
00673    function pi_setClassStyle($class,$data,$selector='')  {
00674       $GLOBALS['TSFE']->setCSS($this->pi_getClassName($class).($selector?' '.$selector:''),'.'.$this->pi_getClassName($class).($selector?' '.$selector:'').' {'.$data.'}');
00675    }
00676 
00684    function pi_wrapInBaseClass($str)   {
00685       return '
00686 
00687 
00688    <!--
00689 
00690       BEGIN: Content of extension "'.$this->extKey.'", plugin "'.$this->prefixId.'"
00691 
00692    -->
00693    <div class="'.str_replace('_','-',$this->prefixId).'">
00694       '.$str.'
00695    </div>
00696    <!-- END: Content of extension "'.$this->extKey.'", plugin "'.$this->prefixId.'" -->
00697 
00698    ';
00699    }
00700 
00701 
00702 
00703 
00704 
00705 
00706 
00707 
00708 
00709 
00710 
00711 
00712 
00713 
00714 
00715 
00716 
00717    /***************************
00718     *
00719     * Frontend editing: Edit panel, edit icons
00720     *
00721     **************************/
00722 
00733    function pi_getEditPanel($row='',$tablename='',$label='',$conf=Array()) {
00734       $panel='';
00735       if (!$row || !$tablename)  {
00736          $row = $this->internal['currentRow'];
00737          $tablename = $this->internal['currentTable'];
00738       }
00739 
00740       if ($GLOBALS['TSFE']->beUserLogin)  {
00741             // Create local cObj if not set:
00742          if (!is_object($this->pi_EPtemp_cObj)) {
00743             $this->pi_EPtemp_cObj = t3lib_div::makeInstance('tslib_cObj');
00744             $this->pi_EPtemp_cObj->setParent($this->cObj->data,$this->cObj->currentRecord);
00745          }
00746 
00747             // Initialize the cObj object with current row
00748          $this->pi_EPtemp_cObj->start($row,$tablename);
00749 
00750             // Setting TypoScript values in the $conf array. See documentation in TSref for the EDITPANEL cObject.
00751          $conf['allow'] = 'edit,new,delete,move,hide';
00752          $panel = $this->pi_EPtemp_cObj->cObjGetSingle('EDITPANEL',$conf,'editpanel');
00753       }
00754 
00755       if ($panel) {
00756          if ($label) {
00757             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 -->';
00758          } else return '<!-- BEGIN: EDIT PANEL -->'.$panel.'<!-- END: EDIT PANEL -->';
00759       } else return $label;
00760    }
00761 
00775    function pi_getEditIcon($content,$fields,$title='',$row='',$tablename='',$oConf=array())  {
00776       if ($GLOBALS['TSFE']->beUserLogin){
00777          if (!$row || !$tablename)  {
00778             $row = $this->internal['currentRow'];
00779             $tablename = $this->internal['currentTable'];
00780          }
00781          $conf=array_merge(array(
00782             'beforeLastTag'=>1,
00783             'iconTitle' => $title
00784          ),$oConf);
00785          $content=$this->cObj->editIcons($content,$tablename.':'.$fields,$conf,$tablename.':'.$row['uid'],$row,'&viewUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI')));
00786       }
00787       return $content;
00788    }
00789 
00790 
00791 
00792 
00793 
00794 
00795 
00796 
00797 
00798 
00799 
00800 
00801 
00802 
00803 
00804 
00805 
00806    /***************************
00807     *
00808     * Localization, locallang functions
00809     *
00810     **************************/
00811 
00812 
00822    function pi_getLL($key,$alt='',$hsc=FALSE)   {
00823       if (isset($this->LOCAL_LANG[$this->LLkey][$key]))  {
00824          $word = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->LLkey][$key]);
00825       } elseif (isset($this->LOCAL_LANG['default'][$key]))  {
00826          $word = $this->LOCAL_LANG['default'][$key];
00827       } else {
00828          $word = $this->LLtestPrefixAlt.$alt;
00829       }
00830 
00831       $output = $this->LLtestPrefix.$word;
00832       if ($hsc)   $output = htmlspecialchars($output);
00833 
00834       return $output;
00835    }
00836 
00843    function pi_loadLL() {
00844       if (!$this->LOCAL_LANG_loaded && $this->scriptRelPath)   {
00845          $basePath = t3lib_extMgm::siteRelPath($this->extKey).dirname($this->scriptRelPath).'/locallang.php';
00846          if (@is_file($basePath))   {
00847             include('./'.$basePath);
00848             $this->LOCAL_LANG = $LOCAL_LANG;
00849             if (is_array($this->conf['_LOCAL_LANG.']))   {
00850                reset($this->conf['_LOCAL_LANG.']);
00851                while(list($k,$lA)=each($this->conf['_LOCAL_LANG.'])) {
00852                   if (is_array($lA))   {
00853                      $k = substr($k,0,-1);
00854                      $this->LOCAL_LANG[$k] = t3lib_div::array_merge_recursive_overrule(is_array($this->LOCAL_LANG[$k])?$this->LOCAL_LANG[$k]:array(), $lA);
00855                   }
00856                }
00857             }
00858          }
00859       }
00860       $this->LOCAL_LANG_loaded = 1;
00861    }
00862 
00863 
00864 
00865 
00866 
00867 
00868 
00869 
00870 
00871 
00872 
00873 
00874 
00875 
00876 
00877 
00878 
00879 
00880 
00881 
00882 
00883 
00884 
00885    /***************************
00886     *
00887     * Database, queries
00888     *
00889     **************************/
00890 
00908    function pi_list_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='',$returnQueryArray=FALSE)  {
00909 
00910          // Begin Query:
00911       if (!$query)   {
00912             // Fetches the list of PIDs to select from.
00913             // TypoScript property .pidList is a comma list of pids. If blank, current page id is used.
00914             // TypoScript property .recursive is a int+ which determines how many levels down from the pids in the pid-list subpages should be included in the select.
00915          $pidList = $this->pi_getPidList($this->conf['pidList'],$this->conf['recursive']);
00916          if (is_array($mm_cat))  {
00917             $query='FROM '.$table.','.$mm_cat['table'].','.$mm_cat['mmtable'].chr(10).
00918                   ' WHERE '.$table.'.uid='.$mm_cat['mmtable'].'.uid_local AND '.$mm_cat['table'].'.uid='.$mm_cat['mmtable'].'.uid_foreign '.chr(10).
00919                   (strcmp($mm_cat['catUidList'],'')?' AND '.$mm_cat['table'].'.uid IN ('.$mm_cat['catUidList'].')':'').chr(10).
00920                   ' AND '.$table.'.pid IN ('.$pidList.')'.chr(10).
00921                   $this->cObj->enableFields($table).chr(10);   // This adds WHERE-clauses that ensures deleted, hidden, starttime/endtime/access records are NOT selected, if they should not! Almost ALWAYS add this to your queries!
00922          } else {
00923             $query='FROM '.$table.' WHERE pid IN ('.$pidList.')'.chr(10).
00924                   $this->cObj->enableFields($table).chr(10);   // This adds WHERE-clauses that ensures deleted, hidden, starttime/endtime/access records are NOT selected, if they should not! Almost ALWAYS add this to your queries!
00925          }
00926       }
00927 
00928          // Split the "FROM ... WHERE" string so we get the WHERE part and TABLE names separated...:
00929       list($TABLENAMES,$WHERE) = spliti('WHERE', trim($query), 2);
00930       $TABLENAMES = trim(substr(trim($TABLENAMES),5));
00931       $WHERE = trim($WHERE);
00932 
00933          // Add '$addWhere'
00934       if ($addWhere) {$WHERE.=' '.$addWhere.chr(10);}
00935 
00936          // Search word:
00937       if ($this->piVars['sword'] && $this->internal['searchFieldList']) {
00938          $WHERE.=$this->cObj->searchWhere($this->piVars['sword'],$this->internal['searchFieldList'],$table).chr(10);
00939       }
00940 
00941       if ($count) {
00942          $queryParts = array(
00943             'SELECT' => 'count(*)',
00944             'FROM' => $TABLENAMES,
00945             'WHERE' => $WHERE,
00946             'GROUPBY' => '',
00947             'ORDERBY' => '',
00948             'LIMIT' => ''
00949          );
00950       } else {
00951             // Order by data:
00952          if (!$orderBy) {
00953             if (t3lib_div::inList($this->internal['orderByList'],$this->internal['orderBy']))   {
00954                $orderBy = 'ORDER BY '.$table.'.'.$this->internal['orderBy'].($this->internal['descFlag']?' DESC':'');
00955             }
00956          }
00957 
00958             // Limit data:
00959          $pointer = $this->piVars['pointer'];
00960          $pointer = intval($pointer);
00961          $results_at_a_time = t3lib_div::intInRange($this->internal['results_at_a_time'],1,1000);
00962          $LIMIT = ($pointer*$results_at_a_time).','.$results_at_a_time;
00963 
00964             // Add 'SELECT'
00965          $queryParts = array(
00966             'SELECT' => $this->pi_prependFieldsWithTable($table,$this->pi_listFields),
00967             'FROM' => $TABLENAMES,
00968             'WHERE' => $WHERE,
00969             'GROUPBY' => $GLOBALS['TYPO3_DB']->stripGroupBy($groupBy),
00970             'ORDERBY' => $GLOBALS['TYPO3_DB']->stripOrderBy($orderBy),
00971             'LIMIT' => $LIMIT
00972          );
00973       }
00974 
00975       $query = $GLOBALS['TYPO3_DB']->SELECTquery (
00976                $queryParts['SELECT'],
00977                $queryParts['FROM'],
00978                $queryParts['WHERE'],
00979                $queryParts['GROUPBY'],
00980                $queryParts['ORDERBY'],
00981                $queryParts['LIMIT']
00982             );
00983       return $returnQueryArray ? $queryParts : $query;
00984    }
00985 
01000    function pi_exec_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='')  {
01001       $queryParts = $this->pi_list_query($table,$count,$addWhere,$mm_cat,$groupBy,$orderBy,$query, TRUE);
01002 
01003       return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
01004    }
01005 
01015    function pi_getRecord($table,$uid,$checkPage=0) {
01016       return $GLOBALS['TSFE']->sys_page->checkRecord($table,$uid,$checkPage);
01017    }
01018 
01026    function pi_getPidList($pid_list,$recursive=0)  {
01027       if (!strcmp($pid_list,'')) $pid_list = $GLOBALS['TSFE']->id;
01028       $recursive = t3lib_div::intInRange($recursive,0);
01029 
01030       $pid_list_arr = array_unique(t3lib_div::trimExplode(',',$pid_list,1));
01031       $pid_list = array();
01032 
01033       foreach($pid_list_arr as $val)   {
01034          $val = t3lib_div::intInRange($val,0);
01035          if ($val)   {
01036             $_list = $this->cObj->getTreeList(-1*$val, $recursive);
01037             if ($_list)    $pid_list[] = $_list;
01038          }
01039       }
01040 
01041       return implode(',', $pid_list);
01042    }
01043 
01051    function pi_prependFieldsWithTable($table,$fieldList) {
01052       $list=t3lib_div::trimExplode(',',$fieldList,1);
01053       $return=array();
01054       while(list(,$listItem)=each($list)) {
01055          $return[]=$table.'.'.$listItem;
01056       }
01057       return implode(',',$return);
01058    }
01059 
01071    function pi_getCategoryTableContents($table,$pid,$whereClause='',$groupBy='',$orderBy='',$limit='')   {
01072       $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
01073                '*',
01074                $table,
01075                'pid='.intval($pid).
01076                   $this->cObj->enableFields($table).' '.
01077                   $whereClause,  // whereClauseMightContainGroupOrderBy
01078                $groupBy,
01079                $orderBy,
01080                $limit
01081             );
01082       $outArr = array();
01083       while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))   {
01084          $outArr[$row['uid']] = $row;
01085       }
01086       $GLOBALS['TYPO3_DB']->sql_free_result($res);
01087       return $outArr;
01088    }
01089 
01090 
01091 
01092 
01093 
01094 
01095 
01096 
01097 
01098 
01099 
01100 
01101    /***************************
01102     *
01103     * Various
01104     *
01105     **************************/
01106 
01115    function pi_isOnlyFields($fList,$lowerThan=-1)  {
01116       $lowerThan = $lowerThan==-1 ? $this->pi_lowerThan : $lowerThan;
01117 
01118       $fList = t3lib_div::trimExplode(',',$fList,1);
01119       $tempPiVars = $this->piVars;
01120       while(list(,$k)=each($fList)) {
01121          if (!t3lib_div::testInt($tempPiVars[$k]) || $tempPiVars[$k]<$lowerThan)    unset($tempPiVars[$k]);
01122       }
01123       if (!count($tempPiVars))   return 1;
01124    }
01125 
01135    function pi_autoCache($inArray)  {
01136       if (is_array($inArray)) {
01137          reset($inArray);
01138          while(list($fN,$fV)=each($inArray)) {
01139             if (!strcmp($inArray[$fN],''))   {
01140                unset($inArray[$fN]);
01141             } elseif (is_array($this->pi_autoCacheFields[$fN]))   {
01142                if (is_array($this->pi_autoCacheFields[$fN]['range'])
01143                       && intval($inArray[$fN])>=intval($this->pi_autoCacheFields[$fN]['range'][0])
01144                       && intval($inArray[$fN])<=intval($this->pi_autoCacheFields[$fN]['range'][1]))   {
01145                         unset($inArray[$fN]);
01146                }
01147                if (is_array($this->pi_autoCacheFields[$fN]['list'])
01148                       && in_array($inArray[$fN],$this->pi_autoCacheFields[$fN]['list']))  {
01149                         unset($inArray[$fN]);
01150                }
01151             }
01152          }
01153       }
01154       if (!count($inArray))   return 1;
01155    }
01156 
01166    function pi_RTEcssText($str)  {
01167       $parseFunc = $GLOBALS['TSFE']->tmpl->setup['lib.']['parseFunc_RTE.'];
01168       if (is_array($parseFunc))  $str = $this->cObj->parseFunc($str, $parseFunc);
01169       return $str;
01170    }
01171 
01172 
01173 
01174 
01175 
01176    /*******************************
01177     *
01178     * FlexForms related functions
01179     *
01180     *******************************/
01181 
01187    function pi_initPIflexForm()  {
01188          // Converting flexform data into array:
01189       if (!is_array($this->cObj->data['pi_flexform']) && $this->cObj->data['pi_flexform'])   {
01190          $this->cObj->data['pi_flexform'] = t3lib_div::xml2array($this->cObj->data['pi_flexform']);
01191          if (!is_array($this->cObj->data['pi_flexform']))   $this->cObj->data['pi_flexform']=array();
01192       }
01193    }
01194 
01205    function pi_getFFvalue($T3FlexForm_array,$fieldName,$sheet='sDEF',$lang='lDEF',$value='vDEF')   {
01206       $sheetArray = $T3FlexForm_array['data'][$sheet][$lang];
01207       if (is_array($sheetArray)) {
01208          return $this->pi_getFFvalueFromSheetArray($sheetArray,explode('/',$fieldName),$value);
01209       }
01210    }
01211 
01222    function pi_getFFvalueFromSheetArray($sheetArray,$fieldNameArr,$value)  {
01223 
01224       $tempArr=$sheetArray;
01225       foreach($fieldNameArr as $k => $v)  {
01226          if (t3lib_div::testInt($v))   {
01227             if (is_array($tempArr)) {
01228                $c=0;
01229                foreach($tempArr as $values)  {
01230                   if ($c==$v) {
01231                      #debug($values);
01232                      $tempArr=$values;
01233                      break;
01234                   }
01235                   $c++;
01236                }
01237             }
01238          } else {
01239             $tempArr = $tempArr[$v];
01240          }
01241       }
01242       return $tempArr[$value];
01243    }
01244 }
01245 
01246 // NO extension of class - does not make sense here.
01247 ?>

Generated on Sun Oct 3 01:05:59 2004 for TYPO3core 3.7.0 dev by  doxygen 1.3.8-20040913