]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | <?php\r |
2 | \r | |
3 | function getDB() {\r | |
4 | $dbFile = "filter-demo.db";\r | |
5 | $hasDB = file_exists($dbFile);\r | |
6 | \r | |
7 | $db = new SQLiteDatabase($dbFile);\r | |
8 | if (!$hasDB) {\r | |
9 | $db->query(readCreateSql());\r | |
10 | }\r | |
11 | return $db;\r | |
12 | }\r | |
13 | \r | |
14 | function readCreateSql() {\r | |
15 | $filename = "grid-demo.sql";\r | |
16 | $file = fopen($filename, 'r');\r | |
17 | $data = fread($file, filesize($filename));\r | |
18 | fclose($file);\r | |
19 | return $data;\r | |
20 | }\r | |
21 | \r | |
22 | // collect request parameters\r | |
23 | $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0;\r | |
24 | $count = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : 50;\r | |
25 | $sort = isset($_REQUEST['sort']) ? json_decode($_REQUEST['sort']) : null;\r | |
26 | $filters = isset($_REQUEST['filter']) ? $_REQUEST['filter'] : null;\r | |
27 | \r | |
28 | $sortProperty = $sort[0]->property; \r | |
29 | $sortDirection = $sort[0]->direction;\r | |
30 | \r | |
31 | // GridFilters sends filters as an Array if not json encoded\r | |
32 | if (is_array($filters)) {\r | |
33 | $encoded = false;\r | |
34 | } else {\r | |
35 | $encoded = true;\r | |
36 | $filters = json_decode($filters);\r | |
37 | }\r | |
38 | \r | |
39 | $where = ' 0 = 0 ';\r | |
40 | $qs = '';\r | |
41 | \r | |
42 | // loop through filters sent by client\r | |
43 | if (is_array($filters)) {\r | |
44 | for ($i=0;$i<count($filters);$i++){\r | |
45 | $filter = $filters[$i];\r | |
46 | \r | |
47 | // assign filter data (location depends if encoded or not)\r | |
48 | if ($encoded) {\r | |
49 | $field = $filter->field;\r | |
50 | $value = $filter->value;\r | |
51 | $compare = isset($filter->comparison) ? $filter->comparison : null;\r | |
52 | $filterType = $filter->type;\r | |
53 | } else {\r | |
54 | $field = $filter['field'];\r | |
55 | $value = $filter['data']['value'];\r | |
56 | $compare = isset($filter['data']['comparison']) ? $filter['data']['comparison'] : null;\r | |
57 | $filterType = $filter['data']['type'];\r | |
58 | }\r | |
59 | \r | |
60 | switch($filterType){\r | |
61 | case 'string' : $qs .= " AND ".$field." LIKE '%".$value."%'"; Break;\r | |
62 | case 'list' :\r | |
63 | if (strstr($value,',')){\r | |
64 | $fi = explode(',',$value);\r | |
65 | for ($q=0;$q<count($fi);$q++){\r | |
66 | $fi[$q] = "'".$fi[$q]."'";\r | |
67 | }\r | |
68 | $value = implode(',',$fi);\r | |
69 | $qs .= " AND ".$field." IN (".$value.")";\r | |
70 | }else{\r | |
71 | $qs .= " AND ".$field." = '".$value."'";\r | |
72 | }\r | |
73 | Break;\r | |
74 | case 'boolean' : $qs .= " AND ".$field." = ".($value); Break;\r | |
75 | case 'numeric' :\r | |
76 | switch ($compare) {\r | |
77 | case 'eq' : $qs .= " AND ".$field." = ".$value; Break;\r | |
78 | case 'lt' : $qs .= " AND ".$field." < ".$value; Break;\r | |
79 | case 'gt' : $qs .= " AND ".$field." > ".$value; Break;\r | |
80 | }\r | |
81 | Break;\r | |
82 | case 'date' :\r | |
83 | switch ($compare) {\r | |
84 | case 'eq' : $qs .= " AND ".$field." = '".date('Y-m-d',strtotime($value))."'"; Break;\r | |
85 | case 'lt' : $qs .= " AND ".$field." < '".date('Y-m-d',strtotime($value))."'"; Break;\r | |
86 | case 'gt' : $qs .= " AND ".$field." > '".date('Y-m-d',strtotime($value))."'"; Break;\r | |
87 | }\r | |
88 | Break;\r | |
89 | }\r | |
90 | }\r | |
91 | $where .= $qs;\r | |
92 | }\r | |
93 | \r | |
94 | $query = "SELECT * FROM demo WHERE ".$where;\r | |
95 | $query .= " ORDER BY ".$sortProperty." ".$sortDirection;\r | |
96 | $query .= " LIMIT ".$start.",".$count;\r | |
97 | \r | |
98 | $db = getDB();\r | |
99 | $count = $db->singleQuery("SELECT COUNT(id) FROM demo WHERE ".$where);\r | |
100 | $result = $db->query($query);\r | |
101 | $rows = Array();\r | |
102 | while($row = $result->fetch(SQLITE_ASSOC)) {\r | |
103 | array_push($rows, $row);\r | |
104 | }\r | |
105 | echo json_encode(Array(\r | |
106 | "total"=>$count,\r | |
107 | "data"=>$rows\r | |
108 | ));\r | |
109 | \r | |
110 | ?> |