This program and all files within this directory and sub directory 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 3 of the License, or any later version. This program 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. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /** * Class to manage the lists view */ class Listview { /** * Constructor * * @param DoliDB $db Database handler * @param string $id html id */ function __construct(&$db, $id) { $this->db = &$db; $this->id = $id; $this->TTotalTmp=array(); $this->sql = ''; $this->form = null; $this->totalRowToShow=0; $this->totalRow=0; $this->TField=array(); require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; $this->extrafields = new ExtraFields($this->db); $this->extralabels = $this->extrafields->fetch_name_optionals_label('product'); $this->search_array_options=$this->extrafields->getOptionalsFromPost($this->extralabels,'','search_'); } /** * Function to init fields * * @param array $TParam array of configuration of list * @return bool */ private function init(&$TParam) { global $conf, $langs, $user; if(!isset($TParam['hide'])) $TParam['hide']=array(); if(!isset($TParam['link'])) $TParam['link']=array(); if(!isset($TParam['type'])) $TParam['type']=array(); if(!isset($TParam['orderby']['noOrder'])) $TParam['orderby']['noOrder']=array(); if(!isset($TParam['allow-fields-select'])) $TParam['allow-fields-select'] = 0; if(!isset($TParam['list']))$TParam['list']=array(); $TParam['list'] = array_merge(array( 'messageNothing'=>$langs->trans('ListMessageNothingToShow') ,'noheader'=>0 ,'useBottomPagination'=>0 ,'image'=>'' ,'title'=>$langs->trans('List') ,'orderDown'=>'' ,'orderUp'=>'' ,'id'=>$this->id ,'head_search'=>'' ,'export'=>array() ,'view_type'=>'' ,'massactions'=>array() ),$TParam['list']); if (empty($TParam['limit'])) $TParam['limit'] = array(); $page = GETPOST('page'); if (!empty($page)) $TParam['limit']['page'] = $page; $TParam['limit'] = array_merge(array('page'=>0, 'nbLine' => $conf->liste_limit, 'global'=>0), $TParam['limit']); if (GETPOST('sortfield')) { $TParam['sortfield'] = GETPOST('sortfield'); $TParam['sortorder'] = GETPOST('sortorder'); } include_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; $this->form = new Form($this->db); } /** * Function to know if we can search on null value * @param string $key field name * @param array $TParam array of configuration * @return bool */ private function getSearchNull($key, &$TParam) { return !empty($TParam['search'][$key]['allow_is_null']); } /** * @param string $key field name * @param string $TParam array of configuration * @return array */ private function getSearchKey($key, &$TParam) { $TPrefixe = array(); if(!empty($TParam['search'][$key]['table'])) { if (!is_array($TParam['search'][$key]['table'])) $TParam['search'][$key]['table'] = array($TParam['search'][$key]['table']); foreach ($TParam['search'][$key]['table'] as $prefix_table) { $TPrefixe[] = $prefix_table.'.'; } } $TKey=array(); if(!empty($TParam['search'][$key]['field'])) { if (!is_array($TParam['search'][$key]['field'])) $TParam['search'][$key]['field'] = array($TParam['search'][$key]['field']); foreach ($TParam['search'][$key]['field'] as $i => $field) { $prefixe = !empty($TPrefixe[$i]) ? $TPrefixe[$i] : $TPrefixe[0]; $TKey[] = $prefixe. $field ; } } else { $TKey[] = $TPrefixe[0].$key; } return $TKey; } /** * @param string $TSQLMore contain some additional sql instructions * @param string $value date with read format * @param string $sKey field name */ private function addSqlFromTypeDate(&$TSQLMore, &$value, $sKey) { if(is_array($value)) { $TSQLDate=array(); if(!empty($value['start'])) { $TSQLDate[]=$sKey." >= '".$value['start']."'" ; } if(!empty($value['end'])) { $TSQLDate[]=$sKey." <= '".$value['end']."'" ; } if(!empty($TSQLDate)) $TSQLMore[] = implode(' AND ', $TSQLDate); } else { $TSQLMore[]=$sKey." LIKE '".$value."%'" ; } } /** * @param string $TSQLMore contain some additional sql instructions * @param string $value value to filter * @param string $TParam array of configuration * @param string $sKey field name * @param string $key reference of sKey to find value into TParam * @return bool */ private function addSqlFromOther(&$TSQLMore, &$value, &$TParam, $sKey, $key) { // Do not use empty() function, statut 0 exist if ($value == '') return false; elseif($value==-1) return false; if(isset($TParam['operator'][$key])) { if($TParam['operator'][$key] == '<' || $TParam['operator'][$key] == '>' || $TParam['operator'][$key]=='=') { $TSQLMore[] = $sKey . ' ' . $TParam['operator'][$key] . ' "' . $value . '"'; } elseif ($TParam['operator'][$key]=='IN') { $TSQLMore[] = $sKey . ' ' . $TParam['operator'][$key] . ' (' . $value . ')'; } else { if(strpos($value,'%')===false) $value = '%'.$value.'%'; $TSQLMore[]=$sKey." LIKE '".addslashes($value)."'" ; } } else { if(strpos($value,'%')===false) $value = '%'.$value.'%'; $TSQLMore[]=$sKey." LIKE '".addslashes($value)."'" ; } return true; } /** * @param string $sql standard select sql * @param string $TParam array of configuration * @return string */ private function search($sql, &$TParam) { if (empty($TParam['no-auto-sql-search']) && !GETPOST('button_removefilter_x','alpha') && !GETPOST('button_removefilter.x','alpha') && !GETPOST('button_removefilter','alpha')) { foreach ($TParam['search'] as $field => $info) { $TsKey = $this->getSearchKey($field, $TParam); $TSQLMore = array(); $allow_is_null = $this->getSearchNull($field,$TParam); $fieldname = !empty($info['fieldname']) ? $info['fieldname'] : 'Listview_'.$this->id.'_search_'.$field; foreach ($TsKey as $i => &$sKey) { $value = GETPOST($fieldname); $value_null = GETPOST('Listview_'.$this->id.'_search_on_null_'.$field); if ($allow_is_null && !empty($value_null)) { $TSQLMore[] = $sKey.' IS NULL '; $value = ''; } if (isset($TParam['type'][$field]) && ($TParam['type'][$field]==='date' || $TParam['type'][$field]==='datetime')) { $k = $fieldname; if ($info['search_type'] === 'calendars') { $value = array(); $timestart = dol_mktime(0, 0, 0, GETPOST($k.'_startmonth'), GETPOST($k.'_startday'), GETPOST($k.'_startyear')); if ($timestart) $value['start'] = date('Y-m-d', $timestart); $timeend = dol_mktime(23, 59, 59, GETPOST($k.'_endmonth'), GETPOST($k.'_endday'), GETPOST($k.'_endyear')); if ($timeend) $value['end'] = date('Y-m-d', $timeend); } else { $time = dol_mktime(12, 0, 0, GETPOST($k.'month'), GETPOST($k.'day'), GETPOST($k.'year')); if ($time) $value = date('Y-m-d', $time); } if (!empty($value)) $this->addSqlFromTypeDate($TSQLMore, $value, $sKey); } else { $this->addSqlFromOther($TSQLMore, $value, $TParam, $sKey, $field); } } if (!empty($TSQLMore)) { $sql.=' AND ( '.implode(' OR ',$TSQLMore).' ) '; } } } if ($sqlGROUPBY!='') $sql.=' GROUP BY '.$sqlGROUPBY; return $sql; } /** * @param string $sql standard select sql * @param string $TParam array of configuration * @return string */ public function render($sql, $TParam=array()) { global $conf; $TField= & $this->TField; $this->init($TParam); $THeader = $this->initHeader($TParam); $sql = $this->search($sql,$TParam); $sql.= $this->db->order($TParam['sortfield'], $TParam['sortorder']); if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { $result = $this->db->query($sql); $this->totalRow = $this->db->num_rows($result); } $this->parse_sql($THeader, $TField, $TParam, $sql); list($TTotal, $TTotalGroup)=$this->get_total($TField, $TParam); return $this->renderList($THeader, $TField, $TTotal, $TTotalGroup, $TParam); } /** * @param string $THeader the configuration of header * @param string $TParam array of configuration * @return array */ private function setSearch(&$THeader, &$TParam) { global $langs, $form; if(empty($TParam['search'])) return array(); $TSearch=array(); $nb_search_in_bar = 0; foreach($THeader as $key => $libelle) { if(empty($TSearch[$key]))$TSearch[$key]=''; } $removeFilter = (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')); foreach($TParam['search'] as $key => $param_search) { if ($removeFilter) $value = ''; $typeRecherche = (is_array($param_search) && isset($param_search['search_type'])) ? $param_search['search_type'] : $param_search; $fieldname = !empty($param_search['fieldname']) ? $param_search['fieldname'] : 'Listview_'.$this->id.'_search_'.$key; $value = $removeFilter ? '' : GETPOST($fieldname); if(is_array($typeRecherche)) { $fsearch=$form->selectarray($fieldname, $typeRecherche,$value,1); } else if($typeRecherche==='calendar') { if (!$removeFilter) $value = GETPOST($fieldname) ? mktime(0,0,0, (int) GETPOST($fieldname.'month'), (int) GETPOST($fieldname.$key.'day'), (int) GETPOST($fieldname.'year') ) : ''; $fsearch = $form->select_date($value, $fieldname,0, 0, 1, "", 1, 0, 1); } else if($typeRecherche==='calendars') { $value_start = $value_end = ''; if (!$removeFilter) { $value_start = GETPOST($fieldname.'_start') ? mktime(0,0,0, (int) GETPOST($fieldname.'_startmonth'), (int) GETPOST($fieldname.'_startday'), (int) GETPOST($fieldname.'_startyear') ) : ''; $value_end = GETPOST($fieldname.'_end') ? mktime(0,0,0, (int) GETPOST($fieldname.'_endmonth'), (int) GETPOST($fieldname.'_endday'), (int) GETPOST($fieldname.'_endyear') ) : ''; } $fsearch = $form->select_date($value_start,$fieldname.'_start',0, 0, 1, "", 1, 0, 1) . $form->select_date($value_end, $fieldname.'_end',0, 0, 1, "", 1, 0, 1); } else if(is_string($typeRecherche)) { $fsearch=$TParam['search'][$key]; } else { $fsearch=''; } if(!empty($param_search['allow_is_null'])) { $valueNull = GETPOST($fieldname.'search_on_null_'.$key) ? 1 : 0; $fsearch.=' '.$form->checkbox1('', $fieldname.'search_on_null_'.$key,1, $valueNull,' onclick=" if($(this).is(\':checked\')){ $(this).prev().val(\'\'); }" ').img_help(1, $langs->trans('SearchOnNUllValue')); } if(!empty($THeader[$key])) { $TSearch[$key] = $fsearch; $nb_search_in_bar++; } } $search_button = ' '.img_search().''; $search_button .= ' '.img_searchclear().''; if($nb_search_in_bar>0) { end($TSearch); list($key,$v) = each($TSearch); $TSearch[$key].=$search_button; } else { $TSearch=array(); } return $TSearch; } /** * Function to analyse and calculate the total from a column * * @param string $TField TField * @param string $TParam TParam * @return array */ private function get_total(&$TField, &$TParam) { $TTotal=$TTotalGroup=array(); if(!empty($TParam['math']) && !empty($TField[0])) { foreach($TField[0] as $field=>$value) { $TTotal[$field]=''; $TTotalGroup[$field] = ''; } foreach($TParam['math'] as $field=>$typeMath) { if(is_array($typeMath)) { $targetField = $typeMath[1]; $typeMath = $typeMath[0]; } else { $targetField = $field; } if($typeMath == 'groupsum') { $TTotalGroup[$field] = array('target'=>$targetField, 'values'=> $this->TTotalTmp['@groupsum'][$targetField]); } else if($typeMath=='average') { $TTotal[$field]=array_sum($this->TTotalTmp[$targetField]) / count($this->TTotalTmp[$targetField]); } elseif($typeMath=='count') { $TTotal[$field]=count($this->TTotalTmp[$targetField]); } else { $TTotal[$field]=array_sum($this->TTotalTmp[$targetField]); } } } return array($TTotal,$TTotalGroup); } /** * @return string */ /* private function getJS() { $javaScript = ''; return $javaScript; } */ /** * @param string $TParam TParam * @param string $TField TField * @param string $THeader THeader * @return array */ private function setExport(&$TParam, $TField, $THeader) { global $langs; $Tab=array(); if(!empty($TParam['export'])) { $token = GETPOST('token'); if(empty($token)) $token = md5($this->id.time().rand(1,9999)); $_SESSION['token_list_'.$token] = gzdeflate( serialize( array( 'title'=>$this->title, 'sql'=>$this->sql, 'TBind'=>$this->TBind, 'TChamps'=>$TField, 'TEntete'=>$THeader ))); foreach($TParam['export'] as $mode_export) { $Tab[] = array( 'label'=>$langs->trans('Export'.$mode_export), 'url'=>dol_buildpath('/abricot/downlist.php',1), 'mode'=>$mode_export, 'token'=>$token, 'session_name'=>session_name() ); } } return $Tab; } /** * @param string $TField TField * @param string $TTotalGroup TTotalGroup * @return array */ private function addTotalGroup($TField, $TTotalGroup) { global $langs; $Tab=array(); $proto_total_line = array(); $tagbase = $old_tagbase = null; $addGroupLine = false; foreach($TField as $k=>&$line) { if(empty($proto_total_line)) { foreach($line as $field=>$value) { $proto_total_line[$field] = ''; } $group_line = $proto_total_line; } $addGroupLine = false; $tagbase = ''; foreach($line as $field=>$value) { if(!empty($TTotalGroup[$field])) { $tagbase.=$value.'|'; $group_line[$field] = '
'.(empty($value) ? $langs->trans('Empty') : $value ).' :
'; $group_line[$TTotalGroup[$field]['target']] = '
'.price($TTotalGroup[$field]['values'][$value]).'
'; $addGroupLine = true; } } if(!is_null($old_tagbase) && $old_tagbase!=$tagbase && $addGroupLine) { $Tab[] = $previous_group_line; } $old_tagbase = $tagbase; $previous_group_line = $group_line; $group_line = $proto_total_line; $Tab[] = $line; } if($addGroupLine) { $Tab[] = $previous_group_line; } return $Tab; } /** * @param string $THeader THeader * @param string $TField TField * @param string $TTotal TTotal * @param string $TTotalGroup TTotalGroup * @param string $TParam TParam * @return string */ private function renderList(&$THeader, &$TField, &$TTotal, &$TTotalGroup, &$TParam) { global $bc,$form; $TSearch = $this->setSearch($THeader, $TParam); $TExport = $this->setExport($TParam, $TField, $THeader); $TField = $this->addTotalGroup($TField,$TTotalGroup); //$out = $this->getJS(); $massactionbutton= empty($TParam['list']['massactions']) ? '' : $form->selectMassAction('', $TParam['list']['massactions']); $dolibarr_decalage = $this->totalRow > $this->totalRowToShow ? 1 : 0; ob_start(); print_barre_liste($TParam['list']['title'], $TParam['limit']['page'], $_SERVER["PHP_SELF"], '&'.$TParam['list']['param_url'], $TParam['sortfield'], $TParam['sortorder'], $massactionbutton, $this->totalRowToShow+$dolibarr_decalage, $this->totalRow, $TParam['list']['image'], 0, '', '', $TParam['limit']['nbLine']); $out .= ob_get_clean(); $classliste='liste'; if(!empty($TParam['head_search'])) { $out.='
'; $out.=$TParam['head_search']; $out.='
'; $classliste.=' listwithfilterbefore'; } $out.= '
'; $out.= ''; if(count($TSearch)>0) { $out.=''; foreach ($THeader as $field => $head) { if ($field === 'selectedfields') { $out.= ''; } else { $moreattrib = 'style="width:'.$head['width'].';text-align:'.$head['text-align'].'"'; $out .= ''; } } $out.=''; } $out.= ''; foreach($THeader as $field => $head) { $moreattrib = ''; $search = ''; $prefix = ''; $label = $head['label']; if ($field === 'selectedfields') { $moreattrib = 'align="right" '; $prefix = 'maxwidthsearch '; if(!empty($TParam['list']['massactions'])) { $label.=$form->showCheckAddButtons('checkforselect', 1); } } if (empty($head['width'])) $head['width'] = 'auto'; if (!empty($head['width']) && !empty($head['text-align'])) $moreattrib .= 'style="width:'.$head['width'].';text-align:'.$head['text-align'].'"'; if (isset($TParam['search'][$field]['search_type']) && $TParam['search'][$field]['search_type'] !== false) { $TsKey = $this->getSearchKey($field, $TParam); if (!empty($TsKey)) $search = implode(',', $TsKey); else $search = $field; } $out .= getTitleFieldOfList($label, 0, $_SERVER["PHP_SELF"], $search, '', $moreparam, $moreattrib, $TParam['sortfield'], $TParam['sortorder'], $prefix); $out .= $head['more']; } //$out .= ''; $out .= ''; $out.=''; if(empty($TField)) { if (!empty($TParam['list']['messageNothing'])) $out .= ''; } else { $line_number = 0; foreach($TField as $fields) { if($this->in_view($TParam, $line_number)) { $out.=''; foreach ($THeader as $field => $head) { $value_aff =(isset($fields[$field]) ? $fields[$field] : ' '); if ($field === 'selectedfields') { $head['text-align']='center'; if(!empty($TParam['list']['massactions'])) { $arrayofselected=array(); // TODO get in param $selected=0; if (in_array($obj->rowid, $arrayofselected)) $selected=1; $value_aff.=''; } } $moreattrib = 'style="width:'.$head['width'].';text-align:'.$head['text-align'].'"'; $out.=''; } $out.=''; } $line_number++; } $out.=''; if (!empty($TParam['list']['haveTotal'])) { $out.=''; foreach ($THeader as $field => $head) { if (isset($TTotal[$field])) { $moreattrib = 'style="width:'.$head['width'].';text-align:'.$head['text-align'].'"'; $out.=''; } } $out.=''; } } $out .= '
--
'.$TParam['list']['messageNothing'].'
'.$value_aff.'
'.price($TTotal[$field]).'
'; $out .= '
'; return $out; } /** * @param string $db Db * @param string $TField TField * @param string $TParam TParam */ public function renderArray(&$db, $TField, $TParam=array()) { $this->typeRender = 'array'; $TField=array(); $this->init($TParam); $THeader = $this->initHeader($TParam); $this->parse_array($THeader, $TField, $TParam); list($TTotal, $TTotalGroup)=$this->get_total($TField, $TParam); $this->renderList($THeader, $TField, $TTotal, $TTotalGroup, $TParam); } /** * @param string $THeader THeader * @param string $TField TField * @param string $TParam TParam * @return bool */ private function parse_array(&$THeader, &$TField, &$TParam) { $this->totalRow = count($TField); $this->THideFlip = array_flip($TParam['hide']); $this->TTotalTmp=array(); if (empty($TField)) return false; foreach($TField as $row) { $this->set_line($THeader, $TField, $TParam, $row); } } private function initHeader(&$TParam) { global $user,$conf; $THeader = array(); $TField=$TFieldVisibility=array(); foreach ($TParam['title'] as $field => $value) { $TField[$field]=true; } $contextpage=md5($_SERVER['PHP_SELF']); if(!empty($TParam['allow-fields-select'])) { $selectedfields = GETPOST('Listview'.$this->id.'_selectedfields'); if(!empty($selectedfields)) { include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $tabparam['MAIN_SELECTEDFIELDS_'.$contextpage] = $selectedfields; $result=dol_set_user_param($this->db, $conf, $user, $tabparam); } $tmpvar='MAIN_SELECTEDFIELDS_'.$contextpage; if (! empty($user->conf->{$tmpvar})) { $tmparray = explode(',', $user->conf->{$tmpvar}); $TParam['hide'] = array(); foreach($TField as $field => $dummy) { $label = $TParam['title'][$field]; if(!in_array($field, $tmparray)) { $TParam['hide'][] = $field; $visible = 0; } else { // Overrive search from extrafields // for the type as 'checkbox', 'chkbxlst', 'sellist' we should use code instead of id (example: I declare a 'chkbxlst' to have a link with dictionnairy, I have to extend it with the 'code' instead 'rowid') if (isset($this->extralabels[$field])) $TParam['search'][$field] = $this->extrafields->showInputField($field, $this->search_array_options['search_options_'.$field], '', '', 'search_'); $visible = 1; } $TFieldVisibility[$field] = array( 'label'=>$label ,'checked'=>$visible ); } } else { foreach($TField as $field=>$dummy) { $label = isset($TParam['title'][$field]) ? $TParam['title'][$field] : $field; $visible = (!in_array($field, $TParam['hide'])) ? 1 : 0; $TFieldVisibility[$field]=array( 'label'=>$label, 'checked'=>$visible ); } } $selectedfields = $this->form->multiSelectArrayWithCheckbox('Listview'.$this->id.'_selectedfields', $TFieldVisibility, $contextpage); // This also change content of $arrayfields_0 } foreach ($TParam['title'] as $field => $label) { $visible = (!in_array($field, $TParam['hide'])) ? 1 : 0; if($visible) { $THeader[$field] = array( 'label'=>$label, 'order'=>(in_array($field, $TParam['orderby']['noOrder']) ? 0 : 1), 'width'=>(!empty($TParam['size']['width'][$field]) ? $TParam['size']['width'][$field] : 'auto'), 'text-align'=>(!empty($TParam['position']['text-align'][$field]) ? $TParam['position']['text-align'][$field] : 'auto'), 'rank'=>(!empty($TParam['position']['rank'][$field]) ? $TParam['position']['rank'][$field] : 0), 'more'=>'' ); } } uasort($THeader,array('Listview','sortHeaderRank')); $THeader['selectedfields']['label']=$selectedfields; return $THeader; } public function sortHeaderRank(&$a, &$b) { if($a['rank']>$b['rank']) return 1; else if($a['rank']<$b['rank']) return -1; else return 0; } /** * @param string $TParam TParam * @param string $line_number aaa * @return bool */ private function in_view(&$TParam, $line_number) { global $conf; if(!empty($_REQUEST['get-all-for-export'])) return true; $page_number = !empty($TParam['limit']['page']) ? $TParam['limit']['page'] : 1; $line_per_page = !empty($TParam['limit']['nbLine']) ? $TParam['limit']['nbLine'] : $conf->liste_limit; $start = ($page_number-1) * $line_per_page; $end = ($page_number* $line_per_page) -1; if($line_number>=$start && $line_number<=$end) return true; else return false; } /** * Apply function to result and set fields array * * @param string $THeader array of headers * @param string $TField array of fields * @param string $TParam array of parameters * @param string $currentLine object containing current sql result */ private function set_line(&$THeader, &$TField, &$TParam, $currentLine) { global $conf; $line_number = count($TField); if($this->in_view($TParam,$line_number)) { $this->totalRowToShow++; $row=array(); $trans = array(); foreach($currentLine as $kF=>$vF)$trans['@'.$kF.'@'] = addslashes($vF); foreach($THeader as $field=>$dummy) { $value = isset($currentLine->{$field}) ? $currentLine->{$field}: ''; if(is_object($value)) { if(get_class($value)=='stdClass') {$value=print_r($value, true);} else $value=(string) $value; } $trans['@'.$field.'@'] = addslashes($value); if(!empty($TParam['math'][$field])) { $float_value = (double) strip_tags($value); $this->TTotalTmp[$field][] = $float_value; } if(!in_array($field,$TParam['hide'])) { $row[$field]=$value; if(isset($TParam['eval'][$field]) && in_array($field,array_keys($row))) { $strToEval = 'return '.strtr( $TParam['eval'][$field], array_merge( $trans, array('@val@'=>addslashes( $row[$field] )) )).';'; $row[$field] = eval($strToEval); } if(isset($TParam['type'][$field]) && !isset($TParam['eval'][$field])) { if($TParam['type'][$field]=='date' || $TParam['type'][$field]=='datetime' ) { if($row[$field] != '0000-00-00 00:00:00' && $row[$field] != '1000-01-01 00:00:00' && $row[$field] != '0000-00-00' && !empty($row[$field])) { if($TParam['type'][$field]=='datetime')$row[$field] = dol_print_date(strtotime($row[$field]),'dayhour'); else $row[$field] = dol_print_date(strtotime($row[$field]),'day'); } else { $row[$field] = ''; } } if($TParam['type'][$field]=='hour') { $row[$field] = date('H:i', strtotime($row[$field])); } if($TParam['type'][$field]=='money') { $row[$field] = '
'.price($row[$field],0,'',1,-1,2).'
'; } if($TParam['type'][$field]=='number') { $row[$field] = '
'.price($row[$field]).'
'; } if($TParam['type'][$field]=='integer') { $row[$field] = '
'.((int) $row[$field]).'
'; } } if(isset($TParam['link'][$field])) { if(empty($row[$field]) && $row[$field]!==0 && $row[$field]!=='0')$row[$field]='(vide)'; $row[$field]= strtr( $TParam['link'][$field], array_merge( $trans, array('@val@'=>$row[$field]))) ; } if(isset($TParam['translate'][$field])) { if(isset($TParam['translate'][$field][''])) unset($TParam['translate'][$field]['']); $row[$field] = strtr( $row[$field], $TParam['translate'][$field]); } } } } else { $row = array(); foreach($currentLine as $field=>&$value) { if(!isset($this->THideFlip[$field])) { if(isset($TParam['math'][$field]) && !empty($TParam['math'][$field])) { $float_value = (double) strip_tags($value); $this->TTotalTmp[$field][] = $float_value; } $row[$field] = $value; } } } if(!empty($TParam['math'][$field])) { foreach($row as $field=>$value) { if(!empty($TParam['math'][$field]) && is_array($TParam['math'][$field])) { $toField = $TParam['math'][$field][1]; $float_value = (double) strip_tags($row[$toField]); $this->TTotalTmp['@groupsum'][$toField][ $row[$field] ] += $float_value; } } } $TField[] = $row; } /** * @param string $sql sql * @param string $TParam TParam * @return string */ private function limitSQL($sql, &$TParam) { if(!empty($TParam['limit']['global']) && strpos($sql,'LIMIT ')===false ) { $sql.=' LIMIT '.(int) $TParam['limit']['global']; } else if(!empty($TParam['limit'])) $sql.= $this->db->plimit($TParam['limit']['nbLine']+1, $TParam['limit']['page'] * $TParam['limit']['nbLine']); return $sql; } /** * @param string $THeader THeader * @param string $TField TField * @param string $TParam TParam * @param string $sql sql */ private function parse_sql(&$THeader, &$TField, &$TParam, $sql) { $this->sql = $this->limitSQL($sql, $TParam); $this->TTotalTmp=array(); $this->THideFlip = array_flip($TParam['hide']); $res = $this->db->query($this->sql); if($res!==false) { dol_syslog(get_class($this)."::parse_sql id=".$this->id." sql=".$this->sql, LOG_DEBUG); if(empty($this->totalRow))$this->totalRow = $this->db->num_rows($res); while($currentLine = $this->db->fetch_object($res)) { $this->set_line($THeader, $TField, $TParam, $currentLine); } } else { dol_syslog(get_class($this)."::parse_sql id=".$this->id." sql=".$this->sql, LOG_ERR); } } static function getCachedOjbect($class_name, $fk_object) { global $db, $TCacheListObject; if(!class_exists($class_name)) return false; if(empty($TCacheListObject)) $TCacheListObject = array(); if(empty($TCacheListObject[$class_name])) $TCacheListObject[$class_name] =array(); if(empty($TCacheListObject[$class_name][$fk_object])) { $TCacheListObject[$class_name][$fk_object]= new $class_name($db); if( $TCacheListObject[$class_name][$fk_object]->fetch($fk_object)<0) { return false; } } return $TCacheListObject[$class_name][$fk_object]; } }