function maj_base($version_cible = 0) { global $spip_version_base; $version_installee = @$GLOBALS['meta']['version_installee']; // // Si version nulle ou inexistante, c'est une nouvelle installation // => ne pas passer par le processus de mise a jour. // De meme en cas de version superieure: ca devait etre un test, // il y a eu le message d'avertissement il doit savoir ce qu'il fait // // version_installee = 1.702; quand on a besoin de forcer une MAJ spip_log("Version anterieure: $version_installee. Courante: $spip_version_base"); if (!$version_installee OR ($spip_version_base < $version_installee)) { sql_replace('spip_meta', array('nom' => 'version_installee', 'valeur' => $spip_version_base, 'impt' => 'non')); return false; } if (!upgrade_test()) return true; $cible = ($version_cible ? $version_cible : $spip_version_base); if ($version_installee <= 1.926) { $n = floor($version_installee * 10); while ($n < 19) { $nom = sprintf("v%03d",$n); $f = charger_fonction($nom, 'maj', true); if ($f) { spip_log("$f repercute les modifications de la version " . ($n/10)); $f($version_installee, $spip_version_base); } else spip_log("pas de fonction pour la maj $n $nom"); $n++; } include_spip('maj/v019_pre193'); v019_pre193($version_installee, $version_cible); } if ($version_installee < 2000) { if ($version_installee < 2) $version_installee = $version_installee*1000; include_spip('maj/v019'); } if ($cible < 2) $cible = $cible*1000; include_spip('maj/svn10000'); return maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee'); }
/** * Mise à jour d'un plugin de SPIP * * Fonction appelée par la fonction de maj d'un plugin. * On lui fournit un tableau de fonctions élementaires * dont l'indice est la version * * @param string $nom_meta_base_version * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP * @param string $version_cible * Version du schéma de données dans le plugin (déclaré dans paquet.xml) * @param array $maj * Tableau d'actions à faire à l'installation (clé 'create') et pour chaque * version intermédiaire entre la version actuelle du schéma du plugin dans SPIP * et la version du schéma déclaré dans le plugin (ex. clé '1.1.0'). * * Chaque valeur est un tableau contenant une liste de fonctions à exécuter, * cette liste étant elle-même un tableau avec premier paramètre le nom de la fonction * et les suivant les paramètres à lui passer * @example * array( * 'create' => array( * array('maj_tables', array('spip_rubriques', 'spip_articles')), * array('creer_base)), * '1.1.0' => array( * array('sql_alter', 'TABLE spip_articles ADD INDEX truc (truc)')) * ) * @param string $table_meta * Nom de la table meta (sans le prefixe spip_) dans laquelle trouver la meta $nom_meta_base_version * @return void */ function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta = 'meta') { if ($table_meta !== 'meta') { lire_metas($table_meta); } if (!isset($GLOBALS[$table_meta][$nom_meta_base_version]) || !spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '=')) { // $maj['create'] contient les directives propres a la premiere creation de base // c'est une operation derogatoire qui fait aboutir directement dans la version_cible if (isset($maj['create'])) { if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) { // installation : on ne fait que l'operation create $maj = array("init" => $maj['create']); // et on lui ajoute un appel a inc/config // pour creer les metas par defaut $config = charger_fonction('config', 'inc'); $maj[$version_cible] = array(array($config)); } // dans tous les cas enlever cet index du tableau unset($maj['create']); } // si init, deja dans le bon ordre if (!isset($maj['init'])) { include_spip('inc/plugin'); // pour spip_version_compare uksort($maj, 'spip_version_compare'); } // la redirection se fait par defaut sur la page d'administration des plugins // sauf lorsque nous sommes sur l'installation de SPIP // ou define _REDIRECT_MAJ_PLUGIN $redirect = defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin'); if (defined('_ECRIRE_INSTALL')) { $redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape')); } $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect); if ($res) { if (!is_array($res)) { spip_log("Pb d'acces SQL a la mise a jour", "maj." . _LOG_INFO_ERREUR); } else { echo "<p>" . _T('avis_operation_echec') . ' ' . join(' ', $res) . "</p>"; } } } }