--- /dev/null
+<?php
+
+ class mw_sourceml_xml_version_1_1_2 extends mw_data_version{
+
+ function version(){
+ return "1.1.2";
+ }
+
+ function do_upgrade(){
+
+ $env = $this->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;
+ }
+
+ }