source: qesdi/joomla/trunk/components/com_caddy/caddy.cart.class.php @ 5802

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/joomla/trunk/components/com_caddy/caddy.cart.class.php@5802
Revision 5802, 5.2 KB checked in by pnorton, 10 years ago (diff)

Installed the simple caddy, custom properties and form 2 content lite extensions. I've modified the simple caddy extension so that it is more suitable for qesdi use.

Line 
1<?php
2/**
3* @package SimpleCaddy for Joomla 1.5
4* @copyright Copyright (C) 2006-2008 Henk von Pickartz. All rights reserved.
5* @version 1.6
6*/
7
8// ensure this file is being included by a parent file
9defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed.' );
10
11class CartProduct {
12    var $prodcode;
13    var $prodname;
14    var $option;
15    var $quantity=1;
16    var $unitprice;
17    var $formula="";
18    var $id="";
19    var $caption="";
20    var $finalprice;
21
22    function CartProduct ($aa=null) // sets the CartProduct class variables
23    {
24        if ($aa!=null) { // could be null in case directly created
25               foreach ($aa as $k=>$v) {
26                                $this->$k = $aa[$k];
27                        }
28                }
29    }
30}
31
32class cart2 {
33        function destroyCart() {
34                if (isset($_SESSION)) {
35                        @$_SESSION['SimpleCart']=""; // empty the cart
36                }
37        }
38
39        function readCart() { // reads cart from session cookie
40                if (!isset($_SESSION)) {
41                        session_start(); // cart needs a session cookie
42                }
43                $data = @$_SESSION['SimpleCart']; // suppress any legitimate warnings, after all the cart might be empty
44                if (!$data) return; // no data in the cart
45//              $data=urldecode($data);
46            $parser = xml_parser_create();
47            xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
48            xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
49            xml_parse_into_struct($parser, $data, $values, $tags);
50            xml_parser_free($parser);
51                $tdb=array();
52            foreach ($tags as $key=>$val) {
53                if ($key == "product") {
54                    $ranges = $val;
55                    for ($i=0; $i < count($ranges); $i+=2) {
56                        $offset = $ranges[$i] + 1;
57                        $len = $ranges[$i + 1] - $offset;
58                        $tdb[] = @$this->parseProduct(array_slice($values, $offset, $len));
59                    }
60                } else {
61                    continue;
62                }
63            }
64            return $tdb;
65        }
66
67        function parseProduct($mvalues) {
68            for ($i=0; $i < count($mvalues); $i++) {
69                $prod[$mvalues[$i]["tag"]] = urldecode($mvalues[$i]["value"]);
70            }
71            return new CartProduct($prod);
72        }
73
74        function dumpCartArray() {
75                $dump=$this->readCart();
76                echo "Array content of Cart<pre>\n";
77                print_r($dump);
78                echo "</pre>";
79        }
80
81        function dumpCartXML() {
82                $cartArray=$this->readCart();
83                $cartXML=$this->makeCartXML($cartArray);
84                printf("<pre>%s</pre>", htmlspecialchars($cartXML));
85        }
86
87        function setCartProductQty($p) {
88                $cartArray=$this->readCart();
89                $todelete=false;
90                if (count($cartArray)>0) {
91                        foreach ($cartArray as $key=>$prod) {
92                                if ($prod->id == $p->id) {
93                                        $prod->quantity = $p->quantity;
94                                        $cartArray[$key]=$prod; // put back into the array for php4 compatibility
95                                        if ($p->quantity==0) { // nothing left
96                                                $todelete=true;
97                                                $which=$key;
98                                                break; // we have found the product, no need to do the rest
99                                        }
100                                }
101                        }
102                        if ($todelete) {
103                                array_splice($cartArray, $which, 1);
104                        }
105                }
106                $cartXML=$this->makeCartXML($cartArray);
107                $this->writeCart($cartXML);
108                return $cartXML;
109        }
110
111        function addCartProduct($p) {
112
113jimport('joomla.error.log');
114$log = &JLog::getInstance();
115
116$log->addEntry(array('level' => 'Debug', 'comment' => 'Adding product \$p ' . $p->prodcode));
117
118
119                $cartArray=$this->readCart();
120                $toadd=true; // consider we dont have it yet
121                if (count($cartArray)>0) {
122                foreach ($cartArray as $key=>$prod) {
123                        if (($prod->id == $p->id)) {
124                                $prod->quantity = $prod->quantity+$p->quantity;
125                                $toadd=false;
126                                break; // we have found the product, no need to do the rest
127                                }
128                        }
129                }
130                if ($toadd) {
131                        $cartArray[]=$p; // add the product to the array
132                }
133
134                $cartXML=$this->makeCartXML($cartArray);
135
136$log->addEntry(array('level' => 'Debug', 'comment' => '\$cartXML ' . $cartXML));
137
138                $this->writeCart($cartXML);
139                return $cartXML;
140        }
141
142        function removeCartProduct($p) {
143                $cartArray=$this->readCart();
144                $todelete=false;
145                if (count($cartArray)>0) {
146                        foreach ($cartArray as $key=>$prod) {
147                                if (($prod->prodcode == $p->prodcode) and ($prod->option==$p->option)) {
148                                        $prod->quantity = $prod->quantity-1;
149                                        if ($prod->quantity==0) { // nothing left
150                                                $todelete=true;
151                                                $which=$key;
152                                                break; // we have found the producty, no need to do the rest
153                                        }
154                                }
155                        }
156                        if ($todelete) {
157                                array_splice($cartArray, $key, 1);
158                        }
159                }
160                $cartXML=$this->makeCartXML($cartArray);
161                $this->writeCart($cartXML);
162                return $cartXML;
163        }
164
165        function makeCartXML($cartArray){ // make xml string from the array with cart contents
166                $cartxml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
167                $cartxml.="\n<cart>";
168                $tmp=new CartProduct();
169                $pv=get_object_vars($tmp);
170                if (count($cartArray)>0){ // make sure we have something to add
171                        foreach ($cartArray as $key=>$product) {
172                                $cartxml .= "\n\t<product>";
173                                foreach ($pv as $key=>$v) {
174                                        $xmlkey=urlencode($key);
175                                        $cartxml .= "\n\t\t<$key>".urlencode($product->$key)."</$key>";
176                                }
177                                $cartxml .= "\n\t</product>";
178                        }
179                }
180                $cartxml .= "\n</cart>";
181                return $cartxml;
182        }
183
184        function writeCart($cartXML) { // write cart back to session cookie
185        if (!isset($_SESSION)) session_start();
186                $_SESSION['SimpleCart']=$cartXML;
187        }
188}
189?>
Note: See TracBrowser for help on using the repository browser.