PEEL Shopping
Open source ecommerce : PEEL Shopping
produits.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: produits.php 47245 2015-10-08 16:47:28Z gboussin $
14 define('IN_PEEL_ADMIN', true);
15 
16 include("../configuration.inc.php");
18 necessite_priv("admin_products");
19 
20 $GLOBALS['DOC_TITLE'] = $GLOBALS['STR_ADMIN_PRODUITS_TITLE'];
21 define('ON_PRODUCT_PAGE', true);
22 
23 $id = intval(vn($_REQUEST['id']));
25 $frm = $_POST;
26 $output = '';
27 
28 switch (vb($_REQUEST['mode'])) {
29  case 'modif_tab';
30  $lng = $_GET['tab_lang'];
32  break;
33 
34  case 'maj_tab';
35  $lng = $_GET['tab_lang'];
36  if (!verify_token($_SERVER['PHP_SELF'] . $frm['mode'] . $frm['id'])) {
37  $form_error_object->add('token', $GLOBALS['STR_INVALID_TOKEN']);
38  }
39  if (!$form_error_object->count()) {
40  maj_tab($frm);
41  $output .= $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => $GLOBALS['STR_ADMIN_PRODUITS_MSG_UPDATE_OK']))->fetch();
42  $frm = array();
43  $output .= affiche_formulaire_modif_produit(vn($_REQUEST['id']), $frm);
44  } else {
45  if ($form_error_object->has_error('token')) {
46  $output .= $form_error_object->text('token');
47  }
49  }
50  break;
51 
52  case "ajout" :
53  $output .= affiche_formulaire_ajout_produit(vn($_REQUEST['categories']), $frm, $form_error_object);
54  break;
55 
56  case "stock" :
57  if (check_if_module_active('stock_advanced')) {
58  $output .= affiche_formulaire_stock(intval($_GET['id']));
59  } else {
60  $output .= affiche_liste_produits($_GET);
61  }
62  break;
63 
64  case "commande" :
65  $output .= affiche_liste_produits_acommander();
66  break;
67 
68  case "stocknul" :
69  if (check_if_module_active('stock_advanced')) {
70  $output .= affiche_liste_produits_stocknul($_POST);
71  } else {
72  $output .= affiche_liste_produits($_GET);
73  }
74  break;
75 
76  case "InsereStock" :
77  if (check_if_module_active('stock_advanced')) {
78  $output .= insere_stock_produit($_POST);
79  $output .= $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => sprintf($GLOBALS['STR_ADMIN_PRODUITS_MSG_STOCKS_UPDATED'], get_current_url(false))))->fetch();
80  $output .= affiche_formulaire_stock(intval($_GET['id']));
81  }
82  break;
83 
84  case "modif" :
85  $output .= affiche_formulaire_modif_produit(vn($_REQUEST['id']), $frm);
86  break;
87 
88  case "client" :
90  break;
91 
92  case "suppr" :
93  $output .= supprime_produit(vn($_REQUEST['id']));
94  $output .= affiche_liste_produits($_POST);
95  break;
96 
97  case "delete_results" :
98  // Pour gagner du temps de manière importante sur des sites ayants beaucoup de produits sans images, on efface en deux étapes :
99  // Etape 1 : suppression des produits avec images (lent, 1 par 1)
100  $sql_select_only_with_images = get_admin_products_search_sql($_GET, false, true);
101  $query = query($sql_select_only_with_images);
102  while($result = fetch_assoc($query)) {
103  supprime_produit($result['id']);
104  }
105  // Etape 2 : suppression des produits sans images en une seule fois, avec un gros DELETE contenant des jointures
106  $sql_delete = get_admin_products_search_sql($_GET, true, false);
107  query($sql_delete);
108  if (affected_rows()) {
109  $output .= $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => sprintf($GLOBALS['STR_ADMIN_PRODUITS_MSG_DELETED_OK'], $GLOBALS['STR_ALL'])))->fetch();
110  }
111  $output .= affiche_liste_produits(array());
112  break;
113 
114  case "supprfile" :
115  if (!empty($_GET['coul']) && !empty($_GET['file'])) {
116  $output .= supprime_fichier_couleur(vn($_REQUEST['id']), $_GET['file'], $_GET['coul']);
117  } else {
118  $output .= supprime_fichier_produit(vn($_REQUEST['id']), $_GET['file']);
119  }
120  $output .= affiche_formulaire_modif_produit(vn($_REQUEST['id']), $frm);
121  break;
122 
123  case "insere" :
124  if (!empty($frm)) {
125  if (empty($frm['on_check'])) {
126  // les chèques cadeaux ne sont pas associés à une catégorie. Ils s'affichent sur la page /modules/gift_check/cheques.php
127  $check_fields_array = array('categories' => $GLOBALS['STR_ADMIN_PRODUITS_ERR_EMPTY_CATEGORY']);
128  }
129  if(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])) {
130  if(in_array($GLOBALS['site_parameters']['product_name_forced_lang'], $GLOBALS['admin_lang_codes'])) {
131  $check_fields_array['nom_' . $GLOBALS['site_parameters']['product_name_forced_lang']] = $GLOBALS['STR_ADMIN_PRODUITS_ERR_EMPTY_NAME'];
132  }
133  } else {
134  $check_fields_array['nom_' . $_SESSION['session_langue']] = $GLOBALS['STR_ADMIN_PRODUITS_ERR_EMPTY_NAME'];
135  }
136  $form_error_object->valide_form($frm, $check_fields_array);
137  if (!verify_token($_SERVER['PHP_SELF'] . vb($frm['mode']) . vb($frm['id']))) {
138  $form_error_object->add('token', $GLOBALS['STR_INVALID_TOKEN']);
139  }
140  }
141  if (!$form_error_object->count()) {
142  if(!empty($GLOBALS['site_parameters']['products_table_additionnal_fields'])) {
143  foreach(array_keys($GLOBALS['site_parameters']['products_table_additionnal_fields']) as $this_key) {
144  if (strpos($this_key, 'image') === 0) {
145  $frm[$this_key] = upload($this_key, false, 'image_or_pdf', $GLOBALS['site_parameters']['image_max_width'], $GLOBALS['site_parameters']['image_max_height'], null, null, vb($frm[$this_key]));
146  }
147  }
148  }
149  foreach (array('image1', 'image2', 'image3', 'image4', 'image5', 'image6', 'image7', 'image8', 'image9', 'image10') as $this_image) {
150  $frm[$this_image] = upload($this_image, false, 'image_or_pdf', $GLOBALS['site_parameters']['image_max_width'], $GLOBALS['site_parameters']['image_max_height'], null, null, vb($frm[$this_image]));
151  }
152  $output .= insere_produit($frm);
153  $output .= affiche_liste_produits(array());
154  } else {
155  if ($form_error_object->has_error('token')) {
156  $output .= $form_error_object->text('token');
157  } else {
158  $output .= $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_ADMIN_ERR_FORM_INCOMPLETE']))->fetch();
159  }
160  if (!isset($frm['categories'])) {
161  $categorie_id = 0;
162  } else {
163  $categorie_id = $frm['categories'];
164  }
166  }
167  break;
168 
169  case "maj" :
170  if (!empty($frm)) {
171  if (empty($frm['on_check'])) {
172  // les chèques cadeaux ne sont pas associés à une catégorie. Ils s'affichent sur la page /modules/gift_check/cheques.php
173  $check_fields_array = array('categories' => $GLOBALS['STR_ADMIN_PRODUITS_ERR_EMPTY_CATEGORY']);
174  }
175  if(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])) {
176  if(in_array($GLOBALS['site_parameters']['product_name_forced_lang'], $GLOBALS['admin_lang_codes'])) {
177  $check_fields_array['nom_' . $GLOBALS['site_parameters']['product_name_forced_lang']] = $GLOBALS['STR_ADMIN_PRODUITS_ERR_EMPTY_NAME'];
178  }
179  } else {
180  $check_fields_array['nom_' . $_SESSION['session_langue']] = $GLOBALS['STR_ADMIN_PRODUITS_ERR_EMPTY_NAME'];
181  }
182  $form_error_object->valide_form($frm, $check_fields_array);
183  }
184  if (!$form_error_object->count()) {
185  foreach (array('image1', 'image2', 'image3', 'image4', 'image5', 'image6', 'image7', 'image8', 'image9', 'image10') as $this_image) {
186  $frm[$this_image] = upload($this_image, false, 'image_or_pdf', $GLOBALS['site_parameters']['image_max_width'], $GLOBALS['site_parameters']['image_max_height'], null, null, vb($frm[$this_image]));
187  }
188  if(!empty($GLOBALS['site_parameters']['products_table_additionnal_fields'])) {
189  foreach(array_keys($GLOBALS['site_parameters']['products_table_additionnal_fields']) as $this_key) {
190  if (strpos($this_key, 'image') === 0) {
191  $frm[$this_key] = upload($this_key, false, 'image_or_pdf', $GLOBALS['site_parameters']['image_max_width'], $GLOBALS['site_parameters']['image_max_height'], null, null, vb($frm[$this_key]));
192  }
193  }
194  }
195  $output .= maj_produit($frm['id'], $frm);
196  $output .= affiche_liste_produits($frm);
197  }
198 
199  if ($form_error_object->count()) {
200  $output .= $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_ADMIN_ERR_FORM_INCOMPLETE']))->fetch();
201  $output .= affiche_formulaire_modif_produit($frm['id'], $frm);
202  }
203 
204  break;
205 
206  case "supplier" :
208  break;
209 
210  case "duplicate" :
211  if (check_if_module_active('duplicate') && isset($_GET['id'])) {
212  duplicate_product(intval($_GET['id']));
213  }
214  $output .= affiche_liste_produits($_GET);
215  break;
216 
217  default :
218  $output .= affiche_liste_produits($_GET);
219  break;
220 }
221 include($GLOBALS['repertoire_modele'] . "/admin_haut.php");
222 echo $output;
223 include($GLOBALS['repertoire_modele'] . "/admin_bas.php");
224 
238 {
239  /* Valeurs par défaut */
240  if(empty($frm)) {
241  $frm = array();
242  foreach ($GLOBALS['admin_lang_codes'] as $lng) {
243  $frm['nom_' . $lng] = "";
244  $frm['descriptif_' . $lng] = "";
245  $frm['description_' . $lng] = "";
246  // gestion des meta
247  $frm['meta_titre_' . $lng] = "";
248  $frm['meta_key_' . $lng] = "";
249  $frm['meta_desc_' . $lng] = "";
250  }
251  $frm['reference'] = "";
252  $frm['ean_code'] = "";
253  $frm['etat_stock'] = "";
254  $frm['affiche_stock'] = "";
255  $frm['delai_stock'] = "";
256  $frm['on_stock'] = "";
257  $frm['on_rupture'] = "";
258  $frm['on_check'] = "";
259  $frm['on_top'] = "";
260  $frm['on_special'] = "";
261  $frm['on_new'] = "";
262  $frm['on_promo'] = "";
263  $frm['on_reseller'] = "";
264  $frm['on_rollover'] = "";
265  $frm['on_stock'] = "";
266  $frm['on_download'] = "";
267  $frm['extra_link'] = "";
268  $frm['technical_code'] = "";
269  $frm['on_download'] = "";
270  $frm['zip'] = "";
271  $frm['prix'] = 0;
272  $frm['prix_promo'] = 0;
273  $frm['prix_revendeur'] = 0;
274  $frm['default_image'] = "";
275  $frm['image1'] = "";
276  $frm['image2'] = "";
277  $frm['image3'] = "";
278  $frm['image4'] = "";
279  $frm['image5'] = "";
280  $frm['image6'] = "";
281  $frm['image7'] = "";
282  $frm['image8'] = "";
283  $frm['image9'] = "";
284  $frm['image10'] = "";
285  $frm['youtube_code'] = "";
286  $frm['tva'] = "";
287  $frm['poids'] = "";
288  $frm['on_perso'] = "";
289  $frm['promotion'] = "";
290  $frm['etat'] = "";
291  $frm['points'] = 0;
292  $frm['site_id'] = '';
293  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
294  $frm['site_country'] = $GLOBALS['site_parameters']['site_country_allowed_array'];
295  }
296  /* gestion des ventes flash */
297  if (check_if_module_active('flash')) {
298  $frm['on_flash'] = "";
299  $frm['flash_start'] = "";
300  $frm['flash_end'] = "";
301  }
302  }
303  if (is_array($categorie_id)) {
304  $frm['categories'] = $categorie_id;
305  } else {
306  $frm['categories'] = array($categorie_id);
307  }
308  $frm['references'] = array();
309  $frm['couleurs'] = array();
310  $frm['tailles'] = array();
311  if (check_if_module_active('payment_by_product')) {
312  $frm['paiment_allowed'] = array();
313  }
314  $frm['nouveau_mode'] = "insere";
315  $frm['id'] = '';
316  $frm['date_insere'] = "";
317  $frm['date_maj'] = "";
318  $frm['id_marque'] = "";
319  $frm['id_utilisateur'] = "";
320  $frm['normal_bouton'] = $GLOBALS['STR_ADMIN_PRODUITS_ADD_PRODUCT'];
321 
323 }
324 
334 {
335  /* Valeurs par défault */
336  if (is_array($categorie_id)) {
337  $frm['categories'] = $categorie_id;
338  } else {
339  $frm['categories'] = array($categorie_id);
340  }
341  $frm['nouveau_mode'] = "insere";
342  $frm['normal_bouton'] = $GLOBALS['STR_ADMIN_PRODUITS_ADD_PRODUCT'];
343 
344  // La création du produit n'est pas faite, puisque le formulaire est invalide.
346 }
347 
356 {
358  if(empty($frm)){
359  // Pas de données venant de validation de formulaire, donc on charge le contenu de la base de données
360  /* Charge les informations du produit */
361  $qid = query("SELECT *
362  FROM peel_produits
363  WHERE id = '" . intval($id) . "' AND " . get_filter_site_cond('produits', null, true) . "");
364  if ($frm = fetch_assoc($qid)) {
365  if (check_if_module_active('stock_advanced')) {
366  // On nettoie la table des stocks
367  nettoie_stocks($id);
368  }
369  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
370  $frm['site_country'] = explode(',', vb($frm['site_country']));
371  }
372  } else {
373  return $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_ADMIN_PRODUITS_ERR_NOT_FOUND']))->fetch();
374  }
375  }
376  /* Charge les catégories du produit */
377  $qid = query("SELECT categorie_id, nom_" . $_SESSION['session_langue'] . " AS nom_categorie
378  FROM peel_produits_categories pp
379  INNER JOIN peel_categories pc ON pp.categorie_id=pc.id AND " . get_filter_site_cond('categories', 'pc') . "
380  WHERE produit_id = '" . intval($id) . "'");
381  $frm['categories'] = array();
382  while ($cat = fetch_assoc($qid)) {
383  $frm['categories'][] = $cat['categorie_id'];
384  $GLOBALS['categorie_names_by_id'][$cat['categorie_id']] = $cat['nom_categorie'];
385  }
386  /* Charge les références du produit */
387  $references = query("SELECT reference_id
388  FROM peel_produits_references
389  WHERE produit_id = '" . intval($id) . "'");
390  $frm['references'] = array();
391  $frm['nb_produits'] = 0;
392  while ($ref = fetch_assoc($references)) {
393  $frm['nb_produits']++;
394  $frm['references'][] = $ref['reference_id'];
395  }
396  /* Charge les couleurs du produit */
397  $couleurs = query("SELECT couleur_id
398  FROM peel_produits_couleurs
399  WHERE produit_id = '" . intval($id) . "'");
400  $frm['couleurs'] = array();
401  while ($couleur = fetch_assoc($couleurs)) {
402  $frm["couleurs"][] = $couleur['couleur_id'];
403  }
404  /* Charge les tailles du produit */
405  $tailles = query("SELECT taille_id
406  FROM peel_produits_tailles
407  WHERE produit_id = '" . intval($id) . "'");
408  $frm['tailles'] = array();
409  while ($taille = fetch_assoc($tailles)) {
410  $frm["tailles"][] = $taille['taille_id'];
411  }
412  if (check_if_module_active('payment_by_product')) {
413  $frm['paiment_allowed'] = select_payment_for_this_product($id);
414  }
415  $frm['nouveau_mode'] = "maj";
416  $frm['normal_bouton'] = $GLOBALS['STR_ADMIN_FORM_SAVE_CHANGES'];
417 
419 }
420 
429 function affiche_formulaire_produit(&$frm, &$form_error_object, $create_product_process = false)
430 {
431  $output = '';
432  $GLOBALS['load_timepicker']=true;
433  if (empty($frm['default_image'])) {
434  $frm['default_image'] = 1;
435  }
436  if (empty($frm['nb_produits'])) {
437  $frm['nb_produits'] = 5;
438  }
439  $all_sites_name_array = get_all_sites_name_array(true);
440  if (isset($_SESSION['session_admin_multisite']) && $_SESSION['session_admin_multisite'] === 0) {
441  // L'administrateur multisite peut voir des informations qui s'applique à tous les sites. Donc cette mention doit être retournée dans le tableau.
442  $all_sites_name_array[0] = $GLOBALS['STR_ADMIN_ALL_SITES'];
443  }
444  if ($frm['nouveau_mode'] == "maj") {
447  } else {
448  $prix = get_float_from_user_input($frm['prix']) / (1 + get_float_from_user_input($frm['tva']) / 100);
449  }
450  $prix = fprix($prix, false, $GLOBALS['site_parameters']['code'], false, null, false, false);
451 
453  $prix_promo = get_float_from_user_input($frm['prix_promo']);
454  } else {
455  $prix_promo = get_float_from_user_input($frm['prix_promo']) / (1 + get_float_from_user_input($frm['tva']) / 100);
456  }
457  $prix_promo = fprix($prix_promo, false, $GLOBALS['site_parameters']['code'], false, null, false, false);
458  if (check_if_module_active('flash')) {
460  $prix_flash = get_float_from_user_input($frm['prix_flash']);
461  } else {
462  $prix_flash = get_float_from_user_input($frm['prix_flash']) / (1 + get_float_from_user_input($frm['tva']) / 100);
463  }
464  $prix_flash = fprix($prix_flash, false, $GLOBALS['site_parameters']['code'], false, null, false, false);
465  }
466  if (check_if_module_active('reseller')) {
467  if (display_prices_with_taxes_in_admin () && empty($GLOBALS['site_parameters']['force_display_reseller_prices_without_taxes'])) {
468  $prix_revendeur = round(get_float_from_user_input($frm['prix_revendeur']), 2) ;
469  } else {
470  $prix_revendeur = round(get_float_from_user_input($frm['prix_revendeur']) / (1 + get_float_from_user_input($frm['tva']) / 100), 2);
471  }
472  } else {
473  $prix_revendeur = 0;
474  }
475  $prix_revendeur = fprix($prix_revendeur, false, $GLOBALS['site_parameters']['code'], false, null, false, false);
476  // L'arrondi fait sur ce montant est nécessaire sur cette valeur spécifiquement car l'affichage du prix se fait toujours en HT, indépendemment de la configuration de l'affichage HT/TTC de la boutique.
477  $prix_achat = round(get_float_from_user_input($frm['prix_achat']) / (1 + get_float_from_user_input($frm['tva']) / 100), 2);
478  $prix_achat = fprix($prix_achat, false, $GLOBALS['site_parameters']['code'], false, null, false, false);
479  }
480  // Si aucune référence n'est choisie on initialise le tableau des références.
481  if (!isset($frm['references'])) {
482  $frm['references'] = array();
483  }
484  // Si aucune couleur n'est choisie on initialise le tableau des couleurs
485  if (!isset($frm['couleurs'])) {
486  $frm['couleurs'] = array();
487  }
488  $categorie_options = get_categories_output(null, 'categories', vb($frm['categories']));
489  if (empty($categorie_options) && (empty($frm['id']) || vb($_GET['mode'])!='modif')) {
490  $tpl = $GLOBALS['tplEngine']->createTemplate('admin_formulaire_produit_table.tpl');
491  $tpl->assign('href', $GLOBALS['administrer_url'] . '/categories.php?mode=ajout');
492  $tpl->assign('STR_ADMIN_PRODUITS_ADD', $GLOBALS['STR_ADMIN_PRODUITS_ADD']);
493  $tpl->assign('STR_ADMIN_PRODUITS_CREATE_CATEGORY_FIRST', $GLOBALS['STR_ADMIN_PRODUITS_CREATE_CATEGORY_FIRST']);
494  $output .= $tpl->fetch();
495  } else {
496  // On n'affiche pas le lien vers le produit, car il existera lors de la validation du formulaire ci-dessous
497  $tpl = $GLOBALS['tplEngine']->createTemplate('admin_formulaire_produit.tpl');
498  $tpl->assign('action', get_current_url(false) . '?page=' . (!empty($_GET['page']) ? $_GET['page'] : 1));
499  $tpl->assign('form_token', get_form_token_input($_SERVER['PHP_SELF'] . $frm['nouveau_mode'] . intval(vb($frm['id']))));
500  $tpl->assign('mode', vb($frm['nouveau_mode']));
501  $tpl->assign('id', intval(vb($frm['id'])));
502  $tpl->assign('reseller_price_taxes_txt', (display_prices_with_taxes_in_admin() && empty($GLOBALS['site_parameters']['force_display_reseller_prices_without_taxes'])? $GLOBALS['STR_TTC'] : $GLOBALS['STR_HT']));
503  $tpl->assign('get_mode', vb($_GET['mode']));
504  $tpl->assign('create_product_process', $create_product_process);
505  if (!$create_product_process) {
506  $tpl->assign('nom', vn($frm['nom_' . $_SESSION['session_langue']]));
507  if (!empty($frm['categories'])) {
508  $prod_href = get_product_url($frm['id'], $frm['nom_' . $_SESSION['session_langue']], $frm['categories'][0], $GLOBALS['categorie_names_by_id'][$frm['categories'][0]], false, false, vb($frm['site_id']));
509  } else {
510  // Le lien du produit est généré sans categorie. Le produit sera accessible depuis ce lien.
511  $prod_href = get_product_url($frm['id'], $frm['nom_' . $_SESSION['session_langue']], 0, null, false, false, $frm['site_id']);
512  }
513  $sql_nb_view = query("SELECT nb_view
514  FROM peel_produits
515  WHERE id = " . intval($frm['id']) . " AND " . get_filter_site_cond('produits', null, true) . "");
516  $prod = fetch_assoc($sql_nb_view);
517  $tpl->assign('prod_href', $prod_href);
518  $tpl->assign('nb_view', $prod['nb_view']);
519  $GLOBALS['DOC_TITLE'] = $GLOBALS['STR_ADMIN_PRODUITS_UPDATE'] . ' "' . vb($frm['nom_' . $_SESSION['session_langue']]) . '" - <a href="' . $prod_href . '" onclick="return(window.open(this.href)?false:true);">' . $GLOBALS['STR_ADMIN_SEE_RESULT_IN_REAL'] . '</a> - ' . $GLOBALS['STR_ADMIN_PRODUITS_VIEWS_COUNT'] . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ': ' . $prod['nb_view'];
520  } else {
521  $GLOBALS['DOC_TITLE'] = $GLOBALS['STR_ADMIN_PRODUITS_ADD'];
522  }
523  $tpl->assign('categorie_options', $categorie_options);
524  $tpl->assign('categorie_error', $form_error_object->text('categories'));
525  $tpl->assign('position', vn($frm['position']));
526 
527  $tpl->assign('is_module_gift_checks_active', check_if_module_active('gift_check'));
528  $tpl->assign('is_on_check', !empty($frm['on_check']));
529 
530  $tpl->assign('skip_home_special_products', !empty($GLOBALS['site_parameters']['skip_home_special_products']));
531  $tpl->assign('is_on_special', !empty($frm['on_special']));
532  $tpl->assign('is_on_new', !empty($frm['on_new']));
533 
534  $tpl->assign('site_auto_promo', $GLOBALS['site_parameters']['auto_promo']);
535  $tpl->assign('is_on_promo', !empty($frm['on_promo']));
536  $tpl->assign('is_on_reseller', !empty($frm['on_reseller']));
537  $tpl->assign('extra_link', vb($frm['extra_link']));
538  $tpl->assign('technical_code', vb($frm['technical_code']));
539 
540  $tpl->assign('is_best_seller_module_active', check_if_module_active('best_seller'));
541  $tpl->assign('is_on_top', !empty($frm['on_top']));
542 
543  $tpl->assign('is_conditionnement_module_active', check_if_module_active('conditionnement'));
544  $tpl->assign('conditionnement', vb($frm['conditionnement']));
545  $tpl->assign('unit_per_pallet', vb($frm['unit_per_pallet']));
546 
547  $tpl->assign('is_rollover_module_active', check_if_module_active('menus'));
548  $tpl->assign('is_on_rollover', !empty($frm['on_rollover']));
549 
550  $tpl->assign('is_on_estimate', !empty($frm['on_estimate']));
551  $tpl->assign('display_recommanded_product_on_cart_page', !empty($GLOBALS['site_parameters']['display_recommanded_product_on_cart_page']));
552  $tpl->assign('is_recommanded_product_on_cart_page', !empty($frm['recommanded_product_on_cart_page']));
553  $tpl->assign('etat', vb($frm['etat']));
554  $tpl->assign('reference', vb($frm['reference']));
555  $tpl->assign('ean_code', vb($frm['ean_code']));
556 
557  $tpl->assign('is_id', !empty($frm['id']));
558  $tpl_lang_names = array();
559  foreach ($GLOBALS['admin_lang_codes'] as $lng) {
560  $tpl_lang_names[] = array('lng' => $lng,
561  'nom' => vb($frm['nom_' . $lng]),
562  'nom_error' => $form_error_object->text('nom_' . $lng),
563  'modif_tab_href' => $GLOBALS['administrer_url'] . '/produits.php?mode=modif_tab&id=' . $frm['id'] . '&tab_lang=' . $lng,
564  'descriptif' => vb($frm['descriptif_' . $lng]),
565  'description_te' => getTextEditor('description_' . $lng, '100%', 500, String::html_entity_decode_if_needed(vb($frm['description_' . $lng]))),
566  'meta_titre' => vb($frm['meta_titre_' . $lng]),
567  'meta_key' => $frm['meta_key_' . $lng],
568  'meta_desc' => $frm['meta_desc_' . $lng]
569  );
570  }
571  $tpl->assign('langs', $tpl_lang_names);
572  $tpl->assign('product_name_forced_lang', vb($GLOBALS['site_parameters']['product_name_forced_lang']));
573  $tpl->assign('product_description_forced_lang', vb($GLOBALS['site_parameters']['product_description_forced_lang']));
574 
575  $tpl->assign('site_symbole', $GLOBALS['site_parameters']['symbole']);
576  $tpl->assign('ttc_ht', (display_prices_with_taxes_in_admin() ? $GLOBALS['STR_TTC'] : $GLOBALS['STR_HT']));
577  $tpl->assign('prix', vn($prix));
578 
579  $tpl->assign('prix_promo', vn($prix_promo));
580  $tpl->assign('is_reseller_module_active', check_if_module_active('reseller'));
581  $tpl->assign('prix_revendeur', vn($prix_revendeur));
582 
583  $tpl->assign('prix_achat', vn($prix_achat));
584  $tpl->assign('vat_select_options', get_vat_select_options(vb($frm['tva'])));
585 
586  $tpl->assign('is_module_ecotaxe_active', check_if_module_active('ecotaxe'));
587  $tpl_ecotaxe_options = array();
588  if (check_if_module_active('ecotaxe')) {
589  $sql = "SELECT id, code, nom_" . $_SESSION['session_langue'] . " AS nom, prix_ttc
590  FROM peel_ecotaxes
591  WHERE " . get_filter_site_cond('ecotaxes') . "
592  ORDER BY code";
593  $result = query($sql);
594  while ($e = fetch_assoc($result)) {
595  $tpl_ecotaxe_options[] = array('value' => intval($e['id']),
596  'issel' => $e['id'] == vb($frm['id_ecotaxe']),
597  'code' => $e['code'],
598  'nom' => $e['nom'],
599  'prix' => fprix($e['prix_ttc'], true, $GLOBALS['site_parameters']['code'], false)
600  );
601  }
602  }
603  $tpl->assign('ecotaxe_options', $tpl_ecotaxe_options);
604 
605  if (check_if_module_active('payment_by_product')) {
606  $tpl->assign('payment_by_product', display_payment_by_product($frm['paiment_allowed']));
607  }
608 
609  $tpl->assign('promotion', vb($frm['promotion']));
610 
611  $tpl->assign('is_gifts_module_active', check_if_module_active('gifts'));
612  $tpl->assign('points', vn($frm['points']));
613  $tpl->assign('site_id_select_options', get_site_id_select_options(vb($frm['site_id'])));
614  $tpl->assign('site_id_select_multiple', !empty($GLOBALS['site_parameters']['multisite_using_array_for_site_id']));
615  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
616  $tpl->assign('site_country_checkboxes', get_site_country_checkboxes(vb($frm['site_country'], array())));
617  }
618 
619  $tpl->assign('poids', vb($frm['poids']));
620  $tpl->assign('volume', vb($frm['volume']));
621  $tpl->assign('display_price_by_weight', vn($frm['display_price_by_weight']));
622 
623  $tpl->assign('is_lot_module_active', check_if_module_active('lot'));
624  if (check_if_module_active('lot')) {
625  if (vb($frm['nouveau_mode']) == "maj") {
626  $tpl->assign('lot_explanation_table', get_lot_explanation_table($frm['id']));
627  $tpl->assign('lot_href', $GLOBALS['wwwroot_in_admin'] . '/modules/lot/administrer/lot.php?id=' . vb($frm['id']));
628  if (num_rows(query("SELECT 1 FROM peel_quantites WHERE produit_id='" . intval($frm['id']) . "' AND " . get_filter_site_cond('quantites'))) > 0) {
629  $tpl->assign('lot_supprime_href', $GLOBALS['wwwroot_in_admin'] . '/modules/lot/administrer/lot.php?id=' . vb($frm['id']) . '&mode=supprime');
630  }
631  }
632  }
633 
634  $tpl->assign('default_image', vb($frm['default_image']));
635 
636  $tpl->assign('drop_src', $GLOBALS['administrer_url'] . '/images/b_drop.png');
637  $tpl_files = array();
638  for ($i = 1; $i <= 10; $i++) {
639  $tpl_files[$i] = get_uploaded_file_infos('image' . $i, $frm['image' . $i], get_current_url(false) . '?mode=supprfile&id=' . vb($frm['id']) . '&file=image' . $i);
640  }
641 
642  if(!empty($GLOBALS['site_parameters']['products_table_additionnal_fields'])) {
643  foreach($GLOBALS['site_parameters']['products_table_additionnal_fields'] as $this_key => $this_value) {
644  if (strpos($this_key, 'image') === 0) {
645  $tpl_files[$i] = get_uploaded_file_infos($this_key, $frm[$this_key], get_current_url(false) . '?mode=supprfile&id=' . vb($frm['id']) . '&file=' . $this_key);
646  $i++;
647  }
648  }
649  }
650  $tpl->assign('files', $tpl_files);
651 
652  $tpl_colors = array();
656  $selectCouleur = "SELECT c.*, pc.default_image, pc.image1, pc.image2, pc.image3, pc.image4, pc.image5, pc.couleur_id as coul
657  FROM peel_couleurs c
658  INNER JOIN peel_produits_couleurs pc ON pc.couleur_id = c.id AND pc.produit_id = '" . intval(vb($frm['id'])) . "'
659  WHERE " . get_filter_site_cond('couleurs', 'c') . "
660  ORDER BY c.position ASC, c.nom_" . $_SESSION['session_langue'] . " ASC";
661  $query = query($selectCouleur);
662  // Compteur permettant de fournir l'image par défaut en fonction de chaque couleur
663  $nomCouleur_array = array();
664  while ($nomCouleur = fetch_assoc($query)) {
665  $nomCouleur_array[] = $nomCouleur;
666  }
667  // Le nombre de champs d'images téléchargeables est limité par la configuration PHP max_file_uploads qui peut être modifiée dans php.ini ou httpd.conf
668  // Il est donc nécessaire de limiter le nombre de champs par couleur afin de ne pas dépasser cette limite
669  if (function_exists('ini_get') && @ini_get('max_file_uploads') && !empty($nomCouleur_array)) {
670  $upload_images_per_color = min(5, ceil(ini_get('max_file_uploads')) / count($nomCouleur_array));
671  } else {
672  $upload_images_per_color = 2;
673  }
674  $tpl->assign('upload_images_per_color', $upload_images_per_color);
675  foreach($nomCouleur_array as $this_couleur) {
676  $image_found = false;
677  for($i = 1;$i <= $upload_images_per_color;$i++) {
678  if (!empty($this_couleur['image' . $i])) {
679  $image_found = true;
680  break;
681  }
682  }
683  $tpl_images = array();
684  if ($image_found) {
685  for ($i = 1; $i <= $upload_images_per_color; $i++) {
686  $tpl_images[$i] = get_uploaded_file_infos('imagecouleur' . $this_couleur['id'] . '_' . $i, $this_couleur['image' . $i], get_current_url(false) . '?mode=supprfile&id=' . vb($frm['id']) . '&coul=' . $this_couleur['coul'] . '&file=image' . $i . '&page=' . (!empty($_GET['page']) ? $_GET['page'] : 1));
687  }
688  }
689  $tpl_colors[] = array('nom' => $this_couleur['nom_' . $_SESSION['session_langue']],
690  'id' => $this_couleur['id'],
691  'issel' => vb($frm['default_color_id']) == $this_couleur['coul'],
692  'coul' => $this_couleur['coul'],
693  'default_image' => vb($this_couleur['default_image']),
694  'images' => $tpl_images
695  );
696  }
697  $tpl->assign('colors', $tpl_colors);
698 
699  $tpl->assign('youtube_code', $frm['youtube_code']);
700 
701  $tpl_util_options = array();
702  $select = query("SELECT id_utilisateur, societe
703  FROM peel_utilisateurs
704  WHERE priv = 'supplier' AND " . get_filter_site_cond('utilisateurs') . "
705  ORDER BY societe");
706  while ($nom = fetch_assoc($select)) {
707  $tpl_util_options[] = array('value' => intval($nom['id_utilisateur']),
708  'issel' => $nom['id_utilisateur'] == vb($frm['id_utilisateur']),
709  'name' => $nom['societe']
710  );
711  }
712  $tpl->assign('util_options', $tpl_util_options);
713 
714  $tpl_marques_options = array();
715  $select = query("SELECT id, nom_" . $_SESSION['session_langue'] . ", etat
716  FROM peel_marques
717  WHERE " . get_filter_site_cond('marques') . "
718  ORDER BY position, nom_" . $_SESSION['session_langue'] . " ASC");
719  while ($nom = fetch_assoc($select)) {
720  $tpl_marques_options[] = array('value' => intval($nom['id']),
721  'issel' => $nom['id'] == vb($frm['id_marque']),
722  'name' => $nom['nom_' . $_SESSION['session_langue']] . (empty($nom['etat'])?' ('.$GLOBALS["STR_ADMIN_DEACTIVATED"].')':'')
723  );
724  }
725  $tpl->assign('marques_options', $tpl_marques_options);
726 
727  if (check_if_module_active('stock_advanced')) {
728  $tpl_gestion_stock = affiche_gestion_stock($frm);
729  $tpl->assign('gestion_stock', $tpl_gestion_stock);
730  }
731 
732  $tpl_produits_options = array();
733  $select = query("SELECT pr.reference_id, p.reference, p.nom_".(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])?$GLOBALS['site_parameters']['product_name_forced_lang']:$_SESSION['session_langue'])." AS name
734  FROM peel_produits p
735  LEFT JOIN peel_produits_references pr ON pr.reference_id = p.id
736  WHERE produit_id = ".intval($frm['id'])." AND " . get_filter_site_cond('produits', 'p', true) . "
737  ORDER BY reference ASC");
738  $i=1;
739  while ($nom = fetch_assoc($select)) {
740  $tpl_produits_options[] = array('value' => intval($nom['reference_id']),
741  'reference' => $nom['reference'],
742  'name' => $nom['name'],
743  'i' => $i,
744  );
745  $i++;
746  }
747  $tpl->assign('nb_produits', $frm['nb_produits']);
748  $tpl->assign('produits_options', $tpl_produits_options);
749  $tpl->assign('is_on_ref_produit', vn($frm['on_ref_produit']) == 1);
750  $tpl->assign('nb_ref_produits', intval(vn($frm['nb_ref_produits'])));
751  $tpl->assign('administrer_url', $GLOBALS['administrer_url']);
752 
753  $tpl->assign('is_attributes_module_active', check_if_module_active('attributs'));
754  if (check_if_module_active('attributs')) {
755  $tpl->assign('produits_attributs_href', $GLOBALS['wwwroot_in_admin'] . "/modules/attributs/administrer/produits_attributs.php?id=" . $frm['id']);
756  $tpl->assign('nom_attributs_href', $GLOBALS['wwwroot_in_admin'] . '/modules/attributs/administrer/nom_attributs.php');
757  }
758 
759  $tpl_couleurs_options = array();
760  $select = query("SELECT c.*
761  FROM peel_couleurs c
762  WHERE " . get_filter_site_cond('couleurs', 'c') . "
763  ORDER BY c.position ASC, c.nom_" . $_SESSION['session_langue'] . " ASC");
764 
765  while ($nom = fetch_assoc($select)) {
766  if (isset($_SESSION['session_admin_multisite']) && $_SESSION['session_admin_multisite'] === 0) {
767  // L'administrateur multisite consulte la liste des couleurs existantes. Dans ce cas toutes les couleurs des tous les sont affichées, on affiche dans ce cas le nom du site à coté du nom de la couleurs pour éviter des erreurs d'administration.
768  $color_name = '[' . $all_sites_name_array[$nom['site_id']] . '] ' . $nom['nom_' . $_SESSION['session_langue']];
769  } else {
770  $color_name = $nom['nom_' . $_SESSION['session_langue']];
771  }
772  $tpl_couleurs_options[] = array('value' => intval($nom['id']),
773  'issel' => in_array($nom['id'], vn($frm['couleurs'])),
774  'name' => $color_name);
775  }
776  $tpl->assign('couleurs_options', $tpl_couleurs_options);
777 
778  $tpl_tailles_options = array();
779  $select = query("SELECT t.*
780  FROM peel_tailles t
781  WHERE " . get_filter_site_cond('tailles', 't') . "
782  ORDER BY t.position ASC, t.prix ASC, t.nom_" . $_SESSION['session_langue'] . " ASC");
783  while ($nom = fetch_assoc($select)) {
784  if (isset($_SESSION['session_admin_multisite']) && $_SESSION['session_admin_multisite'] === 0) {
785  // L'administrateur multisite consulte la liste des couleurs existantes. Dans ce cas toutes les couleurs des tous les sont affichées, on affiche dans ce cas le nom du site à coté du nom de la couleurs pour éviter des erreurs d'administration.
786  $size_name = '[' . $all_sites_name_array[$nom['site_id']] . '] ' . $nom['nom_' . $_SESSION['session_langue']];
787  } else {
788  $size_name = $nom['nom_' . $_SESSION['session_langue']];
789  }
790  $tpl_tailles_options[] = array('value' => $nom['id'],
791  'issel' => is_array(vn($frm['tailles'])) && in_array($nom['id'], vn($frm['tailles'])),
792  'name' => $size_name,
793  'prix' => ($nom['prix'] != 0 ? fprix($nom['prix'], true, $GLOBALS['site_parameters']['code'], false) : null)
794  );
795  }
796  $tpl->assign('tailles_options', $tpl_tailles_options);
797 
798  $tpl->assign('products_table_additionnal_fields', !empty($GLOBALS['site_parameters']['products_table_additionnal_fields']));
799  if(!empty($GLOBALS['site_parameters']['products_table_additionnal_fields'])) {
800  $products_table_additionnal_fields = array();
801  foreach($GLOBALS['site_parameters']['products_table_additionnal_fields'] as $this_key => $this_value) {
802  if (strpos($this_key, 'image') === 0) {
803  // Les images sont gérés dans la partie FICHIERS ASSOCIÉS AUX PRODUITS.
804  continue;
805  }
806  $products_table_additionnal_fields[] = array('title' => $this_value, 'name' => $this_key, 'value' => vb($frm[$this_key]), 'type' => 'text');
807  }
808  $tpl->assign('products_table_additionnal_fields_array', $products_table_additionnal_fields);
809  }
810 
811  $tpl->assign('is_download_module_active', check_if_module_active('download'));
812  $tpl->assign('is_on_download', !empty($frm['on_download']));
813  $tpl->assign('zip', vb($frm['zip']));
814 
815  $tpl->assign('is_flash_sell_module_active', check_if_module_active('flash'));
816  if (check_if_module_active('flash')) {
817  $tpl->assign('prix_flash', vn($prix_flash));
818  $tpl->assign('flash_start', get_formatted_date($frm['flash_start'], 'short', 'long'));
819  $tpl->assign('flash_end', get_formatted_date($frm['flash_end'], 'short', 'long'));
820  $tpl->assign('is_on_flash', !empty($frm['on_flash']));
821  }
822  $tpl->assign('is_module_gift_checks_active', check_if_module_active('gift_check'));
823  $tpl->assign('is_on_gift', !empty($frm['on_gift']));
824  $tpl->assign('on_gift_points', vb($frm['on_gift_points']));
825 
826  $tpl->assign('normal_bouton', $frm['normal_bouton']);
827  $tpl->assign('STR_CHOOSE', $GLOBALS['STR_CHOOSE']);
828  $tpl->assign('STR_HT', $GLOBALS['STR_HT']);
829  $tpl->assign('STR_TTC', $GLOBALS['STR_TTC']);
830  $tpl->assign('STR_ADMIN_COMMANDER_ADD_LINE_TO_ORDER', $GLOBALS['STR_ADMIN_COMMANDER_ADD_LINE_TO_ORDER']);
831  $tpl->assign('STR_ADMIN_COMMANDER_OR_ADD_PRODUCT_WITH_FAST_SEARCH', $GLOBALS['STR_ADMIN_COMMANDER_OR_ADD_PRODUCT_WITH_FAST_SEARCH']);
832  $tpl->assign('STR_ADMIN_WEBSITE', $GLOBALS['STR_ADMIN_WEBSITE']);
833  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
834  $tpl->assign('STR_ADMIN_SITE_COUNTRY', $GLOBALS['STR_ADMIN_SITE_COUNTRY']);
835  }
836  $tpl->assign('STR_ADMIN_ADD_EMPTY_LINE', $GLOBALS['STR_ADMIN_ADD_EMPTY_LINE']);
837  $tpl->assign('STR_ADMIN_PRODUCT_ORDERED_DELETE_CONFIRM', $GLOBALS["STR_ADMIN_PRODUCT_ORDERED_DELETE_CONFIRM"]);
838  $tpl->assign('STR_ADMIN_PRODUCT_ORDERED_DELETE', $GLOBALS["STR_ADMIN_PRODUCT_ORDERED_DELETE"]);
839  $tpl->assign('STR_ADMIN_PRODUITS_UPDATE', $GLOBALS['STR_ADMIN_PRODUITS_UPDATE']);
840  $tpl->assign('STR_ADMIN_SEE_RESULT_IN_REAL', $GLOBALS['STR_ADMIN_SEE_RESULT_IN_REAL']);
841  $tpl->assign('STR_ADMIN_PRODUITS_ADD', $GLOBALS['STR_ADMIN_PRODUITS_ADD']);
842  $tpl->assign('STR_ADMIN_PRODUITS_VIEWS_COUNT', $GLOBALS['STR_ADMIN_PRODUITS_VIEWS_COUNT']);
843  $tpl->assign('STR_BEFORE_TWO_POINTS', $GLOBALS['STR_BEFORE_TWO_POINTS']);
844  $tpl->assign('STR_CATEGORY', $GLOBALS['STR_CATEGORY']);
845  $tpl->assign('STR_DELETE', $GLOBALS['STR_DELETE']);
846  $tpl->assign('STR_ADMIN_PRODUITS_POSITION_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_POSITION_EXPLAIN']);
847  $tpl->assign('STR_ADMIN_POSITION', $GLOBALS['STR_ADMIN_POSITION']);
848  $tpl->assign('STR_ADMIN_PRODUITS_IS_GIFT_CHECK', $GLOBALS['STR_ADMIN_PRODUITS_IS_GIFT_CHECK']);
849  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_HOME', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_HOME']);
850  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_NEW', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_NEW']);
851  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_RESELLER', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_RESELLER']);
852  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_PROMOTIONS', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_PROMOTIONS']);
853  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_PROMOTIONS_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_PROMOTIONS_EXPLAIN']);
854  $tpl->assign('STR_ADMIN_PRODUITS_EXTRA_LINK', $GLOBALS['STR_ADMIN_PRODUITS_EXTRA_LINK']);
855  $tpl->assign('STR_ADMIN_TECHNICAL_CODE', $GLOBALS['STR_ADMIN_TECHNICAL_CODE']);
856  $tpl->assign('STR_ADMIN_PRODUITS_BEST_SELLERS', $GLOBALS['STR_ADMIN_PRODUITS_BEST_SELLERS']);
857  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_ROLLOVER', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_ROLLOVER']);
858  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_ESTIMATE', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_ESTIMATE']);
859  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_CART_PAGE', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_CART_PAGE']);
860  $tpl->assign('STR_STATUS', $GLOBALS['STR_STATUS']);
861  $tpl->assign('STR_ADMIN_ONLINE', $GLOBALS['STR_ADMIN_ONLINE']);
862  $tpl->assign('STR_ADMIN_OFFLINE', $GLOBALS['STR_ADMIN_OFFLINE']);
863  $tpl->assign('STR_REFERENCE', $GLOBALS['STR_REFERENCE']);
864  $tpl->assign('STR_CONDITIONNEMENT', $GLOBALS['STR_CONDITIONNEMENT']);
865  $tpl->assign('STR_CONDITIONNEMENT_QTY', $GLOBALS['STR_CONDITIONNEMENT_QTY']);
866  $tpl->assign('STR_ADMIN_PRODUITS_EAN_CODE', $GLOBALS['STR_ADMIN_PRODUITS_EAN_CODE']);
867  $tpl->assign('STR_ADMIN_PRODUITS_UNIT_PER_PALLET', $GLOBALS['STR_ADMIN_PRODUITS_UNIT_PER_PALLET']);
868  $tpl->assign('STR_ADMIN_NAME', $GLOBALS['STR_ADMIN_NAME']);
869  $tpl->assign('STR_ADMIN_PRODUITS_PRICE_IN', $GLOBALS['STR_ADMIN_PRODUITS_PRICE_IN']);
870  $tpl->assign('STR_ADMIN_PRODUITS_PRICE_PROMOTION', $GLOBALS['STR_ADMIN_PRODUITS_PRICE_PROMOTION']);
871  $tpl->assign('STR_ADMIN_PRODUITS_RESELLER_PRICE_IN', $GLOBALS['STR_ADMIN_PRODUITS_RESELLER_PRICE_IN']);
872  $tpl->assign('STR_ADMIN_PRODUITS_PURCHASE_PRICE_IN', $GLOBALS['STR_ADMIN_PRODUITS_PURCHASE_PRICE_IN']);
873  $tpl->assign('STR_ADMIN_VAT_PERCENTAGE', $GLOBALS['STR_ADMIN_VAT_PERCENTAGE']);
874  $tpl->assign('STR_ADMIN_ECOTAX', $GLOBALS['STR_ADMIN_ECOTAX']);
875  $tpl->assign('STR_ADMIN_NOT_APPLICABLE', $GLOBALS['STR_ADMIN_NOT_APPLICABLE']);
876  $tpl->assign('STR_ADMIN_PRODUITS_DISCOUNT_PERCENTAGE', $GLOBALS['STR_ADMIN_PRODUITS_DISCOUNT_PERCENTAGE']);
877  $tpl->assign('STR_ADMIN_PRODUITS_DISCOUNT_PERCENTAGE_OVER_LISTED_PRICE', $GLOBALS['STR_ADMIN_PRODUITS_DISCOUNT_PERCENTAGE_OVER_LISTED_PRICE']);
878  $tpl->assign('STR_ADMIN_PRODUITS_GIFT_POINTS', $GLOBALS['STR_ADMIN_PRODUITS_GIFT_POINTS']);
879  $tpl->assign('STR_ADMIN_PRODUITS_WEIGHT', $GLOBALS['STR_ADMIN_PRODUITS_WEIGHT']);
880  $tpl->assign('STR_ADMIN_PRODUITS_WEIGHT_UNIT', $GLOBALS['STR_ADMIN_PRODUITS_WEIGHT_UNIT']);
881  $tpl->assign('STR_ADMIN_PRODUITS_VOLUME', $GLOBALS['STR_ADMIN_PRODUITS_VOLUME']);
882  $tpl->assign('STR_ADMIN_PRODUITS_VOLUME_UNIT', $GLOBALS['STR_ADMIN_PRODUITS_VOLUME_UNIT']);
883  $tpl->assign('STR_ADMIN_PRODUITS_DISPLAY_PRICE_PER_KILO', $GLOBALS['STR_ADMIN_PRODUITS_DISPLAY_PRICE_PER_KILO']);
884  $tpl->assign('STR_ADMIN_PRODUITS_DISPLAY_PRICE_PER_LITER', $GLOBALS['STR_ADMIN_PRODUITS_DISPLAY_PRICE_PER_LITER']);
885  $tpl->assign('STR_ADMIN_PRODUITS_DISPLAY_NO_PRICE_PER_UNIT', $GLOBALS['STR_ADMIN_PRODUITS_DISPLAY_NO_PRICE_PER_UNIT']);
886  $tpl->assign('STR_ADMIN_PRODUITS_LOT_PRICE', $GLOBALS['STR_ADMIN_PRODUITS_LOT_PRICE']);
887  $tpl->assign('STR_ADMIN_PRODUITS_LOT_PRICE_HANDLE', $GLOBALS['STR_ADMIN_PRODUITS_LOT_PRICE_HANDLE']);
888  $tpl->assign('STR_ADMIN_DELETE_WARNING', $GLOBALS['STR_ADMIN_DELETE_WARNING']);
889  $tpl->assign('STR_ADMIN_PRODUITS_LOT_PRICE_HANDLE_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_LOT_PRICE_HANDLE_EXPLAIN']);
890  $tpl->assign('STR_ADMIN_PRODUITS_FILES_HEADER', $GLOBALS['STR_ADMIN_PRODUITS_FILES_HEADER']);
891  $tpl->assign('STR_ADMIN_PRODUITS_FILES_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_FILES_EXPLAIN']);
892  $tpl->assign('STR_ADMIN_PRODUITS_DEFAULT_FILE_NUMBER', $GLOBALS['STR_ADMIN_PRODUITS_DEFAULT_FILE_NUMBER']);
893  $tpl->assign('STR_IMAGE', $GLOBALS['STR_IMAGE']);
894  $tpl->assign('STR_FILE', $GLOBALS['STR_FILE']);
895  $tpl->assign('STR_ADMIN_FILE_NAME', $GLOBALS['STR_ADMIN_FILE_NAME']);
896  $tpl->assign('STR_DELETE_THIS_FILE', $GLOBALS['STR_DELETE_THIS_FILE']);
897  $tpl->assign('STR_ADMIN_PRODUITS_FILE_FOR_COLOR', $GLOBALS['STR_ADMIN_PRODUITS_FILE_FOR_COLOR']);
898  $tpl->assign('STR_ADMIN_PRODUITS_FILES_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_FILES_EXPLAIN']);
899  $tpl->assign('STR_ADMIN_PRODUITS_DEFAULT_FILE_NUMBER', $GLOBALS['STR_ADMIN_PRODUITS_DEFAULT_FILE_NUMBER']);
900  $tpl->assign('STR_ADMIN_PRODUITS_DEFAULT_FILE_NUMBER_CONSTRAINT', $GLOBALS['STR_ADMIN_PRODUITS_DEFAULT_FILE_NUMBER_CONSTRAINT']);
901  $tpl->assign('STR_ADMIN_DELETE_IMAGE', $GLOBALS['STR_ADMIN_DELETE_IMAGE']);
902  $tpl->assign('STR_ADMIN_PRODUITS_ADD_INPUT_FOR_THIS_COLOR', $GLOBALS['STR_ADMIN_PRODUITS_ADD_INPUT_FOR_THIS_COLOR']);
903  $tpl->assign('STR_ADMIN_PRODUITS_VIDEO_TAG', $GLOBALS['STR_ADMIN_PRODUITS_VIDEO_TAG']);
904  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_TABS_TITLE', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_TABS_TITLE']);
905  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_TABS_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_TABS_EXPLAIN']);
906  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_TAB', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_TAB']);
907  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_TAB_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_TAB_EXPLAIN']);
908  $tpl->assign('STR_ADMIN_PRODUITS_TEXT_RELATED_IN', $GLOBALS['STR_ADMIN_PRODUITS_TEXT_RELATED_IN']);
909  $tpl->assign('STR_ADMIN_PRODUITS_SHORT_DESCRIPTION', $GLOBALS['STR_ADMIN_PRODUITS_SHORT_DESCRIPTION']);
910  $tpl->assign('STR_ADMIN_PRODUITS_DESCRIPTION', $GLOBALS['STR_ADMIN_PRODUITS_DESCRIPTION']);
911  $tpl->assign('STR_ADMIN_META_TITLE', $GLOBALS['STR_ADMIN_META_TITLE']);
912  $tpl->assign('STR_ADMIN_META_TITLE_EXPLAIN', $GLOBALS['STR_ADMIN_META_TITLE_EXPLAIN']);
913  $tpl->assign('STR_ADMIN_META_KEYWORDS', $GLOBALS['STR_ADMIN_META_KEYWORDS']);
914  $tpl->assign('STR_ADMIN_SEPARATE_KEYWORDS_EXPLAIN', $GLOBALS['STR_ADMIN_SEPARATE_KEYWORDS_EXPLAIN']);
915  $tpl->assign('STR_ADMIN_META_KEYWORDS_EXPLAIN', $GLOBALS['STR_ADMIN_META_KEYWORDS_EXPLAIN']);
916  $tpl->assign('STR_ADMIN_META_DESCRIPTION', $GLOBALS['STR_ADMIN_META_DESCRIPTION']);
917  $tpl->assign('STR_ADMIN_META_DESCRIPTION_EXPLAIN', $GLOBALS['STR_ADMIN_META_DESCRIPTION_EXPLAIN']);
918  $tpl->assign('STR_ADMIN_PRODUITS_LINK_PRODUCT_TO_SUPPLIER', $GLOBALS['STR_ADMIN_PRODUITS_LINK_PRODUCT_TO_SUPPLIER']);
919  $tpl->assign('STR_ADMIN_PRODUITS_CHOOSE_BRAND', $GLOBALS['STR_ADMIN_PRODUITS_CHOOSE_BRAND']);
920  $tpl->assign('STR_ADMIN_PRODUITS_CHOOSE_REFERENCE', $GLOBALS['STR_ADMIN_PRODUITS_CHOOSE_REFERENCE']);
921  $tpl->assign('STR_ADMIN_PRODUITS_CHOOSE_REFERENCE_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_CHOOSE_REFERENCE_EXPLAIN']);
922  $tpl->assign('STR_ADMIN_PRODUITS_AUTO_REF_PRODUCT', $GLOBALS['STR_ADMIN_PRODUITS_AUTO_REF_PRODUCT']);
923  $tpl->assign('STR_ADMIN_PRODUITS_AUTO_REF_NUMBER_PRODUCTS', $GLOBALS['STR_ADMIN_PRODUITS_AUTO_REF_NUMBER_PRODUCTS']);
924  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_CRITERIA', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_CRITERIA']);
925  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_CRITERIA_INTRO', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_CRITERIA_INTRO']);
926  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_CRITERIA_LINK', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_CRITERIA_LINK']);
927  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_CRITERIA_TEASER', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_CRITERIA_TEASER']);
928  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_COLORS_SIZES_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_COLORS_SIZES_EXPLAIN']);
929  $tpl->assign('STR_ADMIN_PRODUITS_OTHER_OPTION', $GLOBALS['STR_ADMIN_PRODUITS_OTHER_OPTION']);
930  $tpl->assign('STR_ADMIN_PRODUITS_PRODUCT_COLORS', $GLOBALS['STR_ADMIN_PRODUITS_PRODUCT_COLORS']);
931  $tpl->assign('STR_ADMIN_PRODUITS_OTHER_OPTION', $GLOBALS['STR_ADMIN_PRODUITS_OTHER_OPTION']);
932  $tpl->assign('STR_ADMIN_PRODUITS_PRODUCT_SIZES', $GLOBALS['STR_ADMIN_PRODUITS_PRODUCT_SIZES']);
933  $tpl->assign('STR_ADMIN_PRODUITS_DOWNLOAD_PRODUCTS_HEADER', $GLOBALS['STR_ADMIN_PRODUITS_DOWNLOAD_PRODUCTS_HEADER']);
934  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_DOWLOAD', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_DOWLOAD']);
935  $tpl->assign('STR_ADMIN_PRODUITS_FILE_NAME', $GLOBALS['STR_ADMIN_PRODUITS_FILE_NAME']);
936  $tpl->assign('STR_ADMIN_PRODUITS_FLASH_SALE', $GLOBALS['STR_ADMIN_PRODUITS_FLASH_SALE']);
937  $tpl->assign('STR_ADMIN_PRODUITS_FLASH_SALE_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_FLASH_SALE_EXPLAIN']);
938  $tpl->assign('STR_ADMIN_PRODUITS_FLASH_PRICE', $GLOBALS['STR_ADMIN_PRODUITS_FLASH_PRICE']);
939  $tpl->assign('STR_ADMIN_PRODUITS_FLASH_START_DATE', $GLOBALS['STR_ADMIN_PRODUITS_FLASH_START_DATE']);
940  $tpl->assign('STR_ADMIN_PRODUITS_FLASH_END_DATE', $GLOBALS['STR_ADMIN_PRODUITS_FLASH_END_DATE']);
941  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_FLASH', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_FLASH']);
942  $tpl->assign('STR_ADMIN_PRODUITS_GIFT_CHECK_HEADER', $GLOBALS['STR_ADMIN_PRODUITS_GIFT_CHECK_HEADER']);
943  $tpl->assign('STR_ADMIN_PRODUITS_IS_ON_GIFT', $GLOBALS['STR_ADMIN_PRODUITS_IS_ON_GIFT']);
944  $tpl->assign('STR_ADMIN_PRODUITS_GIFT_POINTS_NEEDED', $GLOBALS['STR_ADMIN_PRODUITS_GIFT_POINTS_NEEDED']);
945  $tpl->assign('STR_ERR_CAT', $GLOBALS['STR_ERR_CAT']);
946  $tpl->assign('STR_BEFORE_TWO_POINTS', $GLOBALS['STR_BEFORE_TWO_POINTS']);
947  $tpl->assign('STR_ADMIN_PRODUITS_GIFT_CHECK_EXPLAIN', $GLOBALS['STR_ADMIN_PRODUITS_GIFT_CHECK_EXPLAIN']);
948  $tpl->assign('STR_ADMIN_PRODUITS_DEFAULT_COLOR_IN_FRONT', $GLOBALS['STR_ADMIN_PRODUITS_DEFAULT_COLOR_IN_FRONT']);
949  $tpl->assign('STR_ADMIN_VARIOUS_INFORMATION_HEADER', $GLOBALS['STR_ADMIN_VARIOUS_INFORMATION_HEADER']);
950  $output .= $tpl->fetch();
951  }
952  return $output;
953 }
954 
963 {
964  $output = '';
965  /* Charge les infos du produit. */
966  $qid = query("SELECT *, nom_".(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])?$GLOBALS['site_parameters']['product_name_forced_lang']:$_SESSION['session_langue'])." AS name
967  FROM peel_produits
968  WHERE id = '" . intval($id) . "' AND " . get_filter_site_cond('produits', null, true) . "");
969  $product_infos = fetch_assoc($qid);
970  // delete_all_product_file(intval($id));
971  for ($i = 1; $i <= 10; $i++) {
972  if(!empty($product_infos['image' . $i])) {
973  supprime_fichier_produit($id, 'image' . $i);
974  }
975  }
976 
977  $sql = query("SELECT *
978  FROM peel_produits_couleurs
979  WHERE produit_id = " . intval($id));
980  while ($prod = fetch_assoc($sql)) {
981  for ($i = 1; $i <= 5; $i++) {
982  if(!empty($prod['image' . $i])) {
983  supprime_fichier_couleur($id, 'image' . $i, $prod['couleur_id']);
984  }
985  }
986  }
987 
988  /* Efface ce produit dans les tables de jointure telles que la table peel_produits_categories */
989  query("DELETE FROM peel_produits_categories WHERE produit_id = '" . intval($id) . "'");
990  query("DELETE FROM peel_produits_references WHERE produit_id = '" . intval($id) . "'");
991  query("DELETE FROM peel_produits_couleurs WHERE produit_id = '" . intval($id) . "'");
992  query("DELETE FROM peel_produits_tailles WHERE produit_id = '" . intval($id) . "'");
993  if (check_if_module_active('stock_advanced') && $product_infos['on_stock'] == 1) {
994  query("DELETE FROM peel_stocks WHERE produit_id = '" . intval($id) . "'");
995  }
996  // Efface le produit
997  query("DELETE FROM peel_produits WHERE id = '" . intval($id) . "' AND " . get_filter_site_cond('produits', null, true));
998 
999  if (affected_rows()) {
1000  $output .= $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => sprintf($GLOBALS['STR_ADMIN_PRODUITS_MSG_DELETED_OK'], String::html_entity_decode_if_needed($product_infos['name']))))->fetch();
1001  }
1002  return $output;
1003 }
1004 
1013 {
1014  $output = '';
1015  if (strpos($file, 'image') === 0) {
1016  $sql = "SELECT " . word_real_escape_string($file) . "
1017  FROM peel_produits
1018  WHERE id='" . intval($id) . "' AND " . get_filter_site_cond('produits', null, true) . "";
1019  $res = query($sql);
1020  if ($file_infos = fetch_assoc($res)) {
1021  query("UPDATE peel_produits
1022  SET `" . word_real_escape_string($file) . "`=''
1023  WHERE id='" . intval($id) . "' AND " . get_filter_site_cond('produits', null, true) . "");
1024  }
1025  }
1026  if (!empty($file_infos) && delete_uploaded_file_and_thumbs($file_infos[$file])) {
1027  $output .= $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => sprintf($GLOBALS['STR_ADMIN_RUBRIQUES_MSG_DELETED_OK'], $file_infos[$file])))->fetch();
1028  }
1029  return $output;
1030 }
1031 
1040 function supprime_fichier_couleur($id, $file, $couleur_id)
1041 {
1042  $output = '';
1043  if (in_array($file, array('default_image', 'image1', 'image2', 'image3', 'image4', 'image5'))) {
1044  $sql = "SELECT " . word_real_escape_string($file) . "
1045  FROM peel_produits_couleurs
1046  WHERE produit_id = '" . intval($id) . "' AND couleur_id='" . intval($couleur_id) . "'";
1047  $res = query($sql);
1048  if ($file_infos = fetch_row($res)) {
1049  query("UPDATE peel_produits_couleurs
1050  SET " . word_real_escape_string($file) . "=''
1051  WHERE produit_id = '" . intval($id) . "' AND couleur_id='" . intval($couleur_id) . "'");
1052  }
1053  }
1054  if (!empty($file_infos[$file]) && delete_uploaded_file_and_thumbs($file_infos[$file])) {
1055  $output .= $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => sprintf($GLOBALS['STR_ADMIN_RUBRIQUES_MSG_DELETED_OK'], $file_infos[$file])))->fetch();
1056  }
1057  return $output;
1058 }
1059 
1067 {
1068  $output = '';
1069  if (!empty($frm['promotion'])) {
1070  $frm['on_promo'] = 1;
1071  } else {
1072  $frm['on_promo'] = 0;
1073  }
1075  $prix = $frm['prix'];
1076  } else {
1077  $prix = $frm['prix'] * (1 + $frm['tva'] / 100);
1078  }
1080  $prix_promo = $frm['prix_promo'];
1081  } else {
1082  $prix_promo = $frm['prix_promo'] * (1 + $frm['tva'] / 100);
1083  }
1084  if (check_if_module_active('flash')) {
1086  $prix_flash = $frm['prix_flash'];
1087  } else {
1088  $prix_flash = $frm['prix_flash'] * (1 + $frm['tva'] / 100);
1089  }
1090  }
1091  if (check_if_module_active('reseller') && !empty($frm['prix_revendeur'])) {
1092  if (display_prices_with_taxes_in_admin() && empty($GLOBALS['site_parameters']['force_display_reseller_prices_without_taxes'])) {
1093  $prix_revendeur = $frm['prix_revendeur'];
1094  } else {
1095  $prix_revendeur = $frm['prix_revendeur'] * (1 + $frm['tva'] / 100);
1096  }
1097  } else {
1098  $prix_revendeur = 0;
1099  }
1100  $prix_achat = $frm['prix_achat'] * (1 + $frm['tva'] / 100);
1101  /* ajoute le produit dans la table produits */
1102 
1103  $sqlProd = "INSERT INTO peel_produits (
1104  reference
1105  , ean_code
1106  , prix
1107 
1108  , prix_promo
1109  , prix_revendeur
1110  , prix_achat
1111  , default_image
1112  , image1
1113  , image2
1114  , image3
1115  , image4
1116  , image5
1117  , image6
1118  , image7
1119  , image8
1120  , image9
1121  , image10
1122  , youtube_code
1123  , promotion
1124  , tva
1125  , etat
1126  , date_insere
1127  , date_maj
1128  , on_special
1129  , poids
1130  , on_promo
1131  , on_reseller
1132  , alpha
1133  , on_new
1134  , on_stock
1135  , delai_stock
1136  , affiche_stock
1137  , id_marque
1138  , on_rupture
1139  , id_ecotaxe
1140  , id_utilisateur
1141  , position
1142  , on_ref_produit
1143  , nb_ref_produits
1144  , display_price_by_weight
1145  , volume
1146  , on_estimate
1147  , recommanded_product_on_cart_page
1148  , extra_link
1149  , technical_code
1150  , site_id";
1151  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
1152  $sqlProd .= "
1153  , site_country";
1154  }
1155  foreach ($GLOBALS['admin_lang_codes'] as $lng) {
1156  $sqlProd .= "
1157  , nom_" . $lng . "
1158  , descriptif_" . $lng . "
1159  , description_" . $lng . '
1160  , meta_titre_' . $lng . '
1161  , meta_key_' . $lng . '
1162  , meta_desc_' . $lng;
1163  }
1164  if (check_if_module_active('flash')) {
1165  $sqlProd .= ', prix_flash
1166  , on_flash
1167  , flash_start
1168  , flash_end';
1169  }
1170  if (check_if_module_active('gift_check')) {
1171  $sqlProd .= ', on_check';
1172  }
1173  if (check_if_module_active('best_seller')) {
1174  $sqlProd .= ', on_top';
1175  }
1176  if (check_if_module_active('menus')) {
1177  $sqlProd .= ', on_rollover';
1178  }
1179  if (check_if_module_active('gifts')) {
1180  $sqlProd .= ', points
1181  , on_gift
1182  , on_gift_points';
1183  }
1184  if (check_if_module_active('download')) {
1185  $sqlProd .= ', zip
1186  , on_download';
1187  }
1188  if (check_if_module_active('conditionnement')) {
1189  $sqlProd .= ', conditionnement';
1190  $sqlProd .= ', unit_per_pallet';
1191  }
1192  if(!empty($GLOBALS['site_parameters']['products_table_additionnal_fields'])) {
1193  foreach($GLOBALS['site_parameters']['products_table_additionnal_fields'] as $this_key => $this_value) {
1194  $sqlProd .= ', ' . word_real_escape_string($this_key);
1195  }
1196  }
1197  $sqlProd .= "
1198  ) VALUES (
1199  '" . nohtml_real_escape_string($frm['reference']) . "'
1200  , '" . nohtml_real_escape_string($frm['ean_code']) . "'
1201  , '" . nohtml_real_escape_string($prix) . "'
1202  , '" . nohtml_real_escape_string($prix_promo) . "'
1203  , '" . nohtml_real_escape_string($prix_revendeur) . "'
1204  , '" . nohtml_real_escape_string($prix_achat) . "'
1205  , '" . nohtml_real_escape_string($frm['default_image']) . "'
1206  , '" . nohtml_real_escape_string($frm['image1']) . "'
1207  , '" . nohtml_real_escape_string($frm['image2']) . "'
1208  , '" . nohtml_real_escape_string($frm['image3']) . "'
1209  , '" . nohtml_real_escape_string($frm['image4']) . "'
1210  , '" . nohtml_real_escape_string($frm['image5']) . "'
1211  , '" . nohtml_real_escape_string($frm['image6']) . "'
1212  , '" . nohtml_real_escape_string($frm['image7']) . "'
1213  , '" . nohtml_real_escape_string($frm['image8']) . "'
1214  , '" . nohtml_real_escape_string($frm['image9']) . "'
1215  , '" . nohtml_real_escape_string($frm['image10']) . "'
1216  , '" . real_escape_string($frm['youtube_code']) . "'
1217  , '" . nohtml_real_escape_string($frm['promotion']) . "'
1218  , '" . nohtml_real_escape_string($frm['tva']) . "'
1219  , '" . nohtml_real_escape_string($frm['etat']) . "'
1220  , '" . date('Y-m-d H:i:s', time()) . "'
1221  , '" . date('Y-m-d H:i:s', time()) . "'
1222  , '" . nohtml_real_escape_string(vn($frm['on_special'])) . "'
1223  , '" . nohtml_real_escape_string(vn($frm['poids'])) . "'
1224  , '" . nohtml_real_escape_string(vn($frm['on_promo'])) . "'
1225  , '" . nohtml_real_escape_string(vn($frm['on_reseller'])) . "'
1226  , '" . nohtml_real_escape_string(String::substr(String::strtoupper($frm['nom_' . $_SESSION['session_langue']]), 0, 1)) . "'
1227  , '" . nohtml_real_escape_string(vn($frm['on_new'])) . "'
1228  , '" . nohtml_real_escape_string(vn($frm['on_stock'])) . "'
1231  , '" . nohtml_real_escape_string(vn($frm['id_marque'])) . "'
1232  , '" . nohtml_real_escape_string(vn($frm['on_rupture'])) . "'
1233  , '" . intval(vn($frm['id_ecotaxe'])) . "'
1234  , '" . intval(vn($frm['id_utilisateur'])) . "'
1235  , '" . intval($frm['position']) . "'
1236  , '" . intval(vn($frm['on_ref_produit'])) . "'
1237  , '" . intval(vn($frm['nb_ref_produits'])) . "'
1238  , '" . nohtml_real_escape_string($frm['display_price_by_weight']) . "'
1239  , '" . nohtml_real_escape_string($frm['volume']) . "'
1240  , '" . nohtml_real_escape_string(vn($frm['on_estimate'])) . "'
1241  , '" . nohtml_real_escape_string(vn($frm['recommanded_product_on_cart_page'])) . "'
1242  , '" . nohtml_real_escape_string(vb($frm['extra_link'])) . "'
1243  , '" . nohtml_real_escape_string(vb($frm['technical_code'])) . "'
1244  , '" . nohtml_real_escape_string(get_site_id_sql_set_value(vb($frm['site_id']))) . "'";
1245  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
1246  $sqlProd .= "
1247  , '" . real_escape_string(implode(',',vb($frm['site_country'], array()))) . "'";
1248  }
1249  foreach ($GLOBALS['admin_lang_codes'] as $lng) {
1250  $sqlProd .= "
1251  , '" . nohtml_real_escape_string($frm['nom_' . $lng]) . "'
1252  , '" . real_escape_string($frm['descriptif_' . $lng]) . "'
1253  , '" . real_escape_string($frm['description_' . $lng]) . "'
1254  , '" . nohtml_real_escape_string($frm['meta_titre_' . $lng]) . "'
1255  , '" . nohtml_real_escape_string($frm['meta_key_' . $lng]) . "'
1256  , '" . nohtml_real_escape_string($frm['meta_desc_' . $lng]) . "'";
1257  }
1258  if (check_if_module_active('flash')) {
1259  $sqlProd .= "
1260  , '" . nohtml_real_escape_string($prix_flash) . "'
1261  , '" . nohtml_real_escape_string(vn($frm['on_flash'])) . "'
1262  , '" . nohtml_real_escape_string($frm['flash_start']) . "'
1263  , '" . nohtml_real_escape_string($frm['flash_end']) . "'";
1264  }
1265  if (check_if_module_active('gift_check')) {
1266  $sqlProd .= "
1267  , '" . nohtml_real_escape_string(vn($frm['on_check'])) . "'";
1268  }
1269  if (check_if_module_active('best_seller')) {
1270  $sqlProd .= "
1271  , '" . nohtml_real_escape_string(vn($frm['on_top'])) . "'";
1272  }
1273  if (check_if_module_active('menus')) {
1274  $sqlProd .= "
1275  , '" . nohtml_real_escape_string(vn($frm['on_rollover'])) . "'";
1276  }
1277  if (check_if_module_active('gifts')) {
1278  $sqlProd .= "
1279  , '" . nohtml_real_escape_string($frm['points']) . "'
1280  , '" . nohtml_real_escape_string(vn($frm['on_gift'])) . "'
1281  , '" . nohtml_real_escape_string(vn($frm['on_gift_points'])) . "'";
1282  }
1283  if (check_if_module_active('download')) {
1284  $sqlProd .= "
1285  , '" . nohtml_real_escape_string($frm['zip']) . "'
1286  , '" . nohtml_real_escape_string(vn($frm['on_download'])) . "'";
1287  }
1288  if (check_if_module_active('conditionnement')) {
1289  $sqlProd .= ", '" . intval($frm['conditionnement']) . "'";
1290  $sqlProd .= ", '" . intval($frm['unit_per_pallet']) . "'";
1291  }
1292  if(!empty($GLOBALS['site_parameters']['products_table_additionnal_fields'])) {
1293  foreach($GLOBALS['site_parameters']['products_table_additionnal_fields'] as $this_key => $this_value) {
1294  $sqlProd .= ", '" . nohtml_real_escape_string(vb($frm[$this_key])) . "'";
1295  }
1296  }
1297  $sqlProd .= ")";
1298 
1299  $qid = query($sqlProd);
1300 
1301  $product_id = insert_id();
1302 
1303  /* ajoute le produit sous les catégories spécifiées */
1304  for ($i = 0; $i < count(vn($frm['categories'])); $i++) {
1305  $qid = query("INSERT INTO peel_produits_categories (categorie_id, produit_id)
1306  VALUES ('" . nohtml_real_escape_string($frm['categories'][$i]) . "', '" . intval($product_id) . "')");
1307  }
1308 
1309  /* ajoute les références associées */
1310  for ($i = 0; $i < count(vn($frm['references'])); $i++) {
1311  if (!empty($frm['references'][$i])) {
1312  $qid = query("INSERT INTO peel_produits_references (reference_id, produit_id)
1313  VALUES ('" . nohtml_real_escape_string($frm['references'][$i]) . "', '" . intval($product_id) . "')");
1314  }
1315  }
1316 
1317  /* ajoute les couleurs associées */
1318  for ($i = 0; $i < count(vn($frm['couleurs'])); $i++) {
1319  if (!empty($frm['couleurs'][$i])) {
1320  $qid = query("INSERT INTO peel_produits_couleurs (couleur_id, produit_id)
1321  VALUES ('" . nohtml_real_escape_string($frm['couleurs'][$i]) . "', '" . intval($product_id) . "')");
1322  }
1323  }
1324 
1325  /* ajoute les tailles associées */
1326  for ($i = 0; $i < count(vn($frm['tailles'])); $i++) {
1327  if (!empty($frm['tailles'][$i])) {
1328  $qid = query("INSERT INTO peel_produits_tailles (taille_id, produit_id)
1329  VALUES ('" . nohtml_real_escape_string($frm['tailles'][$i]) . "', '" . intval($product_id) . "')");
1330  }
1331  }
1332  if (check_if_module_active('stock_advanced')) {
1333  insert_product_in_stock_table_if_not_exist($product_id, vn($frm['on_stock']));
1334  }
1335 
1336  if (check_if_module_active('payment_by_product') && !empty($frm['paiment_allowed'])) {
1337  insert_payment_by_product($frm['paiment_allowed'], $product_id);
1338  }
1339  if (!empty($product_id)) {
1340  $output .= $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => sprintf($GLOBALS['STR_ADMIN_PRODUITS_MSG_CREATED_OK'], String::html_entity_decode_if_needed($frm['nom_' . $_SESSION['session_langue'] . '']))))->fetch();
1341  }
1342  return $output;
1343 }
1344 
1353 {
1354  // Le nombre de champs d'images téléchargeable est limité par la configuration PHP upload_max_filesize qui peut être modifiée dans php.ini ou httpd.conf
1355  // Il est donc nécessaire de limiter le nombre de champs par couleur afin de ne pas dépasser cette limite
1356  if (function_exists('ini_get') && @ini_get('max_file_uploads') && !empty($frm['couleurs'])) {
1357  $upload_images_per_color = min(5, ceil(ini_get('max_file_uploads')) / count($frm['couleurs']));
1358  } else {
1359  $upload_images_per_color = 2;
1360  }
1363  } else {
1364  $prix = get_float_from_user_input($frm['prix']) * (1 + $frm['tva'] / 100);
1365  }
1367  $prix_promo = get_float_from_user_input($frm['prix_promo']);
1368  } else {
1369  $prix_promo = get_float_from_user_input($frm['prix_promo']) * (1 + $frm['tva'] / 100);
1370  }
1371  if (check_if_module_active('flash')) {
1373  $prix_flash = get_float_from_user_input($frm['prix_flash']);
1374  } else {
1375  $prix_flash = get_float_from_user_input($frm['prix_flash']) * (1 + $frm['tva'] / 100);
1376  }
1377  }
1378  if (check_if_module_active('reseller')) {
1379  if (display_prices_with_taxes_in_admin () && empty($GLOBALS['site_parameters']['force_display_reseller_prices_without_taxes'])) {
1380  $prix_revendeur = get_float_from_user_input($frm['prix_revendeur']);
1381  } else {
1382  $prix_revendeur = get_float_from_user_input($frm['prix_revendeur']) * (1 + $frm['tva'] / 100);
1383  }
1384  } else {
1385  $prix_revendeur = 0;
1386  }
1387  if (check_if_module_active('payment_by_product') && !empty($frm['paiment_allowed'])) {
1388  update_payment_by_product($frm['paiment_allowed'], $id);
1389  }
1390  $prix_achat = get_float_from_user_input($frm['prix_achat']) * (1 + $frm['tva'] / 100);
1391  /* Met à jour la table produits */
1392  $sql = "UPDATE peel_produits SET
1393  reference = '" . nohtml_real_escape_string($frm['reference']) . "'
1394  , ean_code = '" . nohtml_real_escape_string($frm['ean_code']) . "'
1395  , prix = '" . nohtml_real_escape_string($prix) . "'
1396 
1397  , prix_promo = '" . nohtml_real_escape_string($prix_promo) . "'
1398  , prix_revendeur = '" . nohtml_real_escape_string($prix_revendeur) . "'
1399  , prix_achat = '" . nohtml_real_escape_string($prix_achat) . "'
1400  , default_image = '" . nohtml_real_escape_string($frm['default_image']) . "'
1401  , image1 = '" . nohtml_real_escape_string($frm['image1']) . "'
1402  , image2 = '" . nohtml_real_escape_string($frm['image2']) . "'
1403  , image3 = '" . nohtml_real_escape_string($frm['image3']) . "'
1404  , image4 = '" . nohtml_real_escape_string($frm['image4']) . "'
1405  , image5 = '" . nohtml_real_escape_string($frm['image5']) . "'
1406  , image6 = '" . nohtml_real_escape_string($frm['image6']) . "'
1407  , image7 = '" . nohtml_real_escape_string($frm['image7']) . "'
1408  , image8 = '" . nohtml_real_escape_string($frm['image8']) . "'
1409  , image9 = '" . nohtml_real_escape_string($frm['image9']) . "'
1410  , image10 = '" . nohtml_real_escape_string($frm['image10']) . "'
1411  , youtube_code = '" . real_escape_string($frm['youtube_code']) . "'
1412  , promotion = '" . nohtml_real_escape_string($frm['promotion']) . "'
1413  , tva = '" . nohtml_real_escape_string($frm['tva']) . "'
1414  , etat = '" . nohtml_real_escape_string($frm['etat']) . "'
1415  , date_maj = '" . date('Y-m-d H:i:s', time()) . "'
1416  , on_special = '" . nohtml_real_escape_string(vn($frm['on_special'])) . "'
1417  , poids = '" . nohtml_real_escape_string($frm['poids']) . "'
1418  , on_reseller = '" . nohtml_real_escape_string(vn($frm['on_reseller'])) . "'
1419  , on_promo = '" . nohtml_real_escape_string(vn($frm['on_promo'])) . "'
1420  , on_new = '" . nohtml_real_escape_string(vn($frm['on_new'])) . "'
1421  , alpha = '" . nohtml_real_escape_string(String::substr(String::strtoupper(vb($frm['nom_' . $_SESSION['session_langue']])), 0, 1)) . "'
1422  , on_stock = '" . intval(vn($frm['on_stock'])) . "'
1423  , affiche_stock = '" . intval(vn($frm['affiche_stock'])) . "'
1424  , delai_stock = '" . nohtml_real_escape_string(String::html_entity_decode_if_needed(vb($frm['delai_stock']))) . "'
1425  , etat_stock = '" . intval(vn($frm['etat_stock'])) . "'
1426  , extra_link = '" . nohtml_real_escape_string(vb($frm['extra_link'])) . "'
1427  , technical_code = '" . nohtml_real_escape_string(vb($frm['technical_code'])) . "'
1428  , id_marque = '" . intval(vn($frm['id_marque'])) . "'
1429  , on_rupture = '" . intval(vn($frm['on_rupture'])) . "'
1430  , id_ecotaxe = '" . intval(vn($frm['id_ecotaxe'])) . "'
1431  , id_utilisateur = '" . intval(vn($frm['id_utilisateur'])) . "'
1432  , position = '" . intval($frm['position']) . "'
1433  , on_ref_produit = '" . intval(vn($frm['on_ref_produit'])) . "'
1434  , nb_ref_produits = '" . intval($frm['nb_ref_produits']) . "'
1435  , display_price_by_weight = '" . nohtml_real_escape_string($frm['display_price_by_weight']) . "'
1436  , volume = '" . nohtml_real_escape_string($frm['volume']) . "'
1437  , on_estimate = '" . nohtml_real_escape_string(vn($frm['on_estimate'])) . "'
1438  , recommanded_product_on_cart_page = '" . nohtml_real_escape_string(vn($frm['recommanded_product_on_cart_page'])) . "'
1439  , default_color_id = '" . intval(vn($frm['default_color_id'])) . "'
1440  , site_id = '" . nohtml_real_escape_string(get_site_id_sql_set_value(vb($frm['site_id']))) . "'";
1441  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
1442  $sql .= "
1443  , site_country = '" . real_escape_string(implode(',',vb($frm['site_country'], array()))) . "'";
1444  }
1445  foreach ($GLOBALS['admin_lang_codes'] as $lng) {
1446  if(empty($GLOBALS['site_parameters']['product_name_forced_lang']) || $lng == $GLOBALS['site_parameters']['product_name_forced_lang']) {
1447  $sql .= "
1448  , nom_" . $lng . " = '" . nohtml_real_escape_string($frm['nom_' . $lng]) . "'";
1449  }
1450  if(empty($GLOBALS['site_parameters']['product_description_forced_lang']) || $lng == $GLOBALS['site_parameters']['product_description_forced_lang']) {
1451  $sql .= "
1452  , description_" . $lng . " = '" . real_escape_string($frm['description_' . $lng]) . "'";
1453  }
1454  $sql .= "
1455  , descriptif_" . $lng . " = '" . real_escape_string($frm['descriptif_' . $lng]) . "'
1456  , meta_titre_" . $lng . " = '" . nohtml_real_escape_string($frm['meta_titre_' . $lng]) . "'
1457  , meta_key_" . $lng . " = '" . nohtml_real_escape_string($frm['meta_key_' . $lng]) . "'
1458  , meta_desc_" . $lng . " = '" . nohtml_real_escape_string($frm['meta_desc_' . $lng]) . "'";
1459  }
1460  if (check_if_module_active('flash')) {
1461  $sql .= "
1462  , prix_flash = '" . nohtml_real_escape_string($prix_flash) . "'
1463  , on_flash = '" . nohtml_real_escape_string(vn($frm['on_flash'])) . "'
1464  , flash_start = '" . nohtml_real_escape_string(get_mysql_date_from_user_input($frm['flash_start'])) . "'
1465  , flash_end = '" . nohtml_real_escape_string(get_mysql_date_from_user_input($frm['flash_end'])) . "'";
1466  }
1467  if (check_if_module_active('best_seller')) {
1468  $sql .= "
1469  , on_top = '" . nohtml_real_escape_string(vn($frm['on_top'])) . "'";
1470  }
1471 
1472  if (check_if_module_active('menus')) {
1473  $sql .= "
1474  , on_rollover = '" . nohtml_real_escape_string(vn($frm['on_rollover'])) . "'";
1475  }
1476  if (check_if_module_active('gifts')) {
1477  $sql .= "
1478  , points = '" . nohtml_real_escape_string($frm['points']) . "'
1479  , on_gift = '" . nohtml_real_escape_string(vn($frm['on_gift'])) . "'
1480  , on_gift_points = '" . nohtml_real_escape_string(vn($frm['on_gift_points'])) . "'";
1481  }
1482  if (check_if_module_active('gift_check')) {
1483  $sql .= "
1484  , on_check = '" . nohtml_real_escape_string(vn($frm['on_check'])) . "'";
1485  }
1486  if (check_if_module_active('download')) {
1487  $sql .= "
1488  , zip = '" . nohtml_real_escape_string($frm['zip']) . "'
1489  , on_download = '" . nohtml_real_escape_string(vn($frm['on_download'])) . "'";
1490  }
1491  if (check_if_module_active('conditionnement')) {
1492  $sql .= ", conditionnement = '" . intval($frm['conditionnement']) . "'";
1493  $sql .= ", unit_per_pallet = '" . intval($frm['unit_per_pallet']) . "'";
1494  }
1495  if(!empty($GLOBALS['site_parameters']['products_table_additionnal_fields'])) {
1496  foreach($GLOBALS['site_parameters']['products_table_additionnal_fields'] as $this_key => $this_value) {
1497  $sql .= ", " . word_real_escape_string($this_key) . "='" . nohtml_real_escape_string(vb($frm[$this_key])) . "'";
1498  }
1499  }
1500  $sql .= " WHERE id =" . intval($id) . "
1501  ";
1502 
1503  $qid = query($sql);
1504  /* Efface toutes les catégories auxquelles le produit est associé */
1505  query("DELETE FROM peel_produits_categories WHERE produit_id = '" . intval($id) . "'");
1506  query("DELETE FROM peel_produits_references WHERE produit_id = '" . intval($id) . "'");
1507  query("DELETE FROM peel_produits_couleurs WHERE produit_id = '" . intval($id) . "'");
1508  query("DELETE FROM peel_produits_tailles WHERE produit_id = '" . intval($id) . "'");
1509 
1510  if (empty($frm['categories'])) {
1511  $frm['categories'][] = 0;
1512  }
1513  if (empty($frm['references'])) {
1514  $frm['references'][] = 0;
1515  }
1516  if (empty($frm['couleurs'])) {
1517  $frm['couleurs'][] = 0;
1518  }
1519  if (empty($frm['tailles'])) {
1520  $frm['tailles'][] = 0;
1521  }
1522  for ($i = 0; $i < count($frm['categories']); $i++) {
1523  query("INSERT INTO peel_produits_categories (categorie_id, produit_id)
1524  VALUES ('" . nohtml_real_escape_string($frm['categories'][$i]) . "', '" . intval($id) . "')");
1525  }
1526  for ($i = 0; $i < count($frm['references']); $i++) {
1527  if (!empty($frm['references'][$i])) {
1528  $qid = query("INSERT INTO peel_produits_references (reference_id, produit_id)
1529  VALUES ('" . nohtml_real_escape_string($frm['references'][$i]) . "', '" . intval($id) . "')");
1530  }
1531  }
1532 
1533  foreach($frm['couleurs'] as $this_color_id) {
1534  // On recupere chaque champ default_image par couleur
1535  $qid = query("INSERT INTO peel_produits_couleurs (couleur_id, produit_id, default_image)
1536  VALUES ('" . nohtml_real_escape_string($this_color_id) . "', '" . intval($id) . "','" . intval(vn($frm["default_image" . $this_color_id])) . "')");
1537  if(isset($_POST['default_image' . $this_color_id])) {
1538  // En cas de nouvelle association d'une couleur avec le produit, il ne peut pas y avoir d'ajout d'images pour cette nouvelle couleur.
1539  query("UPDATE peel_produits_couleurs
1540  SET default_image = '" . nohtml_real_escape_string($_POST['default_image' . $this_color_id]) . "'
1541  WHERE produit_id = '" . intval($id) . "' AND couleur_id ='" . intval($this_color_id) . "'");
1542  }
1543  for ($h = 1; $h <= $upload_images_per_color; $h++) {
1544  $this_field_name = 'imagecouleur' . $this_color_id . '_' . $h;
1545  $_POST[$this_field_name] = upload($this_field_name, false, 'image_or_pdf', $GLOBALS['site_parameters']['image_max_width'], $GLOBALS['site_parameters']['image_max_height'], null, null, vb($_POST[$this_field_name]));
1546  query("UPDATE peel_produits_couleurs
1547  SET image" . word_real_escape_string($h) . "='" . nohtml_real_escape_string($_POST[$this_field_name]) . "'
1548  WHERE produit_id='" . intval($id) . "' AND couleur_id='" . intval($this_color_id) . "'");
1549  }
1550  }
1551 
1552  for ($i = 0; $i < count($frm["tailles"]); $i++) {
1553  $qid = query("INSERT INTO peel_produits_tailles (taille_id, produit_id)
1554  VALUES ('" . nohtml_real_escape_string($frm["tailles"][$i]) . "', '" . intval($id) . "')");
1555  }
1556  if (check_if_module_active('stock_advanced') && $frm['on_stock'] == 1) {
1557  // Mise à jour des stocks des tailles
1558  if (!empty($frm['tailles'])) {
1559  query('DELETE FROM peel_stocks WHERE produit_id="' . intval($id) . '" AND taille_id NOT IN("' . implode('","', nohtml_real_escape_string($frm['tailles'])) . '");');
1560  query('DELETE FROM peel_stocks_temp WHERE produit_id="' . intval($id) . '" AND taille_id NOT IN("' . implode('","', nohtml_real_escape_string($frm['tailles'])) . '");');
1561  }
1562  // Mise à jour des stocks des couleurs
1563  if (!empty($frm['couleurs'])) {
1564  query('DELETE FROM peel_stocks WHERE produit_id="' . intval($id) . '" AND couleur_id NOT IN("' . implode('","', nohtml_real_escape_string($frm['couleurs'])) . '");');
1565  query('DELETE FROM peel_stocks_temp WHERE produit_id="' . intval($id) . '" AND couleur_id NOT IN("' . implode('","', nohtml_real_escape_string($frm['couleurs'])) . '");');
1566  }
1567  insert_product_in_stock_table_if_not_exist($id, vn($frm['on_stock']));
1568  }
1569  if(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])) {
1570  $product_name = vb($frm['nom_' . $GLOBALS['site_parameters']['product_name_forced_lang']]);
1571  } else {
1572  $product_name = vb($frm['nom_' . $_SESSION['session_langue']]);
1573  }
1574  return $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => sprintf($GLOBALS['STR_ADMIN_PRODUITS_MSG_PRODUCT_UPDATE_OK'], String::html_entity_decode_if_needed($product_name))))->fetch();
1575 }
1576 
1583 {
1584  $supplier = get_user_information(vb($_GET['id_utilisateur']));
1585 
1586  $tpl = $GLOBALS['tplEngine']->createTemplate('admin_liste_produits_fournisseur.tpl');
1587  $tpl->assign('societe', $supplier['societe']);
1588  $tpl->assign('add_src', $GLOBALS['administrer_url'] . '/images/add.png');
1589  $tpl->assign('add_href', $GLOBALS['administrer_url'] . '/produits.php?mode=ajout');
1590 
1591  $sql = "SELECT ";
1592  if (check_if_module_active('gifts')) {
1593  $sql .= "p.points, p.on_gift, p.on_gift_points, ";
1594  }
1595  $sql .= "p.id, p.reference, p.etat_stock, p.nom_".(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])?$GLOBALS['site_parameters']['product_name_forced_lang']:$_SESSION['session_langue'])." AS name, p.id_utilisateur, p.prix, p.etat, p.date_maj, p.on_stock
1596  FROM peel_produits p
1597  WHERE p.id_utilisateur = '" . intval($_GET['id_utilisateur']) . "' AND " . get_filter_site_cond('produits', 'p', true) . "
1598  ORDER BY p.id ASC";
1599  $Links = new Multipage($sql, 'produits');
1600  $results_array = $Links->Query();
1601  if (!empty($results_array)) {
1602  $tpl->assign('site_symbole', $GLOBALS['site_parameters']['symbole']);
1603  $tpl->assign('ttc_ht', (display_prices_with_taxes_in_admin() ? $GLOBALS['STR_TTC'] : $GLOBALS['STR_HT']));
1604  $tpl->assign('is_gifts_module_active', check_if_module_active('gifts'));
1605  $tpl->assign('is_stock_advanced_module_active', check_if_module_active('stock_advanced'));
1606  $tpl->assign('drop_src', $GLOBALS['administrer_url'] . '/images/b_drop.png');
1607  $tpl->assign('edit_src', $GLOBALS['administrer_url'] . '/images/b_edit.png');
1608 
1609  $tpl_results = array();
1610  $i = 0;
1611  foreach ($results_array as $ligne) {
1612  $tpl_cats = array();
1613  $sqlCAT = "SELECT id, nom_" . $_SESSION['session_langue'] . "
1614  FROM peel_produits_categories pc
1615  INNER JOIN peel_categories c ON c.id = pc.categorie_id AND " . get_filter_site_cond('categories', 'c') . "
1616  WHERE pc.produit_id = " . intval($ligne['id']) . "";
1617  $resCAT = query($sqlCAT);
1618  if (num_rows($resCAT) > 0) {
1619  while ($cat = fetch_assoc($resCAT)) {
1620  $tpl_cats[] = $cat['nom_' . $_SESSION['session_langue']];
1621  }
1622  }
1623 
1624  $tpl_util = null;
1625  if ($this_user = get_user_information($ligne['id_utilisateur'])) {
1626  $tpl_util = array('href' => $GLOBALS['administrer_url'] . "/utilisateurs.php?mode=modif&id_utilisateur=" . $this_user['id_utilisateur'],
1627  'societe' => $this_user['societe']
1628  );
1629  }
1630  $tmpLigne = array('tr_rollover' => tr_rollover($i, true),
1631  'nom' => (!empty($ligne['name'])?$ligne['name']:'['.$ligne['id'].']'),
1632  'drop_href' => get_current_url(false) . '?mode=suppr&id=' . $ligne['id'] . '&page=' . (!empty($_GET['page']) ? $_GET['page'] : 1),
1633  'edit_href' => get_current_url(false) . '?mode=modif&id=' . $ligne['id'] . '&page=' . (!empty($_GET['page']) ? $_GET['page'] : 1),
1634  'reference' => $ligne['reference'],
1635  'cats' => $tpl_cats,
1636  'site_name' => get_site_name($cat['site_id']),
1637  'prix' => fprix((display_prices_with_taxes_in_admin() ? $ligne['prix'] : $ligne['prix'] / (1 + $ligne['tva'] / 100)), false, $GLOBALS['site_parameters']['code'], false),
1638  'etat_onclick' => 'change_status("produits", "' . $ligne['id'] . '", this, "'.$GLOBALS['administrer_url'] . '")',
1639  'etat_src' => $GLOBALS['administrer_url'] . '/images/' . (empty($ligne['etat']) ? 'puce-blanche.gif' : 'puce-verte.gif'),
1640  'on_stock' => $ligne['on_stock'],
1641  'stock_href' => get_current_url(false) . '?mode=stock&id=' . $ligne['id'],
1642  'stock_src' => $GLOBALS['administrer_url'] . '/images/stock.gif',
1643  'points' => $ligne['points'],
1644  'date' => get_formatted_date($ligne['date_maj']),
1645  'util' => $tpl_util
1646  );
1647  if(!empty($GLOBALS['site_parameters']['site_country_allowed_array'])) {
1648  $tmpLigne['site_country'] = get_country_name($ligne['site_country']);
1649  }
1650  $tpl_results[] = $tmpLigne;
1651  $i++;
1652  }
1653  $tpl->assign('results', $tpl_results);
1654  }
1655  $tpl->assign('links_multipage', $Links->GetMultipage());
1656  $tpl->assign('STR_ADMIN_PRODUITS_SUPPLIER_PRODUCTS', $GLOBALS['STR_ADMIN_PRODUITS_SUPPLIER_PRODUCTS']);
1657  $tpl->assign('STR_ADMIN_CATEGORIES_ADD_PRODUCT', $GLOBALS['STR_ADMIN_CATEGORIES_ADD_PRODUCT']);
1658  $tpl->assign('STR_ADMIN_ACTION', $GLOBALS['STR_ADMIN_ACTION']);
1659  $tpl->assign('STR_REFERENCE', $GLOBALS['STR_REFERENCE']);
1660  $tpl->assign('STR_CATEGORY', $GLOBALS['STR_CATEGORY']);
1661  $tpl->assign('STR_WEBSITE', $GLOBALS['STR_WEBSITE']);
1662  $tpl->assign('STR_ADMIN_NAME', $GLOBALS['STR_ADMIN_NAME']);
1663  $tpl->assign('STR_PRICE', $GLOBALS['STR_PRICE']);
1664  $tpl->assign('STR_STATUS', $GLOBALS['STR_STATUS']);
1665  $tpl->assign('STR_STOCK', $GLOBALS['STR_STOCK']);
1666  $tpl->assign('STR_GIFT_POINTS', $GLOBALS['STR_GIFT_POINTS']);
1667  $tpl->assign('STR_ADMIN_UPDATED_DATE', $GLOBALS['STR_ADMIN_UPDATED_DATE']);
1668  $tpl->assign('STR_ADMIN_PRODUITS_SUPPLIER', $GLOBALS['STR_ADMIN_PRODUITS_SUPPLIER']);
1669  $tpl->assign('STR_ADMIN_DELETE_WARNING', $GLOBALS['STR_ADMIN_DELETE_WARNING']);
1670  $tpl->assign('STR_DELETE', $GLOBALS['STR_DELETE']);
1671  $tpl->assign('STR_MODIFY', $GLOBALS['STR_MODIFY']);
1672  $tpl->assign('STR_ADMIN_PRODUITS_UPDATE', $GLOBALS['STR_ADMIN_PRODUITS_UPDATE']);
1673  $tpl->assign('STR_ADMIN_PRODUITS_MANAGE_STOCKS', $GLOBALS['STR_ADMIN_PRODUITS_MANAGE_STOCKS']);
1674  $tpl->assign('STR_ADMIN_PRODUITS_NOTHING_FOUND', $GLOBALS['STR_ADMIN_PRODUITS_NOTHING_FOUND']);
1675  return $tpl->fetch();
1676 }
1677 
1684 function maj_tab($frm)
1685 {
1686  $sql = "UPDATE peel_produits SET
1687  display_tab = '" . intval($frm['display_tab']) . "'
1688  , tab1_html_" . $frm['lng'] . " = '" . real_escape_string($frm['tab1_html_' . $frm['lng']]) . "'
1689  , tab2_html_" . $frm['lng'] . " = '" . real_escape_string($frm['tab2_html_' . $frm['lng']]) . "'
1690  , tab3_html_" . $frm['lng'] . " = '" . real_escape_string($frm['tab3_html_' . $frm['lng']]) . "'
1691  , tab4_html_" . $frm['lng'] . " = '" . real_escape_string($frm['tab4_html_' . $frm['lng']]) . "'
1692  , tab5_html_" . $frm['lng'] . " = '" . real_escape_string($frm['tab5_html_' . $frm['lng']]) . "'
1693  , tab6_html_" . $frm['lng'] . " = '" . real_escape_string($frm['tab6_html_' . $frm['lng']]) . "'
1694  , tab1_title_" . $frm['lng'] . " = '" . nohtml_real_escape_string($frm['tab1_title_' . $frm['lng']]) . "'
1695  , tab2_title_" . $frm['lng'] . " = '" . nohtml_real_escape_string($frm['tab2_title_' . $frm['lng']]) . "'
1696  , tab3_title_" . $frm['lng'] . " = '" . nohtml_real_escape_string($frm['tab3_title_' . $frm['lng']]) . "'
1697  , tab4_title_" . $frm['lng'] . " = '" . nohtml_real_escape_string($frm['tab4_title_' . $frm['lng']]) . "'
1698  , tab5_title_" . $frm['lng'] . " = '" . nohtml_real_escape_string($frm['tab5_title_' . $frm['lng']]) . "'
1699  , tab6_title_" . $frm['lng'] . " = '" . nohtml_real_escape_string($frm['tab6_title_' . $frm['lng']]) . "'
1700  WHERE id ='" . intval($frm['id']) . "' AND " . get_filter_site_cond('produits', null, true) . "";
1701  query($sql);
1702 }
1703 
1712 {
1713  $sql = "SELECT id, display_tab, nom_".(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])?$GLOBALS['site_parameters']['product_name_forced_lang']:$_SESSION['session_langue'])." AS name";
1714  $sql .= ", tab1_html_" . $lng;
1715  $sql .= ", tab2_html_" . $lng;
1716  $sql .= ", tab3_html_" . $lng;
1717  $sql .= ", tab4_html_" . $lng;
1718  $sql .= ", tab5_html_" . $lng;
1719  $sql .= ", tab6_html_" . $lng;
1720  $sql .= ", tab1_title_" . $lng;
1721  $sql .= ", tab2_title_" . $lng;
1722  $sql .= ", tab3_title_" . $lng;
1723  $sql .= ", tab4_title_" . $lng;
1724  $sql .= ", tab5_title_" . $lng;
1725  $sql .= ", tab6_title_" . $lng;
1726  $sql .= "
1727  FROM peel_produits
1728  WHERE id = " . intval($id) ." AND " . get_filter_site_cond('produits', null, true) . "";
1729 
1730  $qid = query($sql);
1731  if ($frm = fetch_assoc($qid)) {
1732  $frm["nouveau_mode"] = "maj_tab";
1733  $frm["titre_soumet"] = $GLOBALS['STR_ADMIN_FORM_SAVE_CHANGES'];
1734  $product_name = $frm["name"];
1735  // Affiche la liste des marques, en présélectionnant la marques choisie.
1736  return affiche_formulaire_tab($frm, $form_error_object, $product_name, $lng);
1737  } else {
1738  return $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_ADMIN_PRODUITS_ERR_NOT_FOUND']))->fetch();
1739  }
1740 }
1741 
1751 function affiche_formulaire_tab(&$frm, &$form_error_object, $product_name, $lng)
1752 {
1753  $tpl = $GLOBALS['tplEngine']->createTemplate('admin_formulaire_tab.tpl');
1754  $tpl->assign('action', get_current_url(false) . '?tab_lang=' . $lng . '&mode=modif');
1755  $tpl->assign('form_token', get_form_token_input($_SERVER['PHP_SELF'] . $frm['nouveau_mode'] . intval($frm['id'])));
1756  $tpl->assign('mode', $frm["nouveau_mode"]);
1757  $tpl->assign('id', intval($frm['id']));
1758  $tpl->assign('lng', $lng);
1759  $tpl->assign('product_name', $product_name);
1760  $tpl->assign('display_tab', vb($frm['display_tab']));
1761  $tpl->assign('tab1_title', vb($frm['tab1_title_' . $lng]));
1762  $tpl->assign('tab1_html_te', getTextEditor('tab1_html_' . $lng, '100%', 500, String::html_entity_decode_if_needed(vb($frm['tab1_html_' . $lng]))));
1763  $tpl->assign('tab2_title', vb($frm['tab2_title_' . $lng]));
1764  $tpl->assign('tab2_html_te', getTextEditor('tab2_html_' . $lng, '100%', 500, String::html_entity_decode_if_needed(vb($frm['tab2_html_' . $lng]))));
1765  $tpl->assign('tab3_title', vb($frm['tab3_title_' . $lng]));
1766  $tpl->assign('tab3_html_te', getTextEditor('tab3_html_' . $lng, '100%', 500, String::html_entity_decode_if_needed(vb($frm['tab3_html_' . $lng]))));
1767  $tpl->assign('tab4_title', vb($frm['tab4_title_' . $lng]));
1768  $tpl->assign('tab4_html_te', getTextEditor('tab4_html_' . $lng, '100%', 500, String::html_entity_decode_if_needed(vb($frm['tab4_html_' . $lng]))));
1769  $tpl->assign('tab5_title', vb($frm['tab5_title_' . $lng]));
1770  $tpl->assign('tab5_html_te', getTextEditor('tab5_html_' . $lng, '100%', 500, String::html_entity_decode_if_needed(vb($frm['tab5_html_' . $lng]))));
1771  $tpl->assign('tab6_title', vb($frm['tab6_title_' . $lng]));
1772  $tpl->assign('tab6_html_te', getTextEditor('tab6_html_' . $lng, '100%', 500, String::html_entity_decode_if_needed(vb($frm['tab6_html_' . $lng]))));
1773  $tpl->assign('titre_soumet', $frm["titre_soumet"]);
1774  $tpl->assign('STR_BEFORE_TWO_POINTS', $GLOBALS['STR_BEFORE_TWO_POINTS']);
1775  $tpl->assign('STR_ADMIN_PRODUITS_UPDATE_TABS_CONTENT', $GLOBALS['STR_ADMIN_PRODUITS_UPDATE_TABS_CONTENT']);
1776  $tpl->assign('STR_STATUS', $GLOBALS['STR_STATUS']);
1777  $tpl->assign('STR_ADMIN_ONLINE', $GLOBALS['STR_ADMIN_ONLINE']);
1778  $tpl->assign('STR_ADMIN_OFFLINE', $GLOBALS['STR_ADMIN_OFFLINE']);
1779  $tpl->assign('STR_ADMIN_PRODUITS_TAB', $GLOBALS['STR_ADMIN_PRODUITS_TAB']);
1780  $tpl->assign('STR_ADMIN_TITLE', $GLOBALS['STR_ADMIN_TITLE']);
1781  return $tpl->fetch();
1782 }
maj_tab($frm)
maj_tab()
Definition: produits.php:1684
static strtoupper($string)
Returns string with all alphabetic characters converted to uppercase.
Definition: String.php:154
get_site_name($site_ids, $skip_rights_check=false)
Retourne le nom d'un ou de plusieurs sites à partir de l'id.
Definition: fonctions.php:4763
$product_infos
$frm
Definition: produits.php:25
fetch_row($query_result)
fetch_row()
Definition: database.php:264
getTextEditor($instance_name, $width, $height, $default_text, $default_path=null, $type_html_editor=0, $compter_char_max_if_enabled=255, $placeholder= '')
getTextEditor()
Definition: fonctions.php:4055
affiche_formulaire_modif_produit($id, &$frm)
Affiche le formulaire de modification pour le produit sélectionné
Definition: produits.php:355
affiche_formulaire_modif_tab($id, $lng)
Charge les infos de la marques.
Definition: produits.php:1711
$result
get_user_information($user_id=null, $get_full_infos=false)
Chargement des détails de l'utilisateur.
Definition: user.php:906
get_current_url($with_get=true, $get_short_url=false, $take_away_get_args_array=null)
get_current_url()
Definition: fonctions.php:1743
upload($field_name, $rename_file=true, $file_kind=null, $image_max_width=null, $image_max_height=null, $path=null, $new_file_name_without_extension=null, $default_return_value=null)
Fonction d'upload de fichiers.
Definition: fonctions.php:3302
get_site_id_select_options($selected_site_id=null, $selected_site_name=null, $display_first_option=null, $select_current_site_id_by_default=false)
Créer les options pour le select qui liste les noms de sites configurés en back office.
static html_entity_decode_if_needed($string)
String::html_entity_decode_if_needed()
Definition: String.php:533
affected_rows($database_object=null)
affected_rows()
Definition: database.php:356
word_real_escape_string($value)
Applique real_escape_string dans le cas où on n'insère qu'un seul mot, de moins de 30 caractères...
Definition: database.php:424
if(!defined('IN_PEEL')) display_prices_with_taxes_in_admin()
display_prices_with_taxes_in_admin()
insert_id($database_object=null)
insert_id()
Definition: database.php:339
affiche_liste_produits_fournisseur()
affiche_liste_produits_fournisseur()
Definition: produits.php:1582
supprime_fichier_produit($id, $file)
Supprime le fichier lié au produit spécifié par $id, au nom de file.
Definition: produits.php:1012
get_site_country_checkboxes($selected_site_country_array=null, $field_name= 'site_country')
Créer les options pour le select qui liste les noms de pays de visiteurs configurés.
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
$results_array
affiche_formulaire_ajout_produit($categorie_id=0, &$frm, &$form_error_object)
FONCTIONS.
Definition: produits.php:237
if(!empty($_GET['id'])) if(isset($_POST['form_name'], $_POST['form_subject'], $_POST['form_text'], $_POST['form_lang'])&&empty($_GET['id'])) if(empty($_GET['id'])) $tpl
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
real_escape_string($value)
real_escape_string()
Definition: database.php:374
get_vat_select_options($selected_vat=null, $approximative_amount_selected=false)
get_vat_select_options()
$id
Definition: produits.php:23
necessite_priv($priv, $demo_allowed=true, $configuration_modification=false)
Cette fonction vérifie si l'utilisateur a les privilèges de $priv.
Definition: fonctions.php:1575
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
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
supprime_fichier_couleur($id, $file, $couleur_id)
Supprime le fichier lié au produit spécifié par $id, au nom de file et pour la couleur couleur_id...
Definition: produits.php:1040
vb(&$var, $default=null)
Variable blanche if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:97
get_uploaded_file_infos($field_name, $file, $delete_url, $logo_width=100, $logo_height=100)
Remplit un tableau d'informations pour le template d'upload HTML.
Definition: fonctions.php:3601
necessite_identification()
Si l'utilisateur n'est pas connecté à un compte, on affiche une page d'identification et arrête le sc...
Definition: fonctions.php:1596
num_rows($query_result)
num_rows()
Definition: database.php:321
delete_uploaded_file_and_thumbs($filename)
delete_uploaded_file_and_thumbs()
Definition: fonctions.php:3417
fetch_assoc($query_result)
fetch_assoc()
Definition: database.php:283
affiche_formulaire_tab(&$frm, &$form_error_object, $product_name, $lng)
affiche_formulaire_tab()
Definition: produits.php:1751
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
affiche_formulaire_produit(&$frm, &$form_error_object, $create_product_process=false)
affiche_formulaire_produit()
Definition: produits.php:429
maj_produit($id, $frm)
Met à jour le produit $id avec de nouvelles valeurs.
Definition: produits.php:1352
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
get_all_sites_name_array($admin_force_multisite_if_allowed=false, $allow_null_site_id=false, $skip_rights_check=false)
Retourne un tableau des noms des sites configurés en fonction des droits de l'administrateur.
Definition: fonctions.php:4792
if(!function_exists('get_admin_date_filter_form')) if(!function_exists('check_admin_date_data')) if(!function_exists('affiche_liste_produits')) get_admin_products_search_sql($frm, $delete=false, $get_only_product_with_images=false)
get_admin_products_search_sql()
$GLOBALS['DOC_TITLE']
Definition: produits.php:20
supprime_produit($id)
Supprime le produit spécifié par $id.
Definition: produits.php:962
get_form_token_input($name= 'general', $use_existing_token=true, $return_as_input_form=true)
get_form_token_input()
Definition: fonctions.php:94
affiche_formulaire_controle_produit($categorie_id=0, &$frm, &$form_error_object)
Affiche un formulaire vierge pour ajouter un produit.
Definition: produits.php:333
vn(&$var, $default=0)
Variable nulle if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:110
get_site_id_sql_set_value($site_ids)
Retourne la valeur SQL d'un champ INT ou SET suivant que ce soit un entier ou un tableau.
Definition: fonctions.php:4747
insere_produit($frm)
Ajoute un nouveau produit.
Definition: produits.php:1066
$form_error_object
Definition: produits.php:24
verify_token($name= 'general', $delay_in_minutes=60, $check_referer_if_set_by_server=true, $cancel_token=true, $minimum_wait_in_seconds_before_use=0)
Vérification de la validité d'un token Par défaut, un token est valide 1h, et utilisable 1 seule fois...
Definition: fonctions.php:118
fprix($price, $display_currency=false, $currency_code_or_default=null, $convertion_needed_into_currency=true, $currency_rate=null, $display_iso_currency_code=false, $format=true, $force_format_separator=null, $add_rdfa_properties=false, $round_even_if_no_format=false)
fprix formatte le prix donné en le convertissant si nécessaire au préalable et en ajoutant éventuelle...
Definition: fonctions.php:242
static substr($string, $start, $length=null)
Returns the portion of string specified by the start and length parameters.
Definition: String.php:112
check_if_module_active($module_name, $specific_file_name=null)
Renvoie si un module est présent et activé ou non - Peut être appelé avant ou après le chargement d'u...
$output
Definition: produits.php:26
if(defined('IN_PEEL_ADMIN')||IN_INSTALLATION) $_SESSION['session_langue']
get_country_name($id)
Renvoie le nom d'un pays.
Definition: fonctions.php:856

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