3 class mw_sourceml_xml_version_1_1_2 extends mw_data_version{
5 public function version(){
9 public function do_upgrade(){
13 $sgbd = $data->sgbd();
15 if($sgbd->data_exists("sources")){
17 /* ----------------------------------------------------------------------
18 nouvelle table groupe_status
21 if(!$sgbd->data_exists("groupe_status")){
22 if(!$sgbd->create_data("groupe_status")) return "impossible de creer la table groupe_status";
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"))
28 return "impossible de renseigner la table groupe_status";
32 /* ----------------------------------------------------------------------
33 nouvelle table source_groupes
34 sources.id_groupe devient source_groupes.id_groupe
35 maj sources.image avec id user
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";
44 while($v_rst = $sgbd->fetch_data($rst)){
46 if(isset($v_rst["id"]) && isset($v_rst["id_groupe"])){
47 $id_source = $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"];
63 $erreur = "impossible de mettre a jour les informations des sources (champ id_groupe)";
70 "id_source" => $id_source,
71 "id_groupe" => $id_groupe,
72 "id_groupe_status" => 1
76 $erreur = "impossible de mettre a jour les informations des sources (source_groupes)";
82 $erreur = "erreur lors de lecture des sources pour mettre a jour les derivations";
86 $sgbd->close_data($rst);
87 if($erreur) return $erreur;
90 /* ----------------------------------------------------------------------
91 nouvelle table source_derivations
92 sources.derivation devient source_derivations.derivation
95 if(!$sgbd->data_exists("source_derivations")){
96 if(!$sgbd->create_data("source_derivations")){
97 return "impossible de créer la table source_derivations";
99 if(!($rst = $sgbd->open_data("sources"))){
100 return "impossible de lire la liste des sources";
103 while($v_rst = $sgbd->fetch_data($rst)){
105 if(isset($v_rst["id"]) && isset($v_rst["derivation"])){
106 $id_source = $v_rst["id"];
108 $derivation = $v_rst["derivation"];
109 unset($v_rst["derivation"]);
117 $erreur = "impossible de mettre a jour les informations des sources (champ derivation)";
122 "source_derivations",
124 "id_source" => $id_source,
125 "derivation" => $derivation
129 $erreur = "impossible de mettre a jour les derivations";
135 $erreur = "erreur lors de lecture des sources pour mettre a jour les derivations";
139 $sgbd->close_data($rst);
140 if($erreur) return $erreur;
143 /* ----------------------------------------------------------------------
145 maj image avec id user
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";
153 while($v_rst = $sgbd->fetch_data($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"];
159 $v_rst["image"] = $v_rst["id_user"]."/".$v_rst["image"];
167 $res = "impossible de mettre a jour les images des groupes";
174 $res = "erreur lors de lecture des groupes pour mettre a jour les images";
178 $sgbd->close_data($rst);
179 if($res !== true) return $res;
182 /* ----------------------------------------------------------------------
184 sources.nom devient sources.titre
187 if(!($rst = $sgbd->open_data("sources"))){
188 return "impossible de lire la liste des sources";
191 while($v_rst = $sgbd->fetch_data($rst)){
193 if(isset($v_rst["id"])){
194 $id_source = $v_rst["id"];
196 $NEED_UPDATE = false;
197 if(!isset($v_rst["titre"])){
198 $v_rst["titre"] = isset($v_rst["nom"]) ? $v_rst["nom"] : "";
201 if(isset($v_rst["nom"])){
202 unset($v_rst["nom"]);
213 $erreur = "impossible de mettre a jour les informations des sources";
220 $erreur = "erreur lors de lecture des sources pour mettre a jour leurs informations";
224 $sgbd->close_data($rst);
225 if($erreur) return $erreur;
227 /* ----------------------------------------------------------------------
228 suppression de la table source_status_composition
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";
237 } // if($sgbd->data_exists("sources"))
240 /* ###################################################################### */
241 /* ###################################################################### */
242 /* ----------------------------------------------------------------------
243 migration vers les tables en sml_(...) du plugin mw_sourceml
246 $base_dir = $env->path("content")."data/xml/".$env->bdd("base");
247 $base_dir .= substr($base_dir, -1) != "/" ? "/" : "";
249 if(!is_dir($base_dir)){
250 return "impossible de trouver le dossier de la base";
253 /* ----------------------------------------------------------------------
254 sources devient sml_sources
255 elt status devient id_class
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";
262 if(!($rst = $sgbd->open_data("sml_sources"))){
263 return "impossible de lire sml_sources";
266 while($v_rst = $sgbd->fetch_data($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;
276 if(!$NEED_UPDATE) continue;
284 $erreur = "impossible de mettre a jour les informations de sml_sources";
290 $erreur = "erreur lors de lecture de sml_sources";
294 $sgbd->close_data($rst);
295 if($erreur) return $erreur;
298 /* ----------------------------------------------------------------------
299 source_groupes devient sml_sources_authors
300 elt id_groupe devient id_author
301 elt id_groupe_status devient id_sources_access
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";
308 if(!($rst = $sgbd->open_data("sml_sources_authors"))){
309 return "impossible de lire sml_sources_authors";
312 while($v_rst = $sgbd->fetch_data($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;
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;
328 if(!$NEED_UPDATE) continue;
331 "sml_sources_authors",
336 $erreur = "impossible de mettre a jour les informations de sml_sources_authors";
342 $erreur = "erreur lors de lecture de sml_sources_authors";
346 $sgbd->close_data($rst);
347 if($erreur) return $erreur;
350 /* ----------------------------------------------------------------------
351 groupe_status devient sml_sources_access
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";
359 if(!($rst = $sgbd->open_data("sml_sources_access"))){
360 return "impossible de lire sml_sources_access";
363 while($v_rst = $sgbd->fetch_data($rst)){
365 if(isset($v_rst["id"]) && isset($v_rst["nom"]) && !isset($v_rst["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";
372 "sml_sources_access",
375 "nom" => $v_rst["nom"],
376 "intitule" => $intitule
380 $erreur = "impossible de mettre a jour les informations de sml_sources_access";
386 $erreur = "erreur lors de lecture de sml_sources_access";
390 $sgbd->close_data($rst);
391 if($erreur) return $erreur;
394 /* ----------------------------------------------------------------------
395 groupes devient sml_authors
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";
404 /* ----------------------------------------------------------------------
405 licences devient sml_licences
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";
414 /* ----------------------------------------------------------------------
415 source_compositions devient sml_source_compositions
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";
424 /* ----------------------------------------------------------------------
425 source_derivations devient sml_source_derivations
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";
434 /* ----------------------------------------------------------------------
435 cache/sources devient sml_source_cache
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";
442 if(file_exists($base_dir."cache/.index")) @unlink($base_dir."cache/.index");
443 @rmdir($base_dir."cache");
446 /* ----------------------------------------------------------------------
447 source_status devient sml_classes
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";
456 /* ----------------------------------------------------------------------
457 nouvelle table sml_sources_invitations
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";