public function json() { $grid = $this->getGridTable(); $fields = []; $templates = []; $functions = []; foreach ($grid->getColumns() as $column) { if ($column->hasAlias()) { $fields[$column->getAlias()] = $column->getField(); $templates[$column->getAlias()] = $column->getHtml(); $functions[$column->getAlias()] = $column->getFunction(); } else { $fields[] = $column->getField(); $templates[$column->getField()] = $column->getHtml(); $functions[$column->getField()] = $column->getFunction(); } } $filter['fields'] = $fields; $filter['templates'] = $templates; $filter['functions'] = $functions; return GridService::getGridServiceResponse($this->source, $filter); }
public static function getGridServiceResponse($source, $filter, $class = NULL) { global $db; $fld = isset($filter["fields"]) ? array_values($filter["fields"]) : array('id'); $fldAs = array_keys($fld); // $source = trim($source); // $tbl = strpos($source, ' ') > 0 ? "({$source}) AS GridServiceSourceTable" : $source; // limit results $limit = GridSql::LIMIT(array("enabled" => isset($_POST['iDisplayStart']), "start" => $_POST['iDisplayStart'], "length" => $_POST['iDisplayLength'])); // sort by results $fieldToOrder = array(); $fieldSortable = array(); $fieldDirection = array(); for ($i = 0; $i < (int) $_POST['iSortingCols']; $i++) { $fieldIndex = $_POST['iSortCol_' . $i]; $fieldSortable[$i] = $_POST['bSortable_' . $fieldIndex]; $fieldDirection[$i] = $_POST['sSortDir_' . $i]; $fieldToOrder[$i] = $fieldIndex; } $orderby = GridSql::ORDERBY(array("enabled" => isset($_POST['iSortCol_0']), "fieldToOrder" => $fieldToOrder, "fieldSortable" => $fieldSortable, "fieldDirection" => $fieldDirection, "fieldName" => $fld, "fieldAs" => $fldAs)); // fields in select $fields = GridSql::FIELDS(array("enabled" => isset($filter["fields"]), "fieldArray" => $filter["fields"])); // where cond for ($i = 0; $i < count($filter["fields"]); $i++) { $fieldSearchable[$i] = @$_POST['bSearchable_' . $i]; } $where = GridSql::WHERE(array("enabled" => isset($_POST['sSearch']), "search" => @$_POST['sSearch'], "fieldName" => $fld, "fieldAs" => $fldAs, "whereCondition" => @$filter["where"], "fieldSearchable" => $fieldSearchable)); // the queries $sql_fetch = "SELECT {$fields} FROM {$tbl} {$where} {$orderby} {$limit}"; //return self::handleGridServiceResponse($tbl, $where, $sql_fetch, $class); //$dbx = Context::getInstance()->getDB(); $dbx = $db; // prepare response $res $res = new \stdClass(); $res->sEcho = $_POST["sEcho"]; $sql_count = "SELECT COUNT(id) FROM {$tbl} {$where}"; $sql_total = "SELECT COUNT(id) FROM {$tbl}"; // fetch rows $res->SQL = $sql_fetch; $dat = $dbx->getResults($sql_fetch); // apply filter to encode special chars if ($class && $dat) { foreach ($dat as &$row) { foreach ($row as &$value) { $value = mb_convert_encoding($value, 'UTF-8'); } } } // apply Set/Get filter to parse and prepare data for visualization if ($class && $dat) { foreach ($dat as &$row) { //DBUtils::applyGetFilter($row,$class); } } // apply html template or functions for fields if ($dat) { foreach ($dat as &$row) { foreach ($row as $k => &$v) { $v = GridService::applyTemplate($v, $k, $filter['templates'][$k], $row); $v = GridService::applyFunction($v, $k, $filter['functions'][$k], $row); } } } // prepare aaData with $dat $res->aaData = array(); if ($dat) { foreach ($dat as $row0) { /* $row1 = new \stdClass; $i = 0; foreach ($row0 as $key => $val) { if ($key == 'DT_RowClass') { $row1->{'DT_RowClass'} = $val; } else if ($key == 'DT_RowClass') { $row1->{'DT_RowId'} = $val; } else { $row1->{''.$i} = $val; $i++; } }*/ $res->aaData[] = $row0; //array_values((array)$row0); } } // manage total $res->iTotalRecords = (int) $dbx->getValue($sql_total); $res->iTotalDisplayRecords = (int) $dbx->getValue($sql_count); // return response return $res; }