Exemplo n.º 1
0
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');
}
Exemplo n.º 2
0
/**
 * 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>";
            }
        }
    }
}