PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/panier/panier.php

https://gitlab.com/thoussem/Tunisie-Shop
PHP | 315 lines | 177 code | 37 blank | 101 comment | 38 complexity | e53091e2bf12cf202b4566e556183ac4 MD5 | raw file
  1. <?php
  2. if(!isset($_SESSION['panier'])){
  3. /* Initialisation du panier */
  4. $_SESSION['panier'] = array();
  5. /* Subdivision du panier */
  6. $_SESSION['panier']['id_article'] = array();
  7. $_SESSION['panier']['nom'] = array();
  8. $_SESSION['panier']['qte'] = array();
  9. $_SESSION['panier']['srcimg'] = array();
  10. $_SESSION['panier']['taille'] = array();
  11. $_SESSION['panier']['prix'] = array();
  12. }
  13. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  14. /* Fonctions de base de gestion du panier */
  15. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  16. function ajout($select)
  17. {
  18. $ajout = false;
  19. if(!verif_panier($select['id']))
  20. {
  21. array_push($_SESSION['panier']['id_article'],$select['id']);
  22. array_push($_SESSION['panier']['nom'],$select['nom']);
  23. array_push($_SESSION['panier']['qte'],$select['qte']);
  24. array_push($_SESSION['panier']['srcimg'],$select['srcimg']);
  25. array_push($_SESSION['panier']['taille'],$select['taille']);
  26. array_push($_SESSION['panier']['prix'],$select['prix']);
  27. $ajout = true;
  28. }
  29. else
  30. {
  31. $ajout = inc_qte($select['id'],$select['qte']);
  32. }
  33. return $ajout;
  34. }
  35. /**
  36. * Modifie la quantité d'un article dans le panier après vérification que nous ne somme pas en phase de paiement
  37. *
  38. * @param String $ref_article Identifiant de l'article à modifier
  39. * @param Int $qte Nouvelle quantité à enregistrer
  40. * @return Mixed Retourne VRAI si la modification a bien eu lieu,
  41. * FAUX sinon,
  42. * "absent" si l'article est absent du panier,
  43. * "qte_ok" si la quantité n'est pas modifiée car déjà correctement enregistrée.
  44. */
  45. function inc_qte($ref_article)
  46. {
  47. /* On initialise la variable de retour */
  48. $modifie = false;
  49. $nb_articles = count($_SESSION['panier']['id_article']);
  50. for($i = 0; $i < $nb_articles; $i++)
  51. {
  52. if($ref_article == $_SESSION['panier']['id_article'][$i])
  53. {
  54. $_SESSION['panier']['qte'][$i] += 1;
  55. $modifie = true;
  56. }
  57. }
  58. return $modifie;
  59. }
  60. function modif_qte($ref_article, $qte)
  61. {
  62. /* On initialise la variable de retour */
  63. $modifie = false;
  64. if(nombre_article($ref_article) != false && $qte != nombre_article($ref_article))
  65. {
  66. /* On compte le nombre d'articles différents dans le panier */
  67. $nb_articles = count($_SESSION['panier']['id_article']);
  68. /* On parcoure le tableau de session pour modifier l'article précis. */
  69. for($i = 0; $i < $nb_articles; $i++)
  70. {
  71. if($ref_article == $_SESSION['panier']['id_article'][$i])
  72. {
  73. $_SESSION['panier']['qte'][$i] = $qte;
  74. $modifie = true;
  75. }
  76. }
  77. }
  78. else
  79. {
  80. /* L'article est absent du panier, donc on ne peut pas modifier la quantité ou bien
  81. * le nombre est exactement le même et il est inutile de le modifier
  82. * Si l'article est absent, comme on a ni la taille ni le prix, on ne peut pas l'ajouter
  83. * Si le nombre est le même, on ne fait pas de changement. On peut donc retourner un autre
  84. * type de valeur pour indiquer une erreur qu'il faudra traiter à part lors du retour d'appel
  85. */
  86. if(nombre_article($ref_article) != false)
  87. {
  88. $modifie = "absent";
  89. }
  90. if($qte != nombre_article($ref_article))
  91. {
  92. $modifie = "qte_ok";
  93. }
  94. }
  95. return $modifie;
  96. }
  97. /**
  98. * Supprimer un article du panier après vérification que nous ne somme pas en phase de paiement
  99. *
  100. * @param String $ref_article numéro de référence de l'article à supprimer
  101. * @return Mixed Retourne TRUE si la suppression a bien été effectuée,
  102. * FALSE sinon, "absent" si l'article était déjà retiré du panier
  103. */
  104. function supprim_article($ref_article)
  105. {
  106. $suppression = false;
  107. /* On vérifie que l'article à supprimer est bien présent dans le panier */
  108. if(nombre_article($ref_article) != false)
  109. {
  110. /* création d'un tableau temporaire de stockage des articles */
  111. $panier_tmp = array("id_article"=>array(),"nom"=>array(),"qte"=>array(),"srcimg"=>array(),"taille"=>array(),"prix"=>array());
  112. /* Comptage des articles du panier */
  113. $nb_articles = count($_SESSION['panier']['id_article']);
  114. /* Transfert du panier dans le panier temporaire */
  115. for($i = 0; $i < $nb_articles; $i++)
  116. {
  117. /* On transfère tout sauf l'article à supprimer */
  118. if($_SESSION['panier']['id_article'][$i] != $ref_article)
  119. {
  120. array_push($panier_tmp['id_article'],$_SESSION['panier']['id_article'][$i]);
  121. array_push($panier_tmp['nom'],$_SESSION['panier']['nom'][$i]);
  122. array_push($panier_tmp['qte'],$_SESSION['panier']['qte'][$i]);
  123. array_push($panier_tmp['srcimg'],$_SESSION['panier']['srcimg'][$i]);
  124. array_push($panier_tmp['taille'],$_SESSION['panier']['taille'][$i]);
  125. array_push($panier_tmp['prix'],$_SESSION['panier']['prix'][$i]);
  126. }
  127. }
  128. /* Le transfert est terminé, on ré-initialise le panier */
  129. $_SESSION['panier'] = $panier_tmp;
  130. /* Option : on peut maintenant supprimer notre panier temporaire: */
  131. unset($panier_tmp);
  132. $suppression = true;
  133. }
  134. else
  135. {
  136. $suppression == "absent";
  137. }
  138. return $suppression;
  139. }
  140. /**
  141. * Supprimer un article du panier : autre méthode.
  142. *
  143. * @param String $ref_article numéro de référence de l'article à supprimer
  144. * @param Boolean $reindex : facultatif, par défaut, vaut true pour ré-indexer le tableau après
  145. * suppression. On peut envoyer false si cette ré-indexation n'est pas nécessaire.
  146. * @return Mixed Retourne TRUE si la suppression a bien été effectuée,
  147. * FALSE sinon, "absent" si l'article était déjà retiré du panier
  148. */
  149. function supprim_article2($ref_article, $reindex = true)
  150. {
  151. $suppression = false;
  152. $aCleSuppr = array_keys($_SESSION['panier']['id_article'], $ref_article);
  153. /* sortie la clé a été trouvée */
  154. if (!empty ($aCleSuppr))
  155. {
  156. /* on traverse le panier pour supprimer ce qui doit l'être */
  157. foreach ($_SESSION['panier'] as $k=>$v)
  158. {
  159. foreach($aCleSuppr as $v1)
  160. {
  161. unset($_SESSION['panier'][$k][$v1]); // remplace la ligne foireuse
  162. }
  163. /* Réindexation des clés du panier si l'option $reindex a été laissée à true */
  164. if($reindex == true)
  165. {
  166. $_SESSION['panier'][$k] = array_values($_SESSION['panier'][$k]);
  167. }
  168. $suppression = true;
  169. }
  170. }
  171. else
  172. {
  173. $suppression = "absent";
  174. }
  175. return $suppression;
  176. }
  177. /**
  178. * Fonction qui supprime tout le contenu du panier en détruisant la variable après
  179. * vérification qu'on ne soit pas en phase de paiement.
  180. *
  181. * @return Mixed Retourne VRAI si l'exécution s'est correctement déroulée, Faux sinon et "inexistant" si
  182. * le panier avait déjà été détruit ou n'avait jamais été créé.
  183. */
  184. function vider_panier()
  185. {
  186. $vide = false;
  187. if(isset($_SESSION['panier']))
  188. {
  189. unset($_SESSION['panier']);
  190. if(!isset($_SESSION['panier']))
  191. {
  192. $vide = true;
  193. }
  194. }
  195. else
  196. {
  197. /* Le panier était déjà détruit, on renvoie une autre valeur exploitable au retour */
  198. $vide = "inexistant";
  199. }
  200. return $vide;
  201. }
  202. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  203. /* Fonctions annexes de gestion du panier */
  204. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  205. /**
  206. * Vérifie la quantité enregistrée d'un article dans le panier
  207. *
  208. * @param String $ref_article référence de l'article à vérifier
  209. * @return Mixed Renvoie le nombre d'article s'il y en a, ou Faux si cet article est absent du panier
  210. */
  211. function nombre_article($ref_article)
  212. {
  213. /* On initialise la variable de retour */
  214. $nombre = false;
  215. /* Comptage du panier */
  216. $nb_art = count($_SESSION['panier']['id_article']);
  217. /* On parcoure le panier à la recherche de l'article pour vérifier le cas échéant combien sont enregistrés */
  218. for($i = 0; $i < $nb_art; $i++)
  219. {
  220. if($_SESSION['panier']['id_article'][$i] == $ref_article)
  221. $nombre = $_SESSION['panier']['qte'][$i];
  222. }
  223. return $nombre;
  224. }
  225. /**
  226. * Calcule le montant total du panier
  227. *
  228. * @return Double
  229. */
  230. function montant_panier()
  231. {
  232. /* On initialise le montant */
  233. $montant = 0;
  234. /* Comptage des articles du panier */
  235. $nb_articles = count($_SESSION['panier']['id_article']);
  236. /* On va calculer le total par article */
  237. for($i = 0; $i < $nb_articles; $i++)
  238. {
  239. $montant += $_SESSION['panier']['qte'][$i] * $_SESSION['panier']['prix'][$i];
  240. }
  241. /* On retourne le résultat */
  242. return $montant;
  243. }
  244. /**
  245. * Vérifie la présence d'un article dans le panier
  246. *
  247. * @param String $ref_article référence de l'article à vérifier
  248. * @return Boolean Renvoie Vrai si l'article est trouvé dans le panier, Faux sinon
  249. */
  250. function verif_panier($ref_article)
  251. {
  252. /* On initialise la variable de retour */
  253. $present = false;
  254. /* On vérifie les numéros de références des articles et on compare avec l'article à vérifier */
  255. if( count($_SESSION['panier']['id_article']) > 0 && array_search($ref_article,$_SESSION['panier']['id_article']) !== false)
  256. {
  257. $present = true;
  258. }
  259. return $present;
  260. }
  261. /**
  262. * Fonction de verrouillage du panier pendant la phase de paiement.
  263. *
  264. */
  265. /**
  266. * Fonction qui va enregistrer les informations de la commande dans
  267. * la base de données et détruire le panier.
  268. *
  269. */
  270. function paiementAccepte()
  271. {
  272. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  273. /* Stockage du panier dans la BDD */
  274. /* ajoutez ici votre code d'insertion */
  275. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  276. unset($_SESSION['panier']);
  277. }
  278. ?>