X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=app%2Fdata%2Fupgrades%2Fxml%2Fmw_sourceml_xml_version_1_1_2.php;fp=app%2Fdata%2Fupgrades%2Fxml%2Fmw_sourceml_xml_version_1_1_2.php;h=196adde4e26ebbba0c57aab43b60f80678de66ab;hb=37049b502efdf68a562ce63d8f37a820c66bc887;hp=0000000000000000000000000000000000000000;hpb=aa56057fe2634113eb8d1a50ed54b6a8988645a8;p=mw_sourceml diff --git a/app/data/upgrades/xml/mw_sourceml_xml_version_1_1_2.php b/app/data/upgrades/xml/mw_sourceml_xml_version_1_1_2.php new file mode 100644 index 0000000..196adde --- /dev/null +++ b/app/data/upgrades/xml/mw_sourceml_xml_version_1_1_2.php @@ -0,0 +1,469 @@ +env(); + $data = $env->data(); + $sgbd = $data->sgbd(); + + if($sgbd->data_exists("sources")){ + + /* ---------------------------------------------------------------------- + nouvelle table groupe_status + */ + + if(!$sgbd->data_exists("groupe_status")){ + if(!$sgbd->create_data("groupe_status")) return "impossible de creer la table groupe_status"; + if + ( !$sgbd->add_data("groupe_status", array("nom" => "admin")) + || !$sgbd->add_data("groupe_status", array("nom" => "editeur")) + || !$sgbd->add_data("groupe_status", array("nom" => "contributeur")) + ){ + return "impossible de renseigner la table groupe_status"; + } + } + + /* ---------------------------------------------------------------------- + nouvelle table source_groupes + sources.id_groupe devient source_groupes.id_groupe + maj sources.image avec id user + */ + + if(!$sgbd->data_exists("source_groupes")){ + if(!$sgbd->create_data("source_groupes")) return "impossible de creer la table source_groupes"; + if(!($rst = $sgbd->open_data("sources"))){ + return "impossible de lire la liste des sources"; + } + $erreur = ""; + while($v_rst = $sgbd->fetch_data($rst)){ + if(isset($v_rst)){ + if(isset($v_rst["id"]) && isset($v_rst["id_groupe"])){ + $id_source = $v_rst["id"]; + unset($v_rst["id"]); + $id_groupe = $v_rst["id_groupe"]; + unset($v_rst["id_groupe"]); + if(isset($v_rst["image"]) && $v_rst["image"] && !preg_match("/^[0-9]+\/.*$/", $v_rst["image"])){ + if($groupe = $sgbd->get_data("groupes", $id_groupe)){ + $v_rst["image"] = $groupe["id_user"]."/".$v_rst["image"]; + } + } + if( + !$sgbd->set_data( + "sources", + $id_source, + $v_rst + ) + ){ + $erreur = "impossible de mettre a jour les informations des sources (champ id_groupe)"; + break; + } + if( + !$sgbd->add_data( + "source_groupes", + array( + "id_source" => $id_source, + "id_groupe" => $id_groupe, + "id_groupe_status" => 1 + ) + ) + ){ + $erreur = "impossible de mettre a jour les informations des sources (source_groupes)"; + break; + } + } + } + else{ + $erreur = "erreur lors de lecture des sources pour mettre a jour les derivations"; + break; + } + } + $sgbd->close_data($rst); + if($erreur) return $erreur; + } + + /* ---------------------------------------------------------------------- + nouvelle table source_derivations + sources.derivation devient source_derivations.derivation + */ + + if(!$sgbd->data_exists("source_derivations")){ + if(!$sgbd->create_data("source_derivations")){ + return "impossible de créer la table source_derivations"; + } + if(!($rst = $sgbd->open_data("sources"))){ + return "impossible de lire la liste des sources"; + } + $erreur = ""; + while($v_rst = $sgbd->fetch_data($rst)){ + if(isset($v_rst)){ + if(isset($v_rst["id"]) && isset($v_rst["derivation"])){ + $id_source = $v_rst["id"]; + unset($v_rst["id"]); + $derivation = $v_rst["derivation"]; + unset($v_rst["derivation"]); + if( + !$sgbd->set_data( + "sources", + $id_source, + $v_rst + ) + ){ + $erreur = "impossible de mettre a jour les informations des sources (champ derivation)"; + break; + } + if( + !$sgbd->add_data( + "source_derivations", + array( + "id_source" => $id_source, + "derivation" => $derivation + ) + ) + ){ + $erreur = "impossible de mettre a jour les derivations"; + break; + } + } + } + else{ + $erreur = "erreur lors de lecture des sources pour mettre a jour les derivations"; + break; + } + } + $sgbd->close_data($rst); + if($erreur) return $erreur; + } + + /* ---------------------------------------------------------------------- + groupes + maj image avec id user + */ + + if($sgbd->data_exists("groupes")){ + if(!($rst = $sgbd->open_data("groupes"))){ + return "impossible de lire la liste des groupes pour mettre a jour les chemins des images"; + } + $res = true; + while($v_rst = $sgbd->fetch_data($rst)){ + if(isset($v_rst)){ + if(isset($v_rst["id"]) && isset($v_rst["id_user"]) && isset($v_rst["image"]) && $v_rst["image"]){ + if(!preg_match("/^[0-9]+\/.*$/", $v_rst["image"])){ + $id_groupe = $v_rst["id"]; + unset($v_rst["id"]); + $v_rst["image"] = $v_rst["id_user"]."/".$v_rst["image"]; + if( + !$sgbd->set_data( + "groupes", + $id_groupe, + $v_rst + ) + ){ + $res = "impossible de mettre a jour les images des groupes"; + break; + } + } + } + } + else{ + $res = "erreur lors de lecture des groupes pour mettre a jour les images"; + break; + } + } + $sgbd->close_data($rst); + if($res !== true) return $res; + } + + /* ---------------------------------------------------------------------- + sources + sources.nom devient sources.titre + */ + + if(!($rst = $sgbd->open_data("sources"))){ + return "impossible de lire la liste des sources"; + } + $erreur = ""; + while($v_rst = $sgbd->fetch_data($rst)){ + if(isset($v_rst)){ + if(isset($v_rst["id"])){ + $id_source = $v_rst["id"]; + unset($v_rst["id"]); + $NEED_UPDATE = false; + if(!isset($v_rst["titre"])){ + $v_rst["titre"] = isset($v_rst["nom"]) ? $v_rst["nom"] : ""; + $NEED_UPDATE = true; + } + if(isset($v_rst["nom"])){ + unset($v_rst["nom"]); + $NEED_UPDATE = true; + } + if($NEED_UPDATE){ + if( + !$sgbd->set_data( + "sources", + $id_source, + $v_rst + ) + ){ + $erreur = "impossible de mettre a jour les informations des sources"; + break; + } + } + } + } + else{ + $erreur = "erreur lors de lecture des sources pour mettre a jour leurs informations"; + break; + } + } + $sgbd->close_data($rst); + if($erreur) return $erreur; + + /* ---------------------------------------------------------------------- + suppression de la table source_status_composition + */ + + if($sgbd->data_exists("source_status_composition")){ + if(!$sgbd->remove_data("source_status_composition")){ + return "impossible de supprimer la table source_status_composition"; + } + } + + } // if($sgbd->data_exists("sources")) + + + /* ###################################################################### */ + /* ###################################################################### */ + /* ---------------------------------------------------------------------- + migration vers les tables en sml_(...) du plugin mw_sourceml + */ + + $base_dir = $env->path("content")."data/xml/".$env->bdd("base"); + $base_dir .= substr($base_dir, -1) != "/" ? "/" : ""; + + if(!is_dir($base_dir)){ + return "impossible de trouver le dossier de la base"; + } + + /* ---------------------------------------------------------------------- + sources devient sml_sources + elt status devient id_class + */ + + if($sgbd->data_exists("sources")){ + if(!@rename($base_dir."sources", $base_dir."sml_sources")){ + return "impossible de renommer sources en sml_sources"; + } + if(!($rst = $sgbd->open_data("sml_sources"))){ + return "impossible de lire sml_sources"; + } + $erreur = ""; + while($v_rst = $sgbd->fetch_data($rst)){ + if(isset($v_rst)){ + if(isset($v_rst["id"])){ + $NEED_UPDATE = false; + if(isset($v_rst["status"])){ + $id_class = $v_rst["status"]; + unset($v_rst["status"]); + $v_rst["id_class"] = $id_class; + $NEED_UPDATE = true; + } + if(!$NEED_UPDATE) continue; + if( + !$sgbd->set_data( + "sml_sources", + $v_rst["id"], + $v_rst + ) + ){ + $erreur = "impossible de mettre a jour les informations de sml_sources"; + break; + } + } + } + else{ + $erreur = "erreur lors de lecture de sml_sources"; + break; + } + } + $sgbd->close_data($rst); + if($erreur) return $erreur; + } + + /* ---------------------------------------------------------------------- + source_groupes devient sml_sources_authors + elt id_groupe devient id_author + elt id_groupe_status devient id_sources_access + */ + + if($sgbd->data_exists("source_groupes")){ + if(!@rename($base_dir."source_groupes", $base_dir."sml_sources_authors")){ + return "impossible de renommer source_groupes en sml_sources_authors"; + } + if(!($rst = $sgbd->open_data("sml_sources_authors"))){ + return "impossible de lire sml_sources_authors"; + } + $erreur = ""; + while($v_rst = $sgbd->fetch_data($rst)){ + if(isset($v_rst)){ + if(isset($v_rst["id"])){ + $NEED_UPDATE = false; + if(isset($v_rst["id_groupe"])){ + $id_author = $v_rst["id_groupe"]; + unset($v_rst["id_groupe"]); + $v_rst["id_author"] = $id_author; + $NEED_UPDATE = true; + } + if(isset($v_rst["id_groupe_status"])){ + $id_sources_access = $v_rst["id_groupe_status"]; + unset($v_rst["id_groupe_status"]); + $v_rst["id_sources_access"] = $id_sources_access; + $NEED_UPDATE = true; + } + if(!$NEED_UPDATE) continue; + if( + !$sgbd->set_data( + "sml_sources_authors", + $v_rst["id"], + $v_rst + ) + ){ + $erreur = "impossible de mettre a jour les informations de sml_sources_authors"; + break; + } + } + } + else{ + $erreur = "erreur lors de lecture de sml_sources_authors"; + break; + } + } + $sgbd->close_data($rst); + if($erreur) return $erreur; + } + + /* ---------------------------------------------------------------------- + groupe_status devient sml_sources_access + nouvel elt intitule + */ + + if($sgbd->data_exists("groupe_status")){ + if(!@rename($base_dir."groupe_status", $base_dir."sml_sources_access")){ + return "impossible de renommer groupe_status en sml_sources_access"; + } + if(!($rst = $sgbd->open_data("sml_sources_access"))){ + return "impossible de lire sml_sources_access"; + } + $erreur = ""; + while($v_rst = $sgbd->fetch_data($rst)){ + if(isset($v_rst)){ + if(isset($v_rst["id"]) && isset($v_rst["nom"]) && !isset($v_rst["intitule"])){ + $intitule = ""; + if($v_rst["nom"] == "admin") $intitule = "administrateur"; + elseif($v_rst["nom"] == "editeur") $intitule = "éditeur"; + elseif($v_rst["nom"] == "contributeur") $intitule = "contributeur"; + if( + !$sgbd->set_data( + "sml_sources_access", + $v_rst["id"], + array( + "nom" => $v_rst["nom"], + "intitule" => $intitule + ) + ) + ){ + $erreur = "impossible de mettre a jour les informations de sml_sources_access"; + break; + } + } + } + else{ + $erreur = "erreur lors de lecture de sml_sources_access"; + break; + } + } + $sgbd->close_data($rst); + if($erreur) return $erreur; + } + + /* ---------------------------------------------------------------------- + groupes devient sml_authors + */ + + if($sgbd->data_exists("groupes")){ + if(!@rename($base_dir."groupes", $base_dir."sml_authors")){ + return "impossible de renommer groupes en sml_authors"; + } + } + + /* ---------------------------------------------------------------------- + licences devient sml_licences + */ + + if($sgbd->data_exists("licences")){ + if(!@rename($base_dir."licences", $base_dir."sml_licences")){ + return "impossible de renommer licences en sml_licences"; + } + } + + /* ---------------------------------------------------------------------- + source_compositions devient sml_source_compositions + */ + + if($sgbd->data_exists("source_compositions")){ + if(!@rename($base_dir."source_compositions", $base_dir."sml_source_compositions")){ + return "impossible de renommer source_compositions en sml_source_compositions"; + } + } + + /* ---------------------------------------------------------------------- + source_derivations devient sml_source_derivations + */ + + if($sgbd->data_exists("source_derivations")){ + if(!@rename($base_dir."source_derivations", $base_dir."sml_source_derivations")){ + return "impossible de renommer source_derivations en sml_source_derivations"; + } + } + + /* ---------------------------------------------------------------------- + cache/sources devient sml_source_cache + */ + + if($sgbd->data_exists("cache/sources")){ + if(!@rename($base_dir."cache/sources", $base_dir."sml_source_cache")){ + return "impossible de renommer cache/sources en sml_source_cache"; + } + if(file_exists($base_dir."cache/.index")) @unlink($base_dir."cache/.index"); + @rmdir($base_dir."cache"); + } + + /* ---------------------------------------------------------------------- + source_status devient sml_classes + */ + + if($sgbd->data_exists("source_status")){ + if(!@rename($base_dir."source_status", $base_dir."sml_classes")){ + return "impossible de renommer source_status en sml_classes"; + } + } + + /* ---------------------------------------------------------------------- + nouvelle table sml_sources_invitations + */ + + if(!$sgbd->data_exists("sml_sources_invitations")){ + if(!$sgbd->create_data("sml_sources_invitations")){ + return "impossible de creer la table sml_sources_invitations"; + } + } + + return true; + } + + }