source: spip-zone/_plugins_/fusion_spip/trunk/formulaires/fusion_spip.php @ 94607

Last change on this file since 94607 was 94607, checked in by kent1@…, 5 years ago

Passer par charger_fonction sur les fonctions fusion_spip_* permettant de les surcharger (ajout de _dist pour cela)

_q remplacé par sql_quote

Tester la présence des tables et ne rien faire si non présente

File size: 6.7 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5// pour l'appel à bases_referencees()
6include_spip('inc/install');
7
8include_spip('inc/fusion_spip');
9
10/**
11 * Charger
12 * @return array
13 */
14function formulaires_fusion_spip_charger_dist() {
15
16        // liste des bases déclarées sauf la base "locale"
17        $bases = bases_referencees(_FILE_CONNECT_TMP);
18        foreach ($bases as $key => $val) {
19                if ($val == 'connect') unset($bases[$key]);
20        }
21
22        $valeurs = array(
23                'bases' => $bases,
24                'base' => '',
25                'img_dir' => '',
26                'secteur' => '',
27                'stats' => '',
28                'referers' => '',
29                'versions' => '',
30        );
31
32        return $valeurs;
33}
34
35/**
36 * Verifier
37 * @return array
38 */
39function formulaires_fusion_spip_verifier_dist() {
40        global $spip_version_base;
41        $erreurs = array();
42
43        // vérifier champs obligatoires
44        if (!$base=_request('base')) {
45                $erreurs['base'] = _T('info_obligatoire');
46        }
47        else {
48                $traite_stats = (_request('stats') != 'on' ? true : false);
49                $traite_referers = (_request('referers') != 'on' ? true : false);
50
51                $bases = bases_referencees(_FILE_CONNECT_TMP);
52                $connect = $bases[$base];
53               
54                $lister_tables_principales = charger_fonction('lister_tables_principales','fusion_spip');
55                $principales = $lister_tables_principales($connect, false);
56                $lister_tables_auxiliaires = charger_fonction('lister_tables_auxiliaires','fusion_spip');
57                $auxiliaires = $lister_tables_auxiliaires($connect, false, $traite_stats, $traite_referers);
58
59                // vérifier la version de la base source
60                if(!sql_showtable('spip_meta', false, $connect)){
61                        $erreurs['versions_bases'] = _T('fusion_spip:erreur_versions_impossible');
62                }
63                else {
64                        $vsource = sql_fetsel('valeur', 'spip_meta', 'nom="version_installee"', '', '', '', '', $connect);
65                        if($spip_version_base != $vsource['valeur']){
66                                $erreurs['versions_bases'] = _T('fusion_spip:erreur_versions', array('vhote'=>$spip_version_base, 'vsource'=>$vsource['valeur']));
67                        }
68                }
69                // vérifier la conformité du shéma de la base source
70                if( empty($erreurs) && _request('confirme_warning') != 'on' ){
71                        $comparer_shemas = charger_fonction('comparer_shemas','fusion_spip');
72                        $erreurs_shema = $comparer_shemas($connect, $principales, $auxiliaires);
73                        if (count($erreurs_shema)) {
74                                $erreurs['warning_shema'] = '- '.join('<br>- ', $erreurs_shema);
75                        }
76                }
77        }
78
79        return $erreurs;
80}
81
82/**
83 * Traiter
84 * @return array
85 */
86function formulaires_fusion_spip_traiter_dist() {
87        $erreurs = array();
88
89        // préventif
90        @ini_set('max_execution_time', 0);
91
92        $base = _request('base');
93        $img_dir = _request('img_dir');
94        $secteur = _request('secteur');
95        $traite_stats = (_request('stats') != 'on' ? true : false);
96        $traite_referers = (_request('referers') != 'on' ? true : false);
97
98        $bases = bases_referencees(_FILE_CONNECT_TMP);
99        $connect = $bases[$base];
100
101        // vérifier que le répertoire donné existe et soit lisible
102        if ($img_dir) {
103                if (!file_exists($img_dir)) {
104                        $erreurs[] = _T('fusion_spip:dossier_existe_pas', array('dossier' => $img_dir));
105                } else {
106                        if (!is_readable($img_dir)) {
107                                $erreurs[] = _T('fusion_spip:dossier_pas_lisible', array('dossier' => $img_dir));
108                        }
109                }
110        }
111
112        if (count($erreurs)) {
113                $retour = array(
114                        'message_erreur' =>
115                        _T('fusion_spip:message_import_nok')
116                                .'<br/>&bull;&nbsp;'.join('<br/>&bull;&nbsp;', $erreurs)
117                );
118        } else {
119
120                @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure
121
122                $time_start = microtime(true);
123
124                //commençons par vider la table de traitement fusion_spip pour pouvoir faire le comptage en fin de traiter
125                sql_delete("spip_fusion_spip");
126                fusion_spip_log('Démarrage de la fusion', 'fusion_spip_'.$connect);
127
128                $lister_tables_principales = charger_fonction('lister_tables_principales','fusion_spip');
129                $principales = $lister_tables_principales($connect, false);
130                $lister_tables_auxiliaires = charger_fonction('lister_tables_auxiliaires','fusion_spip');
131                $auxiliaires = $lister_tables_auxiliaires($connect, false, $traite_stats, $traite_referers);
132                $lister_cles_primaires = charger_fonction('lister_cles_primaires','fusion_spip');
133                $cles_primaires = $lister_cles_primaires($principales);
134
135                // insérer les objets principaux
136                $inserer_table_principale = charger_fonction('inserer_table_principale','fusion_spip');
137                foreach ($principales as $nom_table => $shema) {
138                        $inserer_table_principale($nom_table, $shema, $secteur, $connect);
139                }
140
141                // mettre à jour les liens entre objets principaux
142                $liaisons_table_principale = charger_fonction('liaisons_table_principale','fusion_spip');
143                foreach ($principales as $nom_table => $shema) {
144                        $liaisons_table_principale($nom_table, $shema, $cles_primaires, $connect);
145                }
146
147                // mise à jour des liaisons de vignettes de documents
148                $vignettes_documents = charger_fonction('vignettes_documents','fusion_spip');
149                $vignettes_documents($connect);
150
151                // mise à jour des statuts des rubriques
152                include_spip('inc/rubriques');
153                calculer_rubriques();
154
155                // insérer les tables auxiliaires
156                $inserer_table_auxiliaire = charger_fonction('inserer_table_auxiliaire','fusion_spip');
157                foreach ($auxiliaires as $nom_table => $shema) {
158                        $inserer_table_auxiliaire($nom_table, $shema, $cles_primaires, $connect);
159                }
160
161                // importer un par un les documents et logos de la source
162                if ($img_dir) {
163                        $import_documents = charger_fonction('import_documents','fusion_spip');
164                        $import_documents($img_dir, $connect);
165                }
166
167                // mise à jour des liens internes [...->...]
168                $maj_liens_internes = charger_fonction('maj_liens_internes','fusion_spip');
169                $maj_liens_internes($principales, $connect);
170
171                // mise à jour des modèles <docXX> <imgXX> <embXX> ...
172                $maj_modeles = charger_fonction('maj_modeles','fusion_spip');
173                $maj_modeles($principales, $connect);
174
175                // déclarer les url uniques importées avec "perma=1"
176                $maj_perma_urls = charger_fonction('maj_perma_urls','fusion_spip');
177                $maj_perma_urls($connect);
178
179                // appel d'une fonction de traitements perso (déclarée dans mes_options.php par exemple)
180                if (function_exists('fusion_spip_extra_action')) {
181                        fusion_spip_extra_action($connect);
182                }
183
184                // recalculer les secteurs et les statuts des rubriques et des articles
185                include_spip('inc/rubriques');
186                calculer_rubriques();
187                propager_les_secteurs();
188
189                $time_end = microtime(true);
190                $time = $time_end - $time_start;
191                fusion_spip_log('Fusion terminée : '.number_format($time, 2).' secondes)', 'fusion_spip_'.$connect);
192
193                // Un résumé des objets importés
194                $res = sql_select('objet, count(*) as count', 'spip_fusion_spip', '', 'objet');
195                $resume_imports = array();
196                while( $ligne = sql_fetch($res) ) {
197                        if( $ligne['count'] > 0 ){
198                                $resume_imports[] = table_objet($ligne['objet']) . " : " . $ligne['count'];
199                        }
200                }
201                $resume_imports = join("<br>", $resume_imports);
202
203                $retour = array(
204                        'message_ok' => _T('fusion_spip:message_import_ok') . $resume_imports
205                );
206        }
207
208        return $retour;
209}
210
Note: See TracBrowser for help on using the repository browser.