source: spip-zone/_plugins_/agenda/trunk/agenda_pipelines.php @ 54231

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

Synchroniser le statut des evenements lies a un article sur les changements de statut de l'article

File size: 5.6 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
10/**
11 * Inserer les infos d'agenda sur les articles et rubriques
12 *
13 * @param array $flux
14 * @return array
15 */
16function agenda_affiche_milieu($flux) {
17        $e = trouver_objet_exec($flux['args']['exec']);
18        $out = "";
19        if ($e['type']=='rubrique'
20          AND $e['edition']==false
21          AND $id_rubrique = intval($flux['args']['id_rubrique'])){
22                $activer = true;
23                $res = "";
24                $actif = sql_getfetsel('agenda','spip_rubriques','id_rubrique='.intval($id_rubrique));
25                $statut="-32";
26                $alt = "";
27                $voir = "";
28                if (!sql_countsel('spip_rubriques','agenda=1'))
29                        $res .= "<span class='small'>" . _T('agenda:aucune_rubrique_mode_agenda') . "</span><br />";
30                else {
31                        include_spip('inc/rubriques');
32                        if (sql_countsel('spip_rubriques',sql_in('id_rubrique',calcul_hierarchie_in($id_rubrique))." AND agenda=1 AND id_rubrique<>".intval($id_rubrique))){
33                                $alt = _T('agenda:rubrique_dans_une_rubrique_mode_agenda');
34                                $activer = false;
35                                $statut="-ok-32";
36                                $voir = _T('agenda:voir_evenements_rubrique');
37                        }
38                        elseif(!$actif) {
39                                $alt = _T('agenda:rubrique_sans_gestion_evenement').'<br />';
40                                $statut="-non-32";
41                        }
42                        if ($actif){
43                                $alt = _T('agenda:rubrique_mode_agenda').'<br />';
44                                $statut="-ok-32";
45                                $voir = _T('agenda:voir_evenements_rubrique');
46                        }
47                }
48
49                if (!$actif){
50                        if($activer){
51                                $res .= bouton_action(_T('agenda:rubrique_activer_agenda'),generer_action_auteur('activer_agenda_rubrique',$id_rubrique,self()),'ajax');
52                        }
53                }
54                else
55                        $res .= bouton_action(_T('agenda:rubrique_desactiver_agenda'),generer_action_auteur('activer_agenda_rubrique',"-$id_rubrique",self()),'ajax');
56                if ($voir)
57                        $res .= " | <a href='".generer_url_ecrire('evenements',"id_rubrique=$id_rubrique")."'>$voir</a>";
58                if ($res)
59                        $out .= boite_ouvrir(_T('agenda:agenda').http_img_pack("agenda$statut.png",$alt,"class='statut'",$alt),'simple agenda-statut')
60                          . $res
61                          . boite_fermer();
62        }
63        elseif ($e['type']=='article'
64          AND $e['edition']==false){
65                $id_article = $flux['args']['id_article'];
66                if (autoriser('creerevenementdans','article',$id_article)) {
67                        $out .= recuperer_fond('prive/objets/contenu/article-evenements',$flux['args']);
68                }
69        }
70
71        if ($out){
72                if ($p=strpos($flux['data'],'<!--affiche_milieu-->'))
73                        $flux['data'] = substr_replace($flux['data'],$out,$p,0);
74                else
75                        $flux['data'] .= $out;
76        }
77        return $flux;
78}
79
80/**
81 * Optimiser la base (evenements a la poubelle, lies a des articles disparus, ou liens mots sur evenements disparus)
82 *
83 * @param array $flux
84 * @return array
85 */
86function agenda_optimiser_base_disparus($flux){
87
88        # passer a la poubelle
89        # les evenements lies a un article inexistant
90        $res = sql_select("DISTINCT evenements.id_article","spip_evenements AS evenements
91                        LEFT JOIN spip_articles AS articles
92                        ON evenements.id_article=articles.id_article","articles.id_article IS NULL");
93        while ($row = sql_fetch($res))
94                sql_updateq("spip_evenements",array('statut'=>'poubelle'),"id_article=".$row['id_article']);
95
96        // Evenements a la pouvelle
97        sql_delete("spip_evenements", "statut='poubelle' AND maj < ".$flux['args']['date']);
98
99        include_spip('action/editer_liens');
100        // optimiser les liens de tous les mots vers des objets effaces
101        // et depuis des mots effaces
102        $flux['data'] += objet_optimiser_liens(array('mot'=>'*'),array('evenement'=>'*'));
103
104        return $flux;
105}
106
107
108/**
109 * Lister les evenements dans le calendrier de l'espace prive (extension organiseur)
110 *
111 * @param array $flux
112 * @return array
113 */
114function agenda_quete_calendrier_prive($flux){
115        $quoi = $flux['args']['quoi'];
116        if (!$quoi OR $quoi=='evenements'){
117                $start = sql_quote($flux['args']['start']);
118                $end = sql_quote($flux['args']['end']);
119                $res = sql_select('*','spip_evenements AS E',"((E.date_fin >= $start OR E.date_debut >= $start) AND E.date_debut <= $end)");
120                while ($row = sql_fetch($res)){
121                        $flux['data'][] = array(
122                                'id' => $row['id_evenement'],
123                                'title' => $row['titre'],
124                                'allDay' => false,
125                                'start' => $row['date_debut'],
126                                'end' => $row['date_fin'],
127                                'url' => str_replace("&amp;","&",generer_url_entite($row['id_evenement'],'evenement')),
128                                'className' => "calendrier-event evenement calendrier-couleur5",
129                                'description' => $row['descriptif'],
130                        );
131                }
132        }
133        return $flux['data'];
134}
135
136/**
137 * Synchroniser le statut des evenements lorsqu'on publie/depublie un article
138 * @param array $flux
139 * @return array
140 */
141function agenda_post_edition($flux){
142        if ($flux['args']['table']=='spip_articles'
143          AND $flux['args']['action'] = 'instituer'
144          AND $id_article = $flux['args']['id_objet']
145          AND isset($flux['data']['statut'])
146          AND $statut = $flux['data']['statut']
147          AND $statut_ancien = $flux['args']['statut_ancien']
148          AND $statut!=$statut_ancien){
149
150                $set = array();
151                // les evenements principaux, associes a cet article
152                $where = array('id_article='.intval($id_article),'id_evenement_source=0');
153                switch($statut){
154                        case 'poubelle':
155                                // on passe aussi tous les evenements associes a la poubelle, sans distinction
156                                $set['statut'] = 'poubelle';
157                                break;
158                        case 'publie':
159                                // on passe aussi tous les evenements prop en publie
160                                $set['statut'] = 'publie';
161                                $where[] = "statut='prop'";
162                                break;
163                        default:
164                                if ($statut_ancien=='publie'){
165                                        // on depublie aussi tous les evenements publie
166                                        $set['statut'] = 'prop';
167                                        $where[] = "statut='publie'";
168                                }
169                                break;
170                }
171                if (count($set)){
172                        include_spip('action/editer_evenement');
173                        $res = sql_select('id_evenement','spip_evenements',$where);
174                        // et on applique a tous les evenements lies a l'article
175                        while ($row = sql_fetch($res)){
176                                evenement_modifier($row['id_evenement'],$set);
177                        }
178                }
179        }
180        return $flux;
181}
182?>
Note: See TracBrowser for help on using the repository browser.