/** * Vider les tables de la base de destination * pour la copie dans une base * * @param array $tables * @param string $serveur */ function migration_reception_vider_tables_destination_copie($status, $data){ include_spip('base/dump'); $status['status'] = 'vider'; $status['progress']['vider'] = "X Suppression des tables"; base_vider_tables_destination_copie($data['tables'],$data['exlure_tables'],''); update_migration_depuis($status); return true; }
/** * Preparer la table dans la base de destination : * la droper si elle existe (sauf si auteurs ou meta sur le serveur principal) * la creer si necessaire, ou ajouter simplement les champs manquants * * @param string $table * @param array $desc * @param string $serveur_dest * @param bool $init * @return array */ function base_preparer_table_dest($table, $desc, $serveur_dest, $init = false) { $upgrade = false; // si la table existe et qu'on est a l'init, la dropper if ($desc_dest = sql_showtable($table, true, $serveur_dest) and $init) { if ($serveur_dest == '' and in_array($table, array('spip_meta', 'spip_auteurs'))) { // ne pas dropper auteurs et meta sur le serveur principal // faire un simple upgrade a la place // pour ajouter les champs manquants $upgrade = true; // coherence avec le drop sur les autres tables base_vider_tables_destination_copie(array($table), array(), $serveur_dest); if ($table == 'spip_meta') { // virer les version base qui vont venir avec l'import sql_delete($table, "nom like '%_base_version'", $serveur_dest); // hum casse la base si pas version_installee a l'import ... sql_delete($table, "nom='version_installee'", $serveur_dest); } } else { sql_drop_table($table, '', $serveur_dest); spip_log("drop table '{$table}' sur serveur '{$serveur_dest}'", 'dump.' . _LOG_INFO_IMPORTANTE); } $desc_dest = false; } // si la table n'existe pas dans la destination, la creer a l'identique ! if (!$desc_dest) { spip_log("creation '{$table}' sur serveur '{$serveur_dest}'", 'dump.' . _LOG_INFO_IMPORTANTE); include_spip('base/create'); creer_ou_upgrader_table($table, $desc, 'auto', $upgrade, $serveur_dest); $desc_dest = sql_showtable($table, true, $serveur_dest); } if (!$desc_dest) { spip_log("Erreur creation '{$table}' sur serveur '{$serveur_dest}'" . var_export($desc, 1), 'dump.' . _LOG_ERREUR); } return $desc_dest; }
/** * Preparer la table dans la base de destination : * la droper si elle existe (sauf si auteurs ou meta sur le serveur principal) * la creer si necessaire, ou ajouter simplement les champs manquants * * @param string $table * @param array $desc * @param string $serveur_dest * @param bool $init * @return array */ function base_preparer_table_dest($table, $desc, $serveur_dest, $init=false) { $upgrade = false; // si la table existe et qu'on est a l'init, la dropper if ($desc_dest=sql_showtable($table,true,$serveur_dest) AND $init) { if ($serveur_dest=='' AND in_array($table,array('spip_meta','spip_auteurs'))) { // ne pas dropper auteurs et meta sur le serveur principal // faire un simple upgrade a la place // pour ajouter les champs manquants $upgrade = true; // coherence avec le drop sur les autres tables base_vider_tables_destination_copie(array($table),array(),$serveur_dest); if ($table=='spip_meta'){ // virer les version base qui vont venir avec l'import sql_delete($table, "nom like '%_base_version'",$serveur_dest); // hum casse la base si pas version_installee a l'import ... sql_delete($table, "nom='version_installee'",$serveur_dest); } } else { sql_drop_table($table, '', $serveur_dest); spip_log( "drop table '$table' sur serveur '$serveur_dest'",'dump.'._LOG_INFO_IMPORTANTE); } $desc_dest = false; } // si la table n'existe pas dans la destination, la creer a l'identique ! if (!$desc_dest) { spip_log( "creation '$table' sur serveur '$serveur_dest'",'dump.'._LOG_INFO_IMPORTANTE); include_spip('base/create'); // on fait la detection d'autoinc ici car creer_ou_upgrader_table ne sait pas forcement le faire // (depend de la version de SPIP) if (isset($GLOBALS['tables_principales'][$table])) $autoinc = true; elseif (isset($GLOBALS['tables_auxiliaires'][$table])) $autoinc = false; else { // essayer de faire au mieux ! $autoinc = (isset($desc['key']['PRIMARY KEY']) AND strpos($desc['key']['PRIMARY KEY'],',')===false AND strpos($desc['field'][$desc['key']['PRIMARY KEY']],'default')===false); } creer_ou_upgrader_table($table, $desc, $autoinc, $upgrade,$serveur_dest); $desc_dest = sql_showtable($table,false,$serveur_dest); // si c'est une table de liens ancienne mode il faut aussi vider xx_liens si elle existe // (migration d'un SPIP 2 vers un SPIP 3 peuple) if (preg_match(",^spip_(auteurs|documents|mots)_(\w+)$,",$table,$m) AND $m[2]!="liens"){ base_vider_tables_destination_copie(array("spip_".$m[1]."_liens"),array(),$serveur_dest); } } if (!$desc_dest){ spip_log( "Erreur creation '$table' sur serveur '$serveur_dest'".var_export($desc,1),'dump.'._LOG_ERREUR); } return $desc_dest; }