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

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

label promotions

File size: 6.7 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        if($objet_promotion) {
35                $label_id_objet = _T('reservation:label_objet_' . $objet_promotion);
36        }
37        else {
38                $label_id_objet = _T('reservation:label_obets_choix');
39        }
40        $return = array (
41                'nom' => _T('reservation:nom_reservation_multiples_evenements'),
42                'saisies' => array (
43                        array (
44                                'saisie' => 'radio',
45                                'options' => array (
46                                        'nom' => 'type_selection',
47                                        'datas' => array (
48                                                'simple' => _T('reservation:simple'),
49                                                'choix_precis' => _T('reservation:choix_precis')
50                                        ),
51                                        'label' => _T('reservation:label_type_selection'),
52                                        'obligatoire' => 'oui'
53                                )
54                        ),
55                        array (
56                                'saisie' => 'input',
57                                'options' => array (
58                                        'nom' => 'nombre_evenements',
59                                        'label' => _T('reservation:label_nombre_evenements'),
60                                        'explication' => _T('reservation:explication_nombre_evenements'),
61                                        'defaut' => '2',
62                                        'obligatoire' => 'oui',
63                                        'afficher_si' => '@type_selection@=="simple"'
64                                )
65                        ),
66                        array (
67                                'saisie' => 'selection',
68                                'options' => array (
69                                        'nom' => 'objet_promotion',
70                                        'datas' => array (
71                                                'article' => _T('public:article'),
72                                                'evenement' => _T('agenda:info_evenement')
73                                        ),
74                                        'label' => _T('reservation:label_objet_promotion'),
75                                        'explication' => _T('reservation:explication_objet_promotion'),
76                                        'class' => 'auto_submit',
77                                        'obligatoire' => 'oui',
78                                        'afficher_si' => '@type_selection@=="choix_precis"'
79                                )
80                        ),
81                        array (
82                                'saisie' => 'selection_multiple',
83                                'options' => array (
84                                        'nom' => 'id_objet',
85                                        'label' => $label_id_objet,
86                                        'datas' => $objets,
87                                        'class' => 'chosen',
88                                        'obligatoire' => 'oui',
89                                        'afficher_si' => '@objet_promotion@!="" && @type_selection@=="choix_precis"',
90                                )
91                        ),
92                        array (
93                                'saisie' => 'input',
94                                'options' => array (
95                                        'nom' => 'nombre_evenements_choix',
96                                        'label' => _T('reservation:label_nombre_evenements'),
97                                        'explication' => _T('reservation:explication_nombre_evenements') . ' ' . _T('reservation:explication_nombre_evenements_choix', array (
98                                                'objet_promotion' => $objet_promotion
99                                        )),
100                                        'afficher_si' => '@type_selection@=="choix_precis"',
101                                        'obligatoire' => 'oui',
102                                        'defaut' => '0'
103                                )
104                        )
105                )
106        );
107
108        return $return;
109}
110
111// Définition de l'action de la promotion
112function promotions_multiples_evenements_action_dist($flux, $promotion) {
113
114        // Les événements sélectionnés
115        $evenements = _request('evenements');
116
117        // Les données de la promotion
118        $valeurs_promotion = $promotion['valeurs_promotion'];
119
120        $type_selection = $valeurs_promotion['type_selection'];
121        $nombre_evenements = isset($valeurs_promotion['nombre_evenements']) ? $valeurs_promotion['nombre_evenements'] : '';
122        $objet_promotion = isset($valeurs_promotion['objet_promotion']) ? $valeurs_promotion['objet_promotion'] : '';
123        $id_objet = isset($valeurs_promotion['id_objet']) ? $valeurs_promotion['id_objet'] : '';
124        $nombre_evenements_choix = isset($valeurs_promotion['nombre_evenements_choix']) ? $valeurs_promotion['nombre_evenements_choix'] : '';
125
126        // promotion simple
127
128        if ($type_selection == 'simple' and count($evenements) >= $nombre_evenements)
129                $flux['data']['applicable'] = 'oui';
130                // promotion avec choix précis des évenements
131        elseif ($type_selection == 'choix_precis') {
132
133                // Le nombre de conicidence requise
134                // Par défaut le nombre de objets sélecctionnes
135                $nombre_requis = count($id_objet);
136                // Si un nombre spécifique est indiqué, on le prend
137
138                $i = 0;
139                // Choix d'événements
140                if ($objet_promotion == 'evenement') {
141                        foreach ($evenements as $id_evenement) {
142                                if (in_array($id_evenement, $id_objet) and in_array($flux['data']['id_evenement'], $id_objet))
143                                        $i ++;
144                        }
145                }
146                // Choix d'article
147                elseif ($objet_promotion == 'article') {
148                        if (! isset($flux['data']['donnees_evenements'])) {
149                                $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) . ')');
150
151                                $flux['data']['donnees_evenements'] = array ();
152                                while ( $data = sql_fetch($sql) ) {
153                                        $i = verifier($data, $id_objet, $i, $flux['data']['id_evenement']);
154                                        $flux['data']['donnees_evenements'][] = $data;
155                                }
156                        }
157                        else {
158                                foreach ($flux['data']['donnees_evenements'] as $data) {
159                                        $i = verifier($data, $id_objet, $i, $flux['data']['id_evenement']);
160                                }
161                        }
162                }
163                if ($nombre_evenements_choix > 0)
164                        $nombre_requis = $nombre_evenements_choix;
165
166                if ($i == $nombre_requis)
167                        $flux['data']['applicable'] = 'oui';
168        }
169
170        return $flux;
171}
172function verifier($data, $id_objet, $i, $id_evenement) {
173        $id_article = $data['id_article'];
174        if ($data['id_trad'] > 0)
175                $id_article = $data['id_trad'];
176        $id_article_evenement = sql_getfetsel('id_article', 'spip_evenements', 'id_evenement=' . $id_evenement);
177        $articles = array ();
178        if (in_array($id_article, $id_objet) and ! in_array($id_article, $articles) and in_array($id_article_evenement, $id_objet)) {
179                $i ++;
180                $articles[] = $id_article;
181        }
182        return $i;
183}
184
185?>
Note: See TracBrowser for help on using the repository browser.