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

Last change on this file since 85144 was 85144, checked in by ben.spip@…, 5 years ago

Un peu de stats à la fin de la fusion si elle est réussie

File size: 5.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                $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
121        //commençons par vider la table de traitement fusion_spip pour pouvoir faire le comptage en fin de traiter
122        sql_delete("spip_fusion_spip");
123        fusion_spip_log('Démarrage de la fusion', 'fusion_spip_'.$connect);
124
125                $principales = fusion_spip_lister_tables_principales($connect, true);
126                $auxiliaires = fusion_spip_lister_tables_auxiliaires($connect, true, $traite_stats, $traite_referers);
127                $cles_primaires = fusion_spip_lister_cles_primaires($principales);
128
129                // insérer les objets principaux
130                foreach ($principales as $nom_table => $shema) {
131                        fusion_spip_inserer_table_principale($nom_table, $shema, $secteur, $connect);
132                }
133
134                // mettre à jour les liens entre objets principaux
135                foreach ($principales as $nom_table => $shema) {
136                        fusion_spip_liaisons_table_principale($nom_table, $shema, $cles_primaires, $connect);
137                }
138
139                // mise à jour des liaisons de vignettes de documents
140                fusion_spip_vignettes_documents($connect);
141
142                // mise à jour des statuts des rubriques
143                include_spip('inc/rubriques');
144                calculer_rubriques();
145
146                // insérer les tables auxiliaires
147                foreach ($auxiliaires as $nom_table => $shema) {
148                        fusion_spip_inserer_table_auxiliaire($nom_table, $shema, $cles_primaires, $connect);
149                }
150
151                // importer un par un les documents et logos de la source
152                if ($img_dir) {
153                        fusion_spip_import_documents($img_dir, $connect);
154                }
155
156                // mise à jour des liens internes [...->...]
157                fusion_spip_maj_liens_internes($principales, $connect);
158
159                // mise à jour des modèles <docXX> <imgXX> <embXX> ...
160                fusion_spip_maj_modeles($principales, $connect);
161
162                // déclarer les url uniques importées avec "perma=1"
163                fusion_spip_maj_perma_urls($connect);
164
165                // appel d'une fonction de traitements perso (déclarée dans mes_options.php par exemple)
166                if (function_exists('fusion_spip_extra_action')) {
167                        fusion_spip_extra_action($connect);
168                }
169
170                // recalculer les secteurs et les statuts des rubriques et des articles
171                include_spip('inc/rubriques');
172                calculer_rubriques();
173                propager_les_secteurs();
174
175                $time_end = microtime(true);
176                $time = $time_end - $time_start;
177                fusion_spip_log('Fusion terminée : '.number_format($time, 2).' secondes)', 'fusion_spip_'.$connect);
178
179        // Un résumé des objets importés
180        $res = sql_select('objet, count(*) as count', 'spip_fusion_spip' , '', 'objet');
181        $texte='';
182        while ($ligne = sql_fetch($res))
183        {
184            if ($ligne['count'] >0 )
185            {
186                $texte.=$ligne['objet']. ":". $ligne['count'].", " ;
187            }
188        }
189
190
191
192            $retour = array(
193                        'message_ok' => _T('fusion_spip:message_import_ok') . $texte
194                );
195        }
196
197        return $retour;
198}
199
Note: See TracBrowser for help on using the repository browser.