source: spip-zone/_plugins_/agenda/trunk/formulaires/migrer_agenda.php @ 121661

Last change on this file since 121661 was 121661, checked in by bruno@…, 14 months ago

version 3.37.0 : lors de la migration des articles vers des événements, importer le texte de l'article dans le descriptif de l'événement

File size: 5.5 KB
Line 
1<?php
2/**
3 * Plugin Agenda 4 pour Spip 3.0
4 * Licence GPL 3
5 *
6 * 2006-2011
7 * Auteurs : cf paquet.xml
8 */
9
10if (!defined('_ECRIRE_INC_VERSION')) {
11        return;
12}
13
14
15function formulaires_migrer_agenda_charger_dist() {
16        $valeurs = array(
17                'id_parent'=>'',
18                'toute_la_branche' => '',
19                'champ_date_debut' => 'date',
20                'champ_date_fin' => 'date_redac',
21                'horaire' => 'oui',
22                'groupes_mots' => array(),
23        );
24
25        return $valeurs;
26}
27
28function formulaires_migrer_agenda_verifier_dist() {
29
30        $erreurs = array();
31        $oblis = array('id_parent','champ_date_debut','champ_date_fin','horaire');
32
33        foreach ($oblis as $obli) {
34                if (!_request($obli)) {
35                        $erreurs[$obli] = _T('info_obligatoire');
36                }
37        }
38
39        if (!isset($erreurs['champ_date_debut'])
40                and !in_array(_request('champ_date_debut'), array('date','date_redac'))) {
41                $erreurs['champ_date_debut'] = _T('migreragenda:erreur_choix_incorrect');
42        }
43
44        if (!isset($erreurs['champ_date_fin'])
45                and !in_array(_request('champ_date_fin'), array('date','date_redac'))) {
46                $erreurs['champ_date_fin'] = _T('migreragenda:erreur_choix_incorrect');
47        }
48
49        if (!isset($erreurs['horaire'])
50                and !in_array(_request('horaire'), array('oui','non'))) {
51                $erreurs['horaire'] = _T('migreragenda:erreur_choix_incorrect');
52        }
53
54        if (!isset($erreurs['groupes_mots'])
55                and $groupes = _request('groupes_mots')) {
56                if (!is_array($groupes)) {
57                        $erreurs['groupes_mots'] = _T('migreragenda:erreur_choix_incorrect');
58                } else {
59                        $groupes = array_map('intval', $groupes);
60                        if (sql_countsel('spip_groupes_mots', sql_in('id_groupe', $groupes)) != count($groupes)) {
61                                $erreurs['groupes_mots'] = _T('migreragenda:erreur_choix_incorrect');
62                        }
63                }
64        }
65
66        // pas d'erreurs ? verifier ce qui va etre fait et l'annoncer
67        if (!count($erreurs) and !_request('confirm')) {
68                $where = migrer_agenda_where_articles(_request('id_parent'), _request('toute_la_branche'));
69                $nba = sql_countsel('spip_articles', $where);
70
71                $message = _T('migreragenda:info_migration_articles').' ';
72                $message .= sinon(singulier_ou_pluriel($nba, 'info_1_article', 'info_nb_articles'), _T('info_aucun_article'));
73
74                $erreurs['confirmer'] = $message;
75                $erreurs['message_erreur'] = ''; // pas de message automatique
76        }
77
78        return $erreurs;
79}
80
81
82function formulaires_migrer_agenda_traiter_dist() {
83        $id_rubrique = _request('id_parent');
84        $where_articles = migrer_agenda_where_articles($id_rubrique, _request('toute_la_branche'));
85        $groupes = _request('groupes_mots');
86        if (!$groupes) {
87                $groupes = array();
88        }
89        $where_mots = migrer_agenda_where_mots($groupes);
90
91        $horaire = (_request('horaire')=='oui'?true:false);
92        $champ_date_debut = _request('champ_date_debut');
93        $champ_date_fin = _request('champ_date_fin');
94
95        // poser le flag agenda sur la rubrique !
96        sql_updateq('spip_rubriques', array('agenda'=>1), 'id_rubrique='.intval($id_rubrique));
97        // et migrer les articles
98        $nb = migrer_articles($where_articles, $champ_date_debut, $champ_date_fin, $horaire, $where_mots);
99
100        $message = _T('migreragenda:info_migration_articles_reussi').' ';
101        $message .= sinon(singulier_ou_pluriel($nb, 'info_1_article', 'info_nb_articles'), _T('info_aucun_article'));
102
103        return array('message_ok'=>$message);
104}
105
106function migrer_articles($where_articles, $champ_date_debut, $champ_date_fin, $horaire, $where_mots) {
107        include_spip('action/editer_evenement');
108
109        $where_mots = implode(' AND ', $where_mots);
110
111        $nb = 0;
112        $res = sql_select('*', 'spip_articles', $where_articles);
113        while ($row = sql_fetch($res)) {
114                $id_evenement = evenement_inserer($row['id_article']);
115                // mettre les champs
116                $set = array(
117                        'date_debut' => $row[$champ_date_debut],
118                        'date_fin' => $row[$champ_date_fin],
119                        'titre' => $row['titre'],
120                        'descriptif' => $row['texte'],
121                        'horaire' => ($horaire?'oui':'non')
122                );
123                evenement_modifier($id_evenement, $set);
124
125                // associer les mots : en sql pour ne pas exploser si plein de mots en base
126                $mots = sql_allfetsel(
127                        'M.id_mot',
128                        'spip_mots AS M JOIN spip_mots_liens AS L ON (M.id_mot=L.id_mot AND L.objet='.sql_quote('article').')',
129                        'id_objet='.intval($row['id_article']).' AND ('.$where_mots.')'
130                );
131                if (count($mots)) {
132                        $insert = array();
133                        foreach ($mots as $mot) {
134                                $insert[] = array('id_mot'=>$mot['id_mot'],'objet'=>'evenement','id_objet'=>$id_evenement);
135                        }
136                        sql_insertq_multi('spip_mots_liens', $insert);
137                }
138
139                // publier l'evenement
140                evenement_modifier($id_evenement, array('statut' => 'publie'));
141                $nb++;
142        }
143        return $nb;
144}
145
146function migrer_agenda_where_articles($id_rubrique, $branche = false) {
147
148        $where = array();
149        $where[] = 'statut='.sql_quote('publie');
150        if ($branche) {
151                include_spip('inc/rubriques');
152                $where[] = sql_in('id_rubrique', calcul_branche_in($id_rubrique));
153        } else {
154                $where[] = 'id_rubrique='.intval($id_rubrique);
155        }
156
157        // exclure les articles qui ont deja un evenement
158        $where[] = 'id_article NOT IN ('.sql_get_select('id_article', 'spip_evenements').')';
159
160        return $where;
161}
162
163function migrer_agenda_where_mots($groupes) {
164        $id_groupe = array();
165
166        $rows = sql_allfetsel('*', 'spip_groupes_mots', sql_in('id_groupe', $groupes));
167        foreach ($rows as $row) {
168                $id_groupe[] = $row['id_groupe'];
169                $tables_liees = explode(',', $row['tables_liees']);
170                $tables_liees = array_filter($tables_liees);
171                // ajouter les evenements a ce groupe de mot
172                if (!in_array('evenements', $tables_liees)) {
173                        include_spip('action/editer_groupe_mots');
174                        $tables_liees[] = 'evenements';
175                        $tables_liees = implode(',', $tables_liees);
176                        groupemots_modifier($row['id_groupe'], array('tables_liees' => $tables_liees));
177                }
178        }
179
180        $where = array(sql_in('id_groupe', $id_groupe));
181        return $where;
182}
Note: See TracBrowser for help on using the repository browser.