--- /dev/null
+<?
+//
+// PHP Implementation: cart
+//
+// Description: Shopping Cart for Web-Interface
+//
+//
+// Author: Konrad Rosenbaum <konrad@silmor.de>, (C) 2007
+//
+// Copyright: See README/COPYING files that come with this distribution
+//
+//
+
+/**this class represents a bunch of tickets in the shopping cart, it is created by Cart*/
+class CartTicket
+{
+ private $cartid;
+ private $eventid;
+ private $amount;
+
+ /**used by Cart to create the tickets, never use this directly*/
+ public function __construct($cid,$eid,$amt)
+ {
+ $this->cartid=$cid;
+ $this->eventid=$eid;
+ $this->amount=$amt;
+ }
+
+ /**use this to increase or decrease the amount of tickets*/
+ public function changeAmount($amt)
+ {
+ global $db;
+ if($amd<=0){
+ $db->deleteRows("cart_ticket","cartid='".addslashes($this->cartid)."' and eventid=".$this->eventid);
+ }else{
+ $db->update("cart_ticket",array("amount"=>($amt+0)),"cartid='".addslashes($this->cartid)."' and eventid=".$this->eventid);
+ }
+ }
+
+ /**use this to get the actual event*/
+ public function eventObject()
+ {
+ return new Event($this->eventid);
+ }
+};
+
+/**this class represents a shopping cart*/
+class Cart
+{
+ private $cartid=false;
+
+ /**reloads a cart from the database, if $id is false a new one is created, use isValid() to check whether the cart really exists in the DB (it may have expired)*/
+ public function __construct($id=false)
+ {
+ global $db;
+ global $CartTimeout;
+ if($id===false){
+ $db->beginTransaction();
+ while(1){
+ //generate ID
+ $id=getRandom(128);
+ //check it does not exist
+ $res=$db->select("cart","cartid","cartid='".addslashes($id)."'");
+ if(count($res)==0){
+ $this->cartid=$id;
+ break;
+ }
+ }
+ //create entry
+ $db->insert("cart",array("cartid"=>$id,"timeout"=>(time()+$CartTimeout)));
+ $db->commitTransaction();
+ }else{
+ //check that cart exists
+ $res=$db->select("cart","cartid","cartid='".addslashes($id)."'");
+ if(count($res)>0)$this->cartid=$id;
+ }
+ }
+
+ /**returns true if this is a valid shopping cart, if it returns false, try to create a new one*/
+ public function isValid()
+ {
+ return $this->cartid!==false;
+ }
+
+ /**use this to get all existing tickets in this cart, then manipulate the tickets directly*/
+ public function getTickets()
+ {
+ if($this->cartid===false)return array();
+ $res=$db->select("cart_ticket","*","where cartid='".addslashed($this->cartid)."'");
+ $ret=array();
+ if(count($res)>0)
+ foreach($res as $k=>$tc)
+ $ret[]=new CartTicket($tc["cartid"],$tc["eventid"],$tc["amount"]);
+ return $ret;
+ }
+
+ /**use this to add tickets*/
+ public function addTickets($eventid,$amount)
+ {
+ //sanity check
+ if($amount<=0)return;
+ //TODO: check that ticket can be sold
+ //insert into cart
+ $db->insert("cart_ticket",array());
+ }
+};
+
+?>
\ No newline at end of file