source: branches/dev/data/class/SC_CartSession.php @ 14130

Revision 14130, 8.6 KB checked in by kakinaka, 19 years ago (diff)

キャンペーンページを閲覧後、通常の商品を購入すると閲覧したキャンペーンに応募したことになってしまう問題を修正

Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8/* ¥«¡¼¥È¥»¥Ã¥·¥ç¥ó´ÉÍý¥¯¥é¥¹ */
9class SC_CartSession {
10    var $key;
11    var $key_tmp;   // ¥æ¥Ë¡¼¥¯ID¤ò»ØÄꤹ¤ë¡£
12   
13    /* ¥³¥ó¥¹¥È¥é¥¯¥¿ */
14    function SC_CartSession($key = 'cart') {
15        sfDomainSessionStart();
16       
17        if($key == "") $key = "cart";
18        $this->key = $key;
19    }
20   
21    // ¾¦ÉÊ¹ØÆþ½èÍýÃæ¤Î¥í¥Ã¥¯
22    function saveCurrentCart($key_tmp) {
23        $this->key_tmp = "savecart_" . $key_tmp;
24        // ¤¹¤Ç¤Ë¾ðÊ󤬤ʤ±¤ì¤Ð¸½¾õ¤Î¥«¡¼¥È¾ðÊó¤òµ­Ï¿¤·¤Æ¤ª¤¯
25        if(count($_SESSION[$this->key_tmp]) == 0) {
26            $_SESSION[$this->key_tmp] = $_SESSION[$this->key];
27        }
28        // 1À¤Âå¸Å¤¤¥³¥Ô¡¼¾ðÊó¤Ï¡¢ºï½ü¤·¤Æ¤ª¤¯
29        foreach($_SESSION as $key => $val) {
30            if($key != $this->key_tmp && ereg("^savecart_", $key)) {
31                unset($_SESSION[$key]);
32            }
33        }
34    }
35
36    // ¾¦ÉÊ¹ØÆþÃæ¤ÎÊѹ¹¤¬¤¢¤Ã¤¿¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£
37    function getCancelPurchase() {
38        $ret = $_SESSION[$this->key]['cancel_purchase'];
39        $_SESSION[$this->key]['cancel_purchase'] = false;
40        return $ret;
41    }
42   
43    // ¹ØÆþ½èÍýÃæ¤Ë¾¦ÉʤËÊѹ¹¤¬¤Ê¤«¤Ã¤¿¤«¤òȽÄê
44    function checkChangeCart() {
45        $change = false;
46        $max = $this->getMax();
47        for($i = 0; $i <= $max; $i++) {
48            if ($_SESSION[$this->key][$i]['quantity'] != $_SESSION[$this->key_tmp][$i]['quantity']) {
49                $change = true;
50                break;
51            }
52            if ($_SESSION[$this->key][$i]['id'] != $_SESSION[$this->key_tmp][$i]['id']) {
53                $change = true;
54                break;
55            }
56        }
57        if ($change) {
58            // °ì»þ¥«¡¼¥È¤Î¥¯¥ê¥¢
59            unset($_SESSION[$this->key_tmp]);
60            $_SESSION[$this->key]['cancel_purchase'] = true;
61        } else {
62            $_SESSION[$this->key]['cancel_purchase'] = false;
63        }
64        return $_SESSION[$this->key]['cancel_purchase'];
65    }
66   
67    // ¼¡¤Ë³ä¤êÅö¤Æ¤ë¥«¡¼¥È¤ÎID¤ò¼èÆÀ¤¹¤ë
68    function getNextCartID() {
69        $max = count($_SESSION[$this->key]);
70        for($i = 0; $i < $max; $i++) {
71            $arrRet[] = $_SESSION[$this->key][$i]['cart_no'];
72        }
73        return (max($arrRet) + 1);     
74    }
75           
76    // ¾¦Éʤ´¤È¤Î¹ç·×²Á³Ê
77    function getProductTotal($arrInfo, $id) {
78        $max = $this->getMax();
79        for($i = 0; $i <= $max; $i++) {
80            if($_SESSION[$this->key][$i]['id'] == $id) {
81                // Àǹþ¤ß¹ç·×
82                $price = $_SESSION[$this->key][$i]['price'];
83                $quantity = $_SESSION[$this->key][$i]['quantity'];
84                $pre_tax = sfPreTax($price, $arrInfo['tax'], $arrInfo['tax_rule']);
85                $total = $pre_tax * $quantity;
86                return $total;
87            }
88        }
89        return 0;
90    }
91   
92    // ÃͤΥ»¥Ã¥È
93    function setProductValue($id, $key, $val) {
94        $max = $this->getMax();
95        for($i = 0; $i <= $max; $i++) {
96            if($_SESSION[$this->key][$i]['id'] == $id) {
97                $_SESSION[$this->key][$i][$key] = $val;
98            }
99        }
100    }
101       
102    // ¥«¡¼¥ÈÆâ¾¦ÉʤκÇÂçÍ×ÁÇÈÖ¹æ¤ò¼èÆÀ¤¹¤ë¡£
103    function getMax() {
104        $cnt = 0;
105        $pos = 0;
106        $max = 0;
107        if (count($_SESSION[$this->key]) > 0){
108            foreach($_SESSION[$this->key] as $key => $val) {
109                if (is_numeric($key)) {
110                    if($max < $key) {
111                        $max = $key;
112                    }
113                }
114            }
115        }
116        return ($max);
117    }
118   
119    // ¥«¡¼¥ÈÆâ¾¦ÉÊ¿ô¤Î¹ç·×
120    function getTotalQuantity() {
121        $total = 0;
122        $max = $this->getMax();
123        for($i = 0; $i <= $max; $i++) {
124            $total+= $_SESSION[$this->key][$i]['quantity'];
125        }
126        return $total;
127    }
128   
129
130    // Á´¾¦Éʤιç·×²Á³Ê
131    function getAllProductsTotal($arrInfo) {
132        // Àǹþ¤ß¹ç·×
133        $total = 0;
134        $max = $this->getMax();
135        for($i = 0; $i <= $max; $i++) {
136            $price = $_SESSION[$this->key][$i]['price'];
137            $quantity = $_SESSION[$this->key][$i]['quantity'];
138            $pre_tax = sfPreTax($price, $arrInfo['tax'], $arrInfo['tax_rule']);
139            $total+= ($pre_tax * $quantity);
140        }
141        return $total;
142    }
143
144    // Á´¾¦Éʤιç·×ÀǶâ
145    function getAllProductsTax($arrInfo) {
146        // Àǹç·×
147        $total = 0;
148        $max = $this->getMax();
149        for($i = 0; $i <= $max; $i++) {
150            $price = $_SESSION[$this->key][$i]['price'];
151            $quantity = $_SESSION[$this->key][$i]['quantity'];
152            $tax = sfTax($price, $arrInfo['tax'], $arrInfo['tax_rule']);
153            $total+= ($tax * $quantity);
154        }
155        return $total;
156    }
157   
158    // Á´¾¦Éʤιç·×¥Ý¥¤¥ó¥È
159    function getAllProductsPoint() {
160        // ¥Ý¥¤¥ó¥È¹ç·×
161        $total = 0;
162        $max = $this->getMax();
163        for($i = 0; $i <= $max; $i++) {
164            $price = $_SESSION[$this->key][$i]['price'];
165            $quantity = $_SESSION[$this->key][$i]['quantity'];
166            $point_rate = $_SESSION[$this->key][$i]['point_rate'];
167            $id = $_SESSION[$this->key][$i]['id'][0];
168            $point = sfPrePoint($price, $point_rate, POINT_RULE, $id);
169            $total+= ($point * $quantity);
170        }
171        return $total;
172    }
173   
174    // ¥«¡¼¥È¤Ø¤Î¾¦ÉÊÄɲÃ
175    function addProduct($id, $quantity, $campaign_id = "") {
176        $find = false;
177        $max = $this->getMax();
178        for($i = 0; $i <= $max; $i++) {
179           
180            if($_SESSION[$this->key][$i]['id'] == $id) {
181                $val = $_SESSION[$this->key][$i]['quantity'] + $quantity;
182                if(strlen($val) <= INT_LEN) {
183                    $_SESSION[$this->key][$i]['quantity']+= $quantity;
184                    if(!empty($campaign_id)){
185                        $_SESSION[$this->key][$i]['campaign_id'] = $campaign_id;
186                        $_SESSION[$this->key][$i]['is_campaign'] = true;
187                    }
188                }
189                $find = true;
190            }
191        }
192        if(!$find) {
193            $_SESSION[$this->key][$max+1]['id'] = $id;
194            $_SESSION[$this->key][$max+1]['quantity'] = $quantity;
195            $_SESSION[$this->key][$max+1]['cart_no'] = $this->getNextCartID();
196            if(!empty($campaign_id)){
197                $_SESSION[$this->key][$max+1]['campaign_id'] = $campaign_id;
198                $_SESSION[$this->key][$max+1]['is_campaign'] = true;
199            }
200        }
201    }
202   
203    // Á°ÊǤÎURL¤òµ­Ï¿¤·¤Æ¤ª¤¯
204    function setPrevURL($url) {
205        // Á°ÊǤȤ·¤Æµ­Ï¿¤·¤Ê¤¤¥Ú¡¼¥¸¤ò»ØÄꤹ¤ë¡£
206        $arrExclude = array(
207            "detail_image.php",
208            "/shopping/"
209        );
210        $exclude = false;
211        // ¥Ú¡¼¥¸¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¡£
212        foreach($arrExclude as $val) {
213            if(ereg($val, $url)) {
214                $exclude = true;
215                break;
216            }
217        }
218        // ½ü³°¥Ú¡¼¥¸¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢Á°ÊǤȤ·¤Æµ­Ï¿¤¹¤ë¡£
219        if(!$exclude) {     
220            $_SESSION[$this->key]['prev_url'] = $url;
221        }
222    }
223   
224    // Á°ÊǤÎURL¤ò¼èÆÀ¤¹¤ë
225    function getPrevURL() {
226        return $_SESSION[$this->key]['prev_url'];
227    }
228
229    // ¥­¡¼¤¬°ìÃפ·¤¿¾¦Éʤκï½ü
230    function delProductKey($keyname, $val) {
231        $max = count($_SESSION[$this->key]);
232        for($i = 0; $i < $max; $i++) {
233            if($_SESSION[$this->key][$i][$keyname] == $val) {
234                unset($_SESSION[$this->key][$i]);
235            }
236        }
237    }
238   
239    function setValue($key, $val) {
240        $_SESSION[$this->key][$key] = $val;
241    }
242   
243    function getValue($key) {
244        return $_SESSION[$this->key][$key];
245    }
246   
247    function getCartList() {
248        $max = $this->getMax();
249        for($i = 0; $i <= $max; $i++) {
250            if($_SESSION[$this->key][$i]['cart_no'] != "") {
251                $arrRet[] = $_SESSION[$this->key][$i];
252            }
253        }
254        return $arrRet;
255    }
256   
257    // ¥«¡¼¥ÈÆâ¤Ë¤¢¤ë¾¦ÉʣɣĤòÁ´¤Æ¼èÆÀ¤¹¤ë
258    function getAllProductID() {
259        $max = $this->getMax();
260        for($i = 0; $i <= $max; $i++) {
261            if($_SESSION[$this->key][$i]['cart_no'] != "") {
262                $arrRet[] = $_SESSION[$this->key][$i]['id'][0];
263            }
264        }
265        return $arrRet;
266    }
267   
268    function delAllProducts() {
269        $max = $this->getMax();
270        for($i = 0; $i <= $max; $i++) {
271            unset($_SESSION[$this->key][$i]);
272        }
273    }
274   
275    // ¾¦Éʤκï½ü
276    function delProduct($cart_no) {
277        $max = $this->getMax();
278        for($i = 0; $i <= $max; $i++) {
279            if($_SESSION[$this->key][$i]['cart_no'] == $cart_no) {
280                unset($_SESSION[$this->key][$i]);
281            }
282        }
283    }
284   
285    // ¸Ä¿ô¤ÎÁý²Ã
286    function upQuantity($cart_no) {
287        $max = $this->getMax();
288        for($i = 0; $i <= $max; $i++) {
289            if($_SESSION[$this->key][$i]['cart_no'] == $cart_no) {
290                if(strlen($_SESSION[$this->key][$i]['quantity'] + 1) <= INT_LEN) {
291                    $_SESSION[$this->key][$i]['quantity']++;
292                }
293            }
294        }
295    }
296   
297    // ¸Ä¿ô¤Î¸º¾¯
298    function downQuantity($cart_no) {
299        $max = $this->getMax();
300        for($i = 0; $i <= $max; $i++) {
301            if($_SESSION[$this->key][$i]['cart_no'] == $cart_no) {
302                if($_SESSION[$this->key][$i]['quantity'] > 1) {
303                    $_SESSION[$this->key][$i]['quantity']--;
304                }
305            }
306        }
307    }
308   
309    // Á´¾¦Éʤιç·×Á÷ÎÁ
310    function getAllProductsDelivFee() {
311        // ¥Ý¥¤¥ó¥È¹ç·×
312        $total = 0;
313        $max = $this->getMax();
314        for($i = 0; $i <= $max; $i++) {
315            $deliv_fee = $_SESSION[$this->key][$i]['deliv_fee'];
316            $quantity = $_SESSION[$this->key][$i]['quantity'];
317            $total+= ($deliv_fee * $quantity);
318        }
319        return $total;
320    }
321   
322    // ¥«¡¼¥È¤ÎÃæ¤ÎÇä¤êÀÚ¤ì¥Á¥§¥Ã¥¯
323    function chkSoldOut($arrCartList, $is_mobile = false){
324        foreach($arrCartList as $key => $val){
325            if($val['quantity'] == 0){
326                // Çä¤êÀڤ쾦Éʤò¥«¡¼¥È¤«¤éºï½ü¤¹¤ë
327                $this->delProduct($val['cart_no']);
328                sfDispSiteError(SOLD_OUT, "", true, "", $is_mobile);
329            }
330        }
331    }
332   
333    /**
334     * ¥«¡¼¥È¤ÎÃæ¤Î¥­¥ã¥ó¥Ú¡¼¥ó¾¦ÉʤΥÁ¥§¥Ã¥¯
335     * @param integer $campaign_id ¥­¥ã¥ó¥Ú¡¼¥óID
336     * @return boolean True:¥­¥ã¥ó¥Ú¡¼¥ó¾¦ÉÊÍ­¤ê False:¥­¥ã¥ó¥Ú¡¼¥ó¾¦ÉÊ̵¤·
337     */
338    function chkCampaign($campaign_id){
339        $max = $this->getMax();
340        for($i = 0; $i <= $max; $i++) {
341            if($_SESSION[$this->key][$i]['is_campaign'] and $_SESSION[$this->key][$i]['campaign_id'] == $campaign_id) return true;
342        }
343       
344        return false;
345    }
346   
347
348}
349?>
Note: See TracBrowser for help on using the repository browser.