[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / maj / v019.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Gestion des mises à jour de SPIP, versions >= 1.9.3-dev
15 *
16 * Cette version de SPIP introduit une nouvelle gestion des
17 * mises à jour par tableau
18 *
19 * On la fait coincider rétroactivement avec l'état de la 1.9.2
20 * L'index numérique entier est multiplié par 1000 (resultat < SVN c'est ok)
21 *
22 * @package SPIP\Core\SQL\Upgrade
23 **/
24 if (!defined('_ECRIRE_INC_VERSION')) {
25 return;
26 }
27
28
29 // FLV est incrustable, la MAJ precedente l'avait oublie
30 $GLOBALS['maj'][1931] = array(
31 array('spip_query', "UPDATE spip_types_documents SET `inclus`='embed' WHERE `extension`='flv'")
32 );
33
34 // Ajout de spip_forum.date_thread, et on essaie de le remplir
35 // a coup de table temporaire (est-ce autorise partout... sinon
36 // tant pis, ca ne marchera que pour les forums recemment modifies)
37 $GLOBALS['maj'][1932] = array(
38 array('sql_alter', "TABLE spip_forum ADD `date_thread` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
39 array('sql_alter', "TABLE spip_forum ADD INDEX `date_thread` (`date_thread`)"),
40
41 array('spip_query', "DROP TABLE IF EXISTS spip_tmp"),
42 array(
43 'spip_query',
44 "CREATE TABLE spip_tmp SELECT `id_thread`,MAX(`date_heure`) AS dt FROM spip_forum GROUP BY `id_thread`"
45 ),
46 array('sql_alter', "TABLE spip_tmp ADD INDEX `p` (`id_thread`)"),
47 array('spip_query', "UPDATE spip_forum AS F JOIN spip_tmp AS T ON F.id_thread=T.id_thread SET F.date_thread=T.dt"),
48 array('spip_query', "DROP TABLE spip_tmp"),
49 );
50
51 /**
52 * Mise à jour 1_934 : Retrait de `_DIR_IMG` dans le champ fichier de la table des doc
53 **/
54 function maj_1_934() {
55 // attention, en cas de mutualisation _DIR_IMG contient quelque chose comme sites/urldusite/IMG/
56 // essayons en ne prenant que le dernier segment
57 $dir_img = basename(_DIR_IMG) . '/';
58 $res = spip_query("SELECT fichier FROM spip_documents WHERE fichier LIKE " . _q($dir_img . '%') . " LIMIT 0,1");
59 if (!$row = spip_fetch_array($res)) {
60 //Êsinon on essaye avec le chemin complet
61 // il faut donc verifier qu'on a bien le bon nom de repertoire
62 $dir_img = substr(_DIR_IMG, strlen(_DIR_RACINE));
63 }
64 $n = strlen($dir_img) + 1;
65 spip_query("UPDATE spip_documents SET `fichier`=substring(fichier,$n) WHERE `fichier` LIKE " . _q($dir_img . '%'));
66 }
67
68 $GLOBALS['maj'][1934] = array(array('maj_1_934'));
69
70 /**
71 * Mise à jour 1_935 : calcul du nouveau champ 'vu' sur les associations documents_xx
72 **/
73 function maj_1_935() {
74 include_spip('inc/texte');
75 foreach (array(
76 'article' => 'id_article',
77 'rubrique' => 'id_rubrique',
78 'breve' => 'id_breve'
79 ) as $type => $id_table_objet) {
80 $table_objet = "$type" . "s";
81 $chapo = $type == 'article' ? ",a.chapo" : "";
82 $res = spip_query("SELECT a.$id_table_objet,a.texte $chapo FROM spip_documents_$table_objet AS d JOIN spip_$table_objet AS a ON a.$id_table_objet=d.$id_table_objet GROUP BY $id_table_objet");
83 while ($row = sql_fetch($res)) {
84 $GLOBALS['doublons_documents_inclus'] = array();
85 traiter_modeles(($chapo ? $row['chapo'] : "") . $row['texte'], true); // detecter les doublons
86 if (count($GLOBALS['doublons_documents_inclus'])) {
87 $id = $row[$id_table_objet];
88 $liste = "(" . implode(",$id,'oui'),(", $GLOBALS['doublons_documents_inclus']) . ",$id,'oui')";
89 spip_query("REPLACE INTO spip_documents_$table_objet (`id_document`,`$id_table_objet`,`vu`) VALUES $liste");
90 }
91 }
92 }
93 }
94
95 $GLOBALS['maj'][1935] = array(
96 array('sql_alter', "TABLE spip_documents_articles ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"),
97 array('sql_alter', "TABLE spip_documents_rubriques ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"),
98 array('sql_alter', "TABLE spip_documents_breves ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"),
99 array('maj_1_935')
100 );
101
102
103 /**
104 * Convertit un champ de type `blob` en champ de type `text`
105 *
106 * @param string $table Nom de la table
107 * @param string $champ Nom du champ dans la table
108 * @param string $type Type de champ de destination, par exemple `LONGTEXT`
109 **/
110 function convertir_un_champ_blob_en_text($table, $champ, $type) {
111 // precaution : definir le charset par defaut de la table, car c'est lui qui prevaut
112 // et il faut qu'il corresponde au charset de la connexion qui est celui
113 // dans lequel on a ecrit le champ en blob
114 if ($charset = sql_getfetsel('@@character_set_connection')) {
115 sql_alter("TABLE $table DEFAULT CHARACTER SET " . $charset);
116 }
117 $res = spip_query("SHOW FULL COLUMNS FROM $table LIKE '$champ'");
118 if ($row = sql_fetch($res)) {
119 if (strtolower($row['Type']) != strtolower($type)) {
120 $default = $row['Default'] ? (" DEFAULT " . sql_quote($row['Default'])) : "";
121 $notnull = ($row['Null'] == 'YES') ? "" : " NOT NULL";
122 sql_alter("TABLE $table CHANGE $champ $champ $type $default $notnull");
123 }
124 }
125 }
126
127 $GLOBALS['maj'][1937] = array(
128 // convertir les champs blob des tables spip en champs texte
129 array('convertir_un_champ_blob_en_text', "spip_articles", "texte", "LONGTEXT"),
130 array('convertir_un_champ_blob_en_text', "spip_articles", "extra", "LONGTEXT"),
131 array('convertir_un_champ_blob_en_text', "spip_auteurs", "extra", "LONGTEXT"),
132 array('convertir_un_champ_blob_en_text', "spip_breves", "texte", "LONGTEXT"),
133 array('convertir_un_champ_blob_en_text', "spip_breves", "extra", "LONGTEXT"),
134 array('convertir_un_champ_blob_en_text', "spip_messages", "texte", "LONGTEXT"),
135 array('convertir_un_champ_blob_en_text', "spip_mots", "texte", "LONGTEXT"),
136 array('convertir_un_champ_blob_en_text', "spip_mots", "extra", "LONGTEXT"),
137 array('convertir_un_champ_blob_en_text', "spip_groupes_mots", "texte", "LONGTEXT"),
138 array('convertir_un_champ_blob_en_text', "spip_rubriques", "texte", "LONGTEXT"),
139 array('convertir_un_champ_blob_en_text', "spip_rubriques", "extra", "LONGTEXT"),
140 array('convertir_un_champ_blob_en_text', "spip_syndic", "nom_site", "LONGTEXT"),
141 array('convertir_un_champ_blob_en_text', "spip_syndic", "descriptif", "TEXT"),
142 array('convertir_un_champ_blob_en_text', "spip_syndic", "extra", "LONGTEXT"),
143 array('convertir_un_champ_blob_en_text', "spip_syndic_articles", "descriptif", "LONGTEXT"),
144 array('convertir_un_champ_blob_en_text', "spip_petitions", "texte", "LONGTEXT"),
145 array('convertir_un_champ_blob_en_text', "spip_ortho_cache", "suggest", "TEXT"),
146 );
147
148 /**
149 * Mise à jour 1_938 : suppression des id_type de documents, remplacés par extension
150 **/
151 function maj_1_938() {
152 $res = sql_select('extension', 'spip_documents', "extension='' OR extension is NULL");
153 if ($n = sql_count($res)) {
154 $repli = false;
155 // verifier que la colonne id_type est toujours la (update post 1.938)
156 $desc = sql_showtable('spip_documents');
157 if (!$desc or !isset($desc['field']['id_type'])) {
158 $repli = true;
159 }
160
161 $s = sql_select('extension' . ($repli ? '' : ',id_type'), 'spip_types_documents');
162 while ($t = sql_fetch($s)) {
163 if (isset($t['id_type'])) {
164 spip_query("UPDATE spip_documents SET `extension`=" . _q($t['extension']) . " WHERE `id_type`=" . _q($t['id_type']));
165 } else {
166 spip_query("UPDATE spip_documents SET `extension`=" . _q($t['extension']) . " WHERE fichier LIKE " . _q("%." . $t['extension']));
167 }
168 }
169 $res = sql_select('extension', 'spip_documents', "extension='' OR extension is NULL");
170 if ($n = sql_count($res)) {
171 spip_log("Table spip_documents : Colonne extension incomplete : $n lignes vides");
172 }
173 }
174 }
175
176 $GLOBALS['maj'][1938] = array(
177 // Des champs NULL a l'installation
178 // Ajouter un champ extension aux spip_documents, et le
179 // remplir avec les valeurs ad hoc
180 array('sql_alter', "TABLE spip_documents ADD `extension` VARCHAR(10) DEFAULT '' NOT NULL "),
181 array('sql_alter', "TABLE spip_documents ADD INDEX `extension` (`extension`)"),
182 array('maj_1_938'),
183
184 array('sql_alter', "TABLE spip_documents DROP INDEX `id_type`, DROP `id_type`"),
185 ## supprimer l'autoincrement avant de supprimer la PRIMARY KEY
186 array('sql_alter', "TABLE spip_types_documents CHANGE `id_type` `id_type` BIGINT( 21 ) NOT NULL "),
187 array('sql_alter', "TABLE spip_types_documents DROP PRIMARY KEY"),
188 array('sql_alter', "TABLE spip_types_documents DROP `id_type`"),
189 array('sql_alter', "TABLE spip_types_documents DROP INDEX `extension`"),
190
191 ## recreer la PRIMARY KEY sur spip_types_documents.extension
192 array('sql_alter', "TABLE spip_types_documents ADD PRIMARY KEY (`extension`)"),
193 );
194
195 $GLOBALS['maj'][1939] = array(
196 array('sql_alter', "TABLE spip_visites CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL"),
197 array('sql_alter', "TABLE spip_visites_articles CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL"),
198 array('sql_alter', "TABLE spip_referers CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL"),
199 array('sql_alter', "TABLE spip_referers CHANGE `visites_jour` `visites_jour` INT UNSIGNED DEFAULT '0' NOT NULL"),
200 array('sql_alter', "TABLE spip_referers CHANGE `visites_veille` `visites_veille` INT UNSIGNED DEFAULT '0' NOT NULL"),
201 array('sql_alter', "TABLE spip_referers_articles CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL")
202 );
203
204 $GLOBALS['maj'][1940] = array(
205 array('spip_query', "DROP TABLE spip_caches"),
206 );
207
208
209 $GLOBALS['maj'][1941] = array(
210 array('spip_query', "UPDATE spip_meta SET `valeur` = '' WHERE `nom`='preview' AND `valeur`='non' "),
211 array(
212 'spip_query',
213 "UPDATE spip_meta SET `valeur` = ',0minirezo,1comite,' WHERE `nom`='preview' AND `valeur`='1comite' "
214 ),
215 array('spip_query', "UPDATE spip_meta SET `valeur` = ',0minirezo,' WHERE `nom`='preview' AND `valeur`='oui' "),
216 );
217
218 $GLOBALS['maj'][1942] = array(
219 array('sql_alter', "TABLE spip_auteurs CHANGE `statut` `statut` varchar(255) DEFAULT '0' NOT NULL"),
220 array('sql_alter', "TABLE spip_breves CHANGE `statut` `statut` varchar(6) DEFAULT '0' NOT NULL"),
221 array('sql_alter', "TABLE spip_messages CHANGE `statut` `statut` varchar(6) DEFAULT '0' NOT NULL"),
222 array('sql_alter', "TABLE spip_rubriques CHANGE `statut` `statut` varchar(10) DEFAULT '0' NOT NULL"),
223 array('sql_alter', "TABLE spip_rubriques CHANGE `statut_tmp` `statut_tmp` varchar(10) DEFAULT '0' NOT NULL"),
224 array('sql_alter', "TABLE spip_syndic CHANGE `statut` `statut` varchar(10) DEFAULT '0' NOT NULL"),
225 array('sql_alter', "TABLE spip_syndic_articles CHANGE `statut` `statut` varchar(10) DEFAULT '0' NOT NULL"),
226 array('sql_alter', "TABLE spip_forum CHANGE `statut` `statut` varchar(8) DEFAULT '0' NOT NULL"),
227 array('sql_alter', "TABLE spip_signatures CHANGE `statut` `statut` varchar(10) DEFAULT '0' NOT NULL")
228 );
229
230
231 // suppression de l'indexation dans la version standard
232 $GLOBALS['maj'][1943] = array(
233 array('sql_alter', "TABLE spip_articles DROP KEY `idx`"),
234 array('sql_alter', "TABLE spip_articles DROP `idx`"),
235 array('sql_alter', "TABLE spip_auteurs DROP KEY `idx`"),
236 array('sql_alter', "TABLE spip_auteurs DROP `idx`"),
237 array('sql_alter', "TABLE spip_breves DROP KEY `idx`"),
238 array('sql_alter', "TABLE spip_breves DROP `idx`"),
239 array('sql_alter', "TABLE spip_mots DROP KEY `idx`"),
240 array('sql_alter', "TABLE spip_mots DROP `idx`"),
241 array('sql_alter', "TABLE spip_rubriques DROP KEY `idx`"),
242 array('sql_alter', "TABLE spip_rubriques DROP `idx`"),
243 # array('sql_alter', "TABLE spip_documents DROP KEY `idx`"),
244 array('sql_alter', "TABLE spip_documents DROP `idx`"),
245 array('sql_alter', "TABLE spip_syndic DROP KEY `idx`"),
246 array('sql_alter', "TABLE spip_syndic DROP `idx`"),
247 array('sql_alter', "TABLE spip_forum DROP KEY `idx`"),
248 array('sql_alter', "TABLE spip_forum DROP `idx`"),
249 array('sql_alter', "TABLE spip_signatures DROP KEY `idx`"),
250 array('sql_alter', "TABLE spip_signatures DROP `idx`"),
251
252 array('spip_query', "DROP TABLE spip_index"),
253 array('spip_query', "DROP TABLE spip_index_dico"),
254 );
255
256 $GLOBALS['maj'][1944] = array(
257 array('sql_alter', "TABLE spip_documents CHANGE `taille` `taille` integer"),
258 array('sql_alter', "TABLE spip_documents CHANGE `largeur` `largeur` integer"),
259 array('sql_alter', "TABLE spip_documents CHANGE `hauteur` `hauteur` integer")
260 );
261
262 $GLOBALS['maj'][1945] = array(
263 array('sql_alter', "TABLE spip_petitions CHANGE `email_unique` `email_unique` CHAR (3) DEFAULT '' NOT NULL"),
264 array('sql_alter', "TABLE spip_petitions CHANGE `site_obli` `site_obli` CHAR (3) DEFAULT '' NOT NULL"),
265 array('sql_alter', "TABLE spip_petitions CHANGE `site_unique` `site_unique` CHAR (3) DEFAULT '' NOT NULL"),
266 array('sql_alter', "TABLE spip_petitions CHANGE `message` `message` CHAR (3) DEFAULT '' NOT NULL"),
267 array('sql_alter', "TABLE spip_petitions CHANGE `texte` `texte` LONGTEXT DEFAULT '' NOT NULL"),
268 array('sql_alter', "TABLE spip_articles CHANGE `surtitre` `surtitre` text DEFAULT '' NOT NULL"),
269 array('sql_alter', "TABLE spip_articles CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
270 array('sql_alter', "TABLE spip_articles CHANGE `soustitre` `soustitre` text DEFAULT '' NOT NULL"),
271 array('sql_alter', "TABLE spip_articles CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
272 array('sql_alter', "TABLE spip_articles CHANGE `chapo` `chapo` mediumtext DEFAULT '' NOT NULL"),
273 array('sql_alter', "TABLE spip_articles CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"),
274 array('sql_alter', "TABLE spip_articles CHANGE `ps` `ps` mediumtext DEFAULT '' NOT NULL"),
275 array('sql_alter', "TABLE spip_articles CHANGE `accepter_forum` `accepter_forum` CHAR(3) DEFAULT '' NOT NULL"),
276 array('sql_alter', "TABLE spip_articles CHANGE `nom_site` `nom_site` tinytext DEFAULT '' NOT NULL"),
277 array('sql_alter', "TABLE spip_articles CHANGE `url_site` `url_site` VARCHAR(255) DEFAULT '' NOT NULL"),
278 array('sql_alter', "TABLE spip_articles CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"),
279 array('sql_alter', "TABLE spip_auteurs CHANGE `nom` `nom` text DEFAULT '' NOT NULL"),
280 array('sql_alter', "TABLE spip_auteurs CHANGE `bio` `bio` text DEFAULT '' NOT NULL"),
281 array('sql_alter', "TABLE spip_auteurs CHANGE `email` `email` tinytext DEFAULT '' NOT NULL"),
282 array('sql_alter', "TABLE spip_auteurs CHANGE `nom_site` `nom_site` tinytext DEFAULT '' NOT NULL"),
283 array('sql_alter', "TABLE spip_auteurs CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"),
284 array('sql_alter', "TABLE spip_auteurs CHANGE `pass` `pass` tinytext DEFAULT '' NOT NULL"),
285 array('sql_alter', "TABLE spip_auteurs CHANGE `low_sec` `low_sec` tinytext DEFAULT '' NOT NULL"),
286 array('sql_alter', "TABLE spip_auteurs CHANGE `pgp` `pgp` TEXT DEFAULT '' NOT NULL"),
287 array('sql_alter', "TABLE spip_auteurs CHANGE `htpass` `htpass` tinytext DEFAULT '' NOT NULL"),
288 array('sql_alter', "TABLE spip_breves CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
289 array('sql_alter', "TABLE spip_breves CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"),
290 array('sql_alter', "TABLE spip_breves CHANGE `lien_titre` `lien_titre` text DEFAULT '' NOT NULL"),
291 array('sql_alter', "TABLE spip_breves CHANGE `lien_url` `lien_url` text DEFAULT '' NOT NULL"),
292 array('sql_alter', "TABLE spip_messages CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
293 array('sql_alter', "TABLE spip_messages CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"),
294 array('sql_alter', "TABLE spip_messages CHANGE `type` `type` varchar(6) DEFAULT '' NOT NULL"),
295 array('sql_alter', "TABLE spip_messages CHANGE `rv` `rv` varchar(3) DEFAULT '' NOT NULL"),
296 array('sql_alter', "TABLE spip_mots CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
297 array('sql_alter', "TABLE spip_mots CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
298 array('sql_alter', "TABLE spip_mots CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"),
299 array('sql_alter', "TABLE spip_mots CHANGE `type` `type` text DEFAULT '' NOT NULL"),
300 array('sql_alter', "TABLE spip_mots CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"),
301 array('sql_alter', "TABLE spip_groupes_mots CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
302 array('sql_alter', "TABLE spip_groupes_mots CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
303 array('sql_alter', "TABLE spip_groupes_mots CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"),
304 array('sql_alter', "TABLE spip_groupes_mots CHANGE `unseul` `unseul` varchar(3) DEFAULT '' NOT NULL"),
305 array('sql_alter', "TABLE spip_groupes_mots CHANGE `obligatoire` `obligatoire` varchar(3) DEFAULT '' NOT NULL"),
306 array('sql_alter', "TABLE spip_groupes_mots CHANGE `articles` `articles` varchar(3) DEFAULT '' NOT NULL"),
307 array('sql_alter', "TABLE spip_groupes_mots CHANGE `breves` `breves` varchar(3) DEFAULT '' NOT NULL"),
308 array('sql_alter', "TABLE spip_groupes_mots CHANGE `rubriques` `rubriques` varchar(3) DEFAULT '' NOT NULL"),
309 array('sql_alter', "TABLE spip_groupes_mots CHANGE `syndic` `syndic` varchar(3) DEFAULT '' NOT NULL"),
310 array('sql_alter', "TABLE spip_groupes_mots CHANGE `minirezo` `minirezo` varchar(3) DEFAULT '' NOT NULL"),
311 array('sql_alter', "TABLE spip_groupes_mots CHANGE `comite` `comite` varchar(3) DEFAULT '' NOT NULL"),
312 array('sql_alter', "TABLE spip_groupes_mots CHANGE `forum` `forum` varchar(3) DEFAULT '' NOT NULL"),
313 array('sql_alter', "TABLE spip_rubriques CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
314 array('sql_alter', "TABLE spip_rubriques CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
315 array('sql_alter', "TABLE spip_rubriques CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"),
316 array('sql_alter', "TABLE spip_rubriques CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"),
317 array('sql_alter', "TABLE spip_documents CHANGE `extension` `extension` VARCHAR(10) DEFAULT '' NOT NULL"),
318 array('sql_alter', "TABLE spip_documents CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
319 array('sql_alter', "TABLE spip_documents CHANGE `date` `date` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
320 array('sql_alter', "TABLE spip_documents CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
321 array('sql_alter', "TABLE spip_documents CHANGE `fichier` `fichier` varchar(255) DEFAULT '' NOT NULL"),
322 array('sql_alter', "TABLE spip_types_documents CHANGE `extension` `extension` varchar(10) DEFAULT '' NOT NULL"),
323 array('sql_alter', "TABLE spip_types_documents CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
324 array('sql_alter', "TABLE spip_types_documents CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
325 array('sql_alter', "TABLE spip_types_documents CHANGE `mime_type` `mime_type` varchar(100) DEFAULT '' NOT NULL"),
326 array('sql_alter', "TABLE spip_syndic CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"),
327 array('sql_alter', "TABLE spip_syndic CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"),
328 array('sql_alter', "TABLE spip_syndic CHANGE `url_syndic` `url_syndic` text DEFAULT '' NOT NULL"),
329 array('sql_alter', "TABLE spip_syndic CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
330 array('sql_alter', "TABLE spip_syndic CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"),
331 array('sql_alter', "TABLE spip_syndic CHANGE `syndication` `syndication` VARCHAR(3) DEFAULT '' NOT NULL"),
332 array('sql_alter', "TABLE spip_syndic_articles CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
333 array('sql_alter', "TABLE spip_syndic_articles CHANGE `url` `url` VARCHAR(255) DEFAULT '' NOT NULL"),
334 array('sql_alter', "TABLE spip_syndic_articles CHANGE `lesauteurs` `lesauteurs` text DEFAULT '' NOT NULL"),
335 array('sql_alter', "TABLE spip_syndic_articles CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"),
336 array('sql_alter', "TABLE spip_forum CHANGE `titre` `titre` text DEFAULT '' NOT NULL"),
337 array('sql_alter', "TABLE spip_forum CHANGE `texte` `texte` mediumtext DEFAULT '' NOT NULL"),
338 array('sql_alter', "TABLE spip_forum CHANGE `auteur` `auteur` text DEFAULT '' NOT NULL"),
339 array('sql_alter', "TABLE spip_forum CHANGE `email_auteur` `email_auteur` text DEFAULT '' NOT NULL"),
340 array('sql_alter', "TABLE spip_forum CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"),
341 array('sql_alter', "TABLE spip_forum CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"),
342 array('sql_alter', "TABLE spip_forum CHANGE `ip` `ip` varchar(16) DEFAULT '' NOT NULL"),
343 array('sql_alter', "TABLE spip_signatures CHANGE `nom_email` `nom_email` text DEFAULT '' NOT NULL"),
344 array('sql_alter', "TABLE spip_signatures CHANGE `ad_email` `ad_email` text DEFAULT '' NOT NULL"),
345 array('sql_alter', "TABLE spip_signatures CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"),
346 array('sql_alter', "TABLE spip_signatures CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"),
347 array('sql_alter', "TABLE spip_signatures CHANGE `message` `message` mediumtext DEFAULT '' NOT NULL")
348 );
349
350
351 $GLOBALS['maj'][1946] = array(
352 array('sql_alter', "TABLE spip_forum DROP INDEX `id_parent`"),
353 array('sql_alter', "TABLE spip_forum DROP INDEX `id_article`"),
354 array('sql_alter', "TABLE spip_forum DROP INDEX `id_breve`"),
355 array('sql_alter', "TABLE spip_forum DROP INDEX `id_syndic`"),
356 array('sql_alter', "TABLE spip_forum DROP INDEX `id_rubrique`"),
357 array('sql_alter', "TABLE spip_forum DROP INDEX `date_thread`"),
358 array('sql_alter', "TABLE spip_forum DROP INDEX `statut`"),
359 array(
360 'sql_alter',
361 "TABLE spip_forum ADD INDEX `optimal` (`statut`,`id_parent`,`id_article`,`date_heure`,`id_breve`,`id_syndic`,`id_rubrique`)"
362 )
363 );
364
365
366 $GLOBALS['maj'][1947] = array(
367
368 array('sql_alter', "TABLE spip_articles DROP INDEX `url_site`"),
369 array('sql_alter', "TABLE spip_articles DROP INDEX `date_modif`"),
370 array('sql_alter', "TABLE spip_auteurs DROP INDEX `lang`")
371 );
372
373 // mauvaise manip
374 $GLOBALS['maj'][1949] = array(
375
376 array('sql_alter', "TABLE spip_versions DROP INDEX `date`"),
377 array('sql_alter', "TABLE spip_versions DROP INDEX `id_auteur`")
378 );
379
380 /**
381 * Mise à jour 1_950 : Gestion du prefixe pour la table des urls
382 *
383 * @param float $installee Numéro de version actuellement installée
384 **/
385 function maj_1_950($installee) {
386 // oubli de gerer le prefixe lors l'introduction de l'abstraction
387 // => Relancer les MAJ concernees si la version dont on part les avait fait
388 if ($installee >= 1.946) {
389 serie_alter('950a', $GLOBALS['maj'][1946]);
390 }
391 if ($installee >= 1.947) {
392 serie_alter('950b', $GLOBALS['maj'][1947]);
393 }
394 if ($installee >= 1.949) {
395 @serie_alter('950c', $GLOBALS['maj'][1949]);
396 }
397 global $tables_auxiliaires;
398 include_spip('base/auxiliaires');
399 $v = $tables_auxiliaires[$k = 'spip_urls'];
400 sql_create($k, $v['field'], $v['key'], false, false);
401
402
403 foreach (array(
404 'article' => 'id_article',
405 'rubrique' => 'id_rubrique',
406 'breve' => 'id_breve',
407 'auteur' => 'id_auteur',
408 'mot' => 'id_mot',
409 'syndic' => 'id_syndic'
410 ) as $type => $id_objet) {
411 $table = ($type == 'syndic') ? $type : ($type . "s");
412 $date = ($type == 'breve') ? 'date_heure' :
413 (($type == 'auteur') ? 'maj' :
414 (($type == 'mot') ? 'maj' : 'date'));
415 $q = @sql_select("url_propre AS url, $id_objet AS id_objet, '$type' AS type, $date as date", "spip_$table",
416 "url_propre<>''");
417 if (!$q) {
418 return;
419 } // anormal, mais ne pas boucler en erreur
420 while ($r = sql_fetch($q)) {
421 sql_replace('spip_urls', $r);
422 }
423 spip_log("table $table : " . sql_count($q) . " urls propres copiees");
424 sql_alter("TABLE spip_$table DROP INDEX `url_propre`");
425 sql_alter("TABLE spip_$table DROP `url_propre`");
426 }
427 }
428
429 // Donner a la fonction ci-dessus le numero de version installee
430 // AVANT que la mise a jour ait commencee
431 $GLOBALS['maj'][1950] = array(array('maj_1_950', $GLOBALS['meta']['version_installee']));
432
433 // Erreur dans maj_1_948():
434 // // http://trac.rezo.net/trac/spip/changeset/10194
435 // // Gestion du verrou SQL par PHP
436
437 $GLOBALS['maj'][1951] = array(
438
439 array('sql_alter', "TABLE spip_versions CHANGE `id_version` `id_version` bigint(21) DEFAULT 0 NOT NULL")
440 );
441
442
443 /**
444 * Mise à jour 1_952 : Transformation des documents
445 *
446 * - image => mode=image
447 * - vignette => mode=vignette
448 **/
449 function maj_1_952() {
450
451 $ok = sql_alter("TABLE spip_documents CHANGE `mode` `mode` enum('vignette','image','document') DEFAULT NULL");
452
453 if ($ok) {
454
455 $s = sql_select("v.id_document as id_document",
456 "spip_documents as d join spip_documents as v ON d.id_vignette=v.id_document");
457
458 $vignettes = array();
459 while ($t = sql_fetch($s)) {
460 $vignettes[] = intval($t['id_document']);
461 }
462
463 $ok &= spip_query("UPDATE spip_documents SET `mode`='image' WHERE `mode`='vignette'");
464 $ok &= spip_query("UPDATE spip_documents SET `mode`='vignette' WHERE `mode`='image' AND " . sql_in('id_document',
465 $vignettes));
466 }
467 if (!$ok) {
468 die('echec sur maj_1_952()');
469 }
470 }
471
472 $GLOBALS['maj'][1952] = array(array('maj_1_952'));
473
474 $GLOBALS['maj'][1953] = array(array('upgrade_types_documents'));
475
476 $GLOBALS['maj'][1954] = array(
477
478 //pas de psd en <img>
479 array('spip_query', "UPDATE spip_types_documents SET `inclus`='non' WHERE `extension`='psd'"),
480 //ajout csv
481 array('spip_query', "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('csv', 'CSV')"),
482 array('spip_query', "UPDATE spip_types_documents SET `mime_type`='text/csv' WHERE `extension`='csv'"),
483 //ajout mkv
484 array(
485 'spip_query',
486 "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mkv', 'Matroska Video', 'embed')"
487 ),
488 array('spip_query', "UPDATE spip_types_documents SET `mime_type`='video/x-mkv' WHERE `extension`='mkv'"),
489 //ajout mka
490 array(
491 'spip_query',
492 "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mka', 'Matroska Audio', 'embed')"
493 ),
494 array('spip_query', "UPDATE spip_types_documents SET `mime_type`='audio/x-mka' WHERE `extension`='mka'"),
495 //ajout kml
496 array(
497 'spip_query',
498 "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('kml', 'Keyhole Markup Language')"
499 ),
500 array(
501 'spip_query',
502 "UPDATE spip_types_documents SET `mime_type`='application/vnd.google-earth.kml+xml' WHERE `extension`='kml'"
503 ),
504 //ajout kmz
505 array(
506 'spip_query',
507 "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('kmz', 'Google Earth Placemark File')"
508 ),
509 array(
510 'spip_query',
511 "UPDATE spip_types_documents SET `mime_type`='application/vnd.google-earth.kmz' WHERE `extension`='kmz'"
512 )
513 );
514
515 if ($GLOBALS['meta']['version_installee'] > 1.950) // 1.950 lisait un bug dans auxiliaires.php corrige a present
516 {
517 $GLOBALS['maj'][1955] = array(
518 array('sql_alter', "TABLE spip_urls CHANGE `maj` date DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL")
519 );
520 }
521
522 // la mise a jour vers 1.938 contient une erreur
523 // il faut supprimer l'autoincrement avant de supprimer la PRIMARY KEY
524
525 $GLOBALS['maj'][1938] = array(
526
527 # creer un champ plus informatif, et son index
528 array('sql_alter', "TABLE spip_documents ADD `extension` VARCHAR(10) DEFAULT '' NOT NULL "),
529 # recopier l'ancien champ dans le nouveau
530 array('maj_1_938'),
531 # supprimer l'ancien champ et son index
532 array('sql_alter', "TABLE spip_documents DROP INDEX `id_type`, DROP `id_type`"),
533 ## supprimer l'autoincrement avant de supprimer la PRIMARY KEY
534 array('sql_alter', "TABLE spip_types_documents CHANGE `id_type` `id_type` BIGINT( 21 ) NOT NULL "),
535 # le champ id_type devient superflu
536 array('sql_alter', "TABLE spip_types_documents DROP `id_type`"),
537 array('sql_alter', "TABLE spip_types_documents ADD PRIMARY KEY (`extension`)")
538 );
539
540
541 // PG veut une valeur par defaut a l'insertion
542 // http://trac.rezo.net/trac/spip/changeset/10482
543
544 $GLOBALS['maj'][1957] = array(
545 array('sql_alter', "TABLE spip_mots CHANGE `id_groupe` `id_groupe` bigint(21) DEFAULT 0 NOT NULL"),
546 array(
547 'sql_alter',
548 "TABLE spip_documents CHANGE `mode` `mode` ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL"
549 )
550 );
551
552 // Ce champ est inutile et provoque une erreur a l'insertion qui l'oublie
553 $GLOBALS['maj'][1958] = array(
554 array('sql_alter', "TABLE spip_referers_articles DROP date")
555 );