source: spip-zone/_plugins_/simple_calendrier/trunk/simplecal_pipelines.php @ 101802

Last change on this file since 101802 was 101802, checked in by peetdu@…, 4 years ago

Eviter une notice PHP

File size: 9.5 KB
Line 
1<?php
2/**
3 * Plugin Simple Calendrier v2 pour SPIP 3
4 * Licence GNU/GPL
5 * 2010-2016
6 *
7 * cf. paquet.xml pour plus d'infos.
8 */
9
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12
13include_spip('inc/simplecal_utils');
14
15// Pipeline. Entete des pages de l'espace prive
16function simplecal_header_prive($flux){
17        $flux .= '<link rel="stylesheet" type="text/css" href="'._DIR_SIMPLECAL_PRIVE.'simplecal_style_prive.css" />';
18        return $flux;
19}
20
21// Pipeline. Entete des pages de l'espace public
22function simplecal_insert_head_css($flux) {
23        // Themes base sur : http://jqueryui.com/themeroller/
24        $theme_public = $GLOBALS['meta']['simplecal_themepublic'];
25        $flux .= "\n".'<link rel="stylesheet" type="text/css" href="'._DIR_PLUGIN_SIMPLECAL.'css/datepicker/'.$theme_public.'.css" />';
26        return $flux;
27}
28
29// Evenements en statut 'publie' de la page d'accueil
30function simplecal_accueil_informations($texte) {
31        $texte .= recuperer_fond('prive/squelettes/inclure/simplecal-accueil-informations', array());
32        return $texte;
33}
34
35// Evenements en statut 'prop' de la page d'accueil
36function simplecal_accueil_encours($flux) {
37        $flux .= recuperer_fond('prive/squelettes/inclure/simplecal-accueil-prop', array());
38        return $flux;
39}
40
41// Evenements de l'auteur
42function simplecal_affiche_auteurs_interventions($flux){
43        $id_auteur = intval($flux['args']['id_auteur']);
44        $flux['data'] .= recuperer_fond('prive/squelettes/inclure/simplecal-auteur-interventions', array('id_auteur'=>$id_auteur));
45        return $flux;
46}
47
48// Evenements en statut 'prop' de la rubrique
49function simplecal_rubrique_encours($flux) {
50        if ($flux['args']['type'] == 'rubrique') {
51                $id_rubrique = $flux['args']['id_objet'];
52                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/simplecal-rubrique-prop', array('id_rubrique'=>$id_rubrique));
53        }
54        return $flux;
55}
56
57/**
58 * Compter les enfants d'une rubrique
59 *
60 * @pipeline objets_compte_enfants
61 * @param  array $flux Données du pipeline
62 * @return array       Données du pipeline
63**/
64function simplecal_objet_compte_enfants($flux) {
65        if ($flux['args']['objet']=='rubrique' AND $id_rubrique=intval($flux['args']['id_objet'])) {
66                // juste les publiés ?
67                if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
68                        $flux['data']['evenement'] = sql_countsel('spip_evenements', "id_rubrique = ".intval($id_rubrique)." AND (statut = 'publie')");
69                } else {
70                        $flux['data']['evenement'] = sql_countsel('spip_evenements', "id_rubrique = ".intval($id_rubrique)." AND (statut <> 'poubelle')");
71                } 
72        }
73        return $flux;
74}
75
76// Evenements en statut 'publie' et 'redac' de la rubrique
77function simplecal_affiche_enfants($flux) {
78        if ($e = trouver_objet_exec($flux['args']['exec']) AND $e['type'] == 'rubrique' AND $e['edition'] == false) {
79                $id_rubrique = $flux['args']['id_rubrique'];
80                $affiche = false;
81               
82                $config_rubrique = $GLOBALS['meta']['simplecal_rubrique'];
83                // affichage si config = 'partout' ou 'secteur'
84                if ($config_rubrique != 'non'){
85                        $affiche = true;
86                        // si config = 'secteur', on verifie que la rubrique est un secteur
87                        if ($config_rubrique == 'secteur'){
88                                $row_tmp = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique");
89                                $id_parent = intval($row_tmp['id_parent']);
90                                if ($id_parent == 0){
91                                        $affiche = true; // car secteur
92                                } else {
93                                        $affiche = false; // car pas un secteur
94                                }               
95                        }
96                }
97               
98                // S'il y a des évènements dans une rubrique, tjr les afficher.
99                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/simplecal-rubrique-enfants', array('id_rubrique'=>$id_rubrique));
100               
101                // Bouton de création seulement si la config l'autorise.
102                if ($affiche) {
103                        $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique='.$id_rubrique);
104                        if (autoriser('creerevenementdans', 'rubrique', $id_rubrique, NULL, array('id_parent'=>$id_parent))) {
105                                $bouton_evenements = icone_verticale(_T('simplecal:icone_nouvel_evenement'), generer_url_ecrire("evenement_edit","id_rubrique=$id_rubrique&new=oui"), "evenement-24.png","new", 'right');
106                                $bouton_evenements .= "<br class='nettoyeur' />";
107                                $flux['data'] .= $bouton_evenements;
108                        }
109                }
110        }
111        return $flux;
112}
113
114
115
116// Zone de contenu
117function simplecal_affiche_milieu($flux) {
118        $exec =  $flux['args']['exec'];
119       
120        // Page de configuration
121        if ($exec == "configurer_contenu") {
122                $flux["data"] .=  recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_evenements'));
123        }
124       
125        return $flux;
126}
127
128
129
130// Nombre d'evenements de l'auteur / de la rubrique
131function simplecal_boite_infos($flux){
132        $type = $flux['args']['type'];
133
134        if (in_array($type, array('auteur', 'rubrique'))) {
135                $id = intval($flux['args']['id']);
136       
137                if ($type == 'auteur') {
138                        $n_evt = sql_countsel('spip_auteurs_liens', "id_auteur=$id AND objet='evenement'");
139                } 
140                if ($type == 'rubrique') {
141                        $n_evt = sql_countsel('spip_evenements', "statut='publie' AND id_rubrique=$id");
142                }
143               
144                if (($pos = strpos($flux['data'],'<!--nb_elements-->'))!==FALSE) {
145                        if ($n_evt > 0){
146                                $aff = '<div>'.singulier_ou_pluriel($n_evt, 'simplecal:info_1_evenement', 'simplecal:info_nb_evenements').'</div>';
147                                $flux['data'] = substr($flux['data'],0,$pos).$aff.substr($flux['data'],$pos);
148                        }
149                }
150        }
151       
152        return $flux;
153}
154
155
156function simplecal_configurer_liste_metas($metas) {
157        $metas['simplecal_autorisation_redac'] = 'non'; // [oui, non]
158        $metas['simplecal_horaire'] = 'non'; // [non, secteur, partout]
159        $metas['simplecal_rubrique'] = 'non'; // [non, secteur, partout]
160        $metas['simplecal_refobj'] = 'non';   // [oui, non]
161        $metas['simplecal_descriptif'] = 'oui';   // [oui, non]
162        $metas['simplecal_texte'] = 'oui';  // [oui, non]
163        $metas['simplecal_lieu'] = 'oui';   // [oui, non]
164        $metas['simplecal_lien'] = 'non';   // [oui, non]
165        $metas['simplecal_themepublic'] = 'base';
166        return $metas;
167}
168
169function simplecal_affiche_gauche($flux) {
170        $exec =  $flux['args']['exec'];
171       
172        // On se trouve sur un article
173        if ($exec == 'article') {
174                if ($GLOBALS['meta']['simplecal_refobj'] == 'oui'){
175                        $id_article = intval($flux['args']['id_article']);
176                        $contexte = array(
177                                'type' => 'article',
178                                'id_objet'=>$id_article
179                        );
180                        $portlet = recuperer_fond('prive/squelettes/inclure/portlet_refobj', $contexte);
181                        $flux['data'] .= $portlet;
182                }
183        }
184       
185        // On se trouve sur une breve
186        if ($exec == 'breve'){ 
187                if ($GLOBALS['meta']['simplecal_refobj'] == 'oui'){
188                        $id_breve = intval($flux['args']['id_breve']);
189                        $contexte = array(
190                                'type' => 'breve',
191                                'id_objet'=>$id_breve
192                        );
193                        $portlet = recuperer_fond('prive/squelettes/inclure/portlet_refobj', $contexte);
194                        $flux['data'] .= $portlet;
195                }
196        }
197       
198        return $flux;
199}
200
201
202// Liste des contributions d'un auteur (bloc auteur)
203function simplecal_compter_contributions_auteur($flux){
204        $id_auteur = intval($flux['args']['id_auteur']);
205        if ($cpt = sql_countsel("spip_auteurs_liens AS lien", "lien.objet='evenement' and lien.id_auteur=".intval($flux['args']['id_auteur']))){
206                $contributions = singulier_ou_pluriel($cpt,'simplecal:info_1_evenement','simplecal:info_nb_evenements');
207                $flux['data'][] = $contributions;
208        }
209        return $flux;
210}
211
212
213function simplecal_optimiser_base_disparus($flux){
214        $n = &$flux['data'];
215        $mydate = $flux['args']['date'];
216
217
218        # les evenements qui sont dans une id_rubrique inexistante
219        $res = sql_select(
220                "e.id_evenement AS id",
221                "spip_evenements AS e LEFT JOIN spip_rubriques AS r ON e.id_rubrique=r.id_rubrique",
222                "e.id_rubrique!=0 AND r.id_rubrique IS NULL AND e.maj < $mydate"
223        );
224
225        $n+= optimiser_sansref('spip_evenements', 'id_evenement', $res);
226
227        //
228        // Evenements
229        //
230
231        sql_delete("spip_evenements", "statut='poubelle' AND maj < $mydate");
232       
233       
234        # R.A.Z des type/id_objet inexistants
235        # -------------------------------------
236        $r = sql_select("DISTINCT type", "spip_evenements as e", "e.type is not null and e.type!=''");
237        while ($t = sql_fetch($r)){
238                $type = $t['type'];
239                $spip_table_objet = table_objet_sql($type);
240                $id_table_objet = id_table_objet($type);
241               
242                $res = sql_select(
243                        "e.id_evenement AS id, e.id_objet",
244                        "spip_evenements AS e LEFT JOIN $spip_table_objet AS o ON o.$id_table_objet=e.id_objet AND e.type=".sql_quote($type),
245                        "o.$id_table_objet IS NULL"
246                );
247               
248                // sur une cle primaire composee, pas d'autres solutions que de traiter un a un
249                while ($row = sql_fetch($sel)){
250                        $data = array();
251                        $data['type'] = "";
252                        $data['objet'] = null;
253                        sql_updateq('spip_evenements', $data, "id_evenement=".$row['id']);
254                        spip_log("- Reference '".$type."".$row['id_objet']."' retirée dans la table spip_evenements (id=".$row['id'].")", "simplecal");
255                }
256        }
257       
258        # -------------------------------------------------------------------------
259        # Nettoyage des liens vers des evenements inexistants
260        # -------------------------------------------------------------------------
261        # spip_auteurs_liens   : Traite par SPIP (ecrire/genie/optimiser.php)
262        # spip_mots_liens      : Traite par l'extension 'mots'
263        # spip_documents_liens : Traite par l'extension 'media'
264        # spip_forums          : Traite par l'extension 'forums'
265        # -------------------------------------------------------------------------
266       
267        return $flux;
268}
269
270// pipeline : compatibilité plugin corbeille.
271function simplecal_corbeille_table_infos($param){
272    $param["evenements"] = array(
273        "statut" => "poubelle",
274        "tableliee"=> array("spip_auteurs_liens","spip_documents_liens","spip_mots_liens","spip_forum","spip_versions","spip_versions_fragments"),
275    );
276    return $param;
277}
278
279// pipeline : chargement de lib jquery-ui
280function simplecal_jqueryui_plugins($scripts){
281        $ph = $GLOBALS["meta"]["plugin_header"];
282        if (strpos($ph, "spip(3.0") !== false) {
283                $scripts[] = "jquery.ui.datepicker";
284        } else {
285                $scripts[] = "datepicker";
286        }
287   
288        return $scripts;
289} 
290
291?>
Note: See TracBrowser for help on using the repository browser.