]> git.proxmox.com Git - extjs.git/blame - extjs/examples/kitchensink/data/grid/grid-filter.php
add extjs 6.0.1 sources
[extjs.git] / extjs / examples / kitchensink / data / grid / grid-filter.php
CommitLineData
6527f429
DM
1<?php\r
2\r
3function 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
14function 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
32if (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
43if (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
102while($row = $result->fetch(SQLITE_ASSOC)) {\r
103 array_push($rows, $row);\r
104}\r
105echo json_encode(Array(\r
106 "total"=>$count,\r
107 "data"=>$rows\r
108));\r
109\r
110?>