source: spip-zone/_plugins_/dictionnaires/trunk/dictionnaires_administrations.php @ 112627

Last change on this file since 112627 was 112627, checked in by real3t@…, 18 months ago

Ne pas tenter de convertir si F&T n'a pas laissé de table ou n'a jamais été installé

File size: 5.7 KB
Line 
1<?php
2
3/**
4 * Fichier gérant l'installation et désinstallation du plugin
5 *
6 * @package SPIP\Dictionnaire\Installation
7**/
8
9// Sécurité
10if (!defined('_ECRIRE_INC_VERSION')) {
11        return;
12}
13
14/**
15 * Installation/maj des tables dictionnaires et définitions...
16 *
17 * @param string $nom_meta_base_version
18 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
19 * @param string $version_cible
20 *     Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
21 * @return void
22 */
23function dictionnaires_upgrade($nom_meta_base_version, $version_cible) {
24
25        include_spip('inc/config');
26        include_spip('base/create');
27
28        $maj = array();
29        $maj['create'] = array(
30                array('maj_tables', array('spip_dictionnaires', 'spip_definitions', 'spip_definitions_liens')),
31                array('ecrire_config', 'dictionnaires/remplacer_premier_defaut', 'on'),
32                array('ecrire_config', 'dictionnaires/remplacer_premier_abbr', 'on'),
33                array('dictionnaires_migrer_acronymes'),
34        );
35
36        $maj['0.2.0'] = array(array('maj_tables', 'spip_dictionnaires'));
37        $maj['0.3.0'] = array(array('maj_tables', 'spip_definitions'));
38
39        // deplacer les statuts du dictionnaires de 'actif' a 'statut'
40        $maj['0.4.0'] = array(
41                array('maj_tables', 'spip_dictionnaires'),
42                array('sql_update', 'spip_dictionnaires', array('statut'=>'actif'), 'actif=1'),
43                array('sql_update', 'spip_dictionnaires', array('statut'=>'inactif'), 'actif=0'),
44                array('sql_alter', 'TABLE spip_dictionnaires DROP COLUMN actif'),
45        );
46        // pas de not null sans integer pour sqlite
47        $maj['0.4.1'] = array(
48                array('sql_alter', 'TABLE spip_definitions CHANGE COLUMN id_dictionnaire id_dictionnaire bigint(21) not null default 0')
49        );
50        // Ajout du champ url_extense dans la table spip_definitions
51        $maj['0.4.2'] = array(array('maj_tables', 'spip_definitions'));
52       
53        // Ajout du champ id_trad sur les définitions
54        $maj['0.4.3'] = array(array('maj_tables', 'spip_definitions'));
55        // Ajouter les langues sur les définitions anciennes
56        $maj['0.4.4'] = array(array('definitions_langues'));
57
58        include_spip('base/upgrade');
59        maj_plugin($nom_meta_base_version, $version_cible, $maj);
60}
61
62
63function definitions_langues(){
64        sql_updateq('spip_definitions',array('lang'=>$GLOBALS['meta']['langue_site']),'lang = ""');
65       
66}
67/**
68 * Migre les acronymes du plugins Forms & Tables (s'il est actif)
69 * dans ce plugin.
70**/
71function dictionnaires_migrer_acronymes() {
72        // Si F&T contient une table d'acronymes
73        $trouver_table = charger_fonction('trouver_table', 'base');
74        $desc = $trouver_table('spip_forms');
75        if (!is_array($desc)) return;
76        if (count($liste = sql_fetsel('id_form', 'spip_forms', "type_form='acronymes_sigles'"))) {
77                $id_form = intval(reset($liste));
78                $acronymes = sql_allfetsel('id_donnee, statut, date', 'spip_forms_donnees', 'id_form = '.$id_form);
79                if ($acronymes and is_array($acronymes)){
80                        // On commence par créer un dictionnaire pour l'importation
81                        include_spip('action/editer_dictionnaire');
82                        if ($id_dictionnaire = insert_dictionnaire()){
83                                // On lui met des champs par défaut
84                                autoriser_exception('modifier', 'dictionnaire', $id_dictionnaire);
85                                dictionnaire_set($id_dictionnaire, array(
86                                        'titre' => _T('dictionnaire:importer_acronymes_titre'),
87                                        'statut' => 'actif',
88                                        'descriptif' => _T('dictionnaire:importer_acronymes_descriptif'),
89                                        'type_defaut' => 'abbr',
90                                ));
91                                autoriser_exception('modifier', 'dictionnaire', $id_dictionnaire, false);
92                               
93                                // On parcourt ensuite les acronymes à importer pour récupérer leurs infos
94                                foreach ($acronymes as $acronyme){
95                                        if ($titre = trim(str_replace("." , "", reset(sql_fetsel("valeur", "spip_forms_donnees_champs", array('id_donnee='.$acronyme['id_donnee'], "champ='ligne_1'")))))){
96                                                $lang_select = reset(sql_fetsel("valeur", "spip_forms_donnees_champs", array('id_donnee='.$acronyme['id_donnee'], "champ='select_2'")));
97                                                $lang = reset(sql_fetsel("titre", "spip_forms_champs_choix", array("champ='select_2'", "choix='$lang_select'")));
98                                                $definition = array(
99                                                        'id_dictionnaire' => $id_dictionnaire,
100                                                        'titre' => $titre,
101                                                        'texte' => reset(sql_fetsel("valeur", "spip_forms_donnees_champs", array('id_donnee='.$acronyme['id_donnee'], "champ='texte_1'"))),
102                                                        'type' => 'abbr',
103                                                        'casse' => 1,
104                                                        'date' => $acronyme['date'],
105                                                        'statut' => ($acronyme['statut'] == 'publie') ? 'publie' : 'prop',
106                                                        'lang' => $lang
107                                                );
108                                               
109                                                // On crée la définition dans la base SANS calculer le cache
110                                                include_spip('action/editer_definition');
111                                                if ($id_definition = insert_definition()){
112                                                        // 0 et pas $id_dictionnaire
113                                                        // car insert_definition a utilisé les valeurs par défaut
114                                                        autoriser_exception('publierdans', 'dictionnaire', 0);
115                                                        autoriser_exception('modifier', 'definition', $id_definition);
116                                                        definition_set($id_definition, $definition, false);
117                                                        autoriser_exception('modifier', 'definition', $id_definition, false);
118                                                        autoriser_exception('publierdans', 'dictionnaire', 0, false);
119                                                }
120                                        }
121                                }
122                               
123                                // On calcule le cache des définitions une seule fois à la fin
124                                include_spip('inc/dictionnaires');
125                                dictionnaires_lister_definitions(true);
126                        }
127                }
128        }
129}
130
131/**
132 * Désinstallation/suppression des tables dictionnaires et definitions
133 *
134 * @param string $nom_meta_base_version
135 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
136 * @return void
137 */
138function dictionnaires_vider_tables($nom_meta_base_version) {
139
140        include_spip('base/abstract_sql');
141
142        // On efface les tables du plugin
143        sql_drop_table('spip_dictionnaires');
144        sql_drop_table('spip_definitions');
145        sql_drop_table('spip_definitions_liens');
146
147        // Effacer les configurations
148        effacer_meta('dictionnaires');
149
150        // On efface la version entregistrée
151        effacer_meta($nom_meta_base_version);
152
153}
Note: See TracBrowser for help on using the repository browser.