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

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

Added a link to the dataset page for each of the datasets shown in the cart. Also changed the cart from being divs to being a table.

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