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

Last change on this file since 80135 was 80135, checked in by nicolas.dorigny@…, 6 years ago

L'option pour ne pas traiter les versions n'est pas très utile, on ne laisse que stats/referers

File size: 5.2 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                $principales = fusion_spip_lister_tables_principales($connect, false);
55                $auxiliaires = fusion_spip_lister_tables_auxiliaires($connect, false, $traite_stats, $traite_referers);
56
57                // vérifier la version de la base source
58                if(!sql_showtable('spip_meta', false, $connect)){
59                        $erreurs['versions_bases'] = _T('fusion_spip:erreur_versions_impossible');
60                }
61                else {
62                        $vsource = sql_fetsel('valeur', 'spip_meta', 'nom="version_installee"', '', '', '', '', $connect);
63                        if($spip_version_base != $vsource['valeur']){
64                                $erreurs['versions_bases'] = _T('fusion_spip:erreur_versions', array('vhote'=>$spip_version_base, 'vsource'=>$vsource['valeur']));
65                        }
66                }
67                // vérifier la conformité du shéma de la base source
68                if( empty($erreurs) && _request('confirme_warning') != 'on' ){
69                        $erreurs_shema = fusion_spip_comparer_shemas($connect, $principales, $auxiliaires);
70                        if (count($erreurs_shema)) {
71                                $erreurs['warning_shema'] = '- '.join('<br>- ', $erreurs_shema);
72                        }
73                }
74        }
75
76        return $erreurs;
77}
78
79/**
80 * Traiter
81 * @return array
82 */
83function formulaires_fusion_spip_traiter_dist() {
84        $erreurs = array();
85
86        // préventif
87        @ini_set('max_execution_time', 0);
88
89        $base = _request('base');
90        $img_dir = _request('img_dir');
91        $secteur = _request('secteur');
92        $traite_stats = (_request('stats') == 'on' ? true : false);
93        $traite_referers = (_request('referers') == 'on' ? true : false);
94
95        $bases = bases_referencees(_FILE_CONNECT_TMP);
96        $connect = $bases[$base];
97
98        // vérifier que le répertoire donné existe et soit lisible
99        if ($img_dir) {
100                if (!file_exists($img_dir)) {
101                        $erreurs[] = _T('fusion_spip:dossier_existe_pas', array('dossier' => $img_dir));
102                } else {
103                        if (!is_readable($img_dir)) {
104                                $erreurs[] = _T('fusion_spip:dossier_pas_lisible', array('dossier' => $img_dir));
105                        }
106                }
107        }
108
109        if (count($erreurs)) {
110                $retour = array(
111                        'message_erreur' =>
112                        _T('fusion_spip:message_import_nok')
113                                .'<br/>&bull;&nbsp;'.join('<br/>&bull;&nbsp;', $erreurs)
114                );
115        } else {
116
117                @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure
118
119                $time_start = microtime(true);
120                fusion_spip_log('Démarrage de la fusion', 'fusion_spip_'.$connect);
121
122                $principales = fusion_spip_lister_tables_principales($connect, true);
123                $auxiliaires = fusion_spip_lister_tables_auxiliaires($connect, true, $traite_stats, $traite_referers);
124                $cles_primaires = fusion_spip_lister_cles_primaires($principales);
125
126                // insérer les objets principaux
127                foreach ($principales as $nom_table => $shema) {
128                        fusion_spip_inserer_table_principale($nom_table, $shema, $secteur, $connect);
129                }
130
131                // mettre à jour les liens entre objets principaux
132                foreach ($principales as $nom_table => $shema) {
133                        fusion_spip_liaisons_table_principale($nom_table, $shema, $cles_primaires, $connect);
134                }
135
136                // mise à jour des liaisons de vignettes de documents
137                fusion_spip_vignettes_documents($connect);
138
139                // mise à jour des statuts des rubriques
140                include_spip('inc/rubriques');
141                calculer_rubriques();
142
143                // insérer les tables auxiliaires
144                foreach ($auxiliaires as $nom_table => $shema) {
145                        fusion_spip_inserer_table_auxiliaire($nom_table, $shema, $cles_primaires, $connect);
146                }
147
148                // importer un par un les documents et logos de la source
149                if ($img_dir) {
150                        fusion_spip_import_documents($img_dir, $connect);
151                }
152
153                // mise à jour des liens internes [...->...]
154                fusion_spip_maj_liens_internes($principales, $connect);
155
156                // mise à jour des modèles <docXX> <imgXX> <embXX> ...
157                fusion_spip_maj_modeles($principales, $connect);
158
159                // déclarer les url uniques importées avec "perma=1"
160                fusion_spip_maj_perma_urls($connect);
161
162                // appel d'une fonction de traitements perso (déclarée dans mes_options.php par exemple)
163                if (function_exists('fusion_spip_extra_action')) {
164                        fusion_spip_extra_action($connect);
165                }
166
167                // recalculer les secteurs et les statuts des rubriques et des articles
168                include_spip('inc/rubriques');
169                calculer_rubriques();
170                propager_les_secteurs();
171
172                $time_end = microtime(true);
173                $time = $time_end - $time_start;
174                fusion_spip_log('Fusion terminée : '.number_format($time, 2).' secondes)', 'fusion_spip_'.$connect);
175
176                $retour = array(
177                        'message_ok' => _T('fusion_spip:message_import_ok')
178                );
179        }
180
181        return $retour;
182}
183
Note: See TracBrowser for help on using the repository browser.