From 40898f8a72d938c07788080d29a1ee6db7fc2cac Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sat, 22 Dec 2007 20:08:22 +0000
Subject: [PATCH] =?UTF-8?q?Nouvelle=20num=C3=A9rotation=20pour=20$spip=5Fv?=
 =?UTF-8?q?ersion=20et=20introduction=20des=20types=20de=20documents=20''s?=
 =?UTF-8?q?ty''=20et=20''cls''=20li=C3=A9=20=C3=A0=20LaTeX.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

La numérotation de $spip_version sous forme d'un nombre réel déduit de $spip_version_code allant atteindre ses limites, on prend à présent comme valeur le numéro de dépot SVN introduisant un changement dans la base.

A nouveau, adaptation rétrospective du code de mise à jour à partir de la 1.9.2: en multipliant par 1000 ces valeurs de $spip_versions, on obtient des valeurs entières inférieures au numéro SVN actuel, et ça devient compatible avec le nouveau schéma général de mise à jour. Ça evite un quasi doublon de code et ça permet un test en vraie grandeur.

A noter que SVN ne donne pas accès automatiquement au dernier numéro de version d'un fichier, il faut toujours affecter $spip_version manuellement; du coup il y aura peut-etre parfois des dépots simultanés qui feront que le numéro affecté vaudra 1 de moins que celui qu'il faudrait. Pas dramatique.
---
 .gitattributes          |  1 +
 ecrire/base/typedoc.php |  7 ++--
 ecrire/base/upgrade.php | 67 +++++++++++++++++++++-------------
 ecrire/inc_version.php  |  8 ++---
 ecrire/maj/svn10000.php | 21 +++++++++++
 ecrire/maj/v019.php     | 80 +++++++++++++++++------------------------
 6 files changed, 105 insertions(+), 79 deletions(-)
 create mode 100644 ecrire/maj/svn10000.php

diff --git a/.gitattributes b/.gitattributes
index e42e3a7f0c..5edc37daa4 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -710,6 +710,7 @@ ecrire/lib/safehtml/index.php -text
 ecrire/lib/safehtml/license.txt -text
 ecrire/lib/safehtml/readme-SPIP.txt -text
 ecrire/lib/safehtml/readme.txt -text
+ecrire/maj/svn10000.php -text
 ecrire/maj/v009.php -text
 ecrire/maj/v010.php -text
 ecrire/maj/v011.php -text
diff --git a/ecrire/base/typedoc.php b/ecrire/base/typedoc.php
index 490e420c15..ee13ed9ca7 100644
--- a/ecrire/base/typedoc.php
+++ b/ecrire/base/typedoc.php
@@ -61,6 +61,7 @@ $tables_documents = array(
 			  'bin' => 'Binary Data',
 			  'blend' => 'Blender',
 			  'c' => 'C source',
+			  'cls' => 'LaTeX Class',
 			  'css' => 'Cascading Style Sheet',
 			  'csv' => 'Comma Separated Values',
 			  'deb' => 'Debian',
@@ -84,6 +85,7 @@ $tables_documents = array(
 			  'sdd' => 'StarOffice',
 			  'sdw' => 'StarOffice',
 			  'sit' => 'Stuffit',
+			  'sty' => 'LaTeX Style Sheet',
 			  'sxc' => 'OpenOffice Calc',
 			  'sxi' => 'OpenOffice Impress',
 			  'sxw' => 'OpenOffice',
@@ -203,8 +205,9 @@ $tables_mime = array(
 		'ott' => 'application/vnd.oasis.opendocument.text-template',
 		'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
 		'otp' => 'application/vnd.oasis.opendocument.presentation-template',
-		'otg' => 'application/vnd.oasis.opendocument.graphics-template'
-		
+		'otg' => 'application/vnd.oasis.opendocument.graphics-template',
+		'cls'=>'text/x-tex',
+		'sty'=>'text/x-tex',
 	);
 
 
diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index 8a6a3cb37b..d882997246 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -59,21 +59,35 @@ function maj_base($version_cible = 0) {
 		return;
 	}
 	if (!upgrade_test()) return;
-	
-	$n = floor($version_installee * 10);
-	$cible = ($version_cible ? $version_cible : $spip_version) * 10;
-	while ($n < $cible) {
-		$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);
-		} else spip_log("pas de fonction pour la maj $n $nom");
-		$n++;
+
+	$cible = ($version_cible ? $version_cible : $spip_version);
+
+	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);
+			} 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 < 2) {
+		$version_installee = $version_installee*1000;
+		include_spip('maj/v019');
+	}
+	if ($cible < 2)
+		$cible = $cible*1000;
+
+	maj_while($version_installee, $cible);
 }
 
