source: spip-zone/_plugins_/notation/base/notation_upgrade.php @ 47757

Last change on this file since 47757 was 47757, checked in by real3t@…, 10 years ago

Bug reporté ici : http://permalink.gmane.org/gmane.comp.web.spip.user/167103 et constaté aussi chez moi.

creer_base(); ne fait pas l'action de rajouter le champ :
$tables_principalesspip_articles?field?accepter_note? = "CHAR(3) DEFAULT NOT NULL";

Contournement faute de meilleure compréhension du problème

File size: 5.7 KB
Line 
1<?php
2/**
3* Plugin Notation v.0.5
4* par JEM (jean-marc.viglino@ign.fr) et b_b
5*
6* Copyright (c) 2008
7* Logiciel libre distribue sous licence GNU/GPL.
8**/
9include_spip('inc/meta');
10include_spip('base/create');
11
12function notation_upgrade($nom_meta_base_version,$version_cible){
13        $current_version = 0.0;
14        if (   (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
15                        || (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
16               
17                if ($current_version==0.0){
18                        include_spip('base/notation');
19                        creer_base();
20                        # creer_base ne marche pas : SPIP ne fait pas le alter sur spip_articles
21                        sql_alter("TABLE spip_articles ADD COLUMN accepter_note CHAR(3) DEFAULT '' NOT NULL");
22                        // mettre les metas par defaut
23                        $config = charger_fonction('config','inc');
24                        $config();
25                        // Ruse : sur une NOUVELLE installation, on a déjà tout fait, donc $version_cible directement !!!!
26                        ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
27                }
28                if (version_compare($current_version,"0.5.0","<")){
29                        //modifications de la table notations_articles en notations_objets
30                        sql_alter("TABLE spip_notations_articles RENAME TO spip_notations_objets");
31                        sql_alter("TABLE spip_notations_objets CHANGE nb nombre_votes BIGINT(21) NOT NULL");
32                        sql_alter("TABLE spip_notations_objets MODIFY id_article BIGINT(21) NOT NULL DEFAULT '0'");
33                        sql_alter("TABLE spip_notations_objets ADD COLUMN id_forum BIGINT(21) NOT NULL DEFAULT '0' AFTER id_article");
34                        sql_alter("TABLE spip_notations_objets DROP PRIMARY KEY");
35                        sql_alter("TABLE spip_notations_objets ADD COLUMN objet varchar(21) DEFAULT '' NOT NULL FIRST");
36                        sql_alter("TABLE spip_notations_objets ADD INDEX (objet)");
37                        sql_alter("TABLE spip_notations_objets ADD INDEX (id_article)");
38                        sql_alter("TABLE spip_notations_objets ADD INDEX (id_forum)");
39                        sql_alter("TABLE spip_notations_objets ADD INDEX (nombre_votes)");
40                        //modifications de la table notations
41                        sql_alter("TABLE spip_notations ADD COLUMN id_forum BIGINT(21) NOT NULL DEFAULT '0' AFTER id_article");
42                        sql_alter("TABLE spip_notations ADD COLUMN objet varchar(21) DEFAULT '' NOT NULL AFTER id_notation");
43                        sql_alter("TABLE spip_notations ADD INDEX (id_forum)");
44                        sql_alter("TABLE spip_notations ADD INDEX (objet)");
45                        // insertion de "articles" dans les champs "objet" des deux tables
46                        // (les donnees presentes avant la maj ne concernent que des articles)
47                        // change ensuite (0.6) en 'article' (comme le core - cf spip_documents_liens)
48                        sql_updateq("spip_notations", array("objet" => "articles"));
49                        sql_updateq("spip_notations_objets", array("objet" => "articles"));
50
51                        //on vire les metas dans la verison precedente (maintenant on se sert de CFG)
52                        sql_delete("spip_meta","nom =" .sql_quote("notation_acces"));
53                        sql_delete("spip_meta","nom =" .sql_quote("notation_ip"));
54                        sql_delete("spip_meta","nom =" .sql_quote("notation_nb"));
55                        sql_delete("spip_meta","nom =" .sql_quote("notation_ponderation"));             
56                       
57                        ecrire_meta($nom_meta_base_version,$current_version="0.5.0");
58                }
59               
60                // mise a jour pour transformer les id_article et id_forum en id_objet
61                if (version_compare($current_version,"0.6.1","<")){
62                        // ajout des champ id_objet
63                        sql_alter("TABLE spip_notations ADD COLUMN id_objet BIGINT(21) NOT NULL DEFAULT '0' AFTER objet");
64                        sql_alter("TABLE spip_notations_objets ADD COLUMN id_objet BIGINT(21) NOT NULL DEFAULT '0' AFTER objet");
65                        // remplissage des valeurs deja existantes
66                        sql_update("spip_notations", array("id_objet" => "id_article", "objet" => sql_quote("article")), "id_article>".sql_quote(0));
67                        sql_update("spip_notations", array("id_objet" => "id_forum", "objet" => sql_quote("forum")), "id_forum>".sql_quote(0));
68                        sql_update("spip_notations_objets", array("id_objet" => "id_article", "objet" => sql_quote("article")), "id_article>".sql_quote(0));
69                        sql_update("spip_notations_objets", array("id_objet" => "id_forum", "objet" => sql_quote("forum")), "id_forum>".sql_quote(0));
70                        // suppression des index
71                        sql_alter("TABLE spip_notations DROP INDEX id_article");
72                        sql_alter("TABLE spip_notations DROP INDEX id_forum");
73                        sql_alter("TABLE spip_notations_objets DROP INDEX id_article");
74                        sql_alter("TABLE spip_notations_objets DROP INDEX id_forum");
75                        // suppression des vieux champs id_article et id_forum
76                        sql_alter("TABLE spip_notations DROP COLUMN id_article");
77                        sql_alter("TABLE spip_notations DROP COLUMN id_forum");
78                        sql_alter("TABLE spip_notations_objets DROP COLUMN id_article");
79                        sql_alter("TABLE spip_notations_objets DROP COLUMN id_forum");
80                        // recreation d'index sur id_objet
81                        sql_alter("TABLE spip_notations ADD INDEX (id_objet)");
82                        // creation d'une cle primaire multiple sur la table notations_objets
83                        sql_alter("TABLE spip_notations_objets DROP INDEX objet");
84                        sql_alter("TABLE spip_notations_objets ADD PRIMARY KEY (objet, id_objet)");
85                        // corriger le 'articles' en 'article' ocazou il en resterait
86                        sql_updateq("spip_notations", array("objet" => "article"), "objet=".sql_quote($a="articles"));
87                        sql_updateq("spip_notations_objets", array("objet" => "article"), "objet=".sql_quote($a="articles"));
88               
89                        ecrire_meta($nom_meta_base_version,$current_version="0.6.1");
90                }
91                if (version_compare($current_version,"0.6.2","<")){
92                        maj_tables(array('spip_articles'));
93                        // mettre les metas par defaut
94                        $config = charger_fonction('config','inc');
95                        $config();
96                        ecrire_meta($nom_meta_base_version,$current_version="0.6.2");
97                }
98        }
99}
100
101function notation_vider_tables($nom_meta_base_version) {
102        sql_drop_table("spip_notations");
103        sql_drop_table("spip_notations_objets");
104        sql_alter("TABLE spip_articles DROP COLUMN accepter_note");
105        effacer_meta($nom_meta_base_version);
106}
107
108?>
Note: See TracBrowser for help on using the repository browser.