Spaces:
Sleeping
Sleeping
| /** | |
| * class.pagedTable.php | |
| * | |
| * @package gulliver.system | |
| * | |
| * ProcessMaker Open Source Edition | |
| * Copyright (C) 2004 - 2011 Colosa Inc. | |
| * | |
| * This program is free software: you can redistribute it and/or modify | |
| * it under the terms of the GNU Affero General Public License as | |
| * published by the Free Software Foundation, either version 3 of the | |
| * License, or (at your option) 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 Affero General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Affero General Public License | |
| * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| * | |
| * For more information, contact Colosa Inc, 2566 Le Jeune Rd., | |
| * Coral Gables, FL, 33134, USA, or email info@colosa.com. | |
| * | |
| */ | |
| /** | |
| * Class pagedTable | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @package gulliver.system | |
| * @access public | |
| */ | |
| class pagedTable | |
| { | |
| public $xmlFormFile; | |
| public $currentPage; | |
| public $orderBy = ''; | |
| public $filter = array (); | |
| public $filterType = array (); | |
| public $searchBy = ''; | |
| public $fastSearch = ''; | |
| public $order = ''; | |
| public $template = 'templates/paged-table.html'; | |
| public $tpl; | |
| public $style = array (); | |
| public $rowsPerPage = 25; | |
| public $ownerPage; | |
| public $popupPage; | |
| public $popupSubmit; | |
| public $popupWidth = 450; | |
| public $popupHeight = 200; | |
| public $ajaxServer; | |
| public $fields; | |
| public $query; | |
| public $totpages; | |
| //SQL QUERIES | |
| public $sql = ''; | |
| public $sqlWhere = ''; | |
| public $sqlGroupBy = ''; | |
| public $sqlSelect = 'SELECT 1'; | |
| public $sqlDelete = ''; | |
| public $sqlInsert = ''; | |
| public $sqlUpdate = ''; | |
| public $fieldDataList = ''; | |
| //Configuration | |
| public $xmlPopup = ''; | |
| public $addRow = false; | |
| public $deleteRow = false; | |
| public $editRow = false; | |
| public $notFields = ' title button linknew begingrid2 endgrid2 '; // These are not considered to build the sql queries (update,insert,delete) | |
| //JavaScript Object attributes | |
| public $onUpdateField = ""; | |
| public $onDeleteField = ""; | |
| public $afterDeleteField = ""; | |
| public $onInsertField = ""; | |
| //New gulliver | |
| public $xmlForm; | |
| public $menu = ''; | |
| public $filterForm = ''; | |
| public $filterForm_Id = ''; | |
| public $name = 'pagedTable'; | |
| public $id = 'A1'; | |
| public $disableFooter = false; | |
| //This attribute is used to set STYLES to groups of TD, using the field type "cellMark" (see XmlFormFieldCellMark) | |
| public $tdStyle = ''; | |
| public $tdClass = ''; | |
| //Config Save definition | |
| public $__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. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public 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. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public 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. <davidsantos@colosa.com> | |
| * @access public | |
| * @param string xmlForm | |
| * @return string | |
| */ | |
| public 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. <davidsantos@colosa.com> | |
| * @access public | |
| * @param eter 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('<br>'); | |
| //// var_dump2($this); | |
| // } | |
| /** | |
| * Function count | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function count () | |
| { | |
| $this->prepareQuery(); | |
| return $this->query->count(); | |
| } | |
| /** | |
| * Function renderTitle | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public 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. <davidsantos@colosa.com> | |
| * @access public | |
| * @param eter string row | |
| * @param eter string r | |
| * @param eter string result | |
| * @return string | |
| */ | |
| public 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. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public 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. <davidsantos@colosa.com> | |
| * @param $block : = 'content'(Prints contentBlock only) | |
| * @access public | |
| * @return string | |
| */ | |
| public function renderTable ($block = '') | |
| { | |
| $filter = new InputFilter(); | |
| $this->orderBy = $filter->xssFilterHard($this->orderBy); | |
| $this->currentPage = $filter->xssFilterHard($this->currentPage); | |
| $this->id = $filter->xssFilterHard($this->id); | |
| $this->name = $filter->xssFilterHard($this->name); | |
| $this->ownerPage = $filter->xssFilterHard($this->ownerPage); | |
| // 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 ); | |
| $this->xmlForm->home = $filter->xssFilterHard($this->xmlForm->home); | |
| $this->filterForm = $filter->xssFilterHard($this->filterForm); | |
| $this->menu = $filter->xssFilterHard($this->menu); | |
| 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'; | |
| $firstUrl = $filter->xssFilterHard($firstUrl); | |
| $firstAjax = $this->id . ".doGoToPage(1);return false;"; | |
| $firstAjax = $filter->xssFilterHard($firstAjax); | |
| $prevpage = $this->currentPage - 1; | |
| $prevUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $prevpage; | |
| $prevUrl = $filter->xssFilterHard($prevUrl); | |
| $prevAjax = $this->id . ".doGoToPage(" . $prevpage . ");return false;"; | |
| $prevAjax = $filter->xssFilterHard($prevAjax); | |
| $first = "<a href=\"" . htmlentities( $firstUrl, ENT_QUOTES, 'utf-8' ) . "\" onclick=\"" . $firstAjax . "\" class='firstPage'> </a>"; | |
| $prev = "<a href=\"" . htmlentities( $prevUrl, ENT_QUOTES, 'utf-8' ) . "\" onclick=\"" . $prevAjax . "\" class='previousPage'> </a>"; | |
| } else { | |
| $first = "<a class='noFirstPage'> </a>"; | |
| $prev = "<a class='noPreviousPage'> </a>"; | |
| } | |
| if ($this->currentPage < $this->totpages) { | |
| $lastUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $this->totpages; | |
| $lastUrl = $filter->xssFilterHard($lastUrl); | |
| $lastAjax = $this->id . ".doGoToPage(" . $this->totpages . ");return false;"; | |
| $lastAjax = $filter->xssFilterHard($lastAjax); | |
| $nextpage = $this->currentPage + 1; | |
| $nextUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $nextpage; | |
| $nextUrl = $filter->xssFilterHard($nextUrl); | |
| $nextAjax = $this->id . ".doGoToPage(" . $nextpage . ");return false;"; | |
| $nextAjax = $filter->xssFilterHard($nextAjax); | |
| $next = "<a href=\"" . htmlentities( $nextUrl, ENT_QUOTES, 'utf-8' ) . "\" onclick=\"" . $nextAjax . "\" class='nextPage'> </a>"; | |
| $last = "<a href=\"" . htmlentities( $lastUrl, ENT_QUOTES, 'utf-8' ) . "\" onclick=\"" . $lastAjax . "\" class='lastPage'> </a>"; | |
| } else { | |
| $next = "<a class='noNextPage'> </a>"; | |
| $last = "<a class='noLastPage'> </a>"; | |
| } | |
| $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) { | |
| $pageAjax = $filter->xssFilterHard($pageAjax); | |
| $pagesEnum .= " <a href=\"" . htmlentities( $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $r, ENT_QUOTES, 'utf-8' ) . "\" onclick=\"" . $pageAjax . "\">" . $r . "</a>"; | |
| } else { | |
| $pagesEnum .= " <a>" . $r . "</a>"; | |
| } | |
| } | |
| } | |
| 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", '<a href="#" onclick="pagedTable.event=\'Insert\';popup(\'' . $this->popupPage . '\');return false;">'./*G::LoadXml('labels','ID_ADD_NEW')*/ 'ID_ADD_NEW' . '</a>' ); | |
| } | |
| } | |
| $this->tpl->assign( "pagesEnum", $pagesEnum ); | |
| } | |
| <script language='JavaScript'> | |
| var echo $this->id echo ($this->name != '' ? '='.$this->name : '')=new G_PagedTable(); | |
| echo $this->id.id echo '="'. addslashes($this->id) . '"'; | |
| echo $this->id.name echo '="'. addslashes($this->name) . '"'; | |
| echo $this->id.ajaxUri echo '="'. addslashes($this->ajaxServer) . '?ptID='.$this->id.'"'; | |
| echo $this->id.currentOrder echo '="'. addslashes($this->orderBy) . '"'; | |
| echo $this->id.currentFilter; | |
| echo $this->id.currentPage echo '='. $this->currentPage; | |
| echo $this->id.totalRows echo '='.$this->query->count(); | |
| echo $this->id.rowsPerPage echo '='.$this->rowsPerPage; | |
| echo $this->id.popupPage echo '="'. addslashes($this->popupPage) . '?ptID='.$this->id.'"'; | |
| echo $this->id.onUpdateField echo '="'. addslashes($this->onUpdateField) . '"'; | |
| echo $this->id.shownFields echo '='.$this->shownFields ; | |
| var panelPopup; | |
| var popupWidth echo '='.$this->popupWidth; | |
| var popupHeight echo '='.$this->popupHeight; | |
| </script> | |
| } | |
| /** | |
| * ******** CLOSE BLOCK ************** | |
| */ | |
| if (($block === '') || ($block === 'close')) { | |
| $this->tpl->newBlock( "closeBlock" ); | |
| } | |
| $this->tpl->printToScreen(); | |
| unset( $this->tpl ); | |
| unset( $this->dbc ); | |
| unset( $this->ses ); | |
| $_SESSION['pagedTable[' . $this->id . ']'] = base64_encode(serialize($this)); | |
| return; | |
| } | |
| /** | |
| * Function printForm | |
| * | |
| * @access public | |
| * @param string $filename | |
| * @param array $data | |
| * @return void | |
| */ | |
| public 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 ('<b>'); | |
| var_dump( $key ); | |
| echo ('</b>'); | |
| print_r( $value ); | |
| echo ('<br>'); | |
| } | |
| } else { | |
| var_dump( $o ); | |
| } | |
| } | |