source: spip-zone/_plugins_/reservation_evenement/trunk/reservation_evenement_pipelines.php @ 112721

Last change on this file since 112721 was 112721, checked in by abelass@…, 2 years ago

adapter regex pour effectivement cacher le block de l'agenda

File size: 11.7 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Réservation Evénements
4 *
5 * @plugin     Réservation événements
6 * @copyright  2013 - 2018
7 * @author     Rainer Müller
8 * @licence    GNU/GPL
9 * @package    SPIP\Reservation_evenement\Pipelines
10 */
11if (!defined('_ECRIRE_INC_VERSION'))
12        return;
13
14// Afficher les box infos et téléchargement des réservations
15function reservation_evenement_affiche_gauche($flux) {
16        include_spip('inc/reservation_evenements');
17        $exec = $flux['args']['exec'];
18        $objets_affichage = array(
19                'rubrique',
20                'article',
21                'evenement'
22        );
23
24        if (in_array($exec, $objets_affichage)) {
25                include_spip('inc/presentation');
26                include_spip('inc/config');
27                include_spip('formulaires/selecteur/generique_fonctions');
28                include_spip('inc/reservation_evenements');
29
30                $config = lire_config('reservation_evenement/rubrique_reservation');
31                $contexte = array();
32                $contexte['id_article'] = intval($flux['args']['id_article']) ? $flux['args']['id_article'] : '';
33                $contexte['id_rubrique'] = intval($flux['args']['id_rubrique']) ? $flux['args']['id_rubrique'] : '';
34                $contexte['id_evenement'] = intval($flux['args']['id_evenement']) ? $flux['args']['id_evenement'] : '';
35                $id = $contexte['id_' . $exec];
36                $rubrique_reservation = picker_selected($config, 'rubrique');
37                $zone = rubrique_reservation($id, $exec, $rubrique_reservation);
38
39                // Si l'objet se trouve dans la zone Reservation Evénement, on affiche
40                if ($zone) {
41                        $flux['data'] .= recuperer_fond('inclure/reservations', $contexte);
42                }
43        }
44
45        $definition_objets_navigation = re_objets_navigation();
46        $objets_navigation = array_column($definition_objets_navigation, 'objets');
47
48        $objets_navigation = array_reduce($objets_navigation, function ($a, $b) {
49                return array_merge($a, (array) $b);
50        }, []);
51
52        if (in_array($exec, $objets_navigation)) {
53                include_spip('inc/config');
54                $config = lire_config('reservation_evenement');
55                $selection_objets_navigation = isset($config['selection_objets_navigation']) ? $config['selection_objets_navigation'] : '';
56                $objets_navigation = isset($config['objets_navigation']) ? $config['objets_navigation'] : array();
57                if (!$selection_objets_navigation or ($selection_objets_navigation and in_array($exec, $objets_navigation))) {
58                        $soustitre = isset($definition_objets_navigation[$exec]) ? $definition_objets_navigation[$exec]['label'] : (isset($definition_objets_navigation[$exec . 's']) ? $definition_objets_navigation[$exec . 's']['label'] : '');
59
60                        $contexte = $flux['args'];
61                        if ($soustitre) {
62                                $contexte['soustitre'] = $soustitre;
63                        }
64                        $flux['data'] .= recuperer_fond('prive/squelettes/navigation/reservations', $contexte);
65                }
66        }
67
68        return $flux;
69}
70
71/**
72 * Ajout de liste sur la vue d'un auteur
73 *
74 * @pipeline affiche_auteurs_interventions
75 *
76 * @param array $flux
77 *              Données du pipeline
78 * @return array Données du pipeline
79 */
80function reservation_evenement_affiche_auteurs_interventions($flux) {
81        if ($id_auteur = intval($flux['args']['id_auteur'])) {
82                $flux['data'] .= '<br class="nettoyeur"/>' . recuperer_fond('prive/objets/liste/reservations', array(
83                        'id_auteur' => $id_auteur,
84                        'titre' => _T('reservation:info_reservations_auteur')
85                ), array(
86                        'ajax' => true
87                ));
88        }
89        return $flux;
90}
91function reservation_evenement_affiche_milieu($flux) {
92        $e = trouver_objet_exec($flux['args']['exec']);
93        // reservations sur les événements
94        if (!$e['edition'] and in_array($e['type'], array(
95                'evenement'
96        ))) {
97                $contexte = calculer_contexte();
98                $contexte['id_evenement'] = _request('id_evenement');
99                $contexte['par'] = 'id_evenement';
100                $texte .= recuperer_fond('prive/objets/liste/reservations_details', $contexte, array(
101                        'ajax' => 'oui'
102                ));
103                $flux['data'] .= $texte;
104        }
105        return $flux;
106}
107
108// Définitions des notifications pour https://github.com/abelass/notifications_archive
109function reservation_evenement_notifications_archive($flux) {
110        $flux = array_merge($flux, array(
111                'reservation_client' => array(
112                        'activer' => 'on',
113                        'duree' => '180'
114                ),
115                'reservation_vendeur' => array(
116                        'duree' => '180'
117                )
118        ));
119        return $flux;
120}
121
122/*
123 * Déclencher le cron si prévu dans la configuration
124 */
125function reservation_evenement_taches_generales_cron($taches) {
126        include_spip('inc/config');
127        $config = lire_config('reservation_evenement', array());
128        if (isset($config['cron'])) {
129                // La périodicité
130                if (isset($config['periodicite_cron']) and $config['periodicite_cron'] >= 600)
131                        $periodicite = $config['periodicite_cron'];
132                else
133                        $periodicite = 24 * 3600;
134
135                $taches['reservation_evenement_cloture'] = $periodicite;
136        }
137        return $taches;
138}
139function reservation_evenement_formulaire_charger($flux) {
140        $form = $flux['args']['form'];
141        $forms = array(
142                'editer_article',
143                'editer_evenement'
144        );
145        $contexte = $flux['data'];
146
147        // Charger les valeurs par défaut
148        if (in_array($form, $forms)) {
149                $action_cloture = $contexte['action_cloture'];
150                $id_evenement = isset($contexte['id_evenement']) ? $contexte['id_evenement'] : '0';
151                if ($form == $forms[1] and (!$action_cloture or $action_cloture == 0) and $form == 'editer_evenement' and intval($contexte['id_parent'])) {
152                        $action_cloture = sql_getfetsel('action_cloture', 'spip_articles', 'id_article=' . $contexte['id_parent']);
153                }
154                if ($action_cloture)
155                        $flux['data']['action_cloture'] = $action_cloture;
156        }
157        return $flux;
158}
159function reservation_evenement_formulaire_traiter($flux) {
160        $form = $flux['args']['form'];
161        $forms = array(
162                'editer_article',
163                'editer_evenement'
164        );
165        if (in_array($form, $forms)) {
166                list($edit, $objet) = explode('_', $form);
167                sql_updateq('spip_' . $objet . 's', array(
168                        'action_cloture' => _request('action_cloture')
169                ), 'id_' . $objet . '=' . $flux['data']['id_' . $objet]);
170        }
171        return $flux;
172}
173
174/**
175 * Permet de compléter ou modifier le résultat de la compilation d’un squelette donné.
176 *
177 * @pipeline recuperer_fond
178 *
179 * @param array $flux
180 *              Données du pipeline
181 * @return array Données du pipeline
182 */
183function reservation_evenement_recuperer_fond($flux) {
184        $fond = $flux['args']['fond'];
185
186        $contexte = $flux['data']['contexte'];
187        $fonds = array(
188                'formulaires/editer_article' => 'article',
189                'formulaires/editer_evenement' => 'evenement'
190        );
191        // Ajouter le champ action_cloture
192        if (isset($fonds[$fond])) {
193
194                include_spip('inc/config');
195                include_spip('formulaires/selecteur/generique_fonctions');
196                include_spip('inc/reservation_evenements');
197                $config = lire_config('reservation_evenement', array());
198
199                $type = $fonds[$fond];
200                $rubrique_reservation = isset($config['rubrique_reservation']) ? picker_selected($config['rubrique_reservation'], 'rubrique') : '';
201                $id = _request('id_' . $type);
202                $zone = rubrique_reservation($id, $type, $rubrique_reservation);
203                $cron = isset($config['cron']) ? $config['cron'] : '';
204
205                // Si cron activé et l'objet se trouve dans la zone Reservation Evénement, on affiche
206                if ($cron and $zone) {
207                        $action_cloture = '<ul>' . recuperer_fond('formulaires/inc-action_cloture', $contexte) . '</ul>';
208                        $flux['data']['texte'] = str_replace('<!--extra-->', $action_cloture . '<!--extra-->', $flux['data']['texte']);
209                }
210        }
211
212        // Enlever le lien vers résultats de agenda.
213        if ($fond == 'prive/objets/contenu/evenement') {
214                include_spip('inc/config');
215                $afficher_inscription_agenda = lire_config('reservation_evenement/afficher_inscription_agenda', '');
216
217                if (!$afficher_inscription_agenda) {
218                        $flux['data']['texte'] = preg_replace('/(\<div\ class="champ contenu_places"\>)(.+)(<\/div>)/si', '', $flux['data']['texte']);
219                }
220        }
221        return $flux;
222}
223
224// ajouter le champ action_cloture
225function reservation_evenement_afficher_contenu_objet($flux) {
226        $type = $flux['args']['type'];
227        $types = array(
228                'article',
229                'evenement'
230        );
231
232        if (in_array($type, $types)) {
233                include_spip('inc/config');
234                include_spip('formulaires/selecteur/generique_fonctions');
235                include_spip('inc/reservation_evenements');
236
237                $config = lire_config('reservation_evenement', array());
238                $rubrique_reservation = isset($config['rubrique_reservation']) ? picker_selected($config['rubrique_reservation'], 'rubrique') : '';
239                $id = _request('id_' . $type);
240                $zone = rubrique_reservation($id, $type, $rubrique_reservation);
241                $cron = isset($config['cron']) ? $config['cron'] : '';
242
243                // Si cron activé et l'objet se trouve dans la zone Reservation Evénement, on affiche
244                if ($cron and $zone) {
245                        $etats = array(
246                                1 => _T('item:oui'),
247                                2 => _T('item:non'),
248                                3 => _T('reservation:evenement_cloture')
249                        );
250                        $action_cloture = sql_getfetsel('action_cloture', 'spip_' . $type . 's', 'id_' . $type . '=' . $type = $flux['args']['id_objet']);
251                        if ($action_cloture != 0)
252                                $contexte['cloture_etat'] = $etats[$action_cloture];
253                        $action_cloture = recuperer_fond('prive/objets/contenu/inc-action_cloture', $contexte);
254                        $flux['data'] .= "\n" . $action_cloture;
255                }
256        }
257        return $flux;
258}
259
260/**
261 * Optimiser la base de donnée en supprimant toutes les reservations en cours qui sont trop vieilles
262 *
263 * Le délai de "péremption" est défini dans les options de configuration du plugin
264 *
265 * @pipeline optimiser_base_disparus
266 *
267 * @param array $flux
268 *              Données du pipeline
269 * @return array Données du pipeline
270 */
271function reservation_evenement_optimiser_base_disparus($flux) {
272        include_spip('inc/config');
273        // les config
274        $config_reservation = lire_config('reservation_evenement');
275
276        // Les réservations en statut par défaut.
277        $heures = isset($config_reservation['duree_vie']) ? $config_reservation['duree_vie'] : 0;
278
279        if ($heures > 0) {
280                $statut_defaut = isset($config_reservation['statut_defaut']) ? $config_reservation['statut_defaut'] : 'encours';
281                $depuis = date('Y-m-d H:i:s', time() - 3600 * intval($heures));
282
283                // On récupère les réservations trop vieilles
284                $reservations = sql_allfetsel('id_reservation', 'spip_reservations', 'statut = ' . sql_quote($statut_defaut) . ' and date<' . sql_quote($depuis));
285
286                // S'il y a bien des réservations à supprimer
287                if ($reservations) {
288                        $reservations = array_map('reset', $reservations);
289                        include_spip('inc/reservation_evenements');
290                        reservations_supprimer($reservations);
291                        $flux['data'] += count($reservations);
292                }
293        }
294
295        // Les réservations en statut "poubelles".
296        $heures = isset($config_reservation['duree_vie_poubelle']) ? $config_reservation['duree_vie_poubelle'] : 0;
297
298        if ($heures > 0) {
299                $depuis = date('Y-m-d H:i:s', time() - 3600 * intval($heures));
300
301                // On récupère les réservations trop vieilles
302                $reservations = sql_allfetsel('id_reservation', 'spip_reservations', 'statut = ' . sql_quote('poubelle') . ' and maj<' . sql_quote($depuis));
303
304                // S'il y a bien des réservations à supprimer
305                if ($reservations) {
306                        $reservations = array_map('reset', $reservations);
307                        include_spip('inc/reservation_evenements');
308                        reservations_supprimer($reservations);
309                        $flux['data'] += count($reservations);
310                }
311        }
312
313        return $flux;
314}
315
316/**
317 * Pipeline de la corbeille, permet de définir les objets à supprimer
318 *
319 * @param array $param
320 *              Tableau d'objets
321 *
322 * @return array Tableau d'objets complété
323 */
324function reservation_evenement_corbeille_table_infos($param) {
325        $param['reservations'] = array(
326                'statut' => 'poubelle',
327                'table' => 'reservations',
328                'tableliee' => array(
329                        'spip_reservations_details'
330                )
331        );
332
333        return $param;
334}
335/**
336 * Ajoute des valeurs pour les mssages personnalisés
337 *
338 * @param array $flux
339 * @return array
340 */
341function reservation_evenement_mp_data_objet($flux) {
342        $type = $flux['args']['type'];
343
344        // Ajouter les champs extras, stockes dans la table reservation.
345        if ($type == 'fond_reservation_body' && isset($flux['data']['reservation_donnees_auteur']) &&
346                        $reservation_donnees_auteur = unserialize($flux['data']['reservation_donnees_auteur']) and
347                        is_array($reservation_donnees_auteur)) {
348                foreach ($reservation_donnees_auteur as $champ => $valeur) {
349                        $flux['data']['reservation_' . $champ] = $valeur;
350                }
351        }
352        return $flux;
353}
Note: See TracBrowser for help on using the repository browser.