fonctions CRUD par defaut
[mtweb] / mw / app / data / modules / sql / mw_data_crud.php
1 <?php
2
3   class mw_data_crud extends mw_data{
4
5     # ----------------------------------------------------------------------------------------
6     #                                                                                call_crud
7     #
8
9     function call_data_crud($method_name, $arguments){
10       $r = false;
11       $sgbd = $this->sgbd();
12       // add_<table_name>(array $values)
13       if(
14             (substr($method_name, 0, 4) == "add_")
15         &&  ($table_name = substr($method_name, 4))
16         &&  ($sgbd->table_exists("#--".$table_name))
17       ){
18         $r = $this->data_insert(
19           array(
20             "values" => $arguments[0],
21             "table_name" => $table_name
22           )
23         );
24       }
25       // get_<table_name>(string $index_name, string $index_value)
26       elseif(
27             (substr($method_name, 0, 4) == "get_")
28         &&  ($table_name = substr($method_name, 4))
29         &&  ($sgbd->table_exists("#--".$table_name))
30       ){
31         $r = $this->data_read(
32           array(
33             "table_name" => $table_name,
34             "index_name" => $arguments[0],
35             "index_value" => $arguments[1]
36           )
37         );
38       }
39       // list_<table_name>(array $params)
40       elseif(
41             (substr($method_name, 0, 5) == "list_")
42         &&  ($table_name = substr($method_name, 5))
43         &&  ($sgbd->table_exists("#--".$table_name))
44       ){
45         $params = $arguments[0];
46         $params["table_name"] = $table_name;
47         $r = $this->data_list($params);
48       }
49       // set_<table_name>(string index_name, string index_value, array $values)
50       elseif(
51             (substr($method_name, 0, 4) == "set_")
52         &&  ($table_name = substr($method_name, 4))
53         &&  ($sgbd->table_exists("#--".$table_name))
54       ){
55         $r = $this->data_update(
56           array(
57             "table_name" => $table_name,
58             "index_name" => $arguments[0],
59             "index_value" => $arguments[1],
60             "values" => $arguments[2]
61           )
62         );
63       }
64       // del_<table_name>(string $index_name, string $index_value)
65       elseif(
66             (substr($method_name, 0, 4) == "del_")
67         &&  ($table_name = substr($method_name, 4))
68         &&  ($sgbd->table_exists("#--".$table_name))
69       ){
70         $r = $this->data_delete(
71           array(
72             "table_name" => $table_name,
73             "index_name" => $arguments[0],
74             "index_value" => $arguments[1]
75           )
76         );
77       }
78       return $r;
79     }
80
81     # ----------------------------------------------------------------------------------------
82     #                                                                                   insert
83     #
84
85     function data_insert($params = array()){
86       $sgbd = $this->sgbd();
87       $table_name = isset($params["table_name"]) ? $params["table_name"] : "";
88       if(!$table_name) return false;
89       $values = (isset($params["values"]) && is_array($params["values"])) ? $params["values"] : false;
90       if(!$values) return false;
91       $return_insert_id = isset($params["return_insert_id"]) ? $params["return_insert_id"] : false;
92       $attributs_names = "";
93       $attributs_values = "";
94       foreach($values as $attribut_name => $attribut_value){
95         $attributs_names .= ($attributs_names ? ", " : "")."`".$attribut_name."`";
96         $attributs_values .= ($attributs_values ? ", " : "").$this->eq($attribut_value);
97       }
98       $attributs_names = $attributs_names ? "(".$attributs_names.")" : "";
99       $attributs_values = $attributs_values ? " VALUES (".$attributs_values.")" : "";
100       try{
101         $sgbd->query("INSERT INTO `#--".$table_name."`".$attributs_names.$attributs_values);
102         $res = $return_insert_id ? $sgbd->insert_id() : true;
103       }
104       catch(Exception $e) { $res = false; }
105       return $res;
106     }
107
108     # ----------------------------------------------------------------------------------------
109     #                                                                                     read
110     #
111
112     function data_read($params = array()){
113       $sgbd = $this->sgbd();
114       $table_name = isset($params["table_name"]) ? $params["table_name"] : "";
115       $index_name = isset($params["index_name"]) ? $params["index_name"] : "";
116       $index_value = isset($params["index_value"]) ? $params["index_value"] : "";
117       if(!$table_name || !$index_name || !$index_value) return false;
118       $item = array();
119       try{
120         $sql = "SELECT * from `#--".$table_name."` WHERE `".$index_name."`=".$this->eq($index_value)." LIMIT 1";
121         $rst = $sgbd->query($sql);
122         if($v_rst = $sgbd->fetch_assoc($rst)) $item = $v_rst;
123         $sgbd->free_result($rst);
124       }
125       catch(Exception $e) { $item = false; }
126       return $item;
127     }
128
129     # ----------------------------------------------------------------------------------------
130     #                                                                                     list
131     #
132
133     function data_list($params = array()){
134       $sgbd = $this->sgbd();
135       $table_name = isset($params["table_name"]) ? $params["table_name"] : "";
136       if(!$table_name) return false;
137       $index_name = isset($params["index_name"]) ? $params["index_name"] : "";
138       $select = "SELECT `#--".$table_name."`.*";
139       $from = " FROM `#--".$table_name."`";
140       $where = isset($params["where"]) ? " WHERE ".$params["where"] : "";
141       $order = isset($params["order_by"]) ?
142         " ORDER BY ".$params["order_by"].(isset($params["order"]) ? " ".$params["order"] : "")
143       : "";
144       $limit = isset($params["limit"]) ?
145         " LIMIT ".$params["limit"].(isset($params["offset"]) ? " OFFSET ".$params["offset"] : "")
146       : "";
147       $list = array("list" => array(), "total" => 0);
148       try{
149         $sql = "SELECT count(*) as n FROM(".$select.$from.$where.") res";
150         $rst = $sgbd->query($sql);
151         if($v_rst = $sgbd->fetch_assoc($rst)) $list["total"] = $v_rst["n"];
152         $sgbd->free_result($rst);
153         if($list["total"] > 0){
154           $sql = "SELECT * FROM(".$select.$from.$where.$order.$limit.") res";
155           $rst = $sgbd->query($sql);
156           while($v_rst = $sgbd->fetch_assoc($rst)){
157             if($index_name) $list["list"][$v_rst[$index_name]] = $v_rst;
158             else $list["list"][] = $v_rst;
159           }
160           $sgbd->free_result($rst);
161         }
162       }
163       catch(Exception $e) { $list = false; }
164       return $list;
165     }
166
167     # ----------------------------------------------------------------------------------------
168     #                                                                                   update
169     #
170
171     function data_update($params = array()){
172       $sgbd = $this->sgbd();
173       $table_name = isset($params["table_name"]) ? $params["table_name"] : false;
174       $values = (isset($params["values"]) && is_array($params["values"])) ? $params["values"] : false;
175       $index_name = isset($params["index_name"]) ? $params["index_name"] : false;
176       $index_value = isset($params["index_value"]) ? $params["index_value"] : false;
177       if(!$table_name || !$index_name || !$index_value || !$values) return false;
178       try{
179         $sql = "UPDATE `#--".$table_name."`";
180         $set = "";
181         foreach($values as $attribut_name => $attribut_value){
182           $set .= ($set ? ", " : "")."`".$attribut_name."`=".$this->eq($attribut_value);
183         }
184         $set = $set ? " SET ".$set : "";
185         $where = " WHERE `".$index_name."`=".$this->eq($index_value);
186         $sgbd->query($sql.$set.$where);
187       }
188       catch(Exception $e) { return false; }
189       return true;
190     }
191
192     # ----------------------------------------------------------------------------------------
193     #                                                                                   delete
194     #
195
196     function data_delete($params = array()){
197       $sgbd = $this->sgbd();
198       $table_name = isset($params["table_name"]) ? $params["table_name"] : false;
199       $index_name = isset($params["index_name"]) ? $params["index_name"] : false;
200       $index_value = isset($params["index_value"]) ? $params["index_value"] : false;
201       if(!$table_name || !$index_name || !$index_value) return false;
202       try{
203         $sql = "DELETE FROM `#--".$table_name."` WHERE `".$index_name."`=".$this->eq($index_value);
204         $sgbd->query($sql);
205       }
206       catch(Exception $e) { return false; }
207       return true;
208     }
209
210   }
211
212 ?>