source: spip-zone/_plugins_/reservation_evenement/branches/v1/promotions/multiples_evenements.php @ 99061

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

formatage

File size: 6.5 KB
Line 
1<?php
2if (! defined("_ECRIRE_INC_VERSION"))
3        return;
4       
5        // Définition des champs pour le détail du formulaire promotion du plugin promotions (https://github.com/abelass/promotions)
6function promotions_multiples_evenements_dist($flux = array()) {
7        $date = date('Y-m-d H:i:s');
8        $objet_promotion = _request('objet_promotion') ? _request('objet_promotion') : (isset($flux['valeurs_promotion']['objet_promotion']) ? $flux['valeurs_promotion']['objet_promotion'] : '');
9        $objets = array ();
10       
11        // Déterminer les objets à assembler
12        if ($objet_promotion == 'evenement') {
13                $sql = sql_select('id_evenement,titre, date_debut,date_fin', 'spip_evenements', 'statut!="poubelle" AND inscription=1 AND id_evenement_source=0 AND date_fin>' . sql_quote($date), '', 'date_debut');
14               
15                while ( $data = sql_fetch($sql) ) {
16                        $date_fin = sql_getfetsel('date_fin', 'spip_evenements', 'id_evenement_source=' . $data['id_evenement'], '', 'date_fin DESC');
17                        $date_debut = $data['date_debut'];
18                       
19                        if (! $date_fin and (affdate($date_debut, 'd-m-Y') < affdate($data['date_fin'], 'd-m-Y')))
20                                $date_fin = '/' . affdate($data['date_fin'], 'd-m-Y');
21                        elseif ($date_debut < $date_fin)
22                                $date_fin = '-' . affdate($date_fin, 'd-m-Y');
23                        $objets[$data['id_evenement']] = $data['titre'] . ' - ' . affdate($date_debut, 'd-m-Y') . $date_fin;
24                }
25        }
26        elseif ($objet_promotion == 'article') {
27                $sql = sql_select('spip_evenements.id_article,spip_articles.titre', 'spip_evenements LEFT JOIN spip_articles ON spip_evenements.id_article=spip_articles.id_article', 'spip_evenements.statut!="poubelle" AND spip_evenements.id_evenement_source=0', '', 'date_debut');
28               
29                while ( $data = sql_fetch($sql) ) {
30                       
31                        $objets[$data['id_article']] = $data['titre'];
32                }
33        }
34       
35        $return = array (
36                'nom' => _T('reservation:nom_reservation_multiples_evenements'),
37                'saisies' => array (
38                        array (
39                                'saisie' => 'radio',
40                                'options' => array (
41                                        'nom' => 'type_selection',
42                                        'datas' => array (
43                                                'simple' => _T('reservation:simple'),
44                                                'choix_precis' => _T('reservation:choix_precis') 
45                                        ),
46                                        'label' => _T('reservation:label_type_selection'),
47                                        'obligatoire' => 'oui' 
48                                ) 
49                        ),
50                        array (
51                                'saisie' => 'input',
52                                'options' => array (
53                                        'nom' => 'nombre_evenements',
54                                        'label' => _T('reservation:label_nombre_evenements'),
55                                        'explication' => _T('reservation:explication_nombre_evenements'),
56                                        'defaut' => '2',
57                                        'obligatoire' => 'oui',
58                                        'afficher_si' => '@type_selection@=="simple"' 
59                                ) 
60                        ),
61                        array (
62                                'saisie' => 'selection',
63                                'options' => array (
64                                        'nom' => 'objet_promotion',
65                                        'datas' => array (
66                                                'article' => _T('public:article'),
67                                                'evenement' => _T('agenda:info_evenement') 
68                                        ),
69                                        'label' => _T('reservation:label_objet_promotion'),
70                                        'explication' => _T('reservation:explication_objet_promotion'),
71                                        'class' => 'auto_submit',
72                                        'obligatoire' => 'oui',
73                                        'afficher_si' => '@type_selection@=="choix_precis"' 
74                                ) 
75                        ),
76                        array (
77                                'saisie' => 'selection_multiple',
78                                'options' => array (
79                                        'nom' => 'id_objet',
80                                        'label' => _T('reservation:label_objet_' . $objet_promotion),
81                                        'datas' => $objets,
82                                        'class' => 'chosen',
83                                        'obligatoire' => 'oui',
84                                        'afficher_si' => '@type_selection@=="choix_precis"' 
85                                ) 
86                        ),
87                        array (
88                                'saisie' => 'input',
89                                'options' => array (
90                                        'nom' => 'nombre_evenements_choix',
91                                        'label' => _T('reservation:label_nombre_evenements'),
92                                        'explication' => _T('reservation:explication_nombre_evenements') . ' ' . _T('reservation:explication_nombre_evenements_choix', array (
93                                                'objet_promotion' => $objet_promotion 
94                                        )),
95                                        'afficher_si' => '@type_selection@=="choix_precis"',
96                                        'obligatoire' => 'oui',
97                                        'defaut' => '0' 
98                                ) 
99                        ) 
100                ) 
101        );
102       
103        return $return;
104}
105
106// Définition de l'action de la promotion
107function promotions_multiples_evenements_action_dist($flux, $promotion) {
108       
109        // Les événements sélectionnés
110        $evenements = _request('evenements');
111       
112        // Les données de la promotion
113        $valeurs_promotion = $promotion['valeurs_promotion'];
114       
115        $type_selection = $valeurs_promotion['type_selection'];
116        $nombre_evenements = isset($valeurs_promotion['nombre_evenements']) ? $valeurs_promotion['nombre_evenements'] : '';
117        $objet_promotion = isset($valeurs_promotion['objet_promotion']) ? $valeurs_promotion['objet_promotion'] : '';
118        $id_objet = isset($valeurs_promotion['id_objet']) ? $valeurs_promotion['id_objet'] : '';
119        $nombre_evenements_choix = isset($valeurs_promotion['nombre_evenements_choix']) ? $valeurs_promotion['nombre_evenements_choix'] : '';
120       
121        // promotion simple
122       
123        if ($type_selection == 'simple' and count($evenements) >= $nombre_evenements)
124                $flux['data']['applicable'] = 'oui';
125                // promotion avec choix précis des évenements
126        elseif ($type_selection == 'choix_precis') {
127               
128                // Le nombre de conicidence requise
129                // Par défaut le nombre de objets sélecctionnes
130                $nombre_requis = count($id_objet);
131                // Si un nombre spécifique est indiqué, on le prend
132               
133                $i = 0;
134                // Choix d'événements
135                if ($objet_promotion == 'evenement') {
136                        foreach ($evenements as $id_evenement) {
137                                if (in_array($id_evenement, $id_objet) and in_array($flux['data']['id_evenement'], $id_objet))
138                                        $i ++;
139                        }
140                }
141                // Choix d'article
142                elseif ($objet_promotion == 'article') {
143                        if (! isset($flux['data']['donnees_evenements'])) {
144                                $sql = sql_select('spip_articles.id_article,spip_articles.id_trad,id_evenement', 'spip_evenements LEFT JOIN spip_articles ON spip_evenements.id_article=spip_articles.id_article', 'spip_evenements.id_evenement IN (' . implode(',', $evenements) . ')');
145                               
146                                $flux['data']['donnees_evenements'] = array ();
147                                while ( $data = sql_fetch($sql) ) {
148                                        $i = verifier($data, $id_objet, $i, $flux['data']['id_evenement']);
149                                        $flux['data']['donnees_evenements'][] = $data;
150                                }
151                        }
152                        else {
153                                foreach ($flux['data']['donnees_evenements'] as $data) {
154                                        $i = verifier($data, $id_objet, $i, $flux['data']['id_evenement']);
155                                }
156                        }
157                }
158                if ($nombre_evenements_choix > 0)
159                        $nombre_requis = $nombre_evenements_choix;
160               
161                if ($i == $nombre_requis)
162                        $flux['data']['applicable'] = 'oui';
163        }
164       
165        return $flux;
166}
167function verifier($data, $id_objet, $i, $id_evenement) {
168        $id_article = $data['id_article'];
169        if ($data['id_trad'] > 0)
170                $id_article = $data['id_trad'];
171        $id_article_evenement = sql_getfetsel('id_article', 'spip_evenements', 'id_evenement=' . $id_evenement);
172        $articles = array ();
173        if (in_array($id_article, $id_objet) and ! in_array($id_article, $articles) and in_array($id_article_evenement, $id_objet)) {
174                $i ++;
175                $articles[] = $id_article;
176        }
177        return $i;
178}
179
180?>
Note: See TracBrowser for help on using the repository browser.