-// A partir des > 1.926 (i.e SPIP > 1.9.2), le while ci-dessus aboutit ici.
+
+// A partir des > 1.926 (i.e SPIP > 1.9.2), cette fonction gere les MAJ.
 // Se relancer soi-meme pour eviter l'interruption pendant une operation SQL
 // (qu'on espere pas trop longue chacune)
 // evidemment en ecrivant dans la meta a quel numero on en est.
@@ -81,24 +95,21 @@ function maj_base($version_cible = 0) {
 define('_UPGRADE_TIME_OUT', 20);
 
 // http://doc.spip.org/@maj_while
-function maj_while($version_installee, $version_cible)
+function maj_while($installee, $cible)
 {
-	$pref = floor($version_installee);
-	$cible = substr($version_cible*1000,-3);
-	$installee = substr($version_installee*1000,-3);
-	$time = time();
+	include_spip('maj/svn10000');
+
 	$n = 0;
+	$time = time();
 
-	$chgt = $GLOBALS['maj'][$pref];
 	while ($installee < $cible) {
 		$installee++;
-		$version = ($pref . '.' . $installee);
-		if (isset($chgt[$installee])) {
-			serie_alter($installee, $chgt[$installee]);
+		if (isset($GLOBALS['maj'][$installee])) {
+			serie_alter($installee, $GLOBALS['maj'][$installee]);
 			$n = time() - $time;
-			spip_log("MAJ de $version_installee a $version en $n secondes",'maj');
-		} else spip_log("MAJ $version: rien pour SQL", 'maj');
-		ecrire_meta('version_installee', $version,'non');
+			spip_log("MAJ vers $installee en $n secondes",'maj');
+		} // rien pour SQL
+		ecrire_meta('version_installee', $installee,'non');
 		if ($n >= _UPGRADE_TIME_OUT) {
 			redirige_par_entete(generer_url_ecrire('upgrade', "reinstall=$installee", true));
 		}
@@ -142,6 +153,14 @@ function convertir_un_champ_blob_en_text($table,$champ,$type){
 	}
 }
 
+// La fonction a appeler dans le tableau global $maj 
+// quand on rajoute des types MIME. cf par exemple la 1.953
+
+function upgrade_types_documents() {
+	include_spip('base/create');
+	creer_base_types_doc();
+}
+
 // http://doc.spip.org/@upgrade_test
 function upgrade_test() {
 	sql_drop_table("spip_test", true);
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index f4fdb2b1e5..453304907b 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -289,12 +289,8 @@ $liste_des_forums = array(
 // Droits d'acces maximum par defaut
 @umask(0);
 
-// Version courante de SPIP
-// Stockee sous forme de nombre decimal afin de faciliter les comparaisons
-// (utilise pour les modifs de la base de donnees)
-
-// version de la base
-$spip_version = 1.958;
+// version de la base (= numero SVN de sa derniere modif)
+$spip_version = 10990;
 
 // version de l'interface a la base
 $spip_sql_version = 1;
diff --git a/ecrire/maj/svn10000.php b/ecrire/maj/svn10000.php
new file mode 100644
index 0000000000..83d416cb64
--- /dev/null
+++ b/ecrire/maj/svn10000.php
@@ -0,0 +1,21 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2007                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/*--------------------------------------------------------------------- */
+/*	Gestion des MAJ par tableau indexe par le numero SVN du chgt	*/
+/*--------------------------------------------------------------------- */
+
+$GLOBALS['maj'][10990] = array(array('upgrade_types_documents'));
+
+?>
diff --git a/ecrire/maj/v019.php b/ecrire/maj/v019.php
index e350b794d8..a5921f6324 100644
--- a/ecrire/maj/v019.php
+++ b/ecrire/maj/v019.php
@@ -12,29 +12,22 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-function maj_v019_dist($version_installee, $version_cible)
-{
-	if (1.926 >= $version_installee) {
-		include_spip('maj/v019_pre193');
-		v019_pre193($version_installee, $version_cible);
-	}
-	maj_while($version_installee, $version_cible);
-}
-
 /*--------------------------------------------------------------------- */
-/*			 Nouvelle gestion des MAJ			*/
-/* ca coincide avec l'�tat de la 1.9.2, mais c'est un peu retroactif	*/
+/*		Nouvelle gestion des MAJ (par tableau)			*/
 /*--------------------------------------------------------------------- */
 
+// on la fait coincider retroactivement avec l'�tat de la 1.9.2
+// => l'index numerique entier est la * par 1000 (resultat < SVN c'est ok)
+
 	// FLV est incrustable, la MAJ precedente l'avait oublie
-$GLOBALS['maj'][1][931] = array(
+$GLOBALS['maj'][1931] = array(
 	array('spip_query', "UPDATE spip_types_documents SET `inclus`='embed' WHERE `extension`='flv'")
 	);
 
 	// Ajout de spip_forum.date_thread, et on essaie de le remplir
 	// a coup de table temporaire (est-ce autorise partout... sinon
 	// tant pis, ca ne marchera que pour les forums recemment modifies)
-$GLOBALS['maj'][1][932] = array(
+$GLOBALS['maj'][1932] = array(
 	array('sql_alter', "TABLE spip_forum ADD `date_thread` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
 	array('sql_alter', "TABLE spip_forum ADD INDEX `date_thread` (`date_thread`)"),
 
@@ -53,7 +46,7 @@ function maj_1_934 () {
 	  spip_query("UPDATE spip_documents SET `fichier`=substring(fichier,$n) WHERE `fichier` LIKE " . _q($dir_img . '%'));
 }
 
-$GLOBALS['maj'][1][934] = array(array('maj_1_934'));
+$GLOBALS['maj'][1934] = array(array('maj_1_934'));
 
 function maj_1_935 () {
 	include_spip('inc/texte');
@@ -73,14 +66,14 @@ function maj_1_935 () {
 	}
 }
 
-$GLOBALS['maj'][1][935] = array(
+$GLOBALS['maj'][1935] = array(
 	array('sql_alter', "TABLE spip_documents_articles ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"),
 	array('sql_alter', "TABLE spip_documents_rubriques ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"),
 	array('sql_alter', "TABLE spip_documents_breves ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"),
 	array('maj_1_935')
 	);
 
-$GLOBALS['maj'][1][937] = array(
+$GLOBALS['maj'][1937] = array(
 		// convertir les champs blob des tables spip en champs texte
 	array('convertir_un_champ_blob_en_text',"spip_articles","texte","LONGTEXT"),
 	array('convertir_un_champ_blob_en_text',"spip_articles","extra","LONGTEXT"),
@@ -112,7 +105,7 @@ function maj_1_938 () {
 	}
 }
 
-$GLOBALS['maj'][1][938] = array(
+$GLOBALS['maj'][1938] = array(
 	// Des champs NULL a l'installation
 	// Ajouter un champ extension aux spip_documents, et le
 	// remplir avec les valeurs ad hoc
@@ -131,7 +124,7 @@ $GLOBALS['maj'][1][938] = array(
 	array('sql_alter', "TABLE spip_types_documents ADD PRIMARY KEY (`extension`)"),
 	);
 
-$GLOBALS['maj'][1][939] = array(
+$GLOBALS['maj'][1939] = array(
 	array('sql_alter', "TABLE spip_visites CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL"),
 	array('sql_alter', "TABLE spip_visites_articles CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL"),
 	array('sql_alter', "TABLE spip_referers CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL"),
@@ -140,18 +133,18 @@ $GLOBALS['maj'][1][939] = array(
 	array('sql_alter', "TABLE spip_referers_articles CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL")
 	);
 
-$GLOBALS['maj'][1][940] = array(
+$GLOBALS['maj'][1940] = array(
 				array('spip_query', "DROP TABLE spip_caches"),
 	);
 
 
-$GLOBALS['maj'][1][941] = array(
+$GLOBALS['maj'][1941] = array(
 	array('spip_query', "UPDATE spip_meta SET `valeur` = '' WHERE `nom`='preview' AND `valeur`='non' "),
 	array('spip_query', "UPDATE spip_meta SET `valeur` = ',0minirezo,1comite,' WHERE `nom`='preview' AND `valeur`='1comite' "),
 	array('spip_query', "UPDATE spip_meta SET `valeur` = ',0minirezo,' WHERE `nom`='preview' AND `valeur`='oui' "),
 	);
 
-$GLOBALS['maj'][1][942] = array(
+$GLOBALS['maj'][1942] = array(
 	array('sql_alter', "TABLE spip_auteurs CHANGE `statut` `statut` varchar(255)  DEFAULT '0' NOT NULL"),
 	array('sql_alter', "TABLE spip_breves CHANGE `statut` `statut` varchar(6)  DEFAULT '0' NOT NULL"),
 	array('sql_alter', "TABLE spip_messages CHANGE `statut` `statut` varchar(6)  DEFAULT '0' NOT NULL"),
@@ -165,7 +158,7 @@ $GLOBALS['maj'][1][942] = array(
 
 
 	// suppression de l'indexation dans la version standard
-$GLOBALS['maj'][1][943] = array(
+$GLOBALS['maj'][1943] = array(
 	array('sql_alter', "TABLE spip_articles DROP KEY `idx`"),
 	array('sql_alter', "TABLE spip_articles DROP `idx`"),
 	array('sql_alter', "TABLE spip_auteurs DROP KEY `idx`"),
@@ -189,13 +182,13 @@ $GLOBALS['maj'][1][943] = array(
 	array('spip_query', "DROP TABLE spip_index_dico"),
 	);
 
-$GLOBALS['maj'][1][944] = array(
+$GLOBALS['maj'][1944] = array(
 				array('sql_alter', "TABLE spip_documents CHANGE `taille` `taille` integer"),
 				array('sql_alter', "TABLE spip_documents CHANGE `largeur` `largeur` integer"),
 				array('sql_alter', "TABLE spip_documents CHANGE `hauteur` `hauteur` integer")
 	);
 
-$GLOBALS['maj'][1][945] = array(
+$GLOBALS['maj'][1945] = array(
   array('sql_alter', "TABLE spip_petitions CHANGE `email_unique` `email_unique` CHAR (3) DEFAULT '' NOT NULL"),
     array('sql_alter', "TABLE spip_petitions CHANGE `site_obli` `site_obli` CHAR (3) DEFAULT '' NOT NULL"),
     array('sql_alter', "TABLE spip_petitions CHANGE `site_unique` `site_unique` CHAR (3) DEFAULT '' NOT NULL"),
@@ -284,7 +277,7 @@ $GLOBALS['maj'][1][945] = array(
   );
 
 
-$GLOBALS['maj'][1][946] = array(
+$GLOBALS['maj'][1946] = array(
     array('sql_alter', "TABLE spip_forum DROP INDEX `id_parent`"),
     array('sql_alter', "TABLE spip_forum DROP INDEX `id_article`"),
     array('sql_alter', "TABLE spip_forum DROP INDEX `id_breve`"),
@@ -296,7 +289,7 @@ $GLOBALS['maj'][1][946] = array(
 	);
 
 
-$GLOBALS['maj'][1][947] = array(
+$GLOBALS['maj'][1947] = array(
 
     array('sql_alter', "TABLE spip_articles DROP INDEX `url_site`"),
     array('sql_alter', "TABLE spip_articles DROP INDEX `date_modif`"),
@@ -304,7 +297,7 @@ $GLOBALS['maj'][1][947] = array(
 	);
 
 	// mauvaise manip
-$GLOBALS['maj'][1][949] = array(
+$GLOBALS['maj'][1949] = array(
 
     array('sql_alter', "TABLE spip_versions DROP INDEX `date`"),
     array('sql_alter', "TABLE spip_versions DROP INDEX `id_auteur`")
@@ -314,9 +307,9 @@ $GLOBALS['maj'][1][949] = array(
 function maj_1_950($installee) {
   // oubli de gerer le prefixe lors l'introduction de l'abstraction
   // => Relancer les MAJ concernees si la version dont on part les avait fait
-	if ($installe >= 1.946) serie_alter('950a', $GLOBALS['maj'][1][946]); 
-	if ($installe >= 1.947) serie_alter('950b', $GLOBALS['maj'][1][947]);
-	if ($installe >= 1.949)	@serie_alter('950c', $GLOBALS['maj'][1][949]); 
+	if ($installe >= 1.946) serie_alter('950a', $GLOBALS['maj'][1946]); 
+	if ($installe >= 1.947) serie_alter('950b', $GLOBALS['maj'][1947]);
+	if ($installe >= 1.949)	@serie_alter('950c', $GLOBALS['maj'][1949]); 
 	global $tables_auxiliaires;
 	include_spip('base/auxiliaires');
 	$v = $tables_auxiliaires[$k='spip_urls'];
@@ -344,13 +337,13 @@ function maj_1_950($installee) {
 
 // Donner a la fonction ci-dessus le numero de version installee
 // AVANT que la mise a jour ait commencee
-$GLOBALS['maj'][1][950] =  array(array('maj_1_950', $GLOBALS['meta']['version_installee'] ));
+$GLOBALS['maj'][1950] =  array(array('maj_1_950', $GLOBALS['meta']['version_installee'] ));
 
 // Erreur dans maj_1_948():
 // // http://trac.rezo.net/trac/spip/changeset/10194
 // // Gestion du verrou SQL par PHP
 
-$GLOBALS['maj'][1][951] = array(
+$GLOBALS['maj'][1951] = array(
 
   array('sql_alter', "TABLE spip_versions CHANGE `id_version` `id_version` bigint(21) DEFAULT 0 NOT NULL")
 	);
@@ -378,18 +371,11 @@ function maj_1_952() {
 	if (!$ok) die('echec sur maj_1_952()'); 
 }
 
-$GLOBALS['maj'][1][952] = array(array('maj_1_952'));
-
-function maj_1_953()
-{
-	global $tables_principales;
-	include_spip('base/create');
-	creer_base_types_doc();
-}
+$GLOBALS['maj'][1952] = array(array('maj_1_952'));
 
-$GLOBALS['maj'][1][953] = array(array('maj_1_953'));
+$GLOBALS['maj'][1953] = array(array('upgrade_types_documents'));
 
-$GLOBALS['maj'][1][954] = array(
+$GLOBALS['maj'][1954] = array(
 
 		//pas de psd en <img> 
   array('spip_query', "UPDATE spip_types_documents SET `inclus`='non' WHERE `extension`='psd'"),
@@ -412,14 +398,14 @@ $GLOBALS['maj'][1][954] = array(
 
 if ($GLOBALS['meta']['version_installee'] > 1.950)
   // 1.950 lisait un bug dans auxiliaires.php corrige a present
-	$GLOBALS['maj'][1][955] = array(
+	$GLOBALS['maj'][1955] = array(
 		  array('sql_alter', "TABLE spip_urls CHANGE `maj` date DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL")
 		  );
 
 // la mise a jour vers 1.938 contient une erreur
 // il faut supprimer l'autoincrement avant de supprimer la PRIMARY KEY
 
-$GLOBALS['maj'][1][938] = array(
+$GLOBALS['maj'][1938] = array(
 
 # creer un champ plus informatif, et son index
 	array('sql_alter', "TABLE spip_documents ADD `extension` VARCHAR(10) DEFAULT ''  NOT NULL "),
@@ -439,18 +425,18 @@ function maj_1_938_catastrophe ()
 }
 
 if ($GLOBALS['meta']['version_installee'] > 1.938)
-	$GLOBALS['maj'][1][956] = array(array('maj_1_938_catastrophe'));
+	$GLOBALS['maj'][1956] = array(array('maj_1_938_catastrophe'));
 
 // PG veut une valeur par defaut a l'insertion
 // http://trac.rezo.net/trac/spip/changeset/10482
 
-$GLOBALS['maj'][1][957] = array(
+$GLOBALS['maj'][1957] = array(
 	array('sql_alter', "TABLE spip_mots CHANGE `id_groupe` `id_groupe` bigint(21) DEFAULT 0 NOT NULL"),
     array('sql_alter', "TABLE spip_documents CHANGE `mode` `mode` ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL")
 	);
 
 // Ce champ est inutile et provoque une erreur a l'insertion qui l'oublie
-$GLOBALS['maj'][1][958] = array(
+$GLOBALS['maj'][1958] = array(
 	array('sql_alter', "TABLE spip_referers_articles DROP date")
 );
 ?>
-- 
GitLab