source: spip-zone/_plugins_/simple_calendrier/branches/v2/simplecal_pipelines.php @ 109929

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

Hop, la v2 est maintenant de nouveau sur pied (muchas gracias senior b_b)

File size: 9.9 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        // On se trouve dans une rubrique
199        if ($exec == 'rubrique'){
200                $id_rubrique = $flux['args']['id_rubrique'];
201                $contexte = array(
202                        'id_rubrique' => $flux['args']['id_rubrique'],
203                        'mode' => 'avenir'
204                );
205                $nav_evenements = recuperer_fond('prive/squelettes/navigation/evenements', $contexte);
206                $flux['data'] .= $nav_evenements;
207        }
208       
209        return $flux;
210}
211
212
213// Liste des contributions d'un auteur (bloc auteur)
214function simplecal_compter_contributions_auteur($flux){
215        $id_auteur = intval($flux['args']['id_auteur']);
216        if ($cpt = sql_countsel("spip_auteurs_liens AS lien", "lien.objet='evenement' and lien.id_auteur=".intval($flux['args']['id_auteur']))){
217                $contributions = singulier_ou_pluriel($cpt,'simplecal:info_1_evenement','simplecal:info_nb_evenements');
218                $flux['data'][] = $contributions;
219        }
220        return $flux;
221}
222
223
224function simplecal_optimiser_base_disparus($flux){
225        $n = &$flux['data'];
226        $mydate = $flux['args']['date'];
227
228
229        # les evenements qui sont dans une id_rubrique inexistante
230        $res = sql_select(
231                "e.id_evenement AS id",
232                "spip_evenements AS e LEFT JOIN spip_rubriques AS r ON e.id_rubrique=r.id_rubrique",
233                "e.id_rubrique!=0 AND r.id_rubrique IS NULL AND e.maj < $mydate"
234        );
235
236        $n+= optimiser_sansref('spip_evenements', 'id_evenement', $res);
237
238        //
239        // Evenements
240        //
241
242        sql_delete("spip_evenements", "statut='poubelle' AND maj < $mydate");
243       
244       
245        # R.A.Z des type/id_objet inexistants
246        # -------------------------------------
247        $r = sql_select("DISTINCT type", "spip_evenements as e", "e.type is not null and e.type!=''");
248        while ($t = sql_fetch($r)){
249                $type = $t['type'];
250                $spip_table_objet = table_objet_sql($type);
251                $id_table_objet = id_table_objet($type);
252               
253                $res = sql_select(
254                        "e.id_evenement AS id, e.id_objet",
255                        "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),
256                        "o.$id_table_objet IS NULL"
257                );
258               
259                // sur une cle primaire composee, pas d'autres solutions que de traiter un a un
260                while ($row = sql_fetch($sel)){
261                        $data = array();
262                        $data['type'] = "";
263                        $data['objet'] = null;
264                        sql_updateq('spip_evenements', $data, "id_evenement=".$row['id']);
265                        spip_log("- Reference '".$type."".$row['id_objet']."' retirée dans la table spip_evenements (id=".$row['id'].")", "simplecal");
266                }
267        }
268       
269        # -------------------------------------------------------------------------
270        # Nettoyage des liens vers des evenements inexistants
271        # -------------------------------------------------------------------------
272        # spip_auteurs_liens   : Traite par SPIP (ecrire/genie/optimiser.php)
273        # spip_mots_liens      : Traite par l'extension 'mots'
274        # spip_documents_liens : Traite par l'extension 'media'
275        # spip_forums          : Traite par l'extension 'forums'
276        # -------------------------------------------------------------------------
277       
278        return $flux;
279}
280
281// pipeline : compatibilité plugin corbeille.
282function simplecal_corbeille_table_infos($param){
283    $param["evenements"] = array(
284        "statut" => "poubelle",
285        "tableliee"=> array("spip_auteurs_liens","spip_documents_liens","spip_mots_liens","spip_forum","spip_versions","spip_versions_fragments"),
286    );
287    return $param;
288}
289
290// pipeline : chargement de lib jquery-ui
291function simplecal_jqueryui_plugins($scripts){
292        $ph = $GLOBALS["meta"]["plugin_header"];
293        if (strpos($ph, "spip(3.0") !== false) {
294                $scripts[] = "jquery.ui.datepicker";
295        } else {
296                $scripts[] = "datepicker";
297        }
298   
299        return $scripts;
300} 
301
302?>
Note: See TracBrowser for help on using the repository browser.