. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ G::LoadClass('filterForm'); G::LoadClass('xmlMenu'); /** * Class pagedTable * @author David S. Callizaya S. * @package gulliver.system * @access public * @dependencies DBConnection DBSession TemplatePower Form XmlForm */ class pagedTable { var $xmlFormFile; var $currentPage; var $orderBy = ''; var $filter = array(); var $filterType = array(); var $searchBy = ''; var $fastSearch=''; var $order = ''; var $template='templates/paged-table.html'; var $tpl; var $style = array(); var $rowsPerPage=25; var $ownerPage; var $popupPage; var $popupSubmit; var $popupWidth=450; var $popupHeight=200; var $ajaxServer; var $fields; var $query; var $totpages; //SQL QUERIES var $sql=''; var $sqlWhere=''; var $sqlGroupBy=''; var $sqlSelect='SELECT 1'; var $sqlDelete=''; var $sqlInsert=''; var $sqlUpdate=''; var $fieldDataList=''; //Configuration var $xmlPopup=''; var $addRow=false; var $deleteRow=false; var $editRow=false; var $notFields=' title button linknew begingrid2 endgrid2 '; // These are not considered to build the sql queries (update,insert,delete) //JavaScript Object attributes var $onUpdateField=""; var $onDeleteField=""; var $afterDeleteField=""; var $onInsertField=""; //New gulliver var $xmlForm; var $menu=''; var $filterForm=''; var $filterForm_Id=''; var $name='pagedTable'; var $id='A1'; var $disableFooter = false; //This attribute is used to set STYLES to groups of TD, using the field type "cellMark" (see XmlForm_Field_cellMark) var $tdStyle=''; var $tdClass=''; //Config Save definition var $__Configuration='orderBy,filter,fastSearch,style/*/showInTable';//order,rowsPerPage,disableFooter'; /** * Function analizeSql * You can to distribute the component of the query like: Select, Where, Group by and order by * @author David S. Callizaya S. * @access public * @return string */ function analizeSql() { if (1===preg_match('/^\s*SELECT\s+(.+?)(?:\s+FROM\s+(.+?))(?:\s+WHERE\s+(.+?))?(?:\s+GROUP\s+BY\s+(.+?))?(?:\s+ORDER\s+BY\s+(.+?))?(?:\s+BETWEEN\s+(.+?)\s+AND\s+(.+?))?\s*$/im',$this->sqlSelect,$matches)){ $this->sqlSelect='SELECT '.$matches[1].(($matches[2]!='')?' FROM '.$matches[2]:''); $this->sqlSelect='SELECT '.$matches[1].(($matches[2]!='')?' FROM '.$matches[2]:''); } else{ //echo('Warning: SQL Query is not well formed.'); return; } $this->sqlFrom = isset($matches[2])?$matches[2]:''; $this->sqlWhere = isset($matches[3])?$matches[3]:''; $this->sqlGroupBy = isset($matches[4])?$matches[4]:''; $this->sqlOrderBy = isset($matches[5])?$matches[5]:''; $this->order=''; if ($this->sqlOrderBy!=''){ if ($n=preg_match_all('/\b([\w\.]+)\b(?:\s+(ASC|DESC))?,?/im',$this->sqlOrderBy,$matches,PREG_SET_ORDER)){ for($r=0;$r < $n;$r++){ if (!isset($matches[$r][2])) $matches[$r][2]=''; if ($matches[$r][2]=='') $matches[$r][2]='ASC'; $ord=G::createUID('',$matches[$r][1]).'='.urlencode($matches[$r][2]); if ($this->order=='') $this->order=$ord; else $this->order.='&'.$ord; } //Orden ascendente if ($n==1) $this->order=G::createUID('',$matches[0][1]) . '=' . $matches[0][2]; } } //Generate: $uniqueWhere=Identify a row bys its data content //$this->fieldDataList=url text that dentify a row bys its data content $uniqueWhere=''; $this->fieldDataList=''; foreach($this->fields as $r => $field) if ((strpos($this->notFields, ' ' . $this->fields[$r]['Type']. ' ')===FALSE)){ if ($uniqueWhere=='') $uniqueWhere=(($this->sqlWhere!='')?('('.$this->sqlWhere.') AND ('):'('); else $uniqueWhere.=' AND '; $uniqueWhere.=$this->fields[$r]['Name'] . '=' . '@@' . $this->fields[$r]['Name']; if ($this->fieldDataList=='') $this->fieldDataList=''; else $this->fieldDataList.='&'; $this->fieldDataList.=$this->fields[$r]['Name'] . '=' . '@@_' . $this->fields[$r]['Name']; } if ($uniqueWhere!='') $uniqueWhere.=')'; } /** * Function prepareQuery * @author David S. Callizaya S. * @access public * @return string */ function prepareQuery() { //DBConnection if(!$this->sqlConnection) $this->dbc=new DBConnection(); else{ if (defined('DB_' . $this->sqlConnection . '_USER')) { if (defined('DB_' . $this->sqlConnection . '_HOST')) eval('$res[\'DBC_SERVER\'] = DB_'.$this->sqlConnection.'_HOST;'); else $res['DBC_SERVER'] = DB_HOST; if (defined('DB_' . $this->sqlConnection . '_USER')) eval('$res[\'DBC_USERNAME\'] = DB_'.$this->sqlConnection.'_USER;'); if (defined('DB_' . $this->sqlConnection . '_PASS')) eval('$res[\'DBC_PASSWORD\'] = DB_'.$this->sqlConnection.'_PASS;'); else $res['DBC_PASSWORD'] = DB_PASS; if (defined('DB_' . $this->sqlConnection . '_NAME')) eval('$res[\'DBC_DATABASE\'] = DB_'.$this->sqlConnection.'_NAME;'); else $res['DBC_DATABASE'] = DB_NAME ; if (defined('DB_' . $this->sqlConnection . '_TYPE')) eval('$res[\'DBC_TYPE\'] = DB_'.$this->sqlConnection.'_TYPE;'); else $res['DBC_TYPE'] = defined('DB_TYPE') ? DB_TYPE : 'mysql'; $this->dbc=new DBConnection($res['DBC_SERVER'],$res['DBC_USERNAME'],$res['DBC_PASSWORD'],$res['DBC_DATABASE'],$res['DBC_TYPE']); } else { $dbc=new DBConnection(); $dbs=new DBSession($dbc); $res=$dbs->execute("select * from DB_CONNECTION WHERE DBC_UID=".$this->sqlConnection); $res=$res->read(); $this->dbc=new DBConnection($res['DBC_SERVER'],$res['DBC_USERNAME'],$res['DBC_PASSWORD'],$res['DBC_DATABASE']); } } $this->ses=new DBSession($this->dbc); //Query //Filter if (is_array($this->filter)) { $filterFields = $this->filter; } else { parse_str($this->filter,$filterFields); } $this->aFilter=$filterFields; $filter=''; foreach ($filterFields as $field => $like) if ($like!=''){ if ($filter!=='') $filter.=' AND '; if (isset($this->filterType[$field])) { switch ($this->filterType[$field]) { case '=': $filter .= $field . ' = "' . mysql_real_escape_string($like) . '"'; break; case '<>': $filter .= $field . ' <> "' . mysql_real_escape_string($like) . '"'; break; case 'contains': $filter .= $field . ' LIKE "%' . mysql_real_escape_string($like) . '%"'; break; case 'like': $filter .= $field . ' LIKE "' . mysql_real_escape_string($like) . '"'; break; } } else { $filter .= $field . ' = "' . mysql_real_escape_string($like) . '"'; } } /* * QuickSearch */ if ($this->searchBy!=='') { $aSB=explode('|',$this->searchBy); $subFilter=''; foreach($aSB as $sBy) { $subFilter.=($subFilter!=='')?' OR ':''; $subFilter.=$sBy . ' LIKE "%'. G::sqlEscape($this->fastSearch,$this->dbc->type).'%"'; } if ($subFilter!=='') { $filter.=($filter!=='')?' AND ':''; $filter.='('.$subFilter.')'; } } //Merge sort array defined by USER with the array defined by SQL parse_str($this->order,$orderFields); parse_str($this->orderBy,$orderFields2); //User sort is more important (first in merge). $orderFields3 = array_merge($orderFields2, $orderFields); //User sort is overwrites XMLs definition. $orderFields = array_merge($orderFields3, $orderFields2); //Order (BY SQL DEFINITION AND USER'S DEFINITION) $this->aOrder = array(); $order=''; foreach ($orderFields as $field => $fieldOrder) { $field = G::getUIDName($field,''); $fieldOrder = strtoupper($fieldOrder); if ($fieldOrder==='A') $fieldOrder = 'ASC'; if ($fieldOrder==='D') $fieldOrder = 'DESC'; switch ( $fieldOrder ) { case 'ASC': case 'DESC': if ($order!=='') $order.=', '; $order .= $field . ' '. $fieldOrder; $this->aOrder[$field] = $fieldOrder; } } $this->sql=$this->sqlSelect . ((($this->sqlWhere!='')||($filter!=''))?' WHERE ':''). (($this->sqlWhere!='')?'('.$this->sqlWhere.')':''). ((($this->sqlWhere!='')&&($filter!=''))?' AND ':''). (($filter!='')?'('.$filter.')':''). (($this->sqlGroupBy!='')?' GROUP BY '.$this->sqlGroupBy:''). (($order!='')?' ORDER BY '.$order:''); //$this->query=$this->ses->execute($this->sql); //$this->totpages=ceil($this->query->count()/$this->rowsPerPage); return; } /** * Function setupFromXmlform * @author David S. Callizaya S. * @access public * @param string xmlForm * @return string */ function setupFromXmlform($xmlForm) { $this->xmlForm = $xmlForm; //Config $this->name = $xmlForm->name; $this->id = $xmlForm->id; $this->sqlConnection=((isset($this->xmlForm->sqlConnection))?$this->xmlForm->sqlConnection:''); if (isset($_GET['page'])) $this->currentPage = $_GET['page']; else $this->currentPage = 1; if (isset($_GET['order'])) $this->orderBy = urldecode($_GET['order']); else $this->orderBy = ""; if (isset($_GET['filter'])) $this->filter = urldecode($_GET['filter']); else $this->filter = ""; $this->ajaxServer=G::encryptLink('../gulliver/pagedTableAjax'); $this->ownerPage=G::encryptLink(SYS_CURRENT_URI); //Needed for $mysql_real_escape_string $auxDbc = new DBConnection(); if (isset($this->xmlForm->sql)) $this->sqlSelect=G::replaceDataField($this->xmlForm->sql,$this->xmlForm->values); else trigger_Error('Warning: sql query is empty',E_USER_WARNING); // Config attributes from XMLFORM file $myAttributes=get_class_vars(get_class($this)); foreach ($this->xmlForm->xmlform->tree->attribute as $atrib => $value) if (array_key_exists( $atrib, $myAttributes)){ eval('settype($value,gettype($this->'.$atrib.'));'); if ($value!=='') eval('$this->'.$atrib.'=$value;'); } //Prepare the fields $this->style=array();$this->gridWidth="";$this->gridFields=""; $this->fieldsType=array(); foreach ($this->xmlForm->fields as $f => $v){ $r=$f; $this->fields[$r]['Name'] =$this->xmlForm->fields[$f]->name; $this->fields[$r]['Type'] =$this->xmlForm->fields[$f]->type; if (isset($this->xmlForm->fields[$f]->size)) $this->fields[$r]['Size'] = $this->xmlForm->fields[$f]->size; $this->fields[$r]['Label']=$this->xmlForm->fields[$f]->label; } //Autocomplete the sql queries // Here we can to distribute the component of the query like: Select, Where, Group by and order by $this->analizeSql(); //Set the default settings $this->defaultStyle(); //continue whith the setup $this->gridWidth=''; $this->gridFields=''; foreach($this->xmlForm->fields as $f => $v){ $r=$f; //Parse the column properties foreach ($this->xmlForm->fields[$f] as $attribute => $value){ if (!is_object($value)) { $this->style[$r][$attribute] = $value; } } //Needed for javascript //only the visible columns's width and name are stored if ($this->style[$r]['showInTable']!='0'){ $this->gridWidth.=','.$this->style[$r]['colWidth']; $this->gridFields.=',"form['.$this->fields[$r]['Name'].']"'; } } $totalWidth=0; foreach($this->fields as $r => $rval) if ($this->style[$r]['showInTable']!='0') $totalWidth += $this->style[$r]['colWidth']; $this->totalWidth = $totalWidth; } /** * Function setupFromTable * @author David S. Callizaya S. * @access public * @parameter string table * @return string */ // function setupFromTable($table) // { //// var_dump2($table); // //Config // $this->rowsPerPage=25; // if (isset($_GET['page'])) // $this->currentPage = $_GET['page']; // else // $this->currentPage = 1; // if (isset($_GET['order'])) // $this->orderBy = urldecode($_GET['order']); // else // $this->orderBy = ""; // if (isset($_GET['filter'])) // $this->filter = urldecode($_GET['filter']); // else // $this->filter = ""; // $xmlPopup=''; // $this->xmlFormFile=""; ///* if ($table->Action) // $this->ajaxServer=G::encryptLink($table->Action); // else*/ // $this->ajaxServer=G::encryptLink('../gulliver/pagedTableAjax'); // $this->popupPage = $this->ajaxServer . '?function=printForm&filename=' . urlencode($xmlPopup); // $this->ownerPage=G::encryptLink(SYS_CURRENT_URI); // $this->sqlConnection=''; // if (isset($table->_source)) // $this->sqlSelect=$table->_source; // if (isset($table->WhereClause)){ // if (strpos(strtoupper($table->WhereClause),'GROUP BY')!==FALSE) // preg_match("/(.+)(GROUP BY)(.*)/",$table->WhereClause,$matches); // else{ // $matches[1]=$table->WhereClause;$matches[2]=''; // } // $this->sqlWhere=$matches[1]; // if (strcasecmp($matches[2],'GROUP BY')==0) // $this->sqlGroupBy=' GROUP BY '.$matches[3]; // } // if (strpos(strtoupper($this->sqlSelect),'WHERE')!==FALSE){ // preg_match("/SELECT(.+)FROM(.+)WHERE(.+)/",$this->sqlSelect,$matches); // $this->sqlSelect='SELECT '.$matches[1].' FROM '.$matches[2]; // $this->sqlWhere=$matches[3]; // } // // DBConnection // // $this->prepareQuery(); // //Prepare the fields // if ($table->show_nummbers=='YES'){ // $r=-1; // $this->fields[$r]['Name']='numberlabel'; // $this->fields[$r]['Type']='numberlabel'; // $this->fields[$r]['Label']='#'; // } // foreach ($table->Columns as $r => $value){ // $this->fields[$r]['Name']=$value['Name']; // $this->fields[$r]['Type']=$value['Type']; // $this->fields[$r]['Label']=((isset($table->Labels[$r]))?$table->Labels[$r]:''); // //Default values for Label if it was empty // if ($this->fields[$r]['Label']=='') // switch($table->Columns[$r]['Type']){ // case 'image': // case 'image-text': // case 'jslink': // //var_dump2($table->Columns[$r]); // $this->fields[$r]['Label']=$value['Name']; // } // //Print the type of the field // //$this->fields[$r]['Label'].='('.$this->fields[$r]['Type'].')'; // $r++; // } // //Add a delete column if sqlDelete is established // /* if ($this->sqlDelete!='') // { // $this->fields[$r]['Name']=''; // $this->fields[$r]['Type']='linknew'; // $this->fields[$r]['Label']=G::LoadXml('labels','ID_DELETE'); // }*/ // //Set the default settings // $this->defaultStyle(); // /* if ($this->sqlDelete!='') // { // $this->style[$r]['href']="#"; // $this->style[$r]['onclick']="document.getElementById('pagedTable').outerHTML=ajax_function('{$this->ajaxServer}','delete','".$this->fieldDataList."');"; // }*/ // //Prepare the columns's properties // if ($table->show_nummbers=='YES'){ // $r=-1; // $this->style[$r]['data']='@@_row__'; // $this->style[$r]['colWidth']=30; // } // $this->gridWidth=''; // $this->gridFields=''; // foreach ($table->Columns as $r => $value){ // //var_dump($value['Width']); // $this->style[$r]['colWidth']=$value['Width']; // $this->style[$r]['titleAlign']=$value['Align']; // $this->style[$r]['href']=$value['Target']; // // Add the row reference // switch ($this->fields[$r]['Type']){ // case 'image-text': // case 'textimage': // case 'image': // case 'link': // //$this->style[$r]['href'].='/@@_row__.html'; // No // if (substr($value['Content'],0,1)=='&') // $this->style[$r]['href'].='/@@_'.substr($value['Content'],1).'.html'; // } // // Extra events for each field // $this->style[$r]['event']=$value['Extra']; // if ($this->fields[$r]['Label']==''){ // $this->style[$r]['titleVisibility']='0'; // $this->fields[$r]['Label']=$this->fields[$r]['Name']; // } // //if ($value['orderByThis']===true) $this->orderBy=$value['Name']; // //Needed for javascript // //only the visible columns's width and name are stored // if ($this->style[$r]['showInTable']!='0'){ // $this->gridWidth.=','.$this->style[$r]['colWidth']; // $this->gridFields.=',"form['.$this->fields[$r]['Name'].']"'; // } // $r++; // } // echo('
'); //// var_dump2($this); // } /** * Function count * @author David S. Callizaya S. * @access public * @return string */ function count() { $this->prepareQuery(); return $this->query->count(); } /** * Function renderTitle * @author David S. Callizaya S. * @access public * @return string */ function renderTitle() { //Render Title $thereisnotitle=true; foreach($this->fields as $r => $rval) if ($this->fields[$r]['Type']==='title'){ $this->tpl->assign( "title", $this->fields[$r]['Label']); $thereisnotitle=false; } if ($thereisnotitle){ $this->tpl->assign( "title", ' '); } //Render headers $this->colCount=0; $this->shownFields='['; foreach($this->fields as $r => $rval) if ($this->style[$r]['showInTable']!='0'){ $this->tpl->newBlock( "headers" ); $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='ASC'))?'DESC':'ASC'); $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='DESC'))?'':$sortOrder); $this->style[$r]['href'] = $this->ownerPage . '?order=' . ($sortOrder!==''?urlencode(G::createUID('',$this->fields[$r]['Name']) . '=' . $sortOrder):'') . '&page=' . $this->currentPage; $this->style[$r]['onsort'] = $this->id . '.doSort("'.G::createUID('',$this->fields[$r]['Name']).'" , "'.$sortOrder.'");return false;'; if (isset($this->style[$r]['href'])) $this->tpl->assign( "href" , $this->style[$r]['href']); if (isset($this->style[$r]['onsort'])) $this->tpl->assign( "onclick" , htmlentities( $this->style[$r]['onsort'] , ENT_QUOTES, 'UTF-8' ) ); if (isset($this->style[$r]['colWidth'])) $this->tpl->assign( "width" , $this->style[$r]['colWidth'] ); if (isset($this->style[$r]['colWidth'])) $this->tpl->assign( "widthPercent" , ($this->style[$r]['colWidth']*100 / $this->totalWidth) . "%" ); if (isset($this->style[$r]['titleAlign'])) $this->tpl->assign( "align" , 'text-align:'.$this->style[$r]['titleAlign'].';'); if ($this->style[$r]['titleVisibility']!='0') { $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='ASC'))?'b2':''); $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='DESC'))?'b<':$sortOrder); $this->tpl->assign( "header" , $this->fields[$r]['Label'] . $sortOrder ); $this->tpl->assign('displaySeparator', (($this->colCount==0)||(!isset($this->fields[$r]['Label']))||($this->fields[$r]['Label']===''))?'display:none;':''); } else { $this->tpl->assign('displaySeparator','display:none;'); } $this->colCount+=2; $this->shownFields.=($this->shownFields!=='[')?',':''; $this->shownFields.='"'.$r.'"'; } $this->shownFields.=']'; } /** * Function renderField * @author David S. Callizaya S. * @access public * @parameter string row * @parameter string r * @parameter string result * @return string */ function renderField($row,$r,$result) { global $G_DATE_FORMAT; //BEGIN: Special content: __sqlEdit__,__sqlDelete__ $result['sqlDelete__']="pagedTable.event='Delete';pagedTable_DoIt=true;if (pagedTable.onDeleteField) pagedTable_DoIt=eval(pagedTable.onDeleteField);if (pagedTable_DoIt) document.getElementById('pagedTable').outerHTML=ajax_function('{$this->ajaxServer}','delete','field='+encodeURIComponent('".($this->fieldDataList)."'));if (pagedTable.afterDeleteField) return eval(pagedTable.afterDeleteField); else return false;"; $result['sqlEdit__']="pagedTable.event='Update';pagedTable.field=encodeURIComponent('".$this->fieldDataList."');pagedTable.updateField(pagedTable.field);return false;"; $result['pagedTableField__']="'".$this->fieldDataList."'"; $result['row__']=$row; //END: Special content. //Merge $result with $xmlForm values (for default valuesSettings) $result=array_merge($this->xmlForm->values,$result); switch (true){ case ($this->style[$r]['data']!=''): $value = ((isset($result[$this->style[$r]['data']]))?$result[$this->style[$r]['data']]:''); break; default: $value = $this->fields[$r]['Label']; } switch ($this->fields[$r]['Type']){ case 'date': /*Accept dates like 20070515 without - or / to separate its parts*/ if (strlen ($value) <=10 && strlen ($value) > 4 ) { $value = str_replace( '/', '-', $value); if (strpos($value,'-')===FALSE) $value = substr($value,0,4).'-'.substr($value,4,2).'-'.substr($value,6,2); } } $this->tpl->newBlock( "field" ); $this->tpl->assign('width', $this->style[$r]['colWidth']); $this->tpl->assign('widthPercent', ($this->style[$r]['colWidth']*100/$this->totalWidth) . '%' ); $this->tpl->assign('className', (isset($this->style[$r]['colClassName']) && ($this->style[$r]['colClassName']))? $this->style[$r]['colClassName'] : $this->tdClass); $this->tpl->assign('style', $this->tdStyle); if (isset($this->style[$r]['align'])) $this->tpl->assign( "align" , $this->style[$r]['align']); if (isset($this->style[$r]['colAlign'])) $this->tpl->assign( "align" , $this->style[$r]['colAlign']); /** * BEGIN : Reeplace of @@, @%,... in field's attributes like onclick, link, * ... */ if (isset($this->xmlForm->fields[ $this->fields[$r]['Name'] ]->onclick)) { $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->onclick = G::replaceDataField($this->style[$r]['onclick'],$result); } if (isset($this->xmlForm->fields[ $this->fields[$r]['Name'] ]->link)) { $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->link = G::replaceDataField($this->style[$r]['link'],$result); } if (isset($this->xmlForm->fields[ $this->fields[$r]['Name'] ]->value)) { $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->value = G::replaceDataField($this->style[$r]['value'],$result); } /** * BREAK : Reeplace of @@, @%,... */ /** * Rendering of the field */ $this->xmlForm->setDefaultValues(); $this->xmlForm->setValues( $result ); $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->mode = 'view'; if ((array_search( 'rendergrid', get_class_methods( get_class($this->xmlForm->fields[ $this->fields[$r]['Name'] ])) )!==FALSE) ||(array_search( 'renderGrid', get_class_methods( get_class($this->xmlForm->fields[ $this->fields[$r]['Name'] ])) )!==FALSE)) { $htmlField = $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->renderGrid( array($value) , $this->xmlForm ); $this->tpl->assign( "value" , $htmlField[0] ); } else { } /** * CONTINUE : Reeplace of @@, @%,... */ if (isset($this->xmlForm->fields[ $this->fields[$r]['Name'] ]->onclick)) { $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->onclick = $this->style[$r]['onclick']; } if (isset($this->xmlForm->fields[ $this->fields[$r]['Name'] ]->link)) { $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->link = $this->style[$r]['link']; } if (isset($this->xmlForm->fields[ $this->fields[$r]['Name'] ]->value)) { $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->value = $this->style[$r]['value']; } /** * END : Reeplace of @@, @%,... */ return $this->fields[$r]['Type']; } /** * Function defaultStyle * @author David S. Callizaya S. * @access public * @return string */ function defaultStyle() { // for($r=1;$r<=sizeof($this->fields);$r++) foreach($this->fields as $r => $rval){ $this->style[$r]=array( 'showInTable' => '1', 'titleVisibility'=> '1', 'colWidth' => '150', 'onclick' => '', 'event' => '' ); //Some widths if (!(strpos(' date linknew ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)) $this->style[$r]['colWidth']='70'; //Data source: if (!(strpos(' title button linknew image-text jslink ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)) $this->style[$r]['data']=''; //If the control is a link it shows the label else $this->style[$r]['data']=$this->fields[$r]['Name']; //ELSE: The data value for that field //Hidden fields if (!isset($this->style[$r]['showInTable'])) { if (!(strpos(' title button endgrid2 submit password ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)){ $this->style[$r]['showInTable']='0'; } else{ $this->style[$r]['showInTable']='1'; } } //Hidden titles if (!(strpos(' linknew button endgrid2 ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)){ $this->style[$r]['titleVisibility']='0'; } //Align titles $this->style[$r]['titleAlign']='center'; //Align fields if (isset($_SESSION['SET_DIRECTION']) && (strcasecmp($_SESSION['SET_DIRECTION'],'rtl')===0)) $this->style[$r]['align']='right'; else $this->style[$r]['align']='left'; if (!(strpos(' linknew date ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)){ $this->style[$r]['align']='center'; } } // Adjust the columns width to prevent overflow the page width //Render headers $totalWidth=0; foreach($this->fields as $r => $rval) if ($this->style[$r]['showInTable']!='0') $totalWidth += $this->style[$r]['colWidth']; $this->totalWidth = $totalWidth; $maxWidth=1800; $proportion=$totalWidth/$maxWidth; if ($proportion>1) $this->totalWidth = 1800; if ($proportion>1) foreach($this->fields as $r => $rval) if ($this->style[$r]['showInTable']!='0') $this->style[$r]['colWidth']=$this->style[$r]['colWidth']/$proportion; } /** * Function renderTable * @author David S. Callizaya S. * @param $block : = 'content'(Prints contentBlock only) * @access public * @return string */ function renderTable( $block = '' ) { // DBConnection $this->prepareQuery(); //Query for get the number of rows $this->query=$this->ses->execute($this->sql); $this->totRows=$this->query->count(); $this->totpages=ceil($this->query->count()/$this->rowsPerPage); //Query for obtain the records $this->query=$this->ses->execute($this->sql.' LIMIT '.(($this->currentPage-1)*$this->rowsPerPage).', '.$this->rowsPerPage); // Prepare the template $this->tpl = new TemplatePower( PATH_CORE . $this->template ); $this->tpl->prepare(); /********** HEAD BLOCK ***************/ if (($block ==='') || ($block==='head')) { $this->tpl->newBlock('headBlock'); $this->tpl->assign( 'pagedTable_Id' , $this->id ); $this->tpl->assign( 'pagedTable_Name' , $this->name ); $this->tpl->assign( 'pagedTable_Height' , $this->xmlForm->height ); if (file_exists($this->xmlForm->home . $this->filterForm . '.xml')) { $filterForm = new filterForm( $this->filterForm , $this->xmlForm->home ); if ($this->menu==='') $this->menu= 'gulliver/pagedTable_Options'; } if (file_exists($this->xmlForm->home . $this->menu . '.xml')) { $menu = new xmlMenu( $this->menu , $this->xmlForm->home ); $this->tpl->newBlock('headerBlock'); $template = PATH_CORE . 'templates' . PATH_SEP . $menu->type . '.html'; $menu->setValues($this->xmlForm->values); $menu->setValues(array( 'PAGED_TABLE_ID' => $this->id )); $menu->setValues(array( 'PAGED_TABLE_FAST_SEARCH' => $this->fastSearch )); if (isset($filterForm->name)) { $menu->setValues(array('SEARCH_FILTER_FORM' => $filterForm->name)); } $this->tpl->assign( 'content' , $menu->render( $template , $scriptCode ) ); $oHeadPublisher =& headPublisher::getSingleton(); $oHeadPublisher->addScriptFile( $menu->scriptURL ); $oHeadPublisher->addScriptCode( $scriptCode ); } if (file_exists($this->xmlForm->home . $this->filterForm . '.xml')) { $this->tpl->newBlock('headerBlock'); $this->filterForm_Id = $filterForm->id; $filterForm->type = 'filterform'; $filterForm->ajaxServer = '../gulliver/defaultAjax'; $template = PATH_CORE . 'templates/' . $filterForm->type . '.html'; $filterForm->setValues($this->xmlForm->values); $filterForm->setValues(array('PAGED_TABLE_ID' => $this->id )); $filterForm->setValues(array( 'PAGED_TABLE_FAST_SEARCH' => $this->fastSearch )); $this->tpl->assign( 'content' , $filterForm->render( $template , $scriptCode ) ); $oHeadPublisher =& headPublisher::getSingleton(); $oHeadPublisher->addScriptFile( $filterForm->scriptURL ); $oHeadPublisher->addScriptCode( $scriptCode ); if (isset($_SESSION)) $_SESSION[$filterForm->id]=$filterForm->values; } } /********** CONTENT BLOCK ***************/ if (($block ==='') || ($block==='content')) { $this->tpl->newBlock('contentBlock'); $this->tpl->assign('gridWidth','=['. substr($this->gridWidth,1) .']'); $this->tpl->assign('fieldNames','=['. substr($this->gridFields,1) .']'); $this->tpl->assign('ajaxUri','="'. addslashes($this->ajaxServer) . '"'); $this->tpl->assign('currentUri','="'. addslashes($this->ownerPage) . '"'); $this->tpl->assign('currentOrder','="'. addslashes($this->orderBy) . '"'); $this->tpl->assign('currentPage','='. $this->currentPage ); $this->tpl->assign('currentFilter','="' . '"'); $this->tpl->assign('totalRows','='.$this->query->count()); $this->tpl->assign('rowsPerPage','='.$this->rowsPerPage); $this->tpl->assign('popupPage','="'. addslashes($this->popupPage) . '"'); $this->tpl->assign('popupWidth','='.$this->popupWidth); $this->tpl->assign('popupHeight','='.$this->popupHeight); $this->tpl->assign('pagedTable_Id', $this->id ); $this->tpl->assign('pagedTable_Name', $this->name ); $this->tpl->assign("pagedTable_JS" , "{$this->id}.element=document.getElementById('pagedtable[{$this->id}]');"); $this->renderTitle(); //Render rows $gridRows=0; for($j=0;$j<$this->query->count();$j++){ $result=$this->query->read(); //if (($j>=(($this->currentPage-1)*$this->rowsPerPage))&&($j<(($this->currentPage)*$this->rowsPerPage))) { $gridRows++; $this->tpl->newBlock( "row" ); $this->tpl->assign( "class" , "Row".(($j%2)+1)); $this->tdStyle=''; $this->tdClass=''; foreach($this->fields as $r => $rval){ if (strcasecmp($this->fields[$r]['Type'],'cellMark')==0){ $result1=$result; $result1['row__']=$j+1; $this->xmlForm->setDefaultValues(); $this->xmlForm->setValues( $result1 ); $result1=array_merge($this->xmlForm->values,$result1); $this->tdStyle=$this->xmlForm->fields[ $this->fields[$r]['Name'] ]->tdStyle( $result1 , $this->xmlForm ); $this->tdClass=$this->xmlForm->fields[ $this->fields[$r]['Name'] ]->tdClass( $result1 , $this->xmlForm ); } elseif ($this->style[$r]['showInTable']!='0'){ $this->renderField($j+1,$r,$result); } } } } $this->tpl->assign('_ROOT.gridRows','='. $gridRows); //number of rows in the current page $this->tpl->newBlock('rowTag'); $this->tpl->assign('rowId','insertAtLast'); if( $this->currentPage > 1 ) { $firstUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=1'; $firstAjax = $this->id . ".doGoToPage(1);return false;"; $prevpage = $this->currentPage - 1; $prevUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $prevpage; $prevAjax = $this->id . ".doGoToPage(".$prevpage.");return false;"; $first = " "; $prev = " "; } else{ $first = " "; $prev = " "; } if( $this->currentPage < $this->totpages ) { $lastUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $this->totpages; $lastAjax = $this->id . ".doGoToPage(" .$this->totpages.");return false;"; $nextpage = $this->currentPage + 1; $nextUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $nextpage; $nextAjax = $this->id . ".doGoToPage(" .$nextpage.");return false;"; $next = " "; $last = " "; } else{ $next = " "; $last = " "; } $pagesEnum=''; for ($r=1;$r<=$this->totpages;$r++) if (($r>=($this->currentPage-5))&&($r<=($this->currentPage+5))){ $pageAjax = $this->id . ".doGoToPage(" .$r.");return false;"; if ($r!=$this->currentPage) $pagesEnum.=" ownerPage . '?order=' . $this->orderBy . '&page=' . $r , ENT_QUOTES , 'utf-8' ) . "\" onclick=\"".$pageAjax."\">".$r.""; else $pagesEnum.=" ".$r.""; } if ($this->query->count()===0) { $this->tpl->newBlock( 'norecords' ); $this->tpl->assign( "columnCount", $this->colCount); $noRecordsFound='ID_NO_RECORDS_FOUND'; if (G::LoadTranslation($noRecordsFound)) $noRecordsFound = G::LoadTranslation($noRecordsFound); $this->tpl->assign( "noRecordsFound", $noRecordsFound); } if (!$this->disableFooter) { $this->tpl->newBlock( "bottomFooter" ); $this->tpl->assign( "columnCount", $this->colCount); $this->tpl->assign( "pagedTableId" , $this->id ); if (($this->query->count()!==0)) { if ($this->totpages>1){ $this->tpl->assign( "first" , $first ); $this->tpl->assign( "prev" , $prev ); $this->tpl->assign( "next" , $next ); $this->tpl->assign( "last" , $last ); } $this->tpl->assign( "currentPage" , $this->currentPage ); $this->tpl->assign( "totalPages" , $this->totpages ); $firstRow = ($this->currentPage-1) * $this->rowsPerPage+1; $lastRow = $firstRow+$this->query->count()-1; $this->tpl->assign( "firstRow" , $firstRow ); $this->tpl->assign( "lastRow" , $lastRow ); $this->tpl->assign( "totalRows" , $this->totRows ); } else { $this->tpl->assign( "indexStyle", 'visibility:hidden;'); } if ($this->searchBy) { $this->tpl->assign( "fastSearchValue" , $this->fastSearch ); } else { $this->tpl->assign( "fastSearchStyle" , 'visibility:hidden;' ); } if ($this->addRow) if($this->sqlInsert!='') $this->tpl->assign( "insert" , ''./*G::LoadXml('labels','ID_ADD_NEW')*/ 'ID_ADD_NEW' .'' ); $this->tpl->assign("pagesEnum", $pagesEnum); } ?> tpl->newBlock( "closeBlock" ); } $this->tpl->printToScreen(); unset($this->tpl); unset($this->dbc); unset($this->ses); $_SESSION['pagedTable['.$this->id.']']= serialize($this); return; } /** * Function printForm * @access public * @param string $filename * @param array $data * @return void */ function printForm($filename,$data=array()) { // $G_FORM = new Form($filename, PATH_XMLFORM); // echo $G_FORM->render(PATH_TPL . 'xmlform.html', $scriptContent); global $G_PUBLISH; $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('xmlform', 'xmlform', $filename, '', $data , $this->popupSubmit); G::RenderPage( "publish" , "blank" ); } } /** * Function var_dump2 * @access public * @param string $o * @return void */ function var_dump2($o) { if (is_object($o) || is_array($o)) foreach($o as $key=>$value){ echo(''); var_dump($key); echo(''); print_r($value); echo('
'); } else var_dump($o); }