path = $path;
$this->clean_path();
$this->entry = array();
if($xml_file) {
$this->file = $this->path.$xml_file;
$this->get_cart();
$this->nb_items = count($this->entry);
} else {
$this->create_cart();
}
return;
}
// mise à jour de la description
public function set_description($desc='') {
$this->description = $desc;
}
// mise en forme du path
public function clean_path() {
if(!$this->path) {
$this->path = './';
} else {
$this->path = preg_replace('/\/$|\/\s$|\s$/', '', $this->path);
$this->path .= '/';
}
}
// liste des paniers disponibles
public static function get_cart_list($path='') {
// nettoyage du path
if(!$path) {
$path = '.';
} else {
$path = preg_replace('/\/$|\/\s$|\s$/', '', $path);
}
$cart_list=array();
if ($dir = @opendir($path)) {
while($file = readdir($dir)) {
if(preg_match('/\.xml$/i', $file)) {
$myCart = new cart($file, $path);
if($myCart->name) {
$cart_list[] = array(
'name' => $myCart->name,
'file' => $myCart->file,
'items'=> $myCart->nb_items,
'description' => $myCart->description);
}
}
}
closedir($dir);
}
return $cart_list;
}
// création d'un panier vide
public function create_cart() {
$this->name = 'CART'.time();
$this->file = $this->path.$this->name.".xml";
if( $fp = fopen($this->file, "w"))
fclose($fp);
else
die( "PMB cart parser error : can't create cart ".$this->file);
$this->nb_items = 0;
}
// ajout d'un item
public function add_item($item=0) {
if(!(int)$item || in_array($item, $this->entry))
return;
$this->entry[] = $item;
$this->nb_items = count($this->entry);
}
// suppression d'un item
public function del_item($item = 0) {
if (!(int)$item) {
return;
}
$nb_entries = count($this->entry);
for ($i = 0; $i < $nb_entries; $i++) {
if ((int) $this->entry[$i] == $item) {
$this->entry[$i] = 0;
$this->nb_items--;
}
}
$this->entry = array_filter($this->entry, 'array_clean');
}
// suppression d'un fichier de panier
public function delete() {
if(@unlink($this->file)) {
$this->entry=array();
$this->name='';
$this->nb_items=0;
$this->description='';
$this->file='';
}
}
// sauvegarde du panier
public function save_cart() {
if ($fp = @fopen($this->file, 'w')) {
$header = "";
$header .= "\ndtd_path\">";
$header .= "\nname";
$header .= "\" description=\"$this->description\">";
fwrite($fp, $header);
// élimination des valeurs nulles
$this->entry = array_filter($this->entry, 'array_clean');
$nb_entries = count($this->entry);
for ($i = 0; $i < $nb_entries; $i++) {
if ((int) $this->entry[$i]) {
fwrite($fp, "\n\t- $this->entry[$i]
");
}
}
$footer = "\n\n";
fwrite($fp, $footer);
fflush($fp);
fclose($fp);
} else {
die("PMB cart parser error : can't store datas in $this->file");
}
}
// fonctions du gestionnaire d'éléments
public function debutBalise($parser, $nom, $attributs) {
switch($nom) {
case 'CART':
$this->name = $attributs['NAME'];
$this->description = $attributs['DESCRIPTION'];
break;
case 'ITEM':
break;
default:
break;
}
return;
}
public function finBalise($parser, $nom) {
return;
}
// content() -> gestionnaire de données
public function content($parser, $data) {
if((int)$data) {
$this->entry[] = $data;
}
return;
}
// get_cart() : ouvre un fichier et récupère le panier
public function get_cart() {
global $charset;
if(! $fp = @fopen($this->file, 'r')) {
die( "PMB cart parser error : can't access ".$this->file);
} else {
$file_size=filesize ($this->file);
$data = fread ($fp, $file_size);
$rx = "//m";
if (preg_match($rx, $data, $m)) $encoding = strtoupper($m[1]);
else $encoding = "ISO-8859-1";
$this->parser = xml_parser_create($encoding);
xml_parser_set_option($p, XML_OPTION_TARGET_ENCODING, $charset);
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, true);
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "debutBalise", "finBalise");
xml_set_character_data_handler($this->parser, "content");
while($data = fread($fp, 4096)) {
if( !xml_parse($this->parser, $data, feof($fp))) {
die( sprintf("XML error : %s
at line %d\n\n'",
xml_error_string(xml_get_error_code($this->parser)),
xml_get_current_line_number($this->parser)));
}
}
fclose($fp);
xml_parser_free($this->parser);
}
}
} // fin de déclaration de la classe cart
} # fin de déclaration du fichier cart.class