X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=app%2Fdata%2Fupgrades%2Fsql%2Fmw_sourceml_sql_version_1_1_2.php;fp=app%2Fdata%2Fupgrades%2Fsql%2Fmw_sourceml_sql_version_1_1_2.php;h=50769d371380851544d59caf2cf791690d44409b;hb=37049b502efdf68a562ce63d8f37a820c66bc887;hp=0000000000000000000000000000000000000000;hpb=aa56057fe2634113eb8d1a50ed54b6a8988645a8;p=mw_sourceml diff --git a/app/data/upgrades/sql/mw_sourceml_sql_version_1_1_2.php b/app/data/upgrades/sql/mw_sourceml_sql_version_1_1_2.php new file mode 100644 index 0000000..50769d3 --- /dev/null +++ b/app/data/upgrades/sql/mw_sourceml_sql_version_1_1_2.php @@ -0,0 +1,603 @@ +env(); + $data = $env->data(); + $sgbd = $data->sgbd(); + + if($sgbd->table_exists("#--sources")){ + + /* ---------------------------------------------------------------------- + nouvelle table groupe_status + */ + + if(!$sgbd->table_exists("#--groupe_status")){ + if( + !$data->data_create_table( + array( + "table_name" => "groupe_status", + "fields" => array( + "id" => array("type" => "int", "autoincrement" => true), + "nom" => array("type" => "varchar") + ), + "keys" => array( + array( + "fields" => array("id"), + "primary" => true + ) + ), + "options" => array("default_charset" => "utf8") + ) + ) + ){ + return "impossible de créer la table groupe_status"; + } + try{ + $sql = "INSERT INTO #--groupe_status(id, nom) VALUES (1, 'admin')"; + $sgbd->query($sql); + $sql = "INSERT INTO #--groupe_status(id, nom) VALUES (2, 'editeur')"; + $sgbd->query($sql); + $sql = "INSERT INTO #--groupe_status(id, nom) VALUES (3, 'contributeur')"; + $sgbd->query($sql); + } + catch(Exception $e){ + return "impossible de remplir la table groupe_status"; + } + } + + /* ---------------------------------------------------------------------- + nouvelle table source_groupes + sources.id_groupe passe dans source_groupes.id_groupe + */ + + if(!$sgbd->table_exists("#--source_groupes")){ + if( + !$data->data_create_table( + array( + "table_name" => "source_groupes", + "fields" => array( + "id" => array("type" => "int", "autoincrement" => true), + "id_source" => array("type" => "int"), + "id_groupe" => array("type" => "int"), + "id_groupe_status" => array("type" => "int") + ), + "keys" => array( + array( + "fields" => array("id"), + "primary" => true + ) + ), + "options" => array("default_charset" => "utf8") + ) + ) + ){ + return "impossible de créer la table source_groupes"; + } + $sql = + "INSERT INTO #--source_groupes(id_source, id_groupe, id_groupe_status)" + ." SELECT" + ." id" + .", id_groupe" + .", 1" + ." FROM #--sources"; + try{ + $sgbd->query($sql); + } + catch(Exception $e){ + return "impossible d'importer les id_groupes dans source_groupes"; + } + } + + /* ---------------------------------------------------------------------- + nouvelle table source_derivations + sources.derivation devient source_derivations.derivation + */ + + if(!$sgbd->table_exists("#--source_derivations")){ + if( + !$data->data_create_table( + array( + "table_name" => "source_derivations", + "fields" => array( + "id" => array("type" => "int", "autoincrement" => true), + "id_source" => array("type" => "int"), + "derivation" => array("type" => "varchar") + ), + "keys" => array( + array( + "fields" => array("id"), + "primary" => true + ) + ), + "options" => array("default_charset" => "utf8") + ) + ) + ){ + return "impossible de créer la table source_derivations"; + } + $sql = + "INSERT INTO #--source_derivations(id_source, derivation)" + ." SELECT" + ." id" + .", derivation" + ." FROM #--sources WHERE derivation IS NOT NULL"; + try{ + $sgbd->query($sql); + } + catch(Exception $e){ + return "impossible d'importer les derivation dans source_derivations"; + } + } + + /* ---------------------------------------------------------------------- + sources + maj source_infos : image avec id user + */ + + $SOURCE_HAS_ID_GROUPE = false; + try{ + $sources_desc = $sgbd->desc_table("#--sources"); + if(isset($sources_desc["attributs"]["id_groupe"])){ + $SOURCE_HAS_ID_GROUPE = true; + } + } + catch(Exception $e){ + return "impossible de lire les champs de la table sources"; + } + if($SOURCE_HAS_ID_GROUPE){ + try{ + $sql = + "SELECT #--sources.id as id_source, #--sources.id_groupe" + .", #--source_infos.id as id_source_info, #--source_infos.`value` as image" + ." FROM #--sources" + ." LEFT JOIN #--source_infos" + ." ON (#--source_infos.id_source=#--sources.id AND #--source_infos.`key`='image')"; + $rst = $sgbd->query($sql); + while($v_rst = $sgbd->fetch_assoc($rst)){ + if($v_rst["image"] && !preg_match("/^[0-9]+\/.*$/", $v_rst["image"])){ + if( + ( + $groupe = $data->data_read( + array( + "table_name" => "groupes", + "index_name" => "id", + "index_value" => $v_rst["id_groupe"] + ) + ) + ) === false + ){ + return "erreur lors de la lecture de l'utilisateur du groupe"; + } + if( + !$data->data_update( + array( + "table_name" => "source_infos", + "index_name" => "id", + "index_value" => $v_rst["id_source_info"], + "values" => array( + "value" => $groupe["id_user"]."/".$v_rst["image"] + ) + ) + ) + ){ + return "impossible de mettre a jour l'image des sources dans source_infos"; + } + } + } + $sgbd->free_result($rst); + } + catch(Exception $e){ + return "impossible de mettre a jour les images des sources"; + } + } + + + /* ---------------------------------------------------------------------- + groupes + maj image avec id user + */ + + try{ + $sql ="SELECT * FROM #--groupes"; + $rst = $sgbd->query($sql); + while($v_rst = $sgbd->fetch_assoc($rst)){ + if($v_rst["image"] && !preg_match("/^[0-9]+\/.*$/", $v_rst["image"])){ + if( + !$data->data_update( + array( + "table_name" => "groupes", + "index_name" => "id", + "index_value" => $v_rst["id"], + "values" => array( + "image" => $v_rst["id_user"]."/".$v_rst["image"] + ) + ) + ) + ){ + return "impossible de mettre a jour l'image des groupes"; + } + } + } + $sgbd->free_result($rst); + } + catch(Exception $e){ + return "impossible de mettre a jour les images des groupes"; + } + + /* ---------------------------------------------------------------------- + sources + sources.nom devient sources.titre + sources.status devient sources.id_class + suppression de sources.id_groupe + suppression de sources.derivation + */ + + try{ + $sources_desc = $sgbd->desc_table("#--sources"); + } + catch(Exception $e){ + return "impossible de lire les champs de la table sources"; + } + if( + !isset($sources_desc["attributs"]["titre"]) + || isset($sources_desc["attributs"]["nom"]) + || isset($sources_desc["attributs"]["status"]) + || isset($sources_desc["attributs"]["id_groupe"]) + || isset($sources_desc["attributs"]["derivation"]) + ){ + $sql = "ALTER TABLE #--sources RENAME TO #--sources_tmp"; + try{ + $sgbd->query($sql); + } + catch(Exception $e){ + return "impossible de renommer la table sources en sources_tmp"; + } + if( + !$data->data_create_table( + array( + "table_name" => "sources", + "fields" => array( + "id" => array("type" => "int", "autoincrement" => true), + "id_class" => array("type" => "int"), + "reference" => array("type" => "varchar", "null" => true), + "titre" => array("type" => "varchar", "null" => true), + "licence" => array("type" => "int", "null" => true), + "date_creation" => array("type" => "date", "null" => true), + "date_inscription" => array("type" => "datetime") + ), + "keys" => array( + array( + "fields" => array("id"), + "primary" => true + ), + array( + "fields" => array("id_class") + ), + array( + "fields" => array("licence") + ) + ), + "options" => array("default_charset" => "utf8") + ) + ) + ){ + return "impossible de créer la table sources"; + } + $attribut_names = array( + "id_class" => isset($sources_desc["attributs"]["status"]) ? "status" : "id_class", + "titre" => isset($sources_desc["attributs"]["nom"]) ? "nom" : "titre", + ); + $sql = + "INSERT INTO #--sources(id, id_class, reference, titre, licence, date_creation, date_inscription)" + ." SELECT" + ." id" + .", ".$attribut_names["id_class"] + .", reference" + .", ".$attribut_names["titre"] + .", licence" + .", date_creation" + .", date_inscription" + ." FROM #--sources_tmp"; + try{ + $sgbd->query($sql); + } + catch(Exception $e){ + return "impossible d'importer sources_tmp dans sources"; + } + try{ + $sgbd->query("DROP TABLE #--sources_tmp"); + } + catch(Exception $e){ + return "impossible de supprimer la table sources_tmp"; + } + } + + /* ---------------------------------------------------------------------- + suppression de la table source_status_composition + */ + + if($sgbd->table_exists("#--source_status_composition")){ + try{ + $sgbd->query("DROP TABLE #--source_status_composition"); + } + catch(Exception $e){ + return "impossible de supprimer la table source_status_composition"; + } + } + + } // if($sgbd->data_exists("sources")) + + + /* ###################################################################### */ + /* ###################################################################### */ + /* ---------------------------------------------------------------------- + migration vers les tables en sml_(...) du plugin mw_sourceml + */ + + /* ---------------------------------------------------------------------- + sources devient sml_sources + */ + + if($sgbd->table_exists("#--sources")){ + try{ + $sgbd->query("ALTER TABLE #--sources RENAME TO #--sml_sources"); + } + catch(Exception $e){ + return "impossible de renommer sources en sml_sources"; + } + } + + + /* ---------------------------------------------------------------------- + source_groupes devient sml_sources_authors + elt id_groupe devient id_author + elt id_groupe_status devient id_sources_access + */ + + if($sgbd->table_exists("#--source_groupes")){ + if( + !$data->data_create_table( + array( + "table_name" => "sml_sources_authors", + "fields" => array( + "id" => array("type" => "int", "autoincrement" => true), + "id_source" => array("type" => "int"), + "id_author" => array("type" => "int"), + "id_sources_access" => array("type" => "int"), + ), + "keys" => array( + array( + "fields" => array("id"), + "primary" => true + ), + array( + "fields" => array("id_source") + ), + array( + "fields" => array("id_author") + ), + array( + "fields" => array("id_sources_access") + ) + ), + "options" => array("default_charset" => "utf8") + ) + ) + ){ + return "impossible de créer la table sources"; + } + $sql = + "INSERT INTO #--sml_sources_authors(id_source, id_author, id_sources_access)" + ." SELECT" + ." id_source" + .", id_groupe" + .", id_groupe_status" + ." FROM #--source_groupes"; + try{ + $sgbd->query($sql); + } + catch(Exception $e){ + return "impossible d'importer les derivation dans source_derivations"; + } + try{ + $sgbd->query("DROP TABLE #--source_groupes"); + } + catch(Exception $e){ + return "impossible de supprimer la table source_groupes"; + } + } + + + /* ---------------------------------------------------------------------- + groupe_status devient sml_sources_access + nouvel elt intitule + */ + + if($sgbd->table_exists("#--groupe_status")){ + if( + !$data->data_create_table( + array( + "table_name" => "sml_sources_access", + "fields" => array( + "id" => array("type" => "int", "autoincrement" => true), + "nom" => array("type" => "varchar"), + "intitule" => array("type" => "varchar"), + ), + "keys" => array( + array( + "fields" => array("id"), + "primary" => true + ) + ), + "options" => array("default_charset" => "utf8") + ) + ) + ){ + return "impossible de créer la table sources"; + } + try{ + $sql = "INSERT INTO #--sml_sources_access(id, nom, intitule) VALUES (1, 'admin', 'administrateur')"; + $sgbd->query($sql); + $sql = "INSERT INTO #--sml_sources_access(id, nom, intitule) VALUES (2, 'editeur', 'éditeur')"; + $sgbd->query($sql); + $sql = "INSERT INTO #--sml_sources_access(id, nom, intitule) VALUES (3, 'contributeur', 'contributeur')"; + $sgbd->query($sql); + } + catch(Exception $e){ + return "impossible de remplir la table sml_sources_access"; + } + try{ + $sgbd->query("DROP TABLE #--groupe_status"); + } + catch(Exception $e){ + return "impossible de supprimer la table groupe_status"; + } + } + + /* ---------------------------------------------------------------------- + groupes devient sml_authors + */ + + if($sgbd->table_exists("#--groupes")){ + try{ + $sgbd->query("ALTER TABLE #--groupes RENAME TO #--sml_authors"); + } + catch(Exception $e){ + return "impossible de renommer groupes en sml_authors"; + } + } + + /* ---------------------------------------------------------------------- + licences devient sml_licences + */ + + if($sgbd->table_exists("#--licences")){ + try{ + $sgbd->query("ALTER TABLE #--licences RENAME TO #--sml_licences"); + } + catch(Exception $e){ + return "impossible de renommer licences en sml_licences"; + } + } + + /* ---------------------------------------------------------------------- + source_compositions devient sml_source_compositions + */ + + if($sgbd->table_exists("#--source_compositions")){ + try{ + $sgbd->query("ALTER TABLE #--source_compositions RENAME TO #--sml_source_compositions"); + } + catch(Exception $e){ + return "impossible de renommer source_compositions en sml_source_compositions"; + } + } + + /* ---------------------------------------------------------------------- + source_derivations devient sml_source_derivations + */ + + if($sgbd->table_exists("#--source_derivations")){ + try{ + $sgbd->query("ALTER TABLE #--source_derivations RENAME TO #--sml_source_derivations"); + } + catch(Exception $e){ + return "impossible de renommer source_derivations en sml_source_derivations"; + } + } + + /* ---------------------------------------------------------------------- + source_cache devient sml_source_cache + */ + + if($sgbd->table_exists("#--source_cache")){ + try{ + $sgbd->query("ALTER TABLE #--source_cache RENAME TO #--sml_source_cache"); + } + catch(Exception $e){ + return "impossible de renommer source_cache en sml_source_cache"; + } + } + + /* ---------------------------------------------------------------------- + source_status devient sml_classes + */ + + if($sgbd->table_exists("#--source_status")){ + try{ + $sgbd->query("ALTER TABLE #--source_status RENAME TO #--sml_classes"); + } + catch(Exception $e){ + return "impossible de renommer source_status en sml_classes"; + } + } + + /* ---------------------------------------------------------------------- + source_infos devient sml_sources_infos + */ + + if($sgbd->table_exists("#--source_infos")){ + try{ + $sgbd->query("ALTER TABLE #--source_infos RENAME TO #--sml_sources_infos"); + } + catch(Exception $e){ + return "impossible de renommer source_infos en sml_sources_infos"; + } + } + + /* ---------------------------------------------------------------------- + source_documents devient sml_source_documents + */ + + if($sgbd->table_exists("#--source_documents")){ + try{ + $sgbd->query("ALTER TABLE #--source_documents RENAME TO #--sml_source_documents"); + } + catch(Exception $e){ + return "impossible de renommer source_documents en sml_source_documents"; + } + } + + + /* ---------------------------------------------------------------------- + nouvelle table sml_sources_invitations + */ + + if(!$sgbd->table_exists("#--sml_sources_invitations")){ + if( + !$data->data_create_table( + array( + "table_name" => "sml_sources_invitations", + "fields" => array( + "id" => array("type" => "int", "autoincrement" => true), + "id_user" => array("type" => "int"), + "id_source" => array("type" => "int"), + "id_author" => array("type" => "int"), + "id_sources_access" => array("type" => "int"), + "date_invitation" => array("type" => "datetime") + ), + "keys" => array( + array( + "fields" => array("id"), + "primary" => true + ) + ), + "options" => array("default_charset" => "utf8") + ) + ) + ){ + return "impossible de créer la table sml_sources_invitations"; + } + } + + return true; + } + + }