source: spip-zone/_plugins_/prix_objets/branches/v1/prix_objets_fonctions.php @ 110047

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

v1.8.0

  • faciliter l'intégration d'estension de prix (comme déclinaisons)
  • Property svn:executable set to *
File size: 7.8 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION'))
5        return;
6
7include_spip('base/abstract_sql');
8
9/**
10 * Un tableau des devises dispoibles.
11 *
12 * @return array
13 */
14function devises() {
15        $devises = array(
16
17                // A
18                'AUD' => 'AUD',
19
20                // B
21                'BRL' => 'Real',
22
23                // C
24                'CAD' => 'CAD',
25                'CHF' => 'CHF',
26                'CNY' => 'Yuan',
27                'CSD' => 'CSD',
28                'CZK' => 'CZK',
29
30                // D
31                'DKK' => 'DKK',
32
33                // E
34                'EUR' => '€',
35
36                // G
37                'GBP' => '£',
38
39                // H
40                'HKD' => 'HKD',
41                'HUF' => 'HUF',
42
43                // I
44                'IDR' => 'IDR',
45                'ILS' => 'Shekel',
46                'IQD' => 'IQD',
47                'IRR' => 'IRR',
48                'ISK' => 'ISK',
49
50                // J
51                'JEP' => 'JEP',
52                'JOD' => 'JOD',
53                'JMD' => 'JMD',
54                'JPY' => '¥',
55
56                // K
57                'KES' => 'KES',
58                'KGS' => 'KGS',
59                'KWD' => 'KWD',
60                'KZT' => 'Tenge',
61
62                // L
63                'LAK' => 'Kip',
64                'LBP' => 'LBP',
65                'LKR' => 'LKR',
66                'LRD' => 'LRD',
67                'LTL' => 'Litas',
68                'LVL' => 'Lat',
69
70                // M
71                'MAD' => 'Dirham',
72                'MDL' => 'MDL',
73                'MGA' => 'Ariary',
74                'MKD' => 'MKD',
75                'MNT' => 'Tughrik',
76                'MRO' => 'Ouguiya',
77                'MUR' => 'MUR',
78                'MVR' => 'Rufiyaa',
79                'MWK' => 'MWK',
80                'MXN' => 'MXN',
81                'MYR' => 'Ringgit',
82                'MZN' => 'Metical',
83
84                // N
85                'NAD' => 'NAD',
86                'NGN' => 'Naira',
87                'NIO' => 'Cordoba',
88                'NPR' => 'NPR',
89                'NOK' => 'NOK',
90                'NZD' => 'NZD',
91
92                // O
93                'OMR' => 'OMR',
94
95                'QAR' => 'Riyal',
96
97                // P
98                'PGK' => 'Kina',
99                'PHP' => 'PHP',
100                'PKR' => 'PKR',
101                'PLN' => 'Zloty',
102
103                'RON' => 'RON',
104                'RUB' => 'Rouble',
105                'RWF' => 'RWF',
106
107                // S
108                'SCR' => 'SCR',
109                'SDD' => 'SDD',
110                'SEK' => 'SEK',
111                'SGD' => 'SGD',
112                'SOS' => 'SOS',
113                'SLL' => 'Leone',
114                'SRD' => 'SRD',
115                'STD' => 'Dobra',
116                'SVC' => 'Colon',
117                'SYP' => 'SYP',
118
119                // T
120                'THB' => 'Baht',
121                'TJS' => 'Somoni',
122                'TND' => 'TND',
123                'TMM' => 'TMM',
124                'TRY' => 'Lirasi',
125                'TTD' => 'TTD',
126                'TWD' => 'TWD',
127                'TZS' => 'TZS',
128
129                // U
130                'UAH' => 'Hryvna',
131                'UGX' => 'UGX',
132                'USD' => 'USD',
133                'UZS' => 'UZS',
134
135                // V
136                'VND' => 'Dong',
137
138                // X
139                'XAF' => 'XAF',
140                'XOF' => 'XOF',
141
142                // Y
143                'YER' => 'Rial',
144
145                // Z
146                'ZMK' => 'ZMK',
147                'ZWN' => 'ZWN'
148        );
149
150        return $devises;
151}
152
153/**
154 * Affiche le symbole de la devise si disponible
155 *
156 * @param string $code_devise
157 * @return string
158 */
159function traduire_devise($code_devise) {
160        include_spip('inc/devises');
161
162        $devises = devises();
163        $trad = $devises[$code_devise];
164
165        return $trad;
166}
167
168function prix_defaut($id_objet, $objet = 'article') {
169        if ($_COOKIE['spip_devise']) {
170                $devise_defaut = $_COOKIE['spip_devise'];
171        }
172        elseif (lire_config('prix_objets/devise_default')) {
173                $devise_defaut = lire_config('prix_objets/devise_default');
174        }
175        else {
176                $devise_defaut = 'EUR';
177        }
178
179        $req = sql_select(
180                        'code_devise,prix',
181                        'spip_prix_objets',
182                        'id_objet=' . $id_objet . ' AND objet=' . sql_quote($objet)
183                        );
184        while ($row = sql_fetch($req)) {
185                $prix = $row['prix'] . ' ' . traduire_devise($row['code_devise']);
186                if ($row['code_devise'] == $devise_defaut) {
187                        $defaut = $row['prix'] . ' ' . traduire_devise($row['code_devise']);
188                }
189        }
190
191        if ($defaut) {
192                $defaut = $defaut;
193        }
194        else {
195                $defaut = $prix;
196        }
197
198        return $defaut;
199}
200
201function devise_defaut_prix($prix = '', $traduire = true) {
202        if ($_COOKIE['spip_devise']) {
203                $devise_defaut = $_COOKIE['spip_devise'];
204        }
205        else {
206                $devise_defaut = $devise_defaut = prix_objets_devise_defaut();
207        }
208        $devise_defaut = traduire_devise($devise_defaut);
209
210        if ($prix) {
211                $devise_defaut = $prix . ' ' . $devise_defaut;
212        }
213
214        return $devise_defaut;
215}
216
217function devise_defaut_objet($id_objet, $objet = 'article') {
218        include_spip('inc/config');
219        $config = lire_config('prix_objets');
220
221        if (!$devise_defaut = $_COOKIE['devise_selectionnee']) {
222                $devise_defaut = $config['devise_default'];
223        }
224        else {
225                $devise_defaut = prix_objets_devise_defaut($config);
226        }
227
228        $req = sql_select('code_devise,prix', 'spip_prix_objets', 'id_objet=' . $id_objet . ' AND objet=' . sql_quote($objet));
229
230        while ($row = sql_fetch($req)) {
231                $prix = $row['prix'] . ' ' . traduire_devise($row['code_devise']);
232                if ($row['code_devise'] == $devise_defaut) {
233                        $defaut = $row['code_devise'];
234                }
235        }
236
237        if ($defaut) {
238                $defaut = $defaut;
239        }
240        else {
241                $defaut = $prix;
242        }
243
244        return $defaut;
245}
246
247function traduire_code_devise($code_devise, $id_objet, $objet = 'article', $option = "") {
248        $prix = sql_getfetsel('prix', 'spip_prix_objets', 'id_objet=' . $id_objet . ' AND objet=' . sql_quote($objet) . ' AND code_devise =' . sql_quote($code_devise));
249
250        if ($option == 'prix') {
251                $prix = $prix . ' ' . traduire_devise($code_devise);
252        }
253
254        return $prix;
255}
256
257function rubrique_prix($id = '', $objet = 'article', $sousrubriques = false) {
258        include_spip('inc/config');
259        include_spip('prive/formulaires/selecteur/generique_fonctions');
260
261        $rubrique_produit = picker_selected(lire_config('prix_objets/rubrique_prix', array()), 'rubrique');
262
263        if ($rubrique_produit) {
264                $id_parent = $rubrique_produit;
265
266                if (!$sousrubriques) {
267                        $rubriques = $id_parent;
268                }
269                else {
270                        $rubriques = array();
271                }
272
273                $rubriques = rubriques_enfant($id_parent, $rubriques);
274                if ($id) {
275                        $retour = sql_getfetsel('id_' . $objet, 'spip_' . $objet . 's', 'id_' . $objet . '=' . $id . ' AND id_rubrique IN (' . implode(',', $rubriques) . ')');
276                }
277                else {
278                        $retour = $rubriques;
279                }
280        }
281        else {
282                return false;
283        }
284
285        return $retour;
286}
287
288function rubriques_enfant($id_parent, $rubriques = array()) {
289        $id_p = '';
290
291        if (is_array($id_parent)) {
292                $id_parent = implode(',', $id_parent);
293        }
294
295        if ($id_parent) {
296                $sql = sql_select('id_rubrique', 'spip_rubriques', 'id_parent IN (' . $id_parent . ')');
297        }
298
299        $id_p = array();
300        while ($row = sql_fetch($sql)) {
301                $id_p[] = $row['id_rubrique'];
302                $rubriques[] = $row['id_rubrique'];
303        }
304
305        if (count($id_p) > 0) {
306                $rubriques = rubriques_enfant($id_p, $rubriques);
307        }
308
309        return $rubriques;
310}
311
312/**
313 * Surcharge de la fonction filtres_prix_formater_dist du plugin prix.
314 * Formate le prix en y ajoutant la devise.
315 *
316 * @param string $prix
317 * @param string $devise
318 * @return string
319 */
320function filtres_prix_formater($prix, $devise = '') {
321        include_spip('inc/config');
322        include_spip('inc/cookie');
323
324        $config = lire_config('prix_objets');
325
326        if (!$devise) {
327                $devises = isset($config['devises']) ? $config['devises'] : array();
328
329                // Si il y a un cookie 'devise_selectionnee' et qu'il figure parmis les devises disponibles on le prend
330                if (isset($_COOKIE['devise_selectionnee'])
331                                and in_array($_COOKIE['devise_selectionnee'], $devises)) {
332                                        $devise = $_COOKIE['devise_selectionnee'];
333                                        $GLOBALS['devise_defaut'] = $devise;
334                                }
335                // Sinon on regarde si il ya une devise defaut valable
336                else {
337                        $devise = prix_objets_devise_defaut($config);
338                }
339        }
340
341
342        // On met le cookie
343        spip_setcookie('devise_selectionnee', $devise, time() + 3660 * 24 * 365, '/');
344
345        // On détermine la langue du contexte
346        if (isset($_COOKIE['spip_lang'])) {
347                $lang = $_COOKIE['spip_lang'];
348        }
349        else {
350                $lang = lire_config('langue_site');
351        }
352
353                // Si PECL intl est présent on dermine le format de l'affichage de la devise selon la langue du contexte
354        if (function_exists('numfmt_create') and is_float($prix)) {
355                $fmt = numfmt_create($lang, NumberFormatter::CURRENCY);
356                $prix = numfmt_format_currency($fmt, $prix, $devise);
357        }
358        // Sinon à la française
359        else {
360                $prix = $prix . '&nbsp;' . traduire_devise($devise);
361        }
362
363        return $prix;
364}
365
366/**
367 * Détermine la devise par défaut
368 *
369 * @param array $config
370 *              Les donnes de configuration de prix_objets
371 * @return string Code de la devise
372 */
373function prix_objets_devise_defaut($config = '') {
374        if (!$config) {
375                include_spip('inc/config');
376                $config = lire_config('prix_objets');
377        }
378        $devises = isset($config['devises']) ? $config['devises'] : array();
379        // Sinon on regarde si il ya une devise defaut valable
380        if ($config['devise_default']) {
381                $devise_defaut = $config['devise_default'];
382        }
383        // Sinon on prend la première des devises choisies
384        elseif (isset($devises[0])) {
385                $devise_defaut = $devises[0];
386        }
387        // Sinon on met l'Euro
388        else {
389                $devise_defaut = 'EUR';
390        }
391
392        return $devise_defaut;
393}
Note: See TracBrowser for help on using the repository browser.