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