| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?php
- namespace MGModule\DNSManager2\mgLibs\custom;
- use MGModule\DNSManager2\mgLibs\MySQL as mysql;
- class RawQueryTableHelper {
- private $items_per_page = 10;
- private $page = 1;
- private $count_all;
- private $count_filtered;
- private $pages_count;
- private $data = array();
-
- /**
- * Klasa ta pomga w generowaniu outputu dla DataTables za pomocą zwykłego query
- * @param string $query
- * @param array $input
- * @param array $columns - dla tych kolumn włączony będzie search oraz sortowanie
- */
- public function __construct($query, $input, $columns) {
- // $columns = array(); //NOT WORKING :(
- // foreach(mysql\query::query("SHOW COLUMNS FROM ($query) t")->fetchAll() as $column)
- // $columns[] = $column['Field'];
-
- $count_all = mysql\query::query("SELECT COUNT(*) FROM ($query) t")->fetchColumn();
- $items_per_page = $input['limit']?:$this->items_per_page;
- $page = floor($input['offset']/$items_per_page);
-
- $order_by = array();
- if(in_array($input['order']['column'], $columns)) {
- $order_by[$input['order']['column']] = $input['order']['dir'];
- }
- $filters = array();
- foreach($input['filter'] as $column => $value)
- if(!empty($value)) {
- $filters[$column] = $value;
- }
- if($input['search']) {
- $search = array();
- foreach($columns as $column) {
- $uid = $column.uniqid();
- $search[] = array(
- 'or' => true,
- 'customQuery' => "`$column` LIKE :$uid",
- 'params' => array(
- $uid => "%{$input['search']}%",
- ),
- );
- }
-
- $search = mysql\query::parseConditions($search, $values);
- $filters[] = array(
- 'customQuery' => '( ' . $search . ' ) ',
- 'params' => $values,
- );
- }
- $count_filtered = mysql\query::count('*', " ($query) t", $filters, $order_by);
- $pages_count = floor($count_filtered/$items_per_page) + 1;
- if($page > $pages_count)
- $page = $pages_count;
-
- $limit_offset = (int) $input['offset'];
- $this->data = mysql\query::select(array('*'), " ($query) t", $filters, $order_by, $items_per_page, $limit_offset);
-
- $this->page = $page;
- $this->count_all = $count_all;
- $this->count_filtered = $count_filtered;
- $this->items_per_page = $items_per_page;
- $this->pages_count = $pages_count;
- }
-
- public function get() {
- return $this->data->fetchAll();
- }
-
- public function getDataTableArray() {
- $out = array();
- $out['recordsTotal'] = $this->count_all;
- $out['recordsFiltered'] = $this->count_filtered;
- $out['data'] = array();
- return $out;
- }
- }
|