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

Last change on this file since 66215 was 66215, checked in by cedric@…, 9 years ago

Poser le flag agenda sur les rubriques que l'on migre
Page de configuration agenda : afficher le form de config du calendrier mini, et un titre pour separer l'outil de migration

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