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

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

optimisation de la base via le pipeline optimiser_base_disparu

File size: 6.0 KB
Line 
1<?php
2
3
4function agenda_affiche_milieu($flux) {
5        $e = trouver_objet_exec($flux['args']['exec']);
6        $out = "";
7        if ($e['type']=='rubrique'
8          AND $e['edition']==false
9          AND $id_rubrique = intval($flux['args']['id_rubrique'])){
10                $activer = true;
11                $res = "";
12                $actif = sql_getfetsel('agenda','spip_rubriques','id_rubrique='.intval($id_rubrique));
13                $statut="-32";
14                $alt = "";
15                $voir = "";
16                if (!sql_countsel('spip_rubriques','agenda=1'))
17                        $res .= "<span class='small'>" . _T('agenda:aucune_rubrique_mode_agenda') . "</span><br />";
18                else {
19                        include_spip('inc/agenda_gestion');
20                        if (sql_countsel('spip_rubriques',sql_in('id_rubrique',calcul_hierarchie_in($id_rubrique))." AND agenda=1 AND id_rubrique<>".intval($id_rubrique))){
21                                $alt = _T('agenda:rubrique_dans_une_rubrique_mode_agenda');
22                                $activer = false;
23                                $statut="-ok-32";
24                                $voir = _T('agenda:voir_evenements_rubrique');
25                        }
26                        elseif(!$actif) {
27                                $alt = _T('agenda:rubrique_sans_gestion_evenement').'<br />';
28                                $statut="-non-32";
29                        }
30                        if ($actif){
31                                $alt = _T('agenda:rubrique_mode_agenda').'<br />';
32                                $statut="-ok-32";
33                                $voir = _T('agenda:voir_evenements_rubrique');
34                        }
35                }
36
37                if (!$actif){
38                        if($activer){
39                                $res .= bouton_action(_T('agenda:rubrique_activer_agenda'),generer_action_auteur('rubrique_activer_agenda',$id_rubrique,self()),'ajax');
40                        }
41                }
42                else
43                        $res .= bouton_action(_T('agenda:rubrique_desactiver_agenda'),generer_action_auteur('rubrique_activer_agenda',"-$id_rubrique",self()),'ajax');
44                if ($voir)
45                        $res .= " | <a href='".generer_url_ecrire('evenements',"id_rubrique=$id_rubrique")."'>$voir</a>";
46                if ($res)
47                        $out .= boite_ouvrir(_T('agenda:agenda').http_img_pack("agenda$statut.png",$alt,"class='statut'",$alt),'simple agenda-statut')
48                          . $res
49                          . boite_fermer();
50        }
51        elseif ($e['type']=='article'
52          AND $e['edition']==false){
53                $id_article = $flux['args']['id_article'];
54                $afficher = autoriser('creerevenementdans','article',$id_article);
55                if ($afficher) {
56                        $contexte = array();
57                        foreach($_GET as $key=>$val)
58                                $contexte[$key] = $val;
59                         $evenements = recuperer_fond('prive/objets/contenu/article-evenements',$contexte);
60                         $out .= $evenements;
61                }
62        }
63        elseif ($e['type']=='mot'
64          AND $e['edition']==false
65          AND $id_mot = intval($flux['args']['id_mot'])){
66                foreach($_GET as $key=>$val)
67                        $contexte[$key] = $val;
68         $evenements = recuperer_fond('prive/contenu/agenda_evenements',$contexte);
69         $out .= $evenements;
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
108function agenda_editer_contenu_objet($flux){
109        if ($flux['args']['type']=='groupe_mot'){
110                // ajouter l'input sur les evenements
111                $checked = in_array('evenements',$flux['args']['contexte']['tables_liees']);
112                $checked = $checked?" checked='checked'":'';
113                $input = "<div class='choix'><input type='checkbox' class='checkbox' name='tables_liees&#91;&#93;' value='evenements'$checked id='evenements' /><label for='evenements'>"._T('agenda:item_mots_cles_association_evenements')."</label></div>";
114                $flux['data'] = str_replace('<!--choix_tables-->',"$input\n<!--choix_tables-->",$flux['data']);
115        }
116        return $flux;
117}
118
119function agenda_libelle_association_mots($libelles){
120        $libelles['evenements'] = 'agenda:info_evenements';
121        return $libelles;
122}
123
124
125function agenda_objets_extensibles($objets){
126                return array_merge($objets, array('evenement' => _T('agenda:evenements')));
127}
128
129function agenda_afficher_nombre_objets_associes_a($flux){
130        if ($flux['args']['objet']=='mot'
131          AND $id_mot=$flux['args']['id_objet']){
132                $aff_articles = sql_in('A.statut',  ($GLOBALS['connect_statut'] =="0minirezo")  ? array('prepa','prop','publie') : array('prop','publie'));
133                $nb = sql_countsel("spip_mots_liens AS L LEFT JOIN spip_evenements AS E ON E.id_evenement=L.id_objet AND L.objet='evenement' LEFT JOIN spip_articles AS A ON E.id_article=A.id_article", "L.id_mot=".intval($id_mot)." AND $aff_articles");
134                if ($nb)
135                        $flux['data'][] = singulier_ou_pluriel($nb, "agenda:info_un_evenement", "agenda:info_nombre_evenements");
136        }
137        return $flux;
138}
139
140/**
141 * Declarer evenement comme un objet interpretable dans les url
142 * ?evenement12
143 *
144 * @param array $objets
145 * @return array
146 */
147function agenda_declarer_url_objets($objets){
148        $objets[] = 'evenement';
149        return $objets;
150}
151
152function agenda_quete_calendrier_prive($flux){
153        $quoi = $flux['args']['quoi'];
154        if (!$quoi OR $quoi=='evenements'){
155                $start = sql_quote($flux['args']['start']);
156                $end = sql_quote($flux['args']['end']);
157                $res = sql_select('*','spip_evenements AS E',"((E.date_fin >= $start OR E.date_debut >= $start) AND E.date_debut <= $end)");
158                while ($row = sql_fetch($res)){
159                        $flux['data'][] = array(
160                                'id' => $row['id_evenement'],
161                                'title' => $row['titre'],
162                                'allDay' => false,
163                                'start' => $row['date_debut'],
164                                'end' => $row['date_fin'],
165                                'url' => str_replace("&amp;","&",generer_url_entite($row['id_evenement'],'evenement')),
166                                'className' => "calendrier-event evenement calendrier-couleur5",
167                                'description' => $row['descriptif'],
168                        );
169                }
170        }
171        return $flux['data'];
172}
173?>
Note: See TracBrowser for help on using the repository browser.