source: spip-zone/_core_/plugins/mots/base/mots_upgrade.php @ 41559

Last change on this file since 41559 was 41559, checked in by marcimat@…, 11 years ago

Les mots en spip_mots_liens.
Il reste certainement des bugs.

File size: 3.8 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2009                                                *
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 * Installation/maj des tables mots et groupes de mots...
15 *
16 * @param string $nom_meta_base_version
17 * @param string $version_cible
18 */
19function mots_upgrade($nom_meta_base_version,$version_cible){
20        $current_version = 0.0;
21        if (   (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
22                        || (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
23
24                if ($current_version==0.0){
25                        include_spip('base/create');
26                        // creer les tables
27                        creer_base();
28                        // mettre les metas par defaut
29                        $config = charger_fonction('config','inc');
30                        $config();
31                        ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
32                }
33                // passer a spip_mots_liens
34                if (version_compare($current_version, '2.0', '<')) {
35                        // supprime par defaut les anciennes tables une fois le travail effectue
36                        mots_maj_tables_liaisons(array(
37                                'article', 'breve', 'rubrique', 'syndic', 'forum', // core
38                                'auteur', 'document' // autres plugins ?
39                        ));
40                        ecrire_meta($nom_meta_base_version,$current_version = '2.0');
41                }
42
43        }
44}
45
46
47/**
48 * Desinstallation/suppression des tables mots et groupes de mots
49 *
50 * @param string $nom_meta_base_version
51 */
52function mots_vider_tables($nom_meta_base_version) {
53        sql_drop_table("spip_mots");
54        sql_drop_table("spip_groupes_mots");
55        sql_drop_table("spip_mots_liens");
56       
57        effacer_meta('articles_mots');
58        effacer_meta('config_precise_groupes');
59       
60        effacer_meta($nom_meta_base_version);
61}
62
63
64
65/**
66  * Reunir en une seule table les liens de mots dans spip_mots_liens
67  * Passe spip_mots_xx(id_mot, id_xx) dans spip_mots_liens(objet, id_objet, id_mot)
68  * (peut fonctionner pour d'autres table spip_xx_liens).
69  *
70  * @param array $objets : liste d'objets à transférer.
71  * @param string $destination : table de destination (se terminant par _liens).
72  * @param bool $supprimer_ancienne_table : supprimer l'ancienne table une fois la copie réalisée ?.
73  * @return
74 **/ 
75function mots_maj_tables_liaisons ($objets, $destination='spip_mots_liens', $supprimer_ancienne_table = true) {
76        // creer la table spip_mots_liens manquante
77        include_spip('base/create');
78        creer_base();
79
80        $trouver_table = charger_fonction('trouver_table','base');
81       
82        // Recopier les donnees
83        foreach ($objets as $objet) {
84                $table_objet = table_objet($objet);
85                if ($table_objet == 'forums') $table_objet = 'forum'; // #naze #bug #forum
86                $_id_objet = id_table_objet($objet);
87                $source = substr($destination, 0, -5) . $table_objet; // spip_mots_xx
88                spip_log("Transfert SQL de : '$source' vers '$destination'");
89               
90                if (!$trouver_table($source)) continue; // la source n'existe pas... ne rien tenter...
91               
92                if ($s = sql_select('*', $source)) {
93                        $tampon = array();
94                        while ($t = sql_fetch($s)) {
95                                // transformer id_xx=N en (id_objet=N, objet=xx)
96                                $t['id_objet'] = $t[$_id_objet];
97                                $t['objet'] = $objet;
98                                unset($t[$_id_objet]);
99                                unset($t['maj']);
100                                $tampon[] = $t;
101                                if (count($tampon)>10000) {
102                                        sql_insertq_multi($destination, $tampon);
103                                        $tampon = array();
104                                }
105                        }
106                       
107                        if (count($tampon)) {
108                                sql_insertq_multi($destination, $tampon);
109                        }
110                       
111                        if ($supprimer_ancienne_table) {
112                                sql_drop_table($source);
113                        }
114                }
115        }
116}
117
118
119?>
Note: See TracBrowser for help on using the repository browser.