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

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

PSR et optimisation des images

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                        'horaire' => ($horaire?'oui':'non')
121                );
122                evenement_modifier($id_evenement, $set);
123
124                // associer les mots : en sql pour ne pas exploser si plein de mots en base
125                $mots = sql_allfetsel(
126                        'M.id_mot',
127                        'spip_mots AS M JOIN spip_mots_liens AS L ON (M.id_mot=L.id_mot AND L.objet='.sql_quote('article').')',
128                        'id_objet='.intval($row['id_article']).' AND ('.$where_mots.')'
129                );
130                if (count($mots)) {
131                        $insert = array();
132                        foreach ($mots as $mot) {
133                                $insert[] = array('id_mot'=>$mot['id_mot'],'objet'=>'evenement','id_objet'=>$id_evenement);
134                        }
135                        sql_insertq_multi('spip_mots_liens', $insert);
136                }
137
138                // publier l'evenement
139                evenement_modifier($id_evenement, array('statut' => 'publie'));
140                $nb++;
141        }
142        return $nb;
143}
144
145function migrer_agenda_where_articles($id_rubrique, $branche = false) {
146
147        $where = array();
148        $where[] = 'statut='.sql_quote('publie');
149        if ($branche) {
150                include_spip('inc/rubriques');
151                $where[] = sql_in('id_rubrique', calcul_branche_in($id_rubrique));
152        } else {
153                $where[] = 'id_rubrique='.intval($id_rubrique);
154        }
155
156        // exclure les articles qui ont deja un evenement
157        $where[] = 'id_article NOT IN ('.sql_get_select('id_article', 'spip_evenements').')';
158
159        return $where;
160}
161
162function migrer_agenda_where_mots($groupes) {
163        $id_groupe = array();
164
165        $rows = sql_allfetsel('*', 'spip_groupes_mots', sql_in('id_groupe', $groupes));
166        foreach ($rows as $row) {
167                $id_groupe[] = $row['id_groupe'];
168                $tables_liees = explode(',', $row['tables_liees']);
169                $tables_liees = array_filter($tables_liees);
170                // ajouter les evenements a ce groupe de mot
171                if (!in_array('evenements', $tables_liees)) {
172                        include_spip('action/editer_groupe_mots');
173                        $tables_liees[] = 'evenements';
174                        $tables_liees = implode(',', $tables_liees);
175                        groupemots_modifier($row['id_groupe'], array('tables_liees' => $tables_liees));
176                }
177        }
178
179        $where = array(sql_in('id_groupe', $id_groupe));
180        return $where;
181}
Note: See TracBrowser for help on using the repository browser.