PEEL Shopping
Open source ecommerce : PEEL Shopping
format.php
Go to the documentation of this file.
1 <?php
2 // This file should be in UTF8 without BOM - Accents examples: éèê
3 // +----------------------------------------------------------------------+
4 // | Copyright (c) 2004-2015 Advisto SAS, service PEEL - contact@peel.fr |
5 // +----------------------------------------------------------------------+
6 // | This file is part of PEEL Shopping 8.0.0, which is subject to an |
7 // | opensource GPL license: you are allowed to customize the code |
8 // | for your own needs, but must keep your changes under GPL |
9 // | More information: https://www.peel.fr/lire/licence-gpl-70.html |
10 // +----------------------------------------------------------------------+
11 // | Author: Advisto SAS, RCS 479 205 452, France, https://www.peel.fr/ |
12 // +----------------------------------------------------------------------+
13 // $Id: format.php 47245 2015-10-08 16:47:28Z gboussin $
14 if (!defined('IN_PEEL')) {
15  die();
16 }
17 
25 function cleanDataDeep(&$value, $key = null)
26 {
27  $bad_strings = array("Content-Type:", "text/plain;", "MIME-Version:", "Content-Transfer-Encoding:", "Content-Transfer-Encoding: 7Bit", "bcc:");
28  if (is_array($value)) {
29  if (function_exists('array_walk_recursive')) {
30  array_walk_recursive($value, 'cleanDataDeep');
31  }else{
32  $value = array_map('cleanDataDeep', $value);
33  }
34  } else {
35  if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
36  // Si magic_quotes est activé dans la configuration de l'hébergement, alors on annule ses effets ici
37  $value = stripslashes($value);
38  }
39  if (!defined('DISABLE_INPUT_ENCODING_CONVERT') && (!defined('IN_PEEL_ADMIN') || !a_priv('admin*', false))) {
40  foreach($bad_strings as $bad_string) {
41  if (String::strpos($value, $bad_string) !== false) {
42  // On interdit les bad_strings qui pourraient servir à des injections diverses
43  $value = '';
44  }
45  }
46  if($key!==null){
47  // On ne passe ici que si $key est défini, donc si on appelle cette fonction avec array_walk_recursive et non pas array_map
48  $key_parts=explode('_', str_replace('form_', '', $key));
49  if (!empty($GLOBALS['site_parameters']['post_variables_with_html_allowed_if_not_admin']) && !in_array($key_parts[0], $GLOBALS['site_parameters']['post_variables_with_html_allowed_if_not_admin'])) {
50  // Un utilisateur sans droit administrateur ne peut jamais donner de HTML => protège de toute sorte de XSS
51  $value = String::strip_tags($value);
52  }
53  }
54  }
55  // On convertit les données en UTF8 si on n'a pas vu de caractère spécifique UTF8
56  if(!defined('DISABLE_INPUT_ENCODING_CONVERT') && !String::detect_utf8_characters($value)){
57  // A défaut, on considère que l'encodage est en ISO ou CP1252. Si ce n'est pas le cas, ça ne marchera pas.
58  // Mais de toutes façons, il n'y a pas de raison de recevoir autre chose que de l'UTF8
59  // Donc cette conversion est sensée servir très occasionnellement : par exemple lors de la MAJ d'un ancien site, dont les URL étaient encodées en ISO8859
60  // La plupart du temps, ici on a à faire à de l'ASCII classique sans accent, donc aucun changement concret, mais on fait le remplacement au cas où
61  $value = String::utf8_encode($value);
62  }
63  if(strlen($value)>20 && String::strpos($value, 'myEventWatcherDiv')!==false) {
64  // On fait un test sur strlen (sans String::, c'est plus rapide) d'abord pour éviter de faire le test strpos lorsque ce n'est pas utile pour accélérer
65  // On nettoie ce qui est laissé par CKEditor
66  $value = str_replace(array('<div id="myEventWatcherDiv" style="display: none;">&nbsp;</div>', '<div style="display:none;" id="myEventWatcherDiv">&nbsp;</div>', '<div style="display: none;" id="myEventWatcherDiv">&nbsp;</div>'), '', $value);
67  }
68  }
69  return $value;
70 }
71 
80 function frmvalide($variable_to_test, $true_value = 'checked="checked"', $false_value = "")
81 {
82  if ($variable_to_test) {
83  return $true_value;
84  } else {
85  return $false_value;
86  }
87 }
88 
97 function vb(&$var, $default = null)
98 {
99  return isset($var) ? $var : $default;
100 }
101 
110 function vn(&$var, $default = 0)
111 {
112  return isset($var) ? $var : $default;
113 }
114 
122 function getPregConditionCompatAccents($string, $delimiter = '/')
123 {
124  $string = preg_quote(String::convert_accents($string), $delimiter);
125  return str_replace(array("a", "c", "e", "i", "o", "u", "n", "y"),
126  array("[aáåâäàã]", "[cç]", "[eêéèë]", "[iíîïì]", "[oóôöòõ]", "[uûüùú]", "[nñ]", "[yÿý]"), $string);
127 }
128 
135 function url2Link($string)
136 {
137  if(String::strpos($string, '<a ') === false && String::strpos($string, '<img ') === false) {
138  return preg_replace('/(http|mailto|news|ftp|https)\:\/\/(([-éa-z0-9\/\.\?_=#@:;,!~&%])*)/i', "<a href=\"$1://$2\" target=\"_blank\">$1://$2</a>", $string);
139  } else {
140  return $string;
141  }
142 }
143 
150 function linkFormat($text)
151 {
152  // A chaque imbrication correcte, on recommence
153  while (String::strpos($text, '[link="') !== false && String::strpos($text, '[/link]', String::strpos($text, '[link="')) !== false) {
154  // echo 'Iteration <br />';
155  // Traitement pour chaque quote
156  // Il y a au moins un bon quote à remplacer
157  $quote_begin = 0;
158  while (String::strpos($text, '[link="', $quote_begin + 1) !== false) {
159  // on se positionne sur la dernière imbrication
160  $quote_begin = String::strpos($text, '[link="', $quote_begin + 1);
161  }
162  if (String::strpos($text, '[/link]', $quote_begin) === false) {
163  $text .= '[/link]';
164  }
165  $old_text = $text;
166  $quote_end = String::strpos($text, '[/link]', $quote_begin) + String::strlen('[/link]');
167  $quote_text = String::substr($old_text, $quote_begin + strlen('[link="'), $quote_end - $quote_begin - String::strlen('[link="') - String::strlen('[/link]'));
168  // $quote_text = str_replace('&quot;]', ' a écrit :</b><br />', $quote_text);
169  $quote_text = '<a href="' . $quote_text;
170  $quote_text = str_replace("]", ">", $quote_text);
171  $quote_text .= '</a>';
172  // echo $quote_text.'<br />';
173  $text = '';
174  if ($quote_begin > 0) {
175  $text .= String::substr($old_text, 0, $quote_begin);
176  }
177  $text .= $quote_text;
178  if ($quote_end < String::strlen($old_text)) {
179  $text .= String::substr($old_text, $quote_end);
180  }
181  unset($old_text);
182  }
183  // On clean si une fermeture de quote en trop (on ne sait jamais)
184  $text = str_replace("[/link]", "", $text);
185  return $text;
186 }
187 
196 function get_float_from_user_input($string, $from_currency_rate = 1)
197 {
198  if(is_array($string)) {
199  return $string;
200  }
201  foreach(array('.', ',') as $separator) {
202  $array_temp = explode($separator, $string);
203  if (count($array_temp) > 2) {
204  // Plus de deux occurences du séparateur => ne peut être un séparateur de décimales
205  $string = str_replace($separator, '', $string);
206  }
207  unset($array_temp);
208  if (strpos($string, $separator) !== false && strpos($string, $separator) == strlen($string) - 3) {
209  // Un séparateur de millier seul ou un nombre avec 3 chiffres après la virgule
210  // => on imagine que c'est un nombre avec 3 chiffres après la virgule => on ne fait rien
211  }
212  }
213  if (strpos($string, ',') !== false && strpos($string, '.') !== false) {
214  if (strpos($string, ',') < strpos($string, '.')) {
215  // La virgule est spérateur de milliers
216  $string = str_replace(',', '', $string);
217  } else {
218  // Le point est spérateur de milliers
219  $string = str_replace('.', '', $string);
220  }
221  }
222  // Maintenant, il ne doit plus rester de séparateur de millier
223  return floatval(preg_replace("([^-0-9.])", "", str_replace(',', '.', $string))) / $from_currency_rate;
224 }
225 
237 function filtre_javascript($string, $addslashes = true, $allow_escape_single_quote = true, $allow_escape_double_quote = true, $skip_endline = true, $inside_html = true)
238 {
239  if ($addslashes) {
240  $string = addslashes($string);
241  if (!$allow_escape_single_quote) {
242  $string = str_replace("\'", "'", $string);
243  }
244  if (!$allow_escape_double_quote) {
245  $string = str_replace('\"', '"', $string);
246  } elseif($inside_html) {
247  $string = str_replace('\"', '&quot;', $string);
248  }
249  }
250  if($skip_endline) {
251  $string = str_replace(array("\t", "\r\n", "\n"), array(" ", " ", " "), $string);
252  } else {
253  // Exécution des sauts de lignes dans alert() par exemple
254  $string = str_replace(array("\t", "\r\n", "\n"), array(" ", '\n', '\n'), $string);
255  }
256  return $string;
257 }
258 
265 function filtre_pdf($string)
266 {
267  return str_replace('<br />', "\r\n", String::html_entity_decode_if_needed(String::htmlspecialchars_decode($string, ENT_QUOTES)));
268 }
269 
277 function filtre_csv($string, $separator = "\t")
278 {
279  $string = str_replace(array($separator, "\r\n", "\n", "\r"), array(" ", " ", " ", " "), String::html_entity_decode(String::htmlspecialchars_decode($string, ENT_QUOTES)));
280  return $string;
281 }
282 
290 function fxsl($number_string, $separator = ',')
291 {
292  $number_string = number_format(floatval(str_replace(array(",", " "), array(".", ""), $number_string)), 2, $separator, '');
293  return $number_string;
294 }
295 
304 function rewriting_urlencode($string, $convert_string_to_lower = true)
305 {
306  if ($convert_string_to_lower == true) {
307  $string = String::strtolower($string);
308  }
309  $string = preg_replace('/[^a-zA-Z0-9_]/', "-", utf8_decode(String::strip_tags(String::convert_accents($string))));
310  $string = preg_replace('/[-]{2,}/', "-", $string);
311  $url_part = String::rawurlencode(String::str_shorten($string, 60, '', '', 30));
312  return $url_part;
313 }
314 
322 {
323  $currencies = array('CHF' => '756',
324  'EUR' => '978',
325  'USD' => '840',
326  'CAD' => '124',
327  'JPY' => '392',
328  'GBP' => '826',
329  'AUD' => '036',
330  'NOK' => '578',
331  'SEK' => '752',
332  'DKK' => '208'
333  );
334  if (!empty($currencies[$currency_code])) {
335  return $currencies[$currency_code];
336  } else {
337  return null;
338  }
339 }
340 
348 function get_country_iso_2_letter_code($country_id_or_name, $guess_if_not_found = true)
349 {
350  $sql = 'SELECT iso
351  FROM peel_pays
352  WHERE (id="' . nohtml_real_escape_string($country_id_or_name) . '" OR pays_' . $_SESSION['session_langue'] . '="' . nohtml_real_escape_string($country_id_or_name) . '") AND ' . get_filter_site_cond('pays') . '
353  LIMIT 1';
354  $query = query($sql);
355  if ($obj = fetch_object($query)) {
356  $result = $obj->iso;
357  }
358  if (!empty($result)) {
359  return $result;
360  } elseif ($guess_if_not_found && !is_numeric($country_id_or_name)) {
361  // On renvoie les 2 premières lettres plutôt que rien du tout, on a des chances que ce soit bon
362  return String::substr(String::strtoupper($country_id_or_name), 0, 2);
363  } else {
364  return false;
365  }
366 }
367 
375 function get_country_iso_3_letter_code($country_id_or_name, $guess_if_not_found = true)
376 {
377  $sql = 'SELECT iso3
378  FROM peel_pays
379  WHERE (id="' . nohtml_real_escape_string($country_id_or_name) . '" OR pays_' . $_SESSION['session_langue'] . '="' . nohtml_real_escape_string($country_id_or_name) . '") AND ' . get_filter_site_cond('pays') . '
380  LIMIT 1';
381  $query = query($sql);
382  if ($obj = fetch_object($query)) {
383  $result = $obj->iso3;
384  }
385  if (!empty($result)) {
386  return $result;
387  } elseif ($guess_if_not_found && !is_numeric($country_id_or_name)) {
388  // On renvoie les 3 premières lettres plutôt que rien du tout, on a des chances que ce soit bon
389  return String::substr(String::strtoupper($country_id_or_name), 0, 3);
390  } else {
391  return false;
392  }
393 }
394 
401 function get_country_iso_num_code($country_id_or_name)
402 {
403  $sql = 'SELECT iso_num
404  FROM peel_pays
405  WHERE (id="' . nohtml_real_escape_string($country_id_or_name) . '" OR pays_' . $_SESSION['session_langue'] . '="' . nohtml_real_escape_string($country_id_or_name) . '") AND ' . get_filter_site_cond('pays') . '
406  LIMIT 1';
407  $query = query($sql);
408  if ($obj = fetch_object($query)) {
409  $result = $obj->iso_num;
410  }
411  if (!empty($result)) {
412  return $result;
413  } else {
414  return false;
415  }
416 }
417 
424 function fdate(&$date_nok)
425 {
426  $date_ok = get_formatted_date($date_nok, 'short', 'long');
427  return $date_ok;
428 }
429 
440 function get_formatted_date($datetime_or_timestamp = null, $mode = 'short', $hour_minute = false)
441 {
442  // Décommentez la fonction suivante et commentez l'autre, si votre serveur n'arrive pas à afficher les dates correctement (traductions).
443  // $date = strftime(str_replace('%A', $GLOBALS['day_of_week'][(0 + strftime('%w', strtotime($datetime_or_timestamp)))], str_replace('%B', $GLOBALS['months_names'][(0 + strftime('%m', strtotime($datetime_or_timestamp)))], $GLOBALS['date_format_long'])), strtotime($datetime_or_timestamp));
444  if (!empty($GLOBALS['date_format_'.$mode])) {
445  $format = $GLOBALS['date_format_'.$mode];
446  } elseif($mode != 'timestamp' && $mode != 'timestamp1000') {
447  $format = $GLOBALS['date_format_long'];
448  } else {
449  $format = null;
450  }
451  if($format !== null) {
452  if ($hour_minute===true) {
453  $format .= ' ' . $GLOBALS['time_format_long'];
454  }elseif (!empty($hour_minute)) {
455  $format .= ' ' . vb($GLOBALS['time_format_'.$hour_minute]);
456  }
457  }
458  if (empty($datetime_or_timestamp) || $datetime_or_timestamp==='0') {
459  $date = '';
460  } elseif (!is_numeric($datetime_or_timestamp)) {
461  if (substr($datetime_or_timestamp, 0, 10) == '0000-00-00') {
462  $date = '';
463  } elseif (is_numeric(substr($datetime_or_timestamp, 0, 4))) {
464  // Format MySQL => on convertit en timestamp
465  $date = strtotime($datetime_or_timestamp);
466  } else {
467  // Chaine déjà formattée : on la reformate en tenant compte du format utilisé à l'origine pour formatter.
468  $date = strtotime(get_mysql_date_from_user_input($datetime_or_timestamp));
469  }
470  if($date === -1) {
471  // strtotime retourne un timestamp en cas de succès, false sinon.
472  // Mais avant PHP 5.1.0, cette fonction retournait -1 en cas d'échec. => on passe donc ici à false
473  $date = false;
474  }
475  } else {
476  $date = $datetime_or_timestamp;
477  }
478  if($date!=='' && $date!==false && $date!==null && is_numeric($date) && $format !== null) {
479  // Format numérique timestamp => on convertit en date
480  $date = strftime($format, $date);
481  } elseif($mode == 'timestamp1000' && is_numeric($date)) {
482  // ms instead of seconds - on passe en chaine de caractères pour compatibilité avec entiers 32 bits si serveur n'est pas en 64 bits.
483  $date = '' . $date . '000';
484  }
485  return $date;
486 }
487 
496 function get_mysql_date_from_user_input($string, $use_current_hour_min_sec_if_missing = false)
497 {
498  if (is_numeric(substr($string, 0, 4)) && substr($string, 4, 1) == '-' && !is_numeric(substr($GLOBALS['date_format_short'], 0, 4))) {
499  // Date au format MySQL
500  $supposed_string_format = 'Y-m-d H:i:s';
501  } else {
502  // Date formattée :
503  // dans PEEL, toute date formattée est censée venir de get_formatted_date
504  // Pour éviter tout problème de cohérence avec get_formatted_date au niveau de l'ordre jour / mois / année, on utilise $GLOBALS['date_format_short'] et non pas $GLOBALS['date_basic_format_short'] dans la ligne ci-après
505  // On supprime les % pour avoir les bonnes valeurs utilisables ensuite avec date() pour la génération finale
506  // Pour l'heure, on utilise le format standard compatible dans date(), car le format utilisateur va rester de toutes façons dans le même ordre
507  $supposed_string_format = $GLOBALS['date_format_short'].' '.$GLOBALS['time_basic_format_long'];
508  }
509  $user_date_format_array = explode('-', str_replace(array('%', ' ', '/', '.', ':', '_', 'h', ','), array('', '-', '-', '-', '-', '-', '-', '-'), $supposed_string_format));
510  $user_date_array = explode('-', str_replace(array(' ', '/', '.', ':', '_', 'h', ','), array('-', '-', '-', '-', '-', '-', '-'), $string));
511  foreach($user_date_format_array as $this_key => $this_letter) {
512  if(isset($user_date_array[$this_key])) {
513  $this_date_array[$this_letter] = $user_date_array[$this_key];
514  }
515  }
516  if($use_current_hour_min_sec_if_missing && count($user_date_array)<=3){
517  $hour = ' '.date('H:i:s');
518  } elseif(count($user_date_array)>=5) {
519  // On met l'heure seulement si on l'a : permet de ne pas donner 00:00:00 si par exemple on veut utiliser le résultat en recherche avec un LIKE "...%"
520  $hour = ' '.str_pad(vb($this_date_array['H']), 2, 0, STR_PAD_LEFT).':'. str_pad(vb($this_date_array['i']), 2, 0, STR_PAD_LEFT).':'. str_pad(vb($this_date_array['s']), 2, 0, STR_PAD_LEFT);
521  }
522  return str_pad(vb($this_date_array['Y']), 4, 0, STR_PAD_LEFT).'-'. str_pad(vb($this_date_array['m']), 2, 0, STR_PAD_LEFT).'-'. str_pad(vb($this_date_array['d']), 2, 0, STR_PAD_LEFT) . vb($hour);
523 }
524 
533 function get_formatted_duration($total_seconds, $show_seconds = false, $display_mode = 'day')
534 {
535  $result = array();
536  if (!is_numeric($total_seconds) || $total_seconds < 0) {
537  return false;
538  }
539  $days = $total_seconds / (3600 * 24);
540  $hours = $total_seconds / 3600 - floor($days) * 24;
541  $minutes = $total_seconds / 60 - floor($days) * 60 * 24 - floor($hours) * 60;
542  $seconds = $total_seconds - floor($days) * 3600 * 24 - floor($hours) * 3600 - floor($minutes) * 60;
543  $weeks = $total_seconds / (3600 * 24 * 7);
544  $months = $total_seconds / (3600 * 24 * 30);
545 
546  if ($display_mode == 'month') {
547  if ($months >= 1) {
548  $result[] = floor($months) . ' ' . str_replace('(s)', ($months>1?'s':''), $GLOBALS['STR_MONTHS']);
549  } elseif ($weeks >= 1) {
550  $result[] = floor($weeks) . ' ' . str_replace('(s)', ($weeks>1?'s':''), $GLOBALS['strWeeks']);
551  } elseif ($days >= 1) {
552  $result[] = floor($days) . ' ' . str_replace('(s)', ($days>1?'s':''), $GLOBALS['strDays']);
553  }
554  } else {
555  if ($days >= 1) {
556  $result[] = floor($days) . '' . str_replace('(s)', ($days>1?'s':''), $GLOBALS['strShortDays']);
557  }
558  if ($hours >= 1) {
559  $result[] = floor($hours) . '' . str_replace('(s)', ($hours>1?'s':''), $GLOBALS['strShortHours']);
560  }
561  if ($minutes >= 1) {
562  $result[] = floor($minutes) . '' . str_replace('(s)', ($minutes>1?'s':''), $GLOBALS['strShortMinutes']);
563  }
564  if ($seconds >= 1 && ($show_seconds || $total_seconds<60)) {
565  $result[] = floor($seconds) . '' . str_replace('(s)', ($seconds>1?'s':''), $GLOBALS['strShortSecs']);
566  }
567  }
568  if(is_numeric($display_mode)) {
569  $temp = array_chunk($result, $display_mode);
570  $result = $temp[0];
571  }
572  return implode(' ', $result);
573 }
574 
599 function template_tags_replace($text, $custom_template_tags = array(), $replace_only_custom_tags = false, $format = null, $lang = null, $avoid_load_urls = false)
600 {
601  if(is_array($text)) {
602  $temp = array();
603  foreach(array_keys($text) as $this_key) {
604  if(strpos($this_key, '[') !== false) {
605  $this_new_key = template_tags_replace($this_key, $custom_template_tags, $replace_only_custom_tags, $format, $lang, $avoid_load_urls);
606  } else {
607  $this_new_key = $this_key;
608  }
609  // On construit un nouveau tableau au fur et à mesurepour garder l'ordre initial, même si des clés ont leur texte modifié
610  $temp[$this_new_key] = template_tags_replace($text[$this_key], $custom_template_tags, $replace_only_custom_tags, $format, $lang, $avoid_load_urls);
611  }
612  return $temp;
613  }
614  if (empty($lang)) {
615  $lang = $_SESSION['session_langue'];
616  }
617  $template_tags = array();
618  if(!$replace_only_custom_tags) {
619  // On rajoute les tags génériques au site
620  $template_tags['SITE'] = $GLOBALS['site'];
621  $template_tags['SITE_NAME'] = $GLOBALS['site'];
622  $template_tags['WWWROOT'] = get_lang_rewrited_wwwroot($lang);
623  if(!$avoid_load_urls) {
624  $template_tags['CATALOG_URL'] = get_product_category_url();
625  }
626  $template_tags['PHP_SELF'] = $_SERVER['PHP_SELF'];
627  $template_tags['CURRENT_URL'] = get_current_url(false);
628  $template_tags['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
629  $template_tags['DATETIME'] = get_formatted_date(time(), 'long', true);
630  $template_tags['DATE'] = get_formatted_date(time(), 'long', false);
631  $template_tags['DATE_SHORT'] = get_formatted_date(time(), 'short', false);
632  $template_tags['TIMESTAMP'] = time();
633  // Gestion des tags [CODE_PROMO_SOURCE=XXXXXXXXXX]
634  foreach(array('CODE_PROMO_SOURCE' => false, 'FUNCTION' => true, 'HTML' => true, 'GLOBALS' => true, 'BEST_SELLER_CARROUSEL' => true, 'CONTENT_CARROUSEL' => true) as $this_function_tag => $arg_mandatory) {
635  $tag_begin = -1;
636  while (String::strpos($text, '[' . $this_function_tag . '=', $tag_begin + 1) !== false && String::strpos($text, ']', String::strpos($text, '[' . $this_function_tag . '=', $tag_begin + 1)) !== false) {
637  // Traitement pour chaque tag
638  // Il y a au moins un bon quote à remplacer
639  // on se positionne sur la dernière imbrication
640  $tag_begin = String::strpos($text, '[' . $this_function_tag . '=', $tag_begin + 1);
641  $this_tag = String::substr($text, $tag_begin+1, String::strpos($text, ']', $tag_begin+1)-$tag_begin-1);
642  $tag_name_array = explode('=', $this_tag, 2);
643  $this_arg = vb($tag_name_array[1]);
644  if(!$arg_mandatory || !empty($this_arg)) {
645  if($this_function_tag == 'CODE_PROMO_SOURCE') {
646  // On va chercher les codes 1 par 1 en faisant SELECT * WHERE nb_valide>0 ORDER BY id ASC et mettre nb_valide=nb_valide-1
647  $sql = 'SELECT id, nom
648  FROM peel_codes_promos cp
649  WHERE ' . get_filter_site_cond('codes_promos', 'cp') . ' AND nb_valide>0 AND (nombre_prevue=0 OR compteur_utilisation<nombre_prevue) AND source="'.real_escape_string($this_arg).'" AND cp.etat = "1" AND ("' . date('Y-m-d', time()) . '" BETWEEN cp.date_debut AND cp.date_fin)
650  ORDER BY id ASC
651  LIMIT 1';
652  $query = query($sql);
653  if ($obj = fetch_object($query)) {
654  $template_tags[$this_tag] = $obj->nom;
655  $sql = 'UPDATE peel_codes_promos
656  SET nb_valide=nb_valide-1
657  WHERE id="'.intval($obj->id).'" AND ' . get_filter_site_cond('codes_promos');
658  $query = query($sql);
659  }
660  } elseif($this_function_tag == 'FUNCTION') {
661  // SECURITE : Liste des fonctions autorisées ci-dessous, sinon la fonction appelée doit commencer par le préfixe 'get_tag_function_'
662  $allowed_functions = array('');
663  $this_arg_array=explode(',', $this_arg, 2);
664  $this_arg = $this_arg_array[0];
665  $this_params_array = get_array_from_string(vb($this_arg_array[1]));
666  if(in_array($this_arg, $allowed_functions)) {
667  $function_name = $this_arg;
668  } else {
669  $function_name = 'get_tag_function_' . $this_arg;
670  }
671  if(function_exists($function_name)) {
672  $template_tags[$this_tag] = $function_name($this_params_array);
673  } else {
674  $template_tags[$this_tag] = '[' . $function_name . ' not found]';
675  }
676  } elseif($this_function_tag == 'GLOBALS') {
677  // SECURITE : Liste des variables globales autorisées ci-dessous, sinon la variable appelée doit commencer par le préfixe 'tag_'
678  $allowed_functions = array('');
679  if(in_array($this_arg, $allowed_functions)) {
680  $function_name = $this_arg;
681  } else {
682  $function_name = 'tag_' . $this_arg;
683  }
684  $template_tags[$this_tag] = vb($GLOBALS[$function_name]);
685  } elseif($this_function_tag == 'RSS') {
686  // Pour chaque tag RSS, on remplace par le contenu du flux
687  $template_tags[$this_tag] = get_rss_feed_content($this_arg);
688  } elseif($this_function_tag == 'HTML') {
689  // Pour chaque tag HTML, on remplace par le contenu de la zone HTML correspondante
690  $template_tags[$this_tag] = affiche_contenu_html($this_arg, true);
691  }
692  }
693  }
694  }
695  if(String::strpos($text, '[CONTACT_FORM]') !== false) {
696  // Affichage du formulaire de contact, avec gestion des erreurs
697  $template_tags['CONTACT_FORM'] = handle_contact_form($_POST, true);
698  } elseif(String::strpos($text, '[BEST_SELLER_CARROUSEL]') !== false) {
699  $template_tags['BEST_SELLER_CARROUSEL'] = affiche_best_seller_produit_colonne(true);
700  } elseif(String::strpos($text, '[CONTENT_CARROUSEL]') !== false) {
701  $template_tags['CONTENT_CARROUSEL'] = Carrousel::display('content_carrousel', true);
702  } elseif(String::strpos($text, '[CLIENT_REFERENCES]') !== false) {
703  $template_tags['CLIENT_REFERENCES'] = affiche_reference_multipage(null, '', 'reference', 12, 'general', true, 0, 4, false);
704  }
705  if(String::strpos($text, '[CLOSE_MAIN_CONTAINER]') !== false) {
706  $template_tags['CLOSE_MAIN_CONTAINER'] = '</div></div></div>';
707  if(defined('IN_RUBRIQUE') || defined('IN_RUBRIQUE_ARTICLE')) {
708  $template_tags['CLOSE_MAIN_CONTAINER'] .= '</div></div>';
709  } elseif(defined('IN_HOME')) {
710  $template_tags['CLOSE_MAIN_CONTAINER'] .= '</div>';
711  }
712  }
713  if(String::strpos($text, '[REOPEN_MAIN_CONTAINER]') !== false) {
714  $template_tags['REOPEN_MAIN_CONTAINER'] = '<div class="middle_column container"><div class="middle_column_repeat row"><div class="col-md-12">';
715  if(defined('IN_RUBRIQUE') || defined('IN_RUBRIQUE_ARTICLE')) {
716  $template_tags['REOPEN_MAIN_CONTAINER'] .= '<div class="rub_wrapper special_content"><div class="rub_content">';
717  } elseif(defined('IN_HOME')) {
718  $template_tags['REOPEN_MAIN_CONTAINER'] .= '<div class="page_home_content">';
719  }
720  }
721  if (empty($custom_template_tags['NEWSLETTER']) && String::strpos($text, '[NEWSLETTER]') !== false) {
722  // On envoie un message qui contient un tag NEWSLETTER et dont on n'a pas spécifié explicitement le contenu => on récupère son contenu automatiqueemnt
723  // On prend la dernière newsletter rentrée en BDD - pas de possibilité de faire autrement, sinon il faut passer par le module de gestion de newsletter
724  $news_infos = get_last_newsletter(null, $lang);
725  if (!empty($news_infos)) {
726  // On remplace les tags à l'intérieur de la newsletter pour éviter problèmes et avoir besoin de passer le traitement en double sur l'intégralité du texte
727  // Par ailleurs on évite de se retrouver dans une boucle si le texte de la newsletter indiquait (de manière erronée !) un tag [NEWSLETTER]
728  $custom_template_tags['NEWSLETTER'] = template_tags_replace(str_replace('[NEWSLETTER]', '', $news_infos['message_' . $frm['lang']]), $custom_template_tags, $replace_only_custom_tags, $format, $lang);
729  }
730  }
731  // Appel aux fonctions propres à chaque module pour récupérer des listes de tags à remplacer
732  $template_tags = array_merge($template_tags, call_module_hook('template_tags', array('text' => $text), 'array'));
733  }
734  if (!empty($custom_template_tags) && is_array($custom_template_tags)) {
735  foreach(array('GENDER,CIVILITE', 'NOM_FAMILLE,LASTNAME,LAST_NAME,NOM,NAME', 'FIRST_NAME,FIRSTNAME,PRENOM', 'PSEUDO,LOGIN') as $this_tags_list) {
736  // Compatibilité avec autres tags
737  foreach(explode(',', $this_tags_list) as $this_tag) {
738  if (isset($custom_template_tags[$this_tag])) {
739  // Dès qu'on trouve une valeur, on remplit tous les autres (sauf si déjà défini, au cas où il y aurait ambiguité sur un nom
740  foreach(explode(',', $this_tags_list) as $replaced_tag) {
741  if ($replaced_tag != $this_tag && !isset($custom_template_tags[$replaced_tag])) {
742  $custom_template_tags[$replaced_tag] = $custom_template_tags[$this_tag];
743  }
744  }
745  }
746  }
747  }
748  $template_tags = array_merge($template_tags, $custom_template_tags);
749  }
750  foreach($template_tags as $this_tag => $this_tag_value) {
751  // On supprime les ajouts automatiques par l'éditeur de texte
752  $text = str_replace('<p>['.$this_tag.']</p>', '['.$this_tag.']', $text);
753  // Remplacement de tous les tags en majuscules ou minuscules avant de traiter les dates et heures
754  // Si un tag est un mix avec majuscules et minuscules, le remplacement est fait quelques lignes plus loin
755  if($format == 'text') {
756  $this_tag_value = String::strip_tags($this_tag_value);
757  } elseif($format == 'html') {
758  $this_tag_value = String::nl2br_if_needed($this_tag_value);
759  }
760  // ATTENTION : A FAIRE AVANT la gestion des tags de dates à cause de différences entre minuscules et majuscules dans ces tags
761  $text = str_replace(array('[' . String::strtoupper($this_tag) . ']', '[' . String::strtolower($this_tag) . ']'), str_replace('&euro;', '€', $this_tag_value), $text);
762  }
763  if(!$replace_only_custom_tags) {
764  // On rajoute des tags de date qui sont en minuscules ou majuscules
765  foreach(array('d', 'D', 'j', 'l', 'N', 's', 'w', 'z', 'W', 'F', 'm', 'M', 'n', 't', 'L', 'o', 'Y', 'y', 'a', 'A', 'B', 'g', 'G', 'h', 'H', 'i', 's', 'u', 'U') as $this_date_item) {
766  // Explications de chaque valeur sur : http://fr.php.net/manual/fr/function.date.php
767  $template_tags[$this_date_item] = date($this_date_item);
768  }
769  for($i=0 ; $i<=10 ; $i++) {
770  // Gestion de tags YEAR-N
771  $template_tags[str_replace('YEAR-0', 'YEAR', 'YEAR-'.$i)] = date('Y')-$i;
772  }
773  }
774  // On gère tous les tags qui restent à remplacer sans modification de la casse
775  foreach($template_tags as $this_tag => $this_tag_value) {
776  if($format == 'text') {
777  $this_tag_value = String::strip_tags($this_tag_value);
778  } elseif($format == 'html') {
779  $this_tag_value = String::nl2br_if_needed($this_tag_value);
780  }
781  $text = str_replace('[' . $this_tag . ']', $this_tag_value, $text);
782  }
783  if(!empty($GLOBALS['site_parameters']['replace_words_after_tags_replace'])) {
784  // Remplacement de mots clés par des versions personnalisées pour le site
785  foreach($GLOBALS['site_parameters']['replace_words_after_tags_replace'] as $replaced => $new) {
786  if(strpos($text, $replaced) !== false) {
787  $text = str_replace($replaced, $new, $text);
788  }
789  }
790  }
791  return $text;
792 }
793 
803 {
804  if (a_priv('demo')) {
805  output_light_html_page($GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_DEMO_RIGHTS_LIMITED']))->fetch());
806  die();
807  }
808 
809  if ($type == 'excel') {
810  header("Content-Type: application/vnd.ms-excel");
811  } else {
812  header('Content-Type: application/csv-tab-delimited-table; charset=' . $page_encoding);
813  }
814  header("Expires: 0");
815  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
816  header("Content-disposition: filename=" . $filename);
817 }
818 
828 function output_xml_http_export_header($filename, $page_encoding, $content_type = 'application/svg+xml', $cache_duration_in_seconds = null)
829 {
830  if (a_priv('demo')) {
831  output_light_html_page($GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_DEMO_RIGHTS_LIMITED']))->fetch());
832  die();
833  }
834  header('Content-Type: '.$content_type.'; charset=' . $page_encoding);
835  if(!empty($cache_duration_in_seconds)) {
836  header('Pragma: public');
837  header('Cache-Control: public, max-age=' . $cache_duration_in_seconds . ', must-revalidate');
838  } else {
839  header("Expires: 0");
840  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
841  }
842  header("Content-disposition: filename=" . $filename);
843 }
844 
854 function correct_output(&$output, $replace_template_tags = false, $format = null, $lang = null)
855 {
856  if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
857  $wwwroot_to_replace = str_replace('https://', 'http://', $GLOBALS['wwwroot']);
858  $output = str_replace($wwwroot_to_replace, $GLOBALS['wwwroot'], $output);
859  }
860  if($replace_template_tags) {
861  $output = template_tags_replace($output, array(), false, $format, $lang);
862  }
863 }
864 
870 function tabSmileys ()
871 {
872  $tab = array(1 => ':)',
873  2 => ':(',
874  3 => ';)',
875  4 => ':D',
876  5 => ';;)',
877  6 => '>:D<',
878  7 => ':-/',
879  8 => ':x',
880  9 => ':">',
881  10 => ':P',
882  11 => ':-*',
883  12 => '=((',
884  13 => ':-O',
885  14 => 'X(',
886  15 => ':>',
887  16 => 'B-)',
888  17 => ':-S',
889  18 => '#:-S',
890  19 => '>:)',
891  20 => ':((',
892  21 => ':))',
893  22 => ':|',
894  23 => '/:)',
895  24 => '=))',
896  25 => 'O:)',
897  26 => ':-B',
898  27 => '=;',
899  28 => 'I-)',
900  29 => '|-|',
901  30 => 'L-)',
902  31 => '8-|',
903  32 => ':-$',
904  33 => '[-(',
905  34 => ':O)',
906  35 => '8-}',
907  36 => '<:-P',
908  37 => '(:|',
909  38 => '=P~',
910  39 => ':-?',
911  40 => '#-o',
912  41 => '=D>',
913  42 => ':-SS',
914  43 => '@-)',
915  44 => ':^o',
916  45 => ':-w',
917  46 => ':-<',
918  47 => '>:P',
919  48 => '<):)',
920  49 => ':@)',
921  50 => '3:-O',
922  51 => ':(|)',
923  52 => '~:>',
924  53 => '@};-',
925  54 => '%%-',
926  55 => '**==',
927  56 => '(~~)',
928  57 => '~O)',
929  58 => '*-:)',
930  59 => '8-X',
931  60 => '=:)',
932  61 => '>-)',
933  62 => ':-L',
934  63 => '[-O<',
935  64 => '$-)',
936  65 => ':-"',
937  66 => 'b-(',
938  67 => ':)>-',
939  68 => '[-X',
940  69 => ':D/',
941  70 => '>:/',
942  71 => ';))',
943  72 => ':-@',
944  73 => '^:)^',
945  74 => ':-j',
946  75 => '(*)');
947  return $tab;
948 }
949 
956 function smileysFormat ($string)
957 {
958  $tab = tabSmileys ();
959  krsort($tab);
960  foreach($tab as $img => $key) {
961  $string = str_replace(htmlentities($key, ENT_COMPAT), '<img src="' . $GLOBALS['wwwroot'] . '/images/smileys/' . $img . '.gif" alt="" align="absMiddle" />', $string);
962  }
963  return $string;
964 }
965 
973 function get_string_from_array($array, $disable_ad_quote=false)
974 {
975  if(is_array($array)) {
976  // NB : Pas besoin de remplacer " par \" dans les valeurs des chaines, le décodage tient compte des " en association avec les virgules uniquement
977  if($array===array_values($array)) {
978  // On ne précise pas les clés du tableau
979  if ($disable_ad_quote) {
980  $string = '' . implode(', ', $array) . '';
981  } else {
982  $string = '"' . implode('", "', $array) . '"';
983  }
984  }else {
985  foreach($array as $this_key => $this_value) {
986  if($this_value === true){
987  $array[$this_key] = 'true';
988  } elseif($this_value === false){
989  $array[$this_key] = 'false';
990  } elseif($this_value === null){
991  $array[$this_key] = 'null';
992  } else {
993  $array[$this_key] = '"' . $this_value . '"';
994  }
995  }
996  $string = trim(str_replace(array('Array ', ' ', ' ', ' '), array('Array', ' ', ' ', ' '), str_replace(array("Array,", "),", "(,", ",)"), array("Array ", ")", "(", ")"), str_replace(array("\r\n", "\n"), ',', print_r($array, true)))));
997  $string = trim(String::substr($string, String::strlen('Array('), String::strlen($string) - String::strlen('Array(')-1));
998  }
999  } else {
1000  $string = $array;
1001  }
1002  return $string;
1003 }
1004 
1011 function get_array_from_string($string)
1012 {
1013  $string = str_replace('Array ', 'Array', trim(str_replace(array("\t", "\r\n", "\r"), array(' ', "\n", ''), $string)));
1014  if(String::substr($string, 0, String::strlen('Array')) == 'Array') {
1015  $string = String::substr($string, String::strlen('Array('), String::strlen($string) - String::strlen('Array(')-1);
1016  }
1017  $parts = explode(',', str_replace("\n", ',', $string));
1018  $result = array();
1019  foreach($parts as $this_part_key => $this_part) {
1020  if(empty($skip_part_key_array) || !in_array($this_part_key, $skip_part_key_array)) {
1021  $this_part = trim($this_part);
1022  if(!empty($this_part)){
1023  $line = explode('=>', $this_part, 2);
1024  if(!isset($line[1])) {
1025  $this_value = trim($line[0]);
1026  } else {
1027  $this_key = trim($line[0]);
1028  $this_value = trim($line[1]);
1029  }
1030  if(in_array(String::substr($this_value, 0, 1), array('"', "'", '['))) {
1031  // On retire le séparateur de début
1032  $this_value = String::substr($this_value, 1, String::strlen($this_value)-1);
1033  $i=1;
1034  while(!in_array(String::substr($this_value, -1), array('"', "'", ']')) && !empty($parts[$this_part_key+$i])) {
1035  // On rajoute la suite tant qu'on n'a pas de séparateur de fin : il y avait une ou des virgules dans le texte
1036  $this_value .= ','.$parts[$this_part_key+$i];
1037  $skip_part_key_array[] = $this_part_key+$i;
1038  $i++;
1039  }
1040  // On retire le séparateur de fin
1041  $this_value = String::substr($this_value, 0, String::strlen($this_value)-1);
1042  }
1043  if($this_value == 'true'){
1044  $this_value = true;
1045  } elseif($this_value == 'false'){
1046  $this_value = false;
1047  } elseif($this_value == 'null'){
1048  $this_value = null;
1049  }
1050  if(!isset($line[1])) {
1051  $result[] = $this_value;
1052  } else {
1053  if(in_array(String::substr($this_key, 0, 1), array('"', "'", '['))) {
1054  $this_key = String::substr($this_key, 1, String::strlen($this_key)-2);
1055  }
1056  $result[$this_key] = $this_value;
1057  }
1058  }
1059  }
1060  }
1061  return $result;
1062 }
1063 
1075 function get_keywords_from_text($string_or_array, $min_length = 3, $max_length = 20, $allow_numeric = false, $get_long_keywords_first = true, $max_words = 7) {
1076  $keywords_array = array();
1077  if(is_array($string_or_array)) {
1078  $string = implode(' ', array_unique($string_or_array));
1079  } else {
1080  $string = $string_or_array;
1081  }
1082  $filter_stop_words_array = array_unique(explode(' ', str_replace(array("\t", "\r", "\n"), ' ', vb($GLOBALS['site_parameters']['filter_stop_words']))));
1083  // On passe le texte en minuscules
1084  $string = String::strtolower(' '.String::convert_accents($string));
1085  // On retire les caractères de ponctuation divers
1086  $string = str_replace(array(",", ".", "?", "!", ':', ';', "-", "+", '*', "d'", '/', '\\', '(', ')', '[', ']', '{', '}', "'", '"', '<', '>', '«', '»', '´', ' '), " ", $string);
1087  // On récupère dans le texte les mots clés candidats
1088  foreach(explode(' ', $string) as $this_word) {
1089  if(String::strlen($this_word)>=$min_length && ($allow_numeric || !is_numeric($this_word))){
1090  $keywords_array[$this_word] = $this_word;
1091  }
1092  }
1093  // On retire à la fin les stop words (moins il y a d'éléments à vérifier, plus c'est rapide)
1094  $keywords_array = array_diff($keywords_array, $filter_stop_words_array);
1095  if($get_long_keywords_first) {
1096  // On garde les mots les plus longs en priorité
1097  $keywords_lengths = array();
1098  foreach($keywords_array as $this_word) {
1099  $keywords_lengths[$this_word] = String::strlen($this_word);
1100  }
1101  arsort($keywords_lengths);
1102  $keywords_array = array_keys($keywords_lengths);
1103  }
1104  // On ne garde que la longueur de tableau demandée
1105  while($max_words !== null && count($keywords_array)>$max_words) {
1106  array_pop($keywords_array);
1107  }
1108  return $keywords_array;
1109 }
1110 
1120 function highlight_found_text($text, $terms, &$found_words_array, $found_tags = array('<span class="search_tag">', '</span>')) {
1121  $bbcode = array('[tagsearch]', '[/tagsearch]');
1122  if(!is_array($terms)) {
1123  $terms = array($terms);
1124  }
1125  foreach ($terms as $this_term) {
1126  if((String::strlen($text)<80 && String::strlen($this_term)>0) || String::strlen($this_term)>=3) {
1127  $preg_condition = getPregConditionCompatAccents($this_term);
1128  if (stripos($text, $this_term) !== false) {
1129  $text = preg_replace('/' . $preg_condition . '/iu', $bbcode[0] . '$0' . $bbcode[1], $text, -1);
1130  $found_words_array[] = $this_term;
1131  }
1132  }
1133  }
1134  // on remplace le BBcode par les tags demandés - On le fait à la fin pour éviter les problèmes d'échappement avec preg
1135  return str_replace($bbcode, $found_tags, $text);
1136 }
1137 
1144 function userAgeFormat ($date)
1145 {
1146  return floor((date('Ymd') - str_replace("-", "", $date)) / 10000);
1147 }
1148 
1155 function get_formatted_phone_number($phone_number)
1156 {
1157  return str_replace(array(' ','/','.','-',')','(','_'), "", $phone_number);
1158 }
1159 
1176 function check_password_format($string) {
1177  if(!empty($GLOBALS['site_parameters']['password_regexp'])) {
1178  $result = preg_match($GLOBALS['site_parameters']['password_regexp'], $string);
1179  return !empty($result);
1180  } else {
1181  return true;
1182  }
1183 }
static strtoupper($string)
Returns string with all alphabetic characters converted to uppercase.
Definition: String.php:154
url2Link($string)
url2Link()
Definition: format.php:135
handle_contact_form($frm, $skip_introduction_text=false)
Gère l'affichage du formulaire de contact, avec les erreurs et le message de confirmation d'envoi...
Definition: fonctions.php:4902
static strip_tags($string, $allowed_tags=null)
String::strip_tags()
Definition: String.php:548
if(!empty($GLOBALS['site_parameters']['order_specific_field_titles'])) if(check_if_module_active('socolissimo')&&!empty($_REQUEST)&&!empty($_REQUEST['PUDOFOID'])&&!empty($_REQUEST['CEEMAIL'])&&!empty($_REQUEST['SIGNATURE'])&&!empty($_REQUEST['ORDERID'])) elseif(!empty($_POST)) elseif(check_if_module_active('socolissimo')&&!empty($_SESSION['session_commande']['is_socolissimo_order'])) foreach(array('bill'=> 1, 'ship'=> 2) as $address_type=> $session_commande_address_id) $frm['societe1']
$lang
Definition: spellchecker.php:9
highlight_found_text($text, $terms, &$found_words_array, $found_tags=array('< span class="search_tag">', '</span >'))
Highlights terms in text.
Definition: format.php:1120
static htmlspecialchars_decode($string, $style=ENT_COMPAT)
This function is String::htmlspecialchars_decode with php4 compatibility.
Definition: String.php:500
$result
static utf8_encode($string)
Si vous avez des utilisateurs sous windows qui saisissent du contenu dans une interface qui l'insère ...
Definition: String.php:602
static strpos($haystack, $needle, $offset=0)
Returns the numeric position of the first occurrence of needle in the haystack string.
Definition: String.php:54
get_current_url($with_get=true, $get_short_url=false, $take_away_get_args_array=null)
get_current_url()
Definition: fonctions.php:1743
get_string_from_array($array, $disable_ad_quote=false)
Convertit un tableau en chaine de caractère simple à gérer par un utilisateur.
Definition: format.php:973
getPregConditionCompatAccents($string, $delimiter= '/')
getPregConditionCompatAccents()
Definition: format.php:122
static html_entity_decode_if_needed($string)
String::html_entity_decode_if_needed()
Definition: String.php:533
smileysFormat($string)
smileysFormat()
Definition: format.php:956
get_country_iso_3_letter_code($country_id_or_name, $guess_if_not_found=true)
get_country_iso_3_letter_code()
Definition: format.php:375
get_last_newsletter($id=null, $lang=null)
Récupère les informations de la newsletter de l'id demandée, ou de la dernière newsletter dans une la...
Definition: emails.php:380
static strtolower($string)
Returns string with all alphabetic characters converted to lowercase.
Definition: String.php:135
$mode
static strlen($string)
Returns the length of the given string.
Definition: String.php:36
nohtml_real_escape_string($value, $allowed_tags=null)
Protège les données pour insertion dans MySQL ET supprime les tags HTML pour protéger de toute sorte ...
Definition: database.php:400
get_formatted_duration($total_seconds, $show_seconds=false, $display_mode= 'day')
Affiche une durée en jours / heures / minutes / secondes.
Definition: format.php:533
rewriting_urlencode($string, $convert_string_to_lower=true)
Filtre une chaine de caractères pour insertion dans une URL On essaie de couper proprement, pour une longueur entre 30 et 60 caractères.
Definition: format.php:304
get_float_from_user_input($string, $from_currency_rate=1)
Transforme tout nombre formaté en un float au format PHP Exemples : 12 004,34 ou 12,324.50.
Definition: format.php:196
fdate(&$date_nok)
fdate()
Definition: format.php:424
filtre_pdf($string)
filtre_pdf()
Definition: format.php:265
get_formatted_phone_number($phone_number)
Supprime les caractères entre et autour des chiffres dans un numéro de téléphone. ...
Definition: format.php:1155
if(!defined('IN_PEEL')) affiche_best_seller_produit_colonne($return_mode=false, $location=null, $nb_col_sm=3, $nb_col_md=4)
Affiche la liste des catégories qui sont spéciales.
Definition: fonctions.php:27
get_filter_site_cond($table_technical_code, $table_alias=null, $use_strict_rights_if_in_admin=false, $specific_site_id=null, $exclude_public_items=false, $admin_force_multisite_if_allowed=false)
Retourne la condition SQL permettant de filtrer les données pour une table.
Definition: fonctions.php:4643
$found_words_array
Definition: search.php:147
query($query, $die_if_error=false, $database_object=null, $silent_if_error=false, $security_sql_filter=true)
The query() function is meant to be called anywhere you want to make a query.
Definition: database.php:158
fxsl($number_string, $separator= ',')
Formatte un nombre pour insertion dans du CSV.
Definition: format.php:290
$terms
Definition: search.php:125
vb(&$var, $default=null)
Variable blanche if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:97
tabSmileys()
tabSmileys()
Definition: format.php:870
check_password_format($string)
Vérifie le format d'un mot de passe si une contrainte est configurée.
Definition: format.php:1176
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
Definition: chart-data.php:160
output_xml_http_export_header($filename, $page_encoding, $content_type= 'application/svg+xml', $cache_duration_in_seconds=null)
output_xml_http_export_header()
Definition: format.php:828
fetch_object($query_result)
fetch_object()
Definition: database.php:302
filtre_csv($string, $separator="\t")
Formatte une chaine de caractère pour insertion dans du CSV.
Definition: format.php:277
get_array_from_string($string)
Convertit une chaine de caractère simple à gérer par un utilisateur en un tableau PHP...
Definition: format.php:1011
call_module_hook($hook, $params, $mode= 'boolean')
Appelle la fonction correspondant au $hook pour chaque module installé La fonction doit s'appeler : [...
static detect_utf8_characters($string)
Détecte si au moins un caractère est manifestement de l'UTF8.
Definition: String.php:580
if(!defined('IN_PEEL')) if(!function_exists('get_article_details_html')) if(!function_exists('get_rubriques_sons_html')) if(!function_exists('get_articles_html')) if(!function_exists('get_articles_list_brief_html')) if(!function_exists('affiche_arbre_rubrique')) get_rss_feed_content($feed_url)
Récupère le contenu d'un fichier RSS.
get_formatted_date($datetime_or_timestamp=null, $mode= 'short', $hour_minute=false)
Afficher une date formatée, en évitant les problèmes liés aux noms de mois sur les serveurs qui ne so...
Definition: format.php:440
$GLOBALS['page_columns_count']
get_mysql_date_from_user_input($string, $use_current_hour_min_sec_if_missing=false)
Transforme une date formattée par get_formatted_date() en date MySQL Si la date est vide...
Definition: format.php:496
if(!check_if_module_active('search')) $page_encoding
Definition: produit.php:23
get_keywords_from_text($string_or_array, $min_length=3, $max_length=20, $allow_numeric=false, $get_long_keywords_first=true, $max_words=7)
Nettoie une chaine des stop words, retire les mots trop courts, et renvoie une liste de mots clés...
Definition: format.php:1075
filtre_javascript($string, $addslashes=true, $allow_escape_single_quote=true, $allow_escape_double_quote=true, $skip_endline=true, $inside_html=true)
Formatte une chaine de caractère pour insertion dans du javascript.
Definition: format.php:237
get_currency_international_numerical_code($currency_code)
get_currency_international_numerical_code()
Definition: format.php:321
linkFormat($text)
linkFormat()
Definition: format.php:150
vn(&$var, $default=0)
Variable nulle if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:110
get_country_iso_num_code($country_id_or_name)
get_country_iso_num_code()
Definition: format.php:401
a_priv($requested_priv, $demo_allowed=false, $site_configuration_modification=false, $user_id=null)
Renvoie true si l'utilisateur de la session a le privilège $requested_priv ou un droit supérieur Des ...
Definition: user.php:63
$filename
static html_entity_decode($string, $quote_style=ENT_COMPAT, $charset=GENERAL_ENCODING)
String::html_entity_decode()
Definition: String.php:517
output_csv_http_export_header($filename, $type= 'excel', $page_encoding)
Génère les entêtes HTTP pour un fichier CSV.
Definition: format.php:802
if(!defined('IN_PEEL')) cleanDataDeep(&$value, $key=null)
Nettoyage des données PGC.
Definition: format.php:25
frmvalide($variable_to_test, $true_value= 'checked="checked"', $false_value="")
Affiche le mot "checked" si la variable est vraie sinon rien.
Definition: format.php:80
userAgeFormat($date)
Convert birthday date to age.
Definition: format.php:1144
static convert_accents($string, $convert_umlaut=false, $strip_umlaut=true)
convert_accents()
Definition: String.php:341
static substr($string, $start, $length=null)
Returns the portion of string specified by the start and length parameters.
Definition: String.php:112
template_tags_replace($text, $custom_template_tags=array(), $replace_only_custom_tags=false, $format=null, $lang=null, $avoid_load_urls=false)
Remplace les tags d'un texte au format [TAG] par les valeurs correspondantes.
Definition: format.php:599
correct_output(&$output, $replace_template_tags=false, $format=null, $lang=null)
Corrige le contenu à afficher, notamment pour avoir du https même si http est stocké en BDD...
Definition: format.php:854
static nl2br_if_needed($string)
Fonction de compatibilité avec de vieilles versions de PEEL ou du contenu qui vient d'ailleurs...
Definition: String.php:559
static str_shorten($string, $length_limit, $middle_separator= '', $ending_if_no_middle_separator= '...', $ideal_length_with_clean_cut_if_possible=null)
Raccourcit une chaine de caractère en insérant au milieu ou à la fin un séparateur.
Definition: String.php:233
get_country_iso_2_letter_code($country_id_or_name, $guess_if_not_found=true)
get_country_iso_2_letter_code()
Definition: format.php:348
if(defined('IN_PEEL_ADMIN')||IN_INSTALLATION) $_SESSION['session_langue']
static rawurlencode($string, $avoid_slash=true)
Returns string compatible with Apache without the AllowEncodedSlashes directive ON => avoids systemat...
Definition: String.php:893

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:31:16 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.