/t3lib/class.t3lib_querygenerator.php
PHP | 1527 lines | 1063 code | 88 blank | 376 comment | 237 complexity | c873dda7fe11b5c41560a8669b70293f MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-2.0, Unlicense, LGPL-2.1, Apache-2.0
Large files files are truncated, but you can click here to view the full file
- <?php
- /***************************************************************
- * Copyright notice
- *
- * (c) 2001-2010 Christian Jul Jensen (christian@typo3.com)
- * All rights reserved
- *
- * This script is part of the TYPO3 project. The TYPO3 project is
- * free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * The GNU General Public License can be found at
- * http://www.gnu.org/copyleft/gpl.html.
- * A copy is found in the textfile GPL.txt and important notices to the license
- * from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- * This script is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
- /**
- * Class for generating front end for building queries
- *
- * $Id: class.t3lib_querygenerator.php 8157 2010-07-11 12:45:16Z psychomieze $
- *
- * @author Christian Jul Jensen <christian@typo3.com>
- * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
- * @coauthor Jo Hasenau <info@cybercraft.de>
- */
- /**
- * [CLASS/FUNCTION INDEX of SCRIPT]
- *
- *
- *
- * 98: class t3lib_queryGenerator
- * 245: function makeFieldList()
- * 273: function init($name,$table,$fieldList='')
- * 410: function setAndCleanUpExternalLists($name,$list,$force='')
- * 426: function procesData($qC='')
- * 529: function cleanUpQueryConfig($queryConfig)
- * 586: function getFormElements($subLevel=0,$queryConfig='',$parent='')
- * 744: function makeOptionList($fN, $conf, $table)
- * 953: function printCodeArray($codeArr,$l=0)
- * 976: function formatQ($str)
- * 989: function mkOperatorSelect($name,$op,$draw,$submit)
- * 1011: function mkTypeSelect($name,$fieldName,$prepend='FIELD_')
- * 1032: function verifyType($fieldName)
- * 1049: function verifyComparison($comparison,$neg)
- * 1068: function mkFieldToInputSelect($name,$fieldName)
- * 1091: function mkTableSelect($name,$cur)
- * 1113: function mkCompSelect($name,$comparison,$neg)
- * 1131: function getSubscript($arr)
- * 1146: function initUserDef()
- * 1155: function userDef()
- * 1164: function userDefCleanUp($queryConfig)
- * 1175: function getQuery ($queryConfig,$pad='')
- * 1205: function getQuerySingle($conf,$first)
- * 1245: function cleanInputVal($conf,$suffix='')
- * 1270: function getUserDefQuery ($qcArr)
- * 1278: function updateIcon()
- * 1287: function getLabelCol()
- * 1299: function makeSelectorTable($modSettings,$enableList='table,fields,query,group,order,limit')
- * 1431: function getTreeList($id, $depth, $begin=0, $perms_clause)
- * 1465: function getSelectQuery($qString = '', $fN = '')
- * 1504: function JSbottom($formname='forms[0]')
- * 1510: function typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue)
- * 1528: function typo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off)
- *
- * TOTAL FUNCTIONS: 32
- * (This index is automatically created/updated by the extension "extdeveval")
- *
- */
- /**
- * Class for generating front end for building queries
- *
- * @author Christian Jul Jensen <christian@typo3.com>
- * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
- * @package TYPO3
- * @subpackage t3lib
- */
- class t3lib_queryGenerator {
- var $lang = array(
- 'OR' => 'or',
- 'AND' => 'and',
- 'comparison' => array(
- // Type = text offset = 0
- '0_' => 'contains',
- '1_' => 'does not contain',
- '2_' => 'starts with',
- '3_' => 'does not start with',
- '4_' => 'ends with',
- '5_' => 'does not end with',
- '6_' => 'equals',
- '7_' => 'does not equal',
- // Type = number , offset = 32
- '32_' => 'equals',
- '33_' => 'does not equal',
- '34_' => 'is greater than',
- '35_' => 'is less than',
- '36_' => 'is between',
- '37_' => 'is not between',
- '38_' => 'is in list',
- '39_' => 'is not in list',
- '40_' => 'binary AND equals',
- '41_' => 'binary AND does not equal',
- '42_' => 'binary OR equals',
- '43_' => 'binary OR does not equal',
- // Type = multiple, relation, files , offset = 64
- '64_' => 'equals',
- '65_' => 'does not equal',
- '66_' => 'contains',
- '67_' => 'does not contain',
- '68_' => 'is in list',
- '69_' => 'is not in list',
- '70_' => 'binary AND equals',
- '71_' => 'binary AND does not equal',
- '72_' => 'binary OR equals',
- '73_' => 'binary OR does not equal',
- // Type = date,time offset = 96
- '96_' => 'equals',
- '97_' => 'does not equal',
- '98_' => 'is greater than',
- '99_' => 'is less than',
- '100_' => 'is between',
- '101_' => 'is not between',
- '102_' => 'binary AND equals',
- '103_' => 'binary AND does not equal',
- '104_' => 'binary OR equals',
- '105_' => 'binary OR does not equal',
- // Type = boolean, offset = 128
- '128_' => 'is True',
- '129_' => 'is False',
- // Type = binary , offset = 160
- '160_' => 'equals',
- '161_' => 'does not equal',
- '162_' => 'contains',
- '163_' => 'does not contain'
- )
- );
- var $compSQL = array(
- // Type = text offset = 0
- '0' => "#FIELD# LIKE '%#VALUE#%'",
- '1' => "#FIELD# NOT LIKE '%#VALUE#%'",
- '2' => "#FIELD# LIKE '#VALUE#%'",
- '3' => "#FIELD# NOT LIKE '#VALUE#%'",
- '4' => "#FIELD# LIKE '%#VALUE#'",
- '5' => "#FIELD# NOT LIKE '%#VALUE#'",
- '6' => "#FIELD# = '#VALUE#'",
- '7' => "#FIELD# != '#VALUE#'",
- // Type = number, offset = 32
- '32' => "#FIELD# = '#VALUE#'",
- '33' => "#FIELD# != '#VALUE#'",
- '34' => '#FIELD# > #VALUE#',
- '35' => '#FIELD# < #VALUE#',
- '36' => '#FIELD# >= #VALUE# AND #FIELD# <= #VALUE1#',
- '37' => 'NOT (#FIELD# >= #VALUE# AND #FIELD# <= #VALUE1#)',
- '38' => '#FIELD# IN (#VALUE#)',
- '39' => '#FIELD# NOT IN (#VALUE#)',
- '40' => '(#FIELD# & #VALUE#)=#VALUE#',
- '41' => '(#FIELD# & #VALUE#)!=#VALUE#',
- '42' => '(#FIELD# | #VALUE#)=#VALUE#',
- '43' => '(#FIELD# | #VALUE#)!=#VALUE#',
- // Type = multiple, relation, files , offset = 64
- '64' => "#FIELD# = '#VALUE#'",
- '65' => "#FIELD# != '#VALUE#'",
- '66' => "#FIELD# LIKE '%#VALUE#%' AND #FIELD# LIKE '%#VALUE1#%'",
- '67' => "(#FIELD# NOT LIKE '%#VALUE#%' OR #FIELD# NOT LIKE '%#VALUE1#%')",
- '68' => '#FIELD# IN (#VALUE#)',
- '69' => '#FIELD# NOT IN (#VALUE#)',
- '70' => '(#FIELD# & #VALUE#)=#VALUE#',
- '71' => '(#FIELD# & #VALUE#)!=#VALUE#',
- '72' => '(#FIELD# | #VALUE#)=#VALUE#',
- '73' => '(#FIELD# | #VALUE#)!=#VALUE#',
- // Type = date, offset = 32
- '96' => "#FIELD# = '#VALUE#'",
- '97' => "#FIELD# != '#VALUE#'",
- '98' => '#FIELD# > #VALUE#',
- '99' => '#FIELD# < #VALUE#',
- '100' => '#FIELD# >= #VALUE# AND #FIELD# <= #VALUE1#',
- '101' => 'NOT (#FIELD# >= #VALUE# AND #FIELD# <= #VALUE1#)',
- '102' => '(#FIELD# & #VALUE#)=#VALUE#',
- '103' => '(#FIELD# & #VALUE#)!=#VALUE#',
- '104' => '(#FIELD# | #VALUE#)=#VALUE#',
- '105' => '(#FIELD# | #VALUE#)!=#VALUE#',
- // Type = boolean, offset = 128
- '128' => "#FIELD# = '1'",
- '129' => "#FIELD# != '1'",
- // Type = binary = 160
- '160' => "#FIELD# = '#VALUE#'",
- '161' => "#FIELD# != '#VALUE#'",
- '162' => '(#FIELD# & #VALUE#)=#VALUE#',
- '163' => '(#FIELD# & #VALUE#)=0'
- );
- var $comp_offsets = array(
- 'text' => 0,
- 'number' => 1,
- 'multiple' => 2,
- 'relation' => 2,
- 'files' => 2,
- 'date' => 3,
- 'time' => 3,
- 'boolean' => 4,
- 'binary' => 5
- );
- var $noWrap=' nowrap';
- var $name; // Form data name prefix
- var $table; // table for the query
- var $fieldList; // field list
- var $fields = array(); // Array of the fields possible
- var $extFieldLists = array();
- var $queryConfig=array(); // The query config
- var $enablePrefix=0;
- var $enableQueryParts = 0;
- var $extJSCODE='';
- protected $formName = '';
- /**
- * @return [type] ...
- */
- function makeFieldList() {
- global $TCA;
- $fieldListArr = array();
- if (is_array($TCA[$this->table])) {
- t3lib_div::loadTCA($this->table);
- foreach ($TCA[$this->table]['columns'] as $fN => $value) {
- $fieldListArr[]=$fN;
- }
- $fieldListArr[]='uid';
- $fieldListArr[]='pid';
- $fieldListArr[]='deleted';
- if ($TCA[$this->table]['ctrl']['tstamp']) $fieldListArr[]=$TCA[$this->table]['ctrl']['tstamp'];
- if ($TCA[$this->table]['ctrl']['crdate']) $fieldListArr[]=$TCA[$this->table]['ctrl']['crdate'];
- if ($TCA[$this->table]['ctrl']['cruser_id']) $fieldListArr[]=$TCA[$this->table]['ctrl']['cruser_id'];
- if ($TCA[$this->table]['ctrl']['sortby']) $fieldListArr[]=$TCA[$this->table]['ctrl']['sortby'];
- }
- return implode(',',$fieldListArr);
- }
- /**
- * [Describe function...]
- *
- * @param [type] $name: ...
- * @param [type] $table: ...
- * @param [type] $fieldList: ...
- * @return [type] ...
- */
- function init($name,$table,$fieldList='') {
- global $TCA;
- // Analysing the fields in the table.
- if (is_array($TCA[$table])) {
- t3lib_div::loadTCA($table);
- $this->name = $name;
- $this->table = $table;
- $this->fieldList = $fieldList ? $fieldList : $this->makeFieldList();
- $fieldArr = t3lib_div::trimExplode(',',$this->fieldList,1);
- foreach ($fieldArr as $fN) {
- $fC = $TCA[$this->table]['columns'][$fN];
- $this->fields[$fN] = $fC['config'];
- $this->fields[$fN]['exclude'] = $fC['exclude'];
- if (is_array($fC) && $fC['label']) {
- $this->fields[$fN]['label'] = rtrim(trim($GLOBALS['LANG']->sL($fC['label'])), ':');
- switch ($this->fields[$fN]['type']) {
- case 'input':
- if (preg_match('/int|year/i', $this->fields[$fN]['eval'])) {
- $this->fields[$fN]['type']='number';
- } elseif (preg_match('/time/i', $this->fields[$fN]['eval'])) {
- $this->fields[$fN]['type'] = 'time';
- } elseif (preg_match('/date/i', $this->fields[$fN]['eval'])) {
- $this->fields[$fN]['type']='date';
- } else {
- $this->fields[$fN]['type']='text';
- }
- break;
- case 'check':
- if (!$this->fields[$fN]['items']) {
- $this->fields[$fN]['type'] = 'boolean';
- } else {
- $this->fields[$fN]['type'] = 'binary';
- }
- break;
- case 'radio':
- $this->fields[$fN]['type'] = 'multiple';
- break;
- case 'select':
- $this->fields[$fN]['type'] = 'multiple';
- if ($this->fields[$fN]['foreign_table']) {
- $this->fields[$fN]['type'] = 'relation';
- }
- if ($this->fields[$fN]['special']) {
- $this->fields[$fN]['type'] = 'text';
- }
- break;
- case 'group':
- $this->fields[$fN]['type'] = 'files';
- if ($this->fields[$fN]['internal_type'] == 'db') {
- $this->fields[$fN]['type'] = 'relation';
- }
- break;
- case 'user':
- case 'flex':
- case 'passthrough':
- case 'none':
- case 'text':
- default:
- $this->fields[$fN]['type']='text';
- break;
- }
- } else {
- $this->fields[$fN]['label']='[FIELD: '.$fN.']';
- switch ($fN) {
- case 'pid':
- $this->fields[$fN]['type'] = 'relation';
- $this->fields[$fN]['allowed'] = 'pages';
- break;
- case 'cruser_id':
- $this->fields[$fN]['type'] = 'relation';
- $this->fields[$fN]['allowed'] = 'be_users';
- break;
- case 'tstamp':
- case 'crdate':
- $this->fields[$fN]['type'] = 'time';
- break;
- case 'deleted':
- $this->fields[$fN]['type'] = 'boolean';
- break;
- default:
- $this->fields[$fN]['type'] = 'number';
- break;
- }
- }
- }
- }
- /* // EXAMPLE:
- $this->queryConfig = array(
- array(
- 'operator' => 'AND',
- 'type' => 'FIELD_spaceBefore',
- ),
- array(
- 'operator' => 'AND',
- 'type' => 'FIELD_records',
- 'negate' => 1,
- 'inputValue' => 'foo foo'
- ),
- array(
- 'type' => 'newlevel',
- 'nl' => array(
- array(
- 'operator' => 'AND',
- 'type' => 'FIELD_spaceBefore',
- 'negate' => 1,
- 'inputValue' => 'foo foo'
- ),
- array(
- 'operator' => 'AND',
- 'type' => 'FIELD_records',
- 'negate' => 1,
- 'inputValue' => 'foo foo'
- )
- )
- ),
- array(
- 'operator' => 'OR',
- 'type' => 'FIELD_maillist',
- )
- );
- */
- $this->initUserDef();
- }
- /**
- * [Describe function...]
- *
- * @param [type] $name: ...
- * @param [type] $list: ...
- * @param [type] $force: ...
- * @return [type] ...
- */
- function setAndCleanUpExternalLists($name,$list,$force='') {
- $fields = array_unique(t3lib_div::trimExplode(',',$list.','.$force,1));
- $reList=array();
- foreach ($fields as $fN) {
- if ($this->fields[$fN]) $reList[]=$fN;
- }
- $this->extFieldLists[$name]=implode(',',$reList);
- }
- /**
- * [Describe function...]
- *
- * @param [type] $qC: ...
- * @return [type] ...
- */
- function procesData($qC='') {
- $this->queryConfig = $qC;
- $POST = t3lib_div::_POST();
- // if delete...
- if($POST['qG_del']) {
- //initialize array to work on, save special parameters
- $ssArr = $this->getSubscript($POST['qG_del']);
- $workArr =& $this->queryConfig;
- for($i=0;$i<sizeof($ssArr)-1;$i++) {
- $workArr =& $workArr[$ssArr[$i]];
- }
- // delete the entry and move the other entries
- unset($workArr[$ssArr[$i]]);
- for($j=$ssArr[$i];$j<sizeof($workArr);$j++) {
- $workArr[$j] = $workArr[$j+1];
- unset($workArr[$j+1]);
- }
- }
- // if insert...
- if($POST['qG_ins']) {
- //initialize array to work on, save special parameters
- $ssArr = $this->getSubscript($POST['qG_ins']);
- $workArr =& $this->queryConfig;
- for($i=0;$i<sizeof($ssArr)-1;$i++) {
- $workArr =& $workArr[$ssArr[$i]];
- }
- // move all entries above position where new entry is to be inserted
- for($j=sizeof($workArr);$j>$ssArr[$i];$j--) {
- $workArr[$j] = $workArr[$j-1];
- }
- //clear new entry position
- unset($workArr[$ssArr[$i]+1]);
- $workArr[$ssArr[$i]+1]['type'] = 'FIELD_';
- }
- // if move up...
- if($POST['qG_up']) {
- //initialize array to work on
- $ssArr = $this->getSubscript($POST['qG_up']);
- $workArr =& $this->queryConfig;
- for($i=0;$i<sizeof($ssArr)-1;$i++) {
- $workArr =& $workArr[$ssArr[$i]];
- }
- //swap entries
- $qG_tmp = $workArr[$ssArr[$i]];
- $workArr[$ssArr[$i]] = $workArr[$ssArr[$i]-1];
- $workArr[$ssArr[$i]-1] = $qG_tmp;
- }
- // if new level...
- if($POST['qG_nl']) {
- //initialize array to work on
- $ssArr = $this->getSubscript($POST['qG_nl']);
- $workArr =& $this->queryConfig;
- for($i=0;$i<sizeof($ssArr)-1;$i++) {
- $workArr =& $workArr[$ssArr[$i]];
- }
- // Do stuff:
- $tempEl = $workArr[$ssArr[$i]];
- if (is_array($tempEl)) {
- if ($tempEl['type']!='newlevel') {
- $workArr[$ssArr[$i]]=array(
- 'type' => 'newlevel',
- 'operator' => $tempEl['operator'],
- 'nl' => array($tempEl)
- );
- }
- }
- }
- // if collapse level...
- if($POST['qG_remnl']) {
- //initialize array to work on
- $ssArr = $this->getSubscript($POST['qG_remnl']);
- $workArr =& $this->queryConfig;
- for($i=0;$i<sizeof($ssArr)-1;$i++) {
- $workArr =& $workArr[$ssArr[$i]];
- }
- // Do stuff:
- $tempEl = $workArr[$ssArr[$i]];
- if (is_array($tempEl)) {
- if ($tempEl['type']=='newlevel') {
- $a1 = array_slice($workArr,0,$ssArr[$i]);
- $a2 = array_slice($workArr,$ssArr[$i]);
- array_shift($a2);
- $a3 = $tempEl['nl'];
- $a3[0]['operator'] = $tempEl['operator'];
- $workArr=array_merge($a1,$a3,$a2);
- }
- }
- }
- }
- /**
- * [Describe function...]
- *
- * @param [type] $queryConfig: ...
- * @return [type] ...
- */
- function cleanUpQueryConfig($queryConfig) {
- //since we dont traverse the array using numeric keys in the upcoming whileloop make sure it's fresh and clean before displaying
- if (is_array($queryConfig)) {
- ksort($queryConfig);
- } else {
- //queryConfig should never be empty!
- if(!$queryConfig[0] || !$queryConfig[0]['type']) $queryConfig[0] = array('type'=>'FIELD_');
- }
- // Traverse:
- $c=0;
- $arrCount=0;
- foreach ($queryConfig as $key => $conf) {
- if(substr($conf['type'],0,6)=='FIELD_') {
- $fName = substr($conf['type'],6);
- $fType = $this->fields[$fName]['type'];
- } elseif($conf['type']=='newlevel') {
- $fType = $conf['type'];
- } else {
- $fType = 'ignore';
- }
- // debug($fType);
- switch($fType) {
- case 'newlevel':
- if(!$queryConfig[$key]['nl']) $queryConfig[$key]['nl'][0]['type'] = 'FIELD_';
- $queryConfig[$key]['nl']=$this->cleanUpQueryConfig($queryConfig[$key]['nl']);
- break;
- case 'userdef':
- $queryConfig[$key]=$this->userDefCleanUp($queryConfig[$key]);
- break;
- case 'ignore':
- default:
- // debug($queryConfig[$key]);
- $verifiedName=$this->verifyType($fName);
- $queryConfig[$key]['type']='FIELD_'.$this->verifyType($verifiedName);
- if($conf['comparison'] >> 5 != $this->comp_offsets[$fType]) $conf['comparison'] = $this->comp_offsets[$fType] << 5;
- $queryConfig[$key]['comparison']=$this->verifyComparison($conf['comparison'],$conf['negate']?1:0);
- $queryConfig[$key]['inputValue']=$this->cleanInputVal($queryConfig[$key]);
- $queryConfig[$key]['inputValue1']=$this->cleanInputVal($queryConfig[$key],1);
- // debug($queryConfig[$key]);
- break;
- }
- }
- return $queryConfig;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $subLevel: ...
- * @param [type] $queryConfig: ...
- * @param [type] $parent: ...
- * @return [type] ...
- */
- function getFormElements($subLevel=0,$queryConfig='',$parent='') {
- $codeArr=array();
- if (!is_array($queryConfig)) $queryConfig=$this->queryConfig;
- $c=0;
- $arrCount=0;
- foreach ($queryConfig as $key => $conf) {
- $subscript = $parent.'['.$key.']';
- $lineHTML = '';
- $lineHTML.=$this->mkOperatorSelect($this->name.$subscript,$conf['operator'],$c,($conf['type']!='FIELD_'));
- if(substr($conf['type'],0,6)=='FIELD_') {
- $fName = substr($conf['type'],6);
- $this->fieldName = $fName;
- $fType = $this->fields[$fName]['type'];
- if($conf['comparison'] >> 5 != $this->comp_offsets[$fType]) $conf['comparison'] = $this->comp_offsets[$fType] << 5;
- //nasty nasty...
- //make sure queryConfig contains _actual_ comparevalue.
- //mkCompSelect don't care, but getQuery does.
- $queryConfig[$key]['comparison'] += (isset($conf['negate'])-($conf['comparison']%2));
- } elseif($conf['type']=='newlevel') {
- $fType = $conf['type'];
- } else {
- $fType = 'ignore';
- }
- switch($fType) {
- case 'ignore':
- break;
- case 'newlevel':
- if(!$queryConfig[$key]['nl']) $queryConfig[$key]['nl'][0]['type'] = 'FIELD_';
- $lineHTML.='<input type="hidden" name="'.$this->name.$subscript.'[type]" value="newlevel">';
- $codeArr[$arrCount]['sub'] = $this->getFormElements($subLevel+1,$queryConfig[$key]['nl'],$subscript.'[nl]');
- break;
- case 'userdef':
- $lineHTML.=$this->userDef($this->name.$subscript,$conf,$fName,$fType);
- break;
- case 'date':
- $lineHTML.=$this->mkTypeSelect($this->name.$subscript.'[type]',$fName);
- $lineHTML.=$this->mkCompSelect($this->name.$subscript.'[comparison]',$conf['comparison'],$conf['negate']?1:0);
- $lineHTML.='<input type="checkbox" class="checkbox"' . ($conf['negate']?' checked':'').' name="'.$this->name.$subscript.'[negate]'.'" onClick="submit();">';
- if ($conf['comparison']==100 || $conf['comparison']==101) { // between
- $lineHTML.='<input type="text" name="'.$this->name.$subscript.'[inputValue]_hr'.'" value="'.strftime('%e-%m-%Y', $conf['inputValue']).'" '.$GLOBALS['TBE_TEMPLATE']->formWidth(10).' onChange="typo3form.fieldGet(\''.$this->name.$subscript.'[inputValue]\', \'date\', \'\', 0,0);"><input type="hidden" value="'.htmlspecialchars($conf['inputValue']).'" name="'.$this->name.$subscript.'[inputValue]'.'">';
- $lineHTML.='<input type="text" name="'.$this->name.$subscript.'[inputValue1]_hr'.'" value="'.strftime('%e-%m-%Y', $conf['inputValue1']).'" '.$GLOBALS['TBE_TEMPLATE']->formWidth(10).' onChange="typo3form.fieldGet(\''.$this->name.$subscript.'[inputValue1]\', \'date\', \'\', 0,0);"><input type="hidden" value="'.htmlspecialchars($conf['inputValue1']).'" name="'.$this->name.$subscript.'[inputValue1]'.'">';
- $this->extJSCODE.='typo3form.fieldSet("'.$this->name.$subscript.'[inputValue]", "date", "", 0,0);';
- $this->extJSCODE.='typo3form.fieldSet("'.$this->name.$subscript.'[inputValue1]", "date", "", 0,0);';
- } else {
- $lineHTML.='<input type="text" name="'.$this->name.$subscript.'[inputValue]_hr'.'" value="'.strftime('%e-%m-%Y', $conf['inputValue']).'" '.$GLOBALS['TBE_TEMPLATE']->formWidth(10).' onChange="typo3form.fieldGet(\''.$this->name.$subscript.'[inputValue]\', \'date\', \'\', 0,0);"><input type="hidden" value="'.htmlspecialchars($conf['inputValue']).'" name="'.$this->name.$subscript.'[inputValue]'.'">';
- $this->extJSCODE.='typo3form.fieldSet("'.$this->name.$subscript.'[inputValue]", "date", "", 0,0);';
- }
- break;
- case 'time':
- $lineHTML.=$this->mkTypeSelect($this->name.$subscript.'[type]', $fName);
- $lineHTML.=$this->mkCompSelect($this->name.$subscript.'[comparison]', $conf['comparison'], $conf['negate']?1:0);
- $lineHTML.='<input type="checkbox" class="checkbox"'.($conf['negate']?' checked':'').' name="'.$this->name.$subscript.'[negate]'.'" onClick="submit();">';
- if ($conf['comparison']==100 || $conf['comparison']==101) { // between:
- $lineHTML.='<input type="text" name="'.$this->name.$subscript.'[inputValue]_hr'.'" value="'.strftime('%H:%M %e-%m-%Y', $conf['inputValue']).'" '.$GLOBALS['TBE_TEMPLATE']->formWidth(10).' onChange="typo3form.fieldGet(\''.$this->name.$subscript.'[inputValue]\', \'datetime\', \'\', 0,0);"><input type="hidden" value="'.htmlspecialchars($conf['inputValue']).'" name="'.$this->name.$subscript.'[inputValue]'.'">';
- $lineHTML.='<input type="text" name="'.$this->name.$subscript.'[inputValue1]_hr'.'" value="'.strftime('%H:%M %e-%m-%Y', $conf['inputValue1']).'" '.$GLOBALS['TBE_TEMPLATE']->formWidth(10).' onChange="typo3form.fieldGet(\''.$this->name.$subscript.'[inputValue1]\', \'datetime\', \'\', 0,0);"><input type="hidden" value="'.htmlspecialchars($conf['inputValue1']).'" name="'.$this->name.$subscript.'[inputValue1]'.'">';
- $this->extJSCODE.='typo3form.fieldSet("'.$this->name.$subscript.'[inputValue]", "datetime", "", 0,0);';
- $this->extJSCODE.='typo3form.fieldSet("'.$this->name.$subscript.'[inputValue1]", "datetime", "", 0,0);';
- } else {
- $lineHTML.='<input type="text" name="'.$this->name.$subscript.'[inputValue]_hr'.'" value="'.strftime('%H:%M %e-%m-%Y', intval($conf['inputValue'])).'" '.$GLOBALS['TBE_TEMPLATE']->formWidth(10).' onChange="typo3form.fieldGet(\''.$this->name.$subscript.'[inputValue]\', \'datetime\', \'\', 0,0);"><input type="hidden" value="'.htmlspecialchars($conf['inputValue']).'" name="'.$this->name.$subscript.'[inputValue]'.'">';
- $this->extJSCODE.='typo3form.fieldSet("'.$this->name.$subscript.'[inputValue]", "datetime", "", 0,0);';
- }
- break;
- case 'multiple':
- case 'binary':
- case 'relation':
- $lineHTML.=$this->mkTypeSelect($this->name.$subscript.'[type]', $fName);
- $lineHTML.=$this->mkCompSelect($this->name.$subscript.'[comparison]', $conf['comparison'], $conf['negate']?1:0);
- $lineHTML.='<input type="checkbox" class="checkbox"'.($conf['negate']?' checked':'').' name="'.$this->name.$subscript.'[negate]'.'" onClick="submit();">';
- if ($conf['comparison']==68 || $conf['comparison']==69 || $conf['comparison']==162 || $conf['comparison']==163) {
- $lineHTML.='<select name="'.$this->name.$subscript.'[inputValue]'.'[]" style="vertical-align:top;" size="5" multiple>';
- } elseif ($conf['comparison']==66 || $conf['comparison']==67) {
- if (is_array($conf['inputValue'])) {
- $conf['inputValue'] = implode(',', $conf['inputValue']);
- }
- $lineHTML.= '<input type="text" value="'.htmlspecialchars($conf['inputValue']).'" name="'.$this->name.$subscript.'[inputValue]'.'"'.$GLOBALS['TBE_TEMPLATE']->formWidth(10).'>';
- } else {
- $lineHTML.= '<select name="'.$this->name.$subscript.'[inputValue]'.'" style="vertical-align:top;" onChange="submit();">';
- }
- if ($conf['comparison']!=66 && $conf['comparison']!=67) {
- $lineHTML.= $this->makeOptionList($fName, $conf, $this->table);
- $lineHTML.= '</select>';
- }
- break;
- case 'files':
- $lineHTML.= $this->mkTypeSelect($this->name.$subscript.'[type]', $fName);
- $lineHTML.= $this->mkCompSelect($this->name.$subscript.'[comparison]', $conf['comparison'], $conf['negate']?1:0);
- $lineHTML.= '<input type="checkbox" class="checkbox"'.($conf['negate']?' checked':'').' name="'.$this->name.$subscript.'[negate]'.'" onClick="submit();">';
- if ($conf['comparison']==68 || $conf['comparison']==69) {
- $lineHTML .= '<select name="'.$this->name.$subscript.'[inputValue]'.'[]" style="vertical-align:top;" size="5" multiple>';
- } else {
- $lineHTML .= '<select name="'.$this->name.$subscript.'[inputValue]'.'" style="vertical-align:top;" onChange="submit();">';
- }
- $lineHTML .= '<option value=""></option>'.$this->makeOptionList($fName, $conf, $this->table);
- $lineHTML .= '</select>';
- if ($conf['comparison']==66 || $conf['comparison']==67) {
- $lineHTML .= ' + <input type="text" value="'.htmlspecialchars($conf['inputValue1']).'" name="'.$this->name.$subscript.'[inputValue1]'.'"'.$GLOBALS['TBE_TEMPLATE']->formWidth(10).'>';
- }
- break;
- case 'boolean':
- $lineHTML .= $this->mkTypeSelect($this->name.$subscript.'[type]', $fName);
- $lineHTML .= $this->mkCompSelect($this->name.$subscript.'[comparison]', $conf['comparison'], $conf['negate']?1:0);
- $lineHTML .= '<input type="checkbox" class="checkbox"'.($conf['negate']?' checked':'').' name="'.$this->name.$subscript.'[negate]'.'" onClick="submit();">';
- $lineHTML .= '<input type="hidden" value="1" name="'.$this->name.$subscript.'[inputValue]'.'"'.$GLOBALS['TBE_TEMPLATE']->formWidth(10).'>';
- break;
- default:
- $lineHTML .= $this->mkTypeSelect($this->name.$subscript.'[type]', $fName);
- $lineHTML .= $this->mkCompSelect($this->name.$subscript.'[comparison]', $conf['comparison'], $conf['negate']?1:0);
- $lineHTML .= '<input type="checkbox" class="checkbox"'.($conf['negate']?' checked':'').' name="'.$this->name.$subscript.'[negate]'.'" onClick="submit();">';
- if ($conf['comparison']==37 || $conf['comparison']==36) { // between:
- $lineHTML.='<input type="text" value="'.htmlspecialchars($conf['inputValue']).'" name="'.$this->name.$subscript.'[inputValue]'.'"'.$GLOBALS['TBE_TEMPLATE']->formWidth(5).'>
- <input type="text" value="'.htmlspecialchars($conf['inputValue1']).'" name="'.$this->name.$subscript.'[inputValue1]'.'"'.$GLOBALS['TBE_TEMPLATE']->formWidth(5).'>'; // onChange='submit();'
- } else {
- $lineHTML.='<input type="text" value="'.htmlspecialchars($conf['inputValue']).'" name="'.$this->name.$subscript.'[inputValue]'.'"'.$GLOBALS['TBE_TEMPLATE']->formWidth(10).'>'; // onChange="submit();"
- }
- break;
- }
- if($fType != 'ignore') {
- $lineHTML .= $this->updateIcon();
- if ($loopcount) {
- $lineHTML .= '<input type="image" border="0" ' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/garbage.gif', 'width="11" height="12"') . 'title="Remove condition" name="qG_del'.$subscript.'">';
- }
- $lineHTML .= '<input type="image" border="0" ' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/add.gif', 'width="12" height="12"') . ' title="Add condition" name="qG_ins'.$subscript.'">';
- if($c!=0) $lineHTML.= '<input type="image" border="0" ' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/pil2up.gif', 'width="12" height="7"') . ' title="Move up" name="qG_up'.$subscript.'">';
- if($c!=0 && $fType!='newlevel') {
- $lineHTML.= '<input type="image" border="0" ' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/pil2right.gif', 'height="12" width="7"') . ' title="New level" name="qG_nl'.$subscript.'">';
- }
- if($fType=='newlevel') {
- $lineHTML.= '<input type="image" border="0" ' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/pil2left.gif', 'height="12" width="7"') . ' title="Collapse new level" name="qG_remnl'.$subscript.'">';
- }
- $codeArr[$arrCount]['html'] = $lineHTML;
- $codeArr[$arrCount]['query'] = $this->getQuerySingle($conf,$c>0?0:1);
- $arrCount++;
- $c++;
- }
- $loopcount = 1;
- }
- // $codeArr[$arrCount] .='<input type="hidden" name="CMD" value="displayQuery">';
- $this->queryConfig = $queryConfig;
- //modifyHTMLColor($color,$R,$G,$B)
- return $codeArr;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $codeArr: ...
- * @param [type] $l: ...
- * @param [type] $table: ...
- * @return [type] ...
- */
- function makeOptionList($fN, $conf, $table) {
- $fieldSetup = $this->fields[$fN];
- if ($fieldSetup['type']=='files') {
- if ($conf['comparison']==66 || $conf['comparison']==67) {
- $fileExtArray = explode(',', $fieldSetup['allowed']);
- natcasesort($fileExtArray);
- foreach ($fileExtArray as $fileExt) {
- if (t3lib_div::inList($conf['inputValue'], $fileExt)) {
- $out .= '<option value="'.$fileExt.'" selected>.'.$fileExt.'</option>';
- } else {
- $out .= '<option value="'.$fileExt.'">.'.$fileExt.'</option>';
- }
- }
- }
- $d = dir(t3lib_div::getIndpEnv(TYPO3_DOCUMENT_ROOT).'/'.$fieldSetup['uploadfolder']);
- while (false !== ($entry=$d->read())) {
- if ($entry=='.' || $entry=='..') {
- continue;
- }
- $fileArray[] = $entry;
- }
- $d->close();
- natcasesort($fileArray);
- foreach ($fileArray as $fileName) {
- if (t3lib_div::inList($conf['inputValue'], $fileName)) {
- $out .= '<option value="'.$fileName.'" selected>'.$fileName.'</option>';
- } else {
- $out .= '<option value="'.$fileName.'">'.$fileName.'</option>';
- }
- }
- }
- if ($fieldSetup['type']=='multiple') {
- foreach ($fieldSetup['items'] as $key=>$val) {
- if (substr($val[0], 0, 4) == 'LLL:') {
- $value = $GLOBALS['LANG']->sL($val[0]);
- } else {
- $value = $val[0];
- }
- if (t3lib_div::inList($conf['inputValue'], $val[1])) {
- $out .= '<option value="'.$val[1].'" selected>'.$value.'</option>';
- } else {
- $out .= '<option value="'.$val[1].'">'.$value.'</option>';
- }
- }
- }
- if ($fieldSetup['type']=='binary') {
- foreach ($fieldSetup['items'] as $key=>$val) {
- if (substr($val[0], 0, 4)=='LLL:') {
- $value = $GLOBALS['LANG']->sL($val[0]);
- } else {
- $value = $val[0];
- }
- if (t3lib_div::inList($conf['inputValue'], pow(2, $key))) {
- $out .= '<option value="'.pow(2, $key).'" selected>'.$value.'</option>';
- } else {
- $out .= '<option value="'.pow(2, $key).'">'.$value.'</option>';
- }
- }
- }
- if ($fieldSetup['type']=='relation') {
- if ($fieldSetup['items']) {
- foreach ($fieldSetup['items'] as $key=>$val) {
- if (substr($val[0], 0, 4) == 'LLL:') {
- $value = $GLOBALS['LANG']->sL($val[0]);
- } else {
- $value = $val[0];
- }
- if (t3lib_div::inList($conf['inputValue'], $val[1])) {
- $out .= '<option value="'.$val[1].'" selected>'.$value.'</option>';
- } else {
- $out .= '<option value="'.$val[1].'">'.$value.'</option>';
- }
- }
- }
- global $TCA;
- if (stristr($fieldSetup['allowed'], ',')) {
- $from_table_Arr = explode(',', $fieldSetup['allowed']);
- $useTablePrefix = 1;
- if (!$fieldSetup['prepend_tname']) {
- $checkres = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fN, $table, t3lib_BEfunc::deleteClause($table), $groupBy = '', $orderBy = '', $limit = '');
- if ($checkres) {
- while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($checkres)) {
- if (stristr($row[$fN], ',')) {
- $checkContent = explode(',', $row[$fN]);
- foreach ($checkContent as $singleValue) {
- if (!stristr($singleValue, '_')) {
- $dontPrefixFirstTable = 1;
- }
- }
- } else {
- $singleValue = $row[$fN];
- if (strlen($singleValue) && !stristr($singleValue, '_')) {
- $dontPrefixFirstTable = 1;
- }
- }
- }
- }
- }
- } else {
- $from_table_Arr[0] = $fieldSetup['allowed'];
- }
- if ($fieldSetup['prepend_tname']) {
- $useTablePrefix = 1;
- }
- if ($fieldSetup['foreign_table']) {
- $from_table_Arr[0] = $fieldSetup['foreign_table'];
- }
- $counter = 0;
- while (list(, $from_table) = each($from_table_Arr)) {
- if (($useTablePrefix && !$dontPrefixFirstTable && $counter!=1) || $counter==1) {
- $tablePrefix = $from_table.'_';
- }
- $counter = 1;
- if (is_array($TCA[$from_table])) {
- t3lib_div::loadTCA($from_table);
- $labelField = $TCA[$from_table]['ctrl']['label'];
- $altLabelField = $TCA[$from_table]['ctrl']['label_alt'];
- if ($TCA[$from_table]['columns'][$labelField]['config']['items']) {
- foreach ($TCA[$from_table]['columns'][$labelField]['config']['items'] as $labelArray) {
- if (substr($labelArray[0], 0, 4) == 'LLL:') {
- $labelFieldSelect[$labelArray[1]] = $GLOBALS['LANG']->sL($labelArray[0]);
- } else {
- $labelFieldSelect[$labelArray[1]] = $labelArray[0];
- }
- }
- $useSelectLabels = 1;
- }
- if ($TCA[$from_table]['columns'][$altLabelField]['config']['items']) {
- foreach ($TCA[$from_table]['columns'][$altLabelField]['config']['items'] as $altLabelArray) {
- if (substr($altLabelArray[0], 0, 4) == 'LLL:') {
- $altLabelFieldSelect[$altLabelArray[1]] = $GLOBALS['LANG']->sL($altLabelArray[0]);
- } else {
- $altLabelFieldSelect[$altLabelArray[1]] = $altLabelArray[0];
- }
- }
- $useAltSelectLabels = 1;
- }
- $altLabelFieldSelect = $altLabelField ? ','.$altLabelField : '';
- $select_fields = 'uid,'.$labelField.$altLabelFieldSelect;
- if (!$GLOBALS['BE_USER']->isAdmin() && $GLOBALS['TYPO3_CONF_VARS']['BE']['lockBeUserToDBmounts']) {
- $webMounts = $GLOBALS['BE_USER']->returnWebmounts();
- $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
- foreach ($webMounts as $key => $val) {
- if ($webMountPageTree) {
- $webMountPageTreePrefix = ',';
- }
- $webMountPageTree .= $webMountPageTreePrefix.$this->getTreeList($val, 999, $begin = 0, $perms_clause);
- }
- if ($from_table=='pages') {
- $where_clause = 'uid IN ('.$webMountPageTree.') ';
- if (!$GLOBALS['SOBE']->MOD_SETTINGS['show_deleted']) {
- $where_clause .= t3lib_BEfunc::deleteClause($from_table).' AND'.$perms_clause;
- }
- } else {
- $where_clause = 'pid IN ('.$webMountPageTree.') ';
- if (!$GLOBALS['SOBE']->MOD_SETTINGS['show_deleted']) {
- $where_clause .= t3lib_BEfunc::deleteClause($from_table);
- }
- }
- } else {
- $where_clause = 'uid';
- if (!$GLOBALS['SOBE']->MOD_SETTINGS['show_deleted']) {
- $where_clause .= t3lib_BEfunc::deleteClause($from_table);
- }
- }
- $orderBy = 'uid';
- if (!$this->tableArray[$from_table]) {
- $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields, $from_table, $where_clause, $groupBy = '', $orderBy, $limit = '');
- }
- if ($res) {
- while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
- $this->tableArray[$from_table][] = $row;
- }
- }
- foreach ($this->tableArray[$from_table] as $key=>$val) {
- if ($useSelectLabels) {
- $outArray[$tablePrefix.$val['uid']] = htmlspecialchars($labelFieldSelect[$val[$labelField]]);
- } elseif ($val[$labelField]) {
- $outArray[$tablePrefix.$val['uid']] = htmlspecialchars($val[$labelField]);
- } elseif ($useAltSelectLabels) {
- $outArray[$tablePrefix.$val['uid']] = htmlspecialchars($altLabelFieldSelect[$val[$altLabelField]]);
- } else {
- $outArray[$tablePrefix.$val['uid']] = htmlspecialchars($val[$altLabelField]);
- }
- }
- if ($GLOBALS['SOBE']->MOD_SETTINGS['options_sortlabel'] && is_array($outArray)) {
- natcasesort($outArray);
- }
- }
- }
- foreach ($outArray as $key2 => $val2) {
- if (t3lib_div::inList($conf['inputValue'], $key2)) {
- $out .= '<option value="'.$key2.'" selected>['.$key2.'] '.$val2.'</option>';
- } else {
- $out .= '<option value="'.$key2.'">['.$key2.'] '.$val2.'</option>';
- }
- }
- }
- return $out;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $codeArr: ...
- * @param [type] $l: ...
- * @return [type] ...
- */
- function printCodeArray($codeArr,$l=0) {
- $line='';
- if ($l) $indent='<td style="vertical-align:top;"><img height="1" width="50"></td>';
- $lf=$l*30;
- $bgColor = t3lib_div::modifyHTMLColor($GLOBALS['TBE_TEMPLATE']->bgColor2,$lf,$lf,$lf);
- foreach ($codeArr as $k => $v) {
- $line.= '<tr>'.$indent.'<td bgcolor="'.$bgColor.'"'.$this->noWrap.'>'.$v['html'].'</td></tr>';
- if ($this->enableQueryParts) {$line.= '<tr>'.$indent.'<td>'.$this->formatQ($v['query']).'</td></tr>';}
- if (is_array($v['sub'])) {
- $line.= '<tr>'.$indent.'<td'.$this->noWrap.'>'.$this->printCodeArray($v['sub'],$l+1).'</td></tr>';
- }
- }
- $out='<table border="0" cellpadding="0" cellspacing="1">'.$line.'</table>';
- return $out;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $str: ...
- * @return [type] ...
- */
- function formatQ($str) {
- return '<font size="1" face="verdana" color="maroon"><i>' . htmlspecialchars($str) . '</i></font>';
- }
- /**
- * [Describe function...]
- *
- * @param [type] $name: ...
- * @param [type] $op: ...
- * @param [type] $draw: ...
- * @param [type] $submit: ...
- * @return [type] ...
- */
- function mkOperatorSelect($name,$op,$draw,$submit) {
- if ($draw) {
- $out='<select name="'.$name.'[operator]"'.($submit?' onChange="submit();"':'').'>'; //
- $out.='<option value="AND"'.(!$op||$op=="AND" ? ' selected':'').'>'.$this->lang["AND"].'</option>';
- $out.='<option value="OR"'.($op=='OR' ? ' selected':'').'>'.$this->lang['OR'].'</option>';
- $out.='</select>';
- } else {
- $out.='<input type="hidden" value="'.$op.'" name="'.$name.'[operator]">';
- $out.='<img src="clear.gif" height="1" width="47">';
- }
- return $out;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $name: ...
- * @param [type] $fieldName: ...
- * @param [type] $prepend: ...
- * @return [type] ...
- */
- function mkTypeSelect($name,$fieldName,$prepend='FIELD_') {
- $out='<select name="'.$name.'" onChange="submit();">';
- $out.='<option value=""></option>';
- foreach ($this->fields as $key => $value) {
- if (!$fieldValue['exclude'] || $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table.':'.$key)) {
- $label = $this->fields[$key]['label'];
- $label_alt = $this->fields[$key]['label_alt'];
- $out .= '<option value="'.$prepend.$key.'"'.($key==$fieldName ? ' selected' : '').'>'.$label.'</option>';
- }
- }
- $out.='</select>';
- return $out;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $fieldName: ...
- * @return [type] ...
- */
- function verifyType($fieldName) {
- $first = '';
- foreach ($this->fields as $key => $value) {
- if (!$first) $first = $key;
- if ($key==$fieldName) return $key;
- }
- return $first;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $comparison: ...
- * @param [type] $neg: ...
- * @return [type] ...
- */
- function verifyComparison($comparison,$neg) {
- $compOffSet = $comparison >> 5;
- $first=-1;
- for($i=32*$compOffSet+$neg;$i<32*($compOffSet+1);$i+=2) {
- if ($first==-1) $first = $i;
- if (($i >> 1)==($comparison >> 1)) {
- return $i;
- }
- }
- return $first;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $name: ...
- * @param [type] $fieldName: ...
- * @return [type] ...
- */
- function mkFieldToInputSelect($name,$fieldName) {
- $out='<input type="Text" value="'.htmlspecialchars($fieldName).'" name="'.$name.'"'.$GLOBALS['TBE_TEMPLATE']->formWidth().'>'.$this->updateIcon();
- $out.='<a href="#" onClick="document.forms[0][\''.$name.'\'].value=\'\';return false;">' . t3lib_iconWorks::getSpriteIcon('actions-edit-delete', array('title' => 'Clear list')) . '</a>';
- $out.='<BR><select name="_fieldListDummy" size="5" onChange="document.forms[0][\''.$name.'\'].value+=\',\'+this.value">';
- foreach ($this->fields as $key => $value) {
- if (!$fieldValue['exclude'] || $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table.':'.$key)) {
- $label = $this->fields[$key]['label'];
- $label_alt = $this->fields[$key]['label_alt'];
- $out .= '<option value="'.$key.'"'.($key==$fieldName ? ' selected':'').'>'.$label.'</option>';
- }
- }
- $out.='</select>';
- return $out;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $name: ...
- * @param [type] $cur: ...
- * @return [type] ...
- */
- function mkTableSelect($name,$cur) {
- global $TCA;
- $out='<select name="'.$name.'" onChange="submit();">';
- $out.='<option value=""></option>';
- foreach ($TCA as $tN => $value) {
- if ($GLOBALS['BE_USER']->check('tables_select',$tN)) {
- $out.='<option value="'.$tN.'"'.($tN==$cur ? ' selected':'').'>'.$GLOBALS['LANG']->sl($TCA[$tN]['ctrl']['title']).'</option>';
- }
- }
- $out.='</select>';
- return $out;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $name: ...
- * @param [type] $comparison: ...
- * @param [type] $neg: ...
- * @return [type] ...
- */
- function mkCompSelect($name,$comparison,$neg) {
- $compOffSet = $comparison >> 5;
- $out='<select name="'.$name.'" onChange="submit();">';
- for($i=32*$compOffSet+$neg;$i<32*($compOffSet+1);$i+=2) {
- if($this->lang['comparison'][$i.'_']) {
- $out.='<option value="'.$i.'"'.(($i >> 1)==($comparison >> 1) ? ' selected':'').'>'.$this->lang['comparison'][$i.'_'].'</option>';
- }
- }
- $out.='</select>';
- return $out;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $arr: ...
- * @return [type] ...
- */
- function getSubscript($arr) {
- while(is_array($arr)) {
- reset($arr);
- list($key,)=each($arr);
- $retArr[] = $key;
- $arr = $arr[$key];
- }
- return $retArr;
- }
- /**
- * [Describe function...]
- *
- * @return [type] ...
- */
- function initUserDef() {
- }
- /**
- * [Describe function...]
- *
- * @return [type] ...
- */
- function userDef() {
- }
- /**
- * [Describe function...]
- *
- * @param [type] $queryConfig: ...
- * @return [type] ...
- */
- function userDefCleanUp($queryConfig) {
- return $queryConfig;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $queryConfig: ...
- * @param [type] $pad: ...
- * @return [type] ...
- */
- function getQuery ($queryConfig,$pad='') {
- $qs = '';
- // Since we don't traverse the array using numeric keys in the upcoming whileloop make sure it's fresh and clean
- ksort($queryConfig);
- $first=1;
- foreach ($queryConfig as $key => $conf) {
- switch($conf['type']) {
- case 'newlevel':
- $qs.=LF.$pad.trim($conf['operator']).' ('.$this->getQuery($queryConfig[$key]['nl'],$pad.' ').LF.$pad.')';
- break;
- case 'userdef':
- $qs.=LF.$pad.getUserDefQuery($conf,$first);
- break;
- default:
- $qs.=LF.$pad.$this->getQuerySingle($conf,$first);
- break;
- }
- $first=0;
- }
- return $qs;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $conf: ...
- * @param [type] $first: ...
- * @return [type] ...
- */
- function getQuerySingle($conf,$first) {
- $prefix = $this->enablePrefix ? $this->table.'.' : '';
- if (!$first) {
- // Is it OK to insert the AND operator if none is set?
- $qs .= trim(($conf['operator'] ? $conf['operator'] : 'AND')).' ';
- }
- $qsTmp = str_replace('#FIELD#', $prefix.trim(substr($conf['type'],6)), $this->compSQL[$conf['comparison']]);
- $inputVal = $this->cleanInputVal($conf);
- if ($conf['comparison']==68 || $conf['comparison']==69) {
- $inputVal = explode(',', $inputVal);
- foreach ($inputVal as $key => $fileName) {
- $inputVal[$key] = "'".$fileName."'";
- }
- $inputVal = implode(',', $inputVal);
- $qsTmp = str_replace('#VALUE#', $inputVal, $qsTmp);
- } elseif ($conf['comparison']==162 || $conf['comparison']==163) {
- $inputValArray = explode(',', $inputVal);
- $inputVal = 0;
- foreach ($inputValArray as $key=>$fileName) {
- $inputVal += intval($fileName);
- }
- $qsTmp = str_replace('#VALUE#', $inputVal, $qsTmp);
- } else {
- $qsTmp = str_replace('#VALUE#', $GLOBALS['TYPO3_DB']->quoteStr($inputVal,$this->table), $qsTmp);
- }
- if ($conf['comparison']==37 || $conf['comparison']==36 || $conf['comparison']==66 || $conf['comparison']==67 || $conf['comparison']==100 || $conf['comparison']==101) { // between:
- $inputVal = $this->cleanInputVal($conf,'1');
- $qsTmp = str_replace('#VALUE1#', $GLOBALS['TYPO3_DB']->quoteStr($inputVal,$this->table), $qsTmp);
- }
- $qs .= trim($qsTmp);
- return $qs;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $conf: ...
- * @param [type] $suffix: ...
- * @return [type] ...
- */
- function cleanInputVal($conf,$suffix='') {
- if(($conf['comparison'] >> 5==0) || ($conf['comparison']==32 || $conf['comparison']==33 || $conf['comparison']==64 || $conf['comparison']==65 || $conf['comparison']==66 || $conf['comparison']==67 || $conf['comparison']==96 || $conf['comparison']==97)) {
- $inputVal = $conf['inputValue'.$suffix];
- } elseif ($conf['comparison']==39 || $conf['comparison']==38) { // in list:
- $inputVal = implode(',',t3lib_div::intExplode(',',$conf['inputValue'.$suffix]));
- } elseif ($conf['comparison']==68 || $conf['comparison']==69 || $conf['comparison']==162 || $conf['comparison']==163) { // in list:
- if (is_array($conf['inputValue'.$suffix])) {
- $inputVal = implode(',', $conf['inputValue'.$suffix]);
- } elseif ($conf['inputValue'.$suffix]) {
- $inputVal = $conf['inputValue'.$suffix];
- } else {
- $inputVal = 0;
- }
- } else {
- $inputVal = doubleval($conf['inputValue'.$suffix]);
- }
- return $inputVal;
- }
- /**
- * [Describe function...]
- *
- * @param [type] $qcArr: ...
- * @return [type] ...
- */
- function getUserDefQuery ($qcArr) {
- }
- /**
- * [Describe function...]
- *
- * @return [type] ...
- */
- function updateIcon() {
- return '<input type="image" border="0" ' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/refresh_n.gif', 'width="14" height="14"') . ' title="Update" name="just_update">';
- }
- /**
- * [Describe function...]
- *
- * @return [type] ...
- */
- function getLabelCol() {
- global $TCA;
- return $TCA[$this->table]['ctrl']['label'];
- }
- /**
- * [Describe function...]
- *
- * @param [type] $modSettings: ...
- * @param [type] $enableList: ...
- * @return [type] ...
- */
- function makeSelectorTable($modSettings,$enableList='table,fields,query,group,order,limit') {
- $enableArr=explode(',',$enableList);
- // Make output
- $TDparams = ' class="bgColor5" nowrap';
- if (in_array('table',$enableArr) && !$GLOBALS['BE_USER']->userTS['mod.']['dbint.']['disableSelectATable']) {
- $out='
- <tr>
- <td'.$TDparams.'><strong>Select a table:</strong></td>
- <td'.$TDparams.'>'.$this->mkTableSelect('SET[queryTable]',$this->table).'</td>
- </tr>';
- }
- if ($this->table) {
- // Init fields:
- $this->setAndCleanUpExternalLists('queryFields',$modSettings['queryFields'],'uid,'.$this->getLabelCol());
- $this->setAndCleanUpExternalLists('queryGroup',$modSettings['queryGroup']);
- $this->setAndCleanUpExternalLists('queryOrder',$modSettings['queryOrder'].','.$modSettings['queryOrder2']);
- // Limit:
- $this->extFieldLists['queryLimit']=$modSettings['queryLimit'];
- if (!$this->extFieldLists['queryLimit']) $this->extFieldLists['queryLimit']=100;
- $parts = t3lib_div::intExplode(',',$this->extFieldLists['queryLimit']);
- if ($parts[1]) {
- $this->limitBegin = $parts[0];
- $this->limitLength = $parts[1];
- } else {
- $this->limitLength = $this->extFieldLists['queryLimit'];
- }
- $this->extFieldLists['queryLimit'] = implode(',',array_slice($parts,0,2));
- // Insert Descending parts
- if ($this->extFieldLists['queryOrder']) {
- $descParts = explode(',',$modSettings['queryOrderDesc'].','.$modSettings['queryOrder2Desc']);
- $orderParts = explode(',',$this->extFieldLists['queryOrder']);
- $reList=array();
- foreach ($orderParts as $kk => $vv) {
- $reList[]=$vv.($descParts[$kk]?' DESC':'');
- }
- $this->extFieldLists['queryOrder_SQL'] = implode(',',$reList);
- }
- // Query Generator:
- $this->procesData($modSettings['queryConfig'] ? unserialize($modSettings['queryConfig']) : '');
- // debug($this->queryConfig);
- $this->queryConfig = $this->cleanUpQueryConfig($this->queryConfig);
- // debug($this->queryConfig);
- $this->enableQueryParts = $modSettings['search_query_smallparts'];
- $codeArr=$this->getFormElements();
- $queryCode=$this->printCodeArray($codeArr);
- if (in_array('fields',$enableArr) && !$GLOBALS['BE_USER']->userTS['mod.']['dbint.']['disableSelectFields']) {
- $out.='
- <tr>
- <td'.$TDparams.'><strong>Select fields:</strong></td>
- <td'.$TDparams.'>'.$this->mkFieldToInputSelect('SET[queryFields]',$this->extFieldLists['queryFields']).'</td>
- </tr>';
- }
- if (in_array('query',$enableArr) && !$GLOBALS['BE_USER']->userTS['mod.']['dbint.']['disableMakeQuery']) {
- $out.='<tr>
- <td colspan="2"'.$TDparams.'><strong>Make Query:</strong></td>
- </tr>
- <tr>
- <td colspan="2">'.$queryCode.'</td>
- </tr>
- ';
- }
- if (in_array('group',$enableArr) && !$GLOBALS['BE_USER']->userTS['mod.']['dbint.']['disableGroupBy']) {
- $out.='<tr>
- <td'.$TDparams.'><strong>Group By:</strong></td>
- <td'.$TDparams.'>'.$this->mkTypeSelect('SET[queryGroup]',$this->extFieldLists['queryGroup'],'').'</td>
- </tr>';
- }
- if (in_array('order',$enableArr) && !$GLOBALS['BE_USER']->userTS['mod.']['dbint.']['disableOrderBy']) {
- $orderByArr = explode(',',$this->extFieldLists['queryOrder']);
- // debug($orderByArr);
- $orderBy='';
- $orderBy.=$this->mkTypeSelect('SET[queryOrder]',$orderByArr[0],'').
- ' '.t3lib_BEfunc::getFuncCheck($GLOBALS['SOBE']->id,'SET[queryOrderDesc]',$modSettings['queryOrderDesc'],'','','id="checkQueryO…
Large files files are truncated, but you can click here to view the full file