196adde4e26ebbba0c57aab43b60f80678de66ab
[mw_sourceml] / app / data / upgrades / xml / mw_sourceml_xml_version_1_1_2.php
1 <?php
2
3   class mw_sourceml_xml_version_1_1_2 extends mw_data_version{
4
5     function version(){
6       return "1.1.2";
7     }
8
9     function do_upgrade(){
10
11       $env = $this->env();
12       $data = $env->data();
13       $sgbd = $data->sgbd();
14
15       if($sgbd->data_exists("sources")){
16
17         /* ----------------------------------------------------------------------
18                                                      nouvelle table groupe_status
19         */
20   
21         if(!$sgbd->data_exists("groupe_status")){
22           if(!$sgbd->create_data("groupe_status")) return "impossible de creer la table groupe_status";
23           if
24           (    !$sgbd->add_data("groupe_status", array("nom" => "admin"))
25             || !$sgbd->add_data("groupe_status", array("nom" => "editeur"))
26             || !$sgbd->add_data("groupe_status", array("nom" => "contributeur"))
27           ){
28             return "impossible de renseigner la table groupe_status";
29           }
30         }
31   
32         /* ----------------------------------------------------------------------
33                                                     nouvelle table source_groupes
34                                sources.id_groupe devient source_groupes.id_groupe
35                                                    maj sources.image avec id user
36         */
37   
38         if(!$sgbd->data_exists("source_groupes")){
39           if(!$sgbd->create_data("source_groupes")) return "impossible de creer la table source_groupes";
40           if(!($rst = $sgbd->open_data("sources"))){
41             return "impossible de lire la liste des sources";
42           }
43           $erreur = "";
44           while($v_rst = $sgbd->fetch_data($rst)){
45             if(isset($v_rst)){
46               if(isset($v_rst["id"]) && isset($v_rst["id_groupe"])){
47                 $id_source = $v_rst["id"];
48                 unset($v_rst["id"]);
49                 $id_groupe = $v_rst["id_groupe"];
50                 unset($v_rst["id_groupe"]);
51                 if(isset($v_rst["image"]) && $v_rst["image"] && !preg_match("/^[0-9]+\/.*$/", $v_rst["image"])){
52                   if($groupe = $sgbd->get_data("groupes", $id_groupe)){
53                     $v_rst["image"] = $groupe["id_user"]."/".$v_rst["image"];
54                   }
55                 }
56                 if(
57                   !$sgbd->set_data(
58                     "sources",
59                     $id_source,
60                     $v_rst
61                   )
62                 ){
63                   $erreur = "impossible de mettre a jour les informations des sources (champ id_groupe)";
64                   break;
65                 }
66                 if(
67                   !$sgbd->add_data(
68                     "source_groupes",
69                     array(
70                       "id_source" => $id_source,
71                       "id_groupe" => $id_groupe,
72                       "id_groupe_status" => 1
73                     )
74                   )
75                 ){
76                   $erreur = "impossible de mettre a jour les informations des sources (source_groupes)";
77                   break;
78                 }
79               }
80             }
81             else{
82               $erreur = "erreur lors de lecture des sources pour mettre a jour les derivations";
83               break;
84             }
85           }
86           $sgbd->close_data($rst);
87           if($erreur) return $erreur;
88         }
89   
90         /* ----------------------------------------------------------------------
91                                                 nouvelle table source_derivations
92                          sources.derivation devient source_derivations.derivation
93         */
94   
95         if(!$sgbd->data_exists("source_derivations")){
96           if(!$sgbd->create_data("source_derivations")){
97             return "impossible de créer la table source_derivations";
98           }
99           if(!($rst = $sgbd->open_data("sources"))){
100             return "impossible de lire la liste des sources";
101           }
102           $erreur = "";
103           while($v_rst = $sgbd->fetch_data($rst)){
104             if(isset($v_rst)){
105               if(isset($v_rst["id"]) && isset($v_rst["derivation"])){
106                 $id_source = $v_rst["id"];
107                 unset($v_rst["id"]);
108                 $derivation = $v_rst["derivation"];
109                 unset($v_rst["derivation"]);
110                 if(
111                   !$sgbd->set_data(
112                     "sources",
113                     $id_source,
114                     $v_rst
115                   )
116                 ){
117                   $erreur = "impossible de mettre a jour les informations des sources (champ derivation)";
118                   break;
119                 }
120                 if(
121                   !$sgbd->add_data(
122                     "source_derivations",
123                     array(
124                       "id_source" => $id_source,
125                       "derivation" => $derivation
126                     )
127                   )
128                 ){
129                   $erreur = "impossible de mettre a jour les derivations";
130                   break;
131                 }
132               }
133             }
134             else{
135               $erreur = "erreur lors de lecture des sources pour mettre a jour les derivations";
136               break;
137             }
138           }
139           $sgbd->close_data($rst);
140           if($erreur) return $erreur;
141         }
142   
143         /* ----------------------------------------------------------------------
144                                                                           groupes
145                                                            maj image avec id user
146         */
147   
148         if($sgbd->data_exists("groupes")){
149           if(!($rst = $sgbd->open_data("groupes"))){
150             return "impossible de lire la liste des groupes pour mettre a jour les chemins des images";
151           }
152           $res = true;
153           while($v_rst = $sgbd->fetch_data($rst)){
154             if(isset($v_rst)){
155               if(isset($v_rst["id"]) && isset($v_rst["id_user"]) && isset($v_rst["image"]) && $v_rst["image"]){
156                 if(!preg_match("/^[0-9]+\/.*$/", $v_rst["image"])){
157                   $id_groupe = $v_rst["id"];
158                   unset($v_rst["id"]);
159                   $v_rst["image"] = $v_rst["id_user"]."/".$v_rst["image"];
160                   if(
161                     !$sgbd->set_data(
162                       "groupes",
163                       $id_groupe,
164                       $v_rst
165                     )
166                   ){
167                     $res = "impossible de mettre a jour les images des groupes";
168                     break;
169                   }
170                 }
171               }
172             }
173             else{
174               $res = "erreur lors de lecture des groupes pour mettre a jour les images";
175               break;
176             }
177           }
178           $sgbd->close_data($rst);
179           if($res !== true) return $res;
180         }
181   
182         /* ----------------------------------------------------------------------
183                                                                           sources
184                                                 sources.nom devient sources.titre
185         */
186   
187         if(!($rst = $sgbd->open_data("sources"))){
188           return "impossible de lire la liste des sources";
189         }
190         $erreur = "";
191         while($v_rst = $sgbd->fetch_data($rst)){
192           if(isset($v_rst)){
193             if(isset($v_rst["id"])){
194               $id_source = $v_rst["id"];
195               unset($v_rst["id"]);
196               $NEED_UPDATE = false;
197               if(!isset($v_rst["titre"])){
198                 $v_rst["titre"] = isset($v_rst["nom"]) ? $v_rst["nom"] : "";
199                 $NEED_UPDATE = true;
200               }
201               if(isset($v_rst["nom"])){
202                 unset($v_rst["nom"]);
203                 $NEED_UPDATE = true;
204               }
205               if($NEED_UPDATE){
206                 if(
207                   !$sgbd->set_data(
208                     "sources",
209                     $id_source,
210                     $v_rst
211                   )
212                 ){
213                   $erreur = "impossible de mettre a jour les informations des sources";
214                   break;
215                 }
216               }
217             }
218           }
219           else{
220             $erreur = "erreur lors de lecture des sources pour mettre a jour leurs informations";
221             break;
222           }
223         }
224         $sgbd->close_data($rst);
225         if($erreur) return $erreur;
226   
227         /* ----------------------------------------------------------------------
228                                 suppression de la table source_status_composition
229         */
230   
231         if($sgbd->data_exists("source_status_composition")){
232           if(!$sgbd->remove_data("source_status_composition")){
233             return "impossible de supprimer la table source_status_composition";
234           }
235         }
236
237       } // if($sgbd->data_exists("sources"))
238
239
240       /* ###################################################################### */
241       /* ###################################################################### */
242       /* ----------------------------------------------------------------------
243                    migration vers les tables en sml_(...) du plugin mw_sourceml
244       */
245
246       $base_dir = $env->path("content")."data/xml/".$env->bdd("base");
247       $base_dir .= substr($base_dir, -1) != "/" ? "/" : "";
248
249       if(!is_dir($base_dir)){
250         return "impossible de trouver le dossier de la base";
251       }
252
253       /* ----------------------------------------------------------------------
254                                                     sources devient sml_sources
255                                                     elt status devient id_class
256       */
257
258       if($sgbd->data_exists("sources")){
259         if(!@rename($base_dir."sources", $base_dir."sml_sources")){
260           return "impossible de renommer sources en sml_sources";
261         }
262         if(!($rst = $sgbd->open_data("sml_sources"))){
263           return "impossible de lire sml_sources";
264         }
265         $erreur = "";
266         while($v_rst = $sgbd->fetch_data($rst)){
267           if(isset($v_rst)){
268             if(isset($v_rst["id"])){
269               $NEED_UPDATE = false;
270               if(isset($v_rst["status"])){
271                 $id_class = $v_rst["status"];
272                 unset($v_rst["status"]);
273                 $v_rst["id_class"] = $id_class;
274                 $NEED_UPDATE = true;
275               }
276               if(!$NEED_UPDATE) continue;
277               if(
278                 !$sgbd->set_data(
279                   "sml_sources",
280                   $v_rst["id"],
281                   $v_rst
282                 )
283               ){
284                 $erreur = "impossible de mettre a jour les informations de sml_sources";
285                 break;
286               }
287             }
288           }
289           else{
290             $erreur = "erreur lors de lecture de sml_sources";
291             break;
292           }
293         }
294         $sgbd->close_data($rst);
295         if($erreur) return $erreur;
296       }
297
298       /* ----------------------------------------------------------------------
299                                      source_groupes devient sml_sources_authors
300                                                 elt id_groupe devient id_author
301                                  elt id_groupe_status devient id_sources_access
302       */
303
304       if($sgbd->data_exists("source_groupes")){
305         if(!@rename($base_dir."source_groupes", $base_dir."sml_sources_authors")){
306           return "impossible de renommer source_groupes en sml_sources_authors";
307         }
308         if(!($rst = $sgbd->open_data("sml_sources_authors"))){
309           return "impossible de lire sml_sources_authors";
310         }
311         $erreur = "";
312         while($v_rst = $sgbd->fetch_data($rst)){
313           if(isset($v_rst)){
314             if(isset($v_rst["id"])){
315               $NEED_UPDATE = false;
316               if(isset($v_rst["id_groupe"])){
317                 $id_author = $v_rst["id_groupe"];
318                 unset($v_rst["id_groupe"]);
319                 $v_rst["id_author"] = $id_author;
320                 $NEED_UPDATE = true;
321               }
322               if(isset($v_rst["id_groupe_status"])){
323                 $id_sources_access = $v_rst["id_groupe_status"];
324                 unset($v_rst["id_groupe_status"]);
325                 $v_rst["id_sources_access"] = $id_sources_access;
326                 $NEED_UPDATE = true;
327               }
328               if(!$NEED_UPDATE) continue;
329               if(
330                 !$sgbd->set_data(
331                   "sml_sources_authors",
332                   $v_rst["id"],
333                   $v_rst
334                 )
335               ){
336                 $erreur = "impossible de mettre a jour les informations de sml_sources_authors";
337                 break;
338               }
339             }
340           }
341           else{
342             $erreur = "erreur lors de lecture de sml_sources_authors";
343             break;
344           }
345         }
346         $sgbd->close_data($rst);
347         if($erreur) return $erreur;
348       }
349
350       /* ----------------------------------------------------------------------
351                                        groupe_status devient sml_sources_access
352                                                             nouvel elt intitule
353       */
354
355       if($sgbd->data_exists("groupe_status")){
356         if(!@rename($base_dir."groupe_status", $base_dir."sml_sources_access")){
357           return "impossible de renommer groupe_status en sml_sources_access";
358         }
359         if(!($rst = $sgbd->open_data("sml_sources_access"))){
360           return "impossible de lire sml_sources_access";
361         }
362         $erreur = "";
363         while($v_rst = $sgbd->fetch_data($rst)){
364           if(isset($v_rst)){
365             if(isset($v_rst["id"]) && isset($v_rst["nom"]) && !isset($v_rst["intitule"])){
366               $intitule = "";
367               if($v_rst["nom"] == "admin") $intitule = "administrateur";
368               elseif($v_rst["nom"] == "editeur") $intitule = "éditeur";
369               elseif($v_rst["nom"] == "contributeur") $intitule = "contributeur";
370               if(
371                 !$sgbd->set_data(
372                   "sml_sources_access",
373                   $v_rst["id"],
374                   array(
375                     "nom" => $v_rst["nom"],
376                     "intitule" => $intitule
377                   )
378                 )
379               ){
380                 $erreur = "impossible de mettre a jour les informations de sml_sources_access";
381                 break;
382               }
383             }
384           }
385           else{
386             $erreur = "erreur lors de lecture de sml_sources_access";
387             break;
388           }
389         }
390         $sgbd->close_data($rst);
391         if($erreur) return $erreur;
392       }
393
394       /* ----------------------------------------------------------------------
395                                                     groupes devient sml_authors
396       */
397
398       if($sgbd->data_exists("groupes")){
399         if(!@rename($base_dir."groupes", $base_dir."sml_authors")){
400           return "impossible de renommer groupes en sml_authors";
401         }
402       }
403
404       /* ----------------------------------------------------------------------
405                                                   licences devient sml_licences
406       */
407
408       if($sgbd->data_exists("licences")){
409         if(!@rename($base_dir."licences", $base_dir."sml_licences")){
410           return "impossible de renommer licences en sml_licences";
411         }
412       }
413
414       /* ----------------------------------------------------------------------
415                             source_compositions devient sml_source_compositions
416       */
417
418       if($sgbd->data_exists("source_compositions")){
419         if(!@rename($base_dir."source_compositions", $base_dir."sml_source_compositions")){
420           return "impossible de renommer source_compositions en sml_source_compositions";
421         }
422       }
423
424       /* ----------------------------------------------------------------------
425                               source_derivations devient sml_source_derivations
426       */
427
428       if($sgbd->data_exists("source_derivations")){
429         if(!@rename($base_dir."source_derivations", $base_dir."sml_source_derivations")){
430           return "impossible de renommer source_derivations en sml_source_derivations";
431         }
432       }
433
434       /* ----------------------------------------------------------------------
435                                          cache/sources devient sml_source_cache
436       */
437
438       if($sgbd->data_exists("cache/sources")){
439         if(!@rename($base_dir."cache/sources", $base_dir."sml_source_cache")){
440           return "impossible de renommer cache/sources en sml_source_cache";
441         }
442         if(file_exists($base_dir."cache/.index")) @unlink($base_dir."cache/.index");
443         @rmdir($base_dir."cache");
444       }
445
446       /* ----------------------------------------------------------------------
447                                               source_status devient sml_classes
448       */
449
450       if($sgbd->data_exists("source_status")){
451         if(!@rename($base_dir."source_status", $base_dir."sml_classes")){
452           return "impossible de renommer source_status en sml_classes";
453         }
454       }
455
456       /* ----------------------------------------------------------------------
457                                          nouvelle table sml_sources_invitations
458       */
459
460       if(!$sgbd->data_exists("sml_sources_invitations")){
461         if(!$sgbd->create_data("sml_sources_invitations")){
462           return "impossible de creer la table sml_sources_invitations";
463         }
464       }
465
466       return true;
467     }
468
469   }