/include/shopcar.class.php

https://github.com/musicpop/cms · PHP · 260 lines · 177 code · 16 blank · 67 comment · 19 complexity · 97014b49e71bb47bde5b58595375e6c0 MD5 · raw file

  1. <?php
  2. define("DE_ItemEcode",'Shop_De_');//ʶ±ð¹ºÎï³µCookieǰ׺,·Ç¿ª·¢ÈËÔ±Çë²»ÒªËæÒâ¸ü¸Ä!
  3. /**
  4. * ¹ºÎï³µÀà
  5. *
  6. * @version $Id: shopcar.class.php 2 20:58 2010Äê7ÔÂ7ÈÕZ tianya $
  7. * @package DedeCMS.Libraries
  8. * @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
  9. * @license http://help.dedecms.com/usersguide/license.html
  10. * @link http://www.dedecms.com
  11. */
  12. // ------------------------------------------------------------------------
  13. /**
  14. * »áÔ±¹ºÎï³µÀà
  15. *
  16. * @package MemberShops
  17. * @subpackage DedeCMS.Libraries
  18. * @link http://www.dedecms.com
  19. */
  20. class MemberShops
  21. {
  22. var $OrdersId;
  23. var $productsId;
  24. function __construct()
  25. {
  26. $this->OrdersId = $this->getCookie("OrdersId");
  27. if(empty($this->OrdersId))
  28. {
  29. $this->OrdersId = $this->MakeOrders();
  30. }
  31. }
  32. function MemberShops()
  33. {
  34. $this->__construct();
  35. }
  36. /**
  37. * ´´½¨Ò»¸öרÓж©µ¥±àºÅ
  38. *
  39. * @return string
  40. */
  41. function MakeOrders()
  42. {
  43. $this->OrdersId = 'S-P'.time().'RN'.mt_rand(100,999);
  44. $this->deCrypt($this->saveCookie("OrdersId",$this->OrdersId));
  45. return $this->OrdersId;
  46. }
  47. /**
  48. * Ìí¼ÓÒ»¸öÉÌÆ·±àºÅ¼°ÐÅÏ¢
  49. *
  50. * @param string $id ¹ºÎï³µID
  51. * @param string $value Öµ
  52. * @return void
  53. */
  54. function addItem($id, $value)
  55. {
  56. $this->productsId = DE_ItemEcode.$id;
  57. $this->saveCookie($this->productsId,$value);
  58. }
  59. /**
  60. * ɾȥһ¸ö´ø±àºÅµÄÉÌÆ·
  61. *
  62. * @param string $id ¹ºÎï³µID
  63. * @return void
  64. */
  65. function delItem($id)
  66. {
  67. $this->productsId = DE_ItemEcode.$id;
  68. setcookie($this->productsId, "", time()-3600000,"/");
  69. }
  70. /**
  71. * Çå¿Õ¹ºÎï³µÉÌÆ·
  72. *
  73. * @return string
  74. */
  75. function clearItem()
  76. {
  77. foreach($_COOKIE as $key => $vals)
  78. {
  79. if(preg_match('/'.DE_ItemEcode.'/', $key))
  80. {
  81. setcookie($key, "", time()-3600000,"/");
  82. }
  83. }
  84. return 1;
  85. }
  86. /**
  87. * µÃµ½¶©µ¥¼Ç¼
  88. *
  89. * @return array
  90. */
  91. function getItems()
  92. {
  93. $Products = array();
  94. foreach($_COOKIE as $key => $vals)
  95. {
  96. if(preg_match("#".DE_ItemEcode."#", $key) && preg_match("#[^_0-9a-z]#", $key))
  97. {
  98. parse_str($this->deCrypt($vals), $arrays);
  99. $values = @array_values($arrays);
  100. if(!empty($values))
  101. {
  102. $arrays['price'] = sprintf("%01.2f", $arrays['price']);
  103. if($arrays['buynum'] < 1)
  104. {
  105. $arrays['buynum'] = 0;
  106. }
  107. $Products[$key] = $arrays;
  108. }
  109. }
  110. }
  111. unset($key,$vals,$values,$arrays);
  112. return $Products;
  113. }
  114. /**
  115. * µÃµ½Ö¸¶¨ÉÌÆ·ÐÅÏ¢
  116. *
  117. * @param string $id ¹ºÎï³µID
  118. * @return array
  119. */
  120. function getOneItem($id)
  121. {
  122. $key = DE_ItemEcode.$id;
  123. if(!isset($_COOKIE[$key]) && empty($_COOKIE[$key]))
  124. {
  125. return '';
  126. }
  127. $itemValue = $_COOKIE[$key];
  128. parse_str($this->deCrypt($itemValue), $Products);
  129. unset($key,$itemValue);
  130. return $Products;
  131. }
  132. /**
  133. * »ñµÃ¹ºÎï³µÖеÄÉÌÆ·Êý
  134. *
  135. * @return int
  136. */
  137. function cartCount()
  138. {
  139. $Products = $this->getItems();
  140. $itemsCount = count($Products);
  141. $i = 0;
  142. if($itemsCount > 0)
  143. {
  144. foreach($Products as $val)
  145. {
  146. $i = $i+$val['buynum'];
  147. }
  148. }
  149. unset($Products,$val,$itemsCount);
  150. return $i;
  151. }
  152. /**
  153. * »ñµÃ¹ºÎï³µÖеÄ×ܽð¶î
  154. *
  155. * @return string
  156. */
  157. function priceCount()
  158. {
  159. $price = 0.00;
  160. foreach($_COOKIE as $key => $vals)
  161. {
  162. if(preg_match("/".DE_ItemEcode."/", $key))
  163. {
  164. $Products = $this->getOneItem(str_replace(DE_ItemEcode,"",$key));
  165. if($Products['buynum'] > 0 && $Products['price'] > 0)
  166. {
  167. $price = $price + ($Products['price']*$Products['buynum']);
  168. }
  169. }
  170. }
  171. unset($key,$vals,$Products);
  172. return sprintf("%01.2f", $price);
  173. }
  174. //¼ÓÃܽӿÚ×Ö·û
  175. function enCrypt($txt)
  176. {
  177. srand((double)microtime() * 1000000);
  178. $encrypt_key = md5(rand(0, 32000));
  179. $ctr = 0;
  180. $tmp = '';
  181. for($i = 0; $i < strlen($txt); $i++)
  182. {
  183. $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
  184. $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
  185. }
  186. return base64_encode($this->setKey($tmp));
  187. }
  188. //½âÃܽӿÚ×Ö·û´®
  189. function deCrypt($txt)
  190. {
  191. $txt = $this->setKey(base64_decode($txt));
  192. $tmp = '';
  193. for ($i = 0; $i < strlen($txt); $i++)
  194. {
  195. $tmp .= $txt[$i] ^ $txt[++$i];
  196. }
  197. return $tmp;
  198. }
  199. //´¦Àí¼ÓÃÜÊý¾Ý
  200. function setKey($txt)
  201. {
  202. global $cfg_cookie_encode;
  203. $encrypt_key = md5(strtolower($cfg_cookie_encode));
  204. $ctr = 0;
  205. $tmp = '';
  206. for($i = 0; $i < strlen($txt); $i++)
  207. {
  208. $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
  209. $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
  210. }
  211. return $tmp;
  212. }
  213. //´®Ðл¯Êý×é
  214. function enCode($array)
  215. {
  216. $arrayenc = array();
  217. foreach($array as $key => $val)
  218. {
  219. $arrayenc[] = $key.'='.urlencode($val);
  220. }
  221. return implode('&', $arrayenc);
  222. }
  223. //´´½¨¼ÓÃܵÄ_cookie
  224. function saveCookie($key,$value)
  225. {
  226. if(is_array($value))
  227. {
  228. $value = $this->enCrypt($this->enCode($value));
  229. }
  230. else
  231. {
  232. $value = $this->enCrypt($value);
  233. }
  234. setcookie($key,$value,time()+36000,'/');
  235. }
  236. //»ñµÃ½âÃܵÄ_cookie
  237. function getCookie($key)
  238. {
  239. if(isset($_COOKIE[$key]) && !empty($_COOKIE[$key]))
  240. {
  241. return $this->deCrypt($_COOKIE[$key]);
  242. }
  243. }
  244. }