Upgrade to ExtJS 3.2.0 - Released 03/30/2010
[extjs.git] / examples / grid-filtering / grid-filter.php
1 <?php
2
3 // database connection settings
4 $server   = 'localhost';
5 $username = 'demo';
6 $password = '';
7 $database = 'demo'; // 'gridfiltersdemo' in sample sql
8
9 // connect to database
10 mysql_pconnect($server, $username, $password) or die("Could not connect");
11 mysql_select_db($database) or die("Could not select database");
12
13 // collect request parameters
14 $start  = isset($_REQUEST['start'])  ? $_REQUEST['start']  :  0;
15 $count  = isset($_REQUEST['limit'])  ? $_REQUEST['limit']  : 20;
16 $sort   = isset($_REQUEST['sort'])   ? $_REQUEST['sort']   : '';
17 $dir    = isset($_REQUEST['dir'])    ? $_REQUEST['dir']    : 'ASC';
18 $filters = isset($_REQUEST['filter']) ? $_REQUEST['filter'] : null;
19
20 // GridFilters sends filters as an Array if not json encoded
21 if (is_array($filters)) {
22     $encoded = false;
23 } else {
24     $encoded = true;
25     $filters = json_decode($filters);
26 }
27
28 // initialize variables
29 $where = ' 0 = 0 ';
30 $qs = '';
31
32 // loop through filters sent by client
33 if (is_array($filters)) {
34     for ($i=0;$i<count($filters);$i++){
35         $filter = $filters[$i];
36
37         // assign filter data (location depends if encoded or not)
38         if ($encoded) {
39             $field = $filter->field;
40             $value = $filter->value;
41             $compare = isset($filter->comparison) ? $filter->comparison : null;
42             $filterType = $filter->type;
43         } else {
44             $field = $filter['field'];
45             $value = $filter['data']['value'];
46             $compare = isset($filter['data']['comparison']) ? $filter['data']['comparison'] : null;
47             $filterType = $filter['data']['type'];
48         }
49
50         switch($filterType){
51             case 'string' : $qs .= " AND ".$field." LIKE '%".$value."%'"; Break;
52             case 'list' :
53                 if (strstr($value,',')){
54                     $fi = explode(',',$value);
55                     for ($q=0;$q<count($fi);$q++){
56                         $fi[$q] = "'".$fi[$q]."'";
57                     }
58                     $value = implode(',',$fi);
59                     $qs .= " AND ".$field." IN (".$value.")";
60                 }else{
61                     $qs .= " AND ".$field." = '".$value."'";
62                 }
63             Break;
64             case 'boolean' : $qs .= " AND ".$field." = ".($value); Break;
65             case 'numeric' :
66                 switch ($compare) {
67                     case 'eq' : $qs .= " AND ".$field." = ".$value; Break;
68                     case 'lt' : $qs .= " AND ".$field." < ".$value; Break;
69                     case 'gt' : $qs .= " AND ".$field." > ".$value; Break;
70                 }
71             Break;
72             case 'date' :
73                 switch ($compare) {
74                     case 'eq' : $qs .= " AND ".$field." = '".date('Y-m-d',strtotime($value))."'"; Break;
75                     case 'lt' : $qs .= " AND ".$field." < '".date('Y-m-d',strtotime($value))."'"; Break;
76                     case 'gt' : $qs .= " AND ".$field." > '".date('Y-m-d',strtotime($value))."'"; Break;
77                 }
78             Break;
79         }
80     }
81     $where .= $qs;
82 }
83
84 // query the database
85 $query = "SELECT * FROM demo WHERE ".$where;
86 if ($sort != "") {
87     $query .= " ORDER BY ".$sort." ".$dir;
88 }
89 $query .= " LIMIT ".$start.",".$count;
90
91 $rs = mysql_query($query);
92 $total = mysql_query("SELECT COUNT(id) FROM demo WHERE ".$where);
93 $total = mysql_result($total, 0, 0);
94
95 $arr = array();
96 while($obj = mysql_fetch_object($rs)) {
97     $arr[] = $obj;
98 }
99
100 // return response to client
101 echo '{"total":"'.$total.'","data":'.json_encode($arr).'}';