9bac3d01eb8de16fdf3a0ad1d6c4f01495d5850f
[mtweb] / mw / app / data / upgrades / xml / mtweb_xml_version_0_11_2.php
1 <?php
2
3   class mtweb_xml_version_0_11_2 extends mw_data_version{
4
5     function version(){
6       return "0.11.2";
7     }
8
9     function do_upgrade(){
10
11       $env = $this->env();
12       $data = $env->data();
13       $sgbd = $data->sgbd();
14
15       /* ---------------------------------------------------------------------- */
16       /*                                                          action_status */
17       /*                                                  devient actions_roles */
18       /*                                      element id_status devient id_role */
19
20       if(!$sgbd->data_exists("actions_roles")){
21         if(!$sgbd->create_data("actions_roles")){
22           return "impossible de créer la table actions_roles";
23         }
24       }
25       if($sgbd->data_exists("action_status")){
26         $action_status = array();
27         if($rst = $sgbd->open_data("action_status")){
28           while($v_rst = $sgbd->fetch_data($rst)){
29             if(isset($v_rst)){
30               $action_status[$v_rst["id"]] = $v_rst;
31             }
32             else{
33               $action_status = false;
34               break;
35             }
36           }
37           $sgbd->close_data($rst);
38         }
39         else{
40           return "impossible d'ouvrir la table action_status, dans ".get_class($this);
41         }
42         if($action_status === false){
43           return "impossible de lire la table action_status, dans ".get_class($this);
44         }
45         if($action_status){
46           foreach($action_status as $status){
47             if(
48               !$sgbd->add_data(
49                 "actions_roles",
50                 array(
51                   "action" => $status["action"],
52                   "id_role" => $status["id_status"]
53                 )
54               )
55             ){
56               return "erreur lors de la migration de action_status vers actions_roles";
57             }
58           }
59         }
60         if(!$sgbd->remove_data("action_status")){
61           return "impossible de supprimer la table action_status";
62         }
63       }
64
65
66       /* ---------------------------------------------------------------------- */
67       /*                                                                 config */
68       /*                                                  elements key et value */
69       /*                                                                        */
70
71       $OK = true;
72       if($rst = $sgbd->open_data("config")){
73         while($v_rst = $sgbd->fetch_data($rst)){
74           if(isset($v_rst)){
75             if(!isset($v_rst["key"]) || !isset($v_rst["value"])){
76               $config_key = "";
77               $config_value = "";
78               foreach($v_rst as $key => $value){
79                 if($key != "id"){
80                   $config_key = $key;
81                   $config_value = $value;
82                   break;
83                 }
84               }
85               if($config_key){
86                 if(
87                   !$sgbd->set_data(
88                     "config",
89                     $v_rst["id"],
90                     array(
91                       "key" => $config_key,
92                       "value" => $config_value
93                     )
94                   )
95                 ){
96                   $OK = false;
97                   break;
98                 }
99               }
100             }
101           }
102           else{
103             $OK = false;
104             break;
105           }
106         }
107         $sgbd->close_data($rst);
108       }
109       else{
110         return "impossible d'ouvrir la table config, dans ".get_class($this);
111       }
112       if(!$OK){
113         return "impossible de mettre à jour la table config, dans ".get_class($this);
114       }
115
116       /* ---------------------------------------------------------------------- */
117       /*                                                            user_status */
118       /*                                                          devient roles */
119       /*                                                                        */
120       if(!$sgbd->data_exists("roles")){
121         if(!$sgbd->create_data("roles")){
122           return "impossible de creer la table roles, dans ".get_class($this);
123         }
124
125         $ERROR = false;
126         if(!$ERROR){
127           $res = $sgbd->add_data(
128             "roles",
129             array(
130               "nom" => "guest",
131               "intitule" => "invité"
132             ),
133             0
134           );
135           if(!isset($res)) $ERROR = true;
136         } 
137         if(!$ERROR) if(
138           !$sgbd->add_data(
139             "roles",
140             array(
141               "nom" => "admin",
142               "intitule" => "administrateur"
143             )
144           )
145         ) $ERROR = true;
146         if(!$ERROR) if(
147           !$sgbd->add_data(
148             "roles",
149             array(
150               "nom" => "membre",
151               "intitule" => "membre"
152             )
153           )
154         ) $ERROR = true;
155         if(!$ERROR) if(
156           !$sgbd->add_data(
157             "roles",
158             array(
159               "nom" => "webmaster",
160               "intitule" => "webmaster"
161             )
162           )
163         ) $ERROR = true;
164
165         if($ERROR){
166           return "impossible de remplir la table roles, dans ".get_class($this);
167         }
168
169       }
170       if($sgbd->data_exists("user_status")){
171         if(!$sgbd->remove_data("user_status")){
172           return "impossible de supprimer la table user_status";
173         }
174       }
175
176       /* ---------------------------------------------------------------------- */
177       /*                                             nouvelle table users_roles */
178       /*                         importer users.status dans users_roles.id_role */
179
180       if(!$sgbd->data_exists("users_roles")){
181         if(!$sgbd->create_data("users_roles")){
182           return "impossible de creer la table users_roles, dans ".get_class($this);
183         }
184         $OK = true;
185         if($rst = $sgbd->open_data("users")){
186           while($v_rst = $sgbd->fetch_data($rst)){
187             if(isset($v_rst)){
188               if(isset($v_rst["status"])){
189                 if(
190                   !$sgbd->add_data(
191                     "users_roles",
192                     array(
193                       "id_user" => $v_rst["id"],
194                       "id_role" => $v_rst["status"]
195                     )
196                   )
197                 ){
198                   $OK = false;
199                   break;
200                 }
201               }
202             }
203             else{
204               $OK = false;
205               break;
206             }
207           }
208           $sgbd->close_data($rst);
209         }
210         else{
211           return "impossible d'ouvrir la table users, dans ".get_class($this);
212         }
213         if(!$OK){
214           return "impossible de remplir la table users_roles, dans ".get_class($this);
215         }
216       }
217
218       /* ---------------------------------------------------------------------- */
219       /*                                                nouvelle table versions */
220       /*                                                                        */
221
222       if(!$sgbd->data_exists("versions")){
223         if(!$sgbd->create_data("versions")){
224           return "impossible de creer la table versions, dans ".get_class($this);
225         }
226       }
227
228       /* ---------------------------------------------------------------------- */
229       /*                                  mise a jour de la version des donnees */
230       /*                                                                        */
231
232       if(!($env_version = $env->version("mtweb"))){
233         return "impossible de lire la version du code, dans ".get_class($this);
234       }
235       if(
236         $data_version = $data->data_read(
237           array(
238             "table_name" => "versions",
239             "index_name" => "application",
240             "index_value" => "mtweb"
241           )
242         )
243       ){
244         if(
245           !$sgbd->set_data(
246             "versions",
247             $data_version["id"],
248             array(
249               "version" => $this->version()
250             )
251           )
252         ){
253           return "impossible de mettre à jour la version, dans ".get_class($this);
254         }
255       }
256       else{
257         if(
258           !$sgbd->add_data(
259             "versions",
260             array(
261               "application" => "mtweb",
262               "version" => $this->version()
263             )
264           )
265         ){
266           return "impossible d'ajouter la version, dans ".get_class($this);
267         }
268       }
269
270       return true;
271     }
272
273   }