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