Cheetah
ChPmtCart.php
Go to the documentation of this file.
1 <?php
2 
8 class ChPmtCart
9 {
10  static public $DESCRIPTOR_DIVIDER = '_';
11 
12  var $_oDb;
13  var $_oConfig;
16 
17  /*
18  * Constructor.
19  */
20  function __construct(&$oDb, &$oConfig, &$oTemplate)
21  {
22  $this->_oDb = &$oDb;
23  $this->_oConfig = &$oConfig;
24  $this->_oTemplate = &$oTemplate;
25  $this->_sLangsPrefix = $this->_oConfig->getLangsPrefix();
26  }
27  function getHistoryBlock($iUserId, $iSellerId)
28  {
29  return $this->_oTemplate->displayHistoryBlock($iUserId, $iSellerId);
30  }
31  function getCartJs($bWrapped = true)
32  {
33  return $this->_oTemplate->displayCartJs($bWrapped);
34  }
35  function getAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect = false, $bWrapped = true)
36  {
37  return $this->_oTemplate->displayAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect, $bWrapped);
38  }
39  function getAddToCartLink($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
40  {
41  return $this->_oTemplate->displayAddToCartLink($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect);
42  }
43  function addToCart($iClientId, $iVendorId, $iModuleId, $iItemId, $iItemCount)
44  {
45  if($iVendorId == CH_PMT_EMPTY_ID || empty($iModuleId) || empty($iItemId) || empty($iItemCount))
46  return array('code' => 1, 'message' => _t($this->_sLangsPrefix . 'err_wrong_data'));
47 
48  if(empty($iClientId))
49  return array('code' => 2, 'message' => _t($this->_sLangsPrefix . 'err_required_login'));
50 
51  if($iClientId == $iVendorId)
52  return array('code' => 3, 'message' => _t($this->_sLangsPrefix . 'err_purchase_from_yourself'));
53 
54  $aVendor = $this->_oDb->getVendorInfoProfile($iVendorId);
55  if($aVendor['status'] != 'Active')
56  return array('code' => 4, 'message' => _t($this->_sLangsPrefix . 'err_inactive_vendor'));
57 
58  $aVendorProviders = $this->_oDb->getVendorInfoProviders($iVendorId);
59  if(empty($aVendorProviders))
60  return array('code' => 5, 'message' => _t($this->_sLangsPrefix . 'err_not_accept_payments'));
61 
63  $sCartItem = $iVendorId . $sDd . $iModuleId . $sDd . $iItemId . $sDd . $iItemCount;
64  $sCartItems = $this->_oDb->getCartItems($iClientId);
65 
66  if(strpos($sCartItems, $iVendorId . $sDd . $iModuleId . $sDd . $iItemId . $sDd) !== false)
67  $sCartItems = preg_replace("'" . $iVendorId . $sDd . $iModuleId . $sDd . $iItemId . $sDd ."([0-9])+'e", "'" . $iVendorId . $sDd . $iModuleId . $sDd . $iItemId . $sDd ."' . (\\1 + " . $iItemCount . ")", $sCartItems);
68  else
69  $sCartItems = empty($sCartItems) ? $sCartItem : $sCartItems . ":" . $sCartItem;
70 
71  $this->_oDb->setCartItems($iClientId, $sCartItems);
72 
73  $aInfo = $this->getInfo($iClientId);
74  $iTotalQuantity = 0;
75  foreach($aInfo as $aCart)
76  $iTotalQuantity += $aCart['items_count'];
77 
78  return array('code' => 0, 'message' => _t($this->_sLangsPrefix . 'inf_successfully_added'), 'total_quantity' => $iTotalQuantity, 'content' => $this->_oTemplate->displayToolbarSubmenu($aInfo));
79  }
80  function deleteFromCart($iClientId, $iVendorId, $iModuleId = 0, $iItemId = 0)
81  {
82  if($iVendorId == CH_PMT_EMPTY_ID)
83  return array('code' => 1, 'message' => _t($this->_sLangsPrefix . 'err_wrong_data'));
84 
85  if(empty($iClientId))
86  return array('code' => 2, 'message' => _t($this->_sLangsPrefix . 'err_required_login'));
87 
88  if(!empty($iModuleId) && !empty($iItemId))
89  $sPattern = "'" . $iVendorId . "_" . $iModuleId . "_" . $iItemId . "_[0-9]+:?'";
90  else
91  $sPattern = "'" . $iVendorId . "_[0-9]+_[0-9]+_[0-9]+:?'";
92 
93  $sCartItems = $this->_oDb->getCartItems($iClientId);
94  $sCartItems = trim(preg_replace($sPattern, "", $sCartItems), ":");
95  $this->_oDb->setCartItems($iClientId, $sCartItems);
96 
97  return array('code' => 0, 'message' => _t($this->_sLangsPrefix . 'inf_successfully_deleted'));
98  }
99  function getInfo($iUserId, $iVendorId = CH_PMT_EMPTY_ID, $aItems = array())
100  {
101  if($iVendorId != CH_PMT_EMPTY_ID && !empty($aItems))
102  return $this->_getInfo($iUserId, $iVendorId, $this->items2array($aItems));
103 
104  $aContent = $this->parseByVendor($iUserId);
105 
106  if($iVendorId != CH_PMT_EMPTY_ID)
107  return isset($aContent[$iVendorId]) ? $this->_getInfo($iUserId, $iVendorId, $aContent[$iVendorId]) : array();
108 
109  $aResult = array();
110  foreach($aContent as $iVendorId => $aVendorItems)
111  $aResult[$iVendorId] = $this->_getInfo($iUserId, $iVendorId, $aVendorItems);
112 
113  return $aResult;
114  }
115  function getDescriptor($iVendorId, $iModuleId, $iItemId, $iItemCount)
116  {
117  return $iVendorId . self::$DESCRIPTOR_DIVIDER . $iModuleId . self::$DESCRIPTOR_DIVIDER . $iItemId . self::$DESCRIPTOR_DIVIDER . $iItemCount;
118  }
119  function updateInfo($mixedPending)
120  {
121  $aPending = is_array($mixedPending) ? $mixedPending : $this->_oDb->getPending(array('type' => 'id', 'id' => (int)$mixedPending));
122  if((int)$aPending['processed'] == 1)
123  return;
124 
125  $iClientId = (int)$aPending['client_id'];
126  $sOrderId = $this->_oConfig->generateLicense();
127 
128  $sCartItems = $this->_oDb->getCartItems($iClientId);
129  $aItems = $this->items2array($aPending['items']);
130 
131  foreach($aItems as $aItem) {
132  $aItemInfo = ChWsbService::call((int)$aItem['module_id'], 'register_cart_item', array($aPending['client_id'], $aPending['seller_id'], $aItem['item_id'], $aItem['item_count'], $sOrderId));
133  if(!is_array($aItemInfo) || empty($aItemInfo))
134  continue;
135 
136  $this->_oDb->insertTransaction(array(
137  'pending_id' => $aPending['id'],
138  'order_id' => $sOrderId,
139  'client_id' => $aPending['client_id'],
140  'seller_id' => $aPending['seller_id'],
141  'module_id' => $aItem['module_id'],
142  'item_id' => $aItem['item_id'],
143  'item_count' => $aItem['item_count'],
144  'amount' => $aItemInfo['price'] * $aItem['item_count'],
145  ));
146 
147  $sCartItems = trim(preg_replace("'" . implode(self::$DESCRIPTOR_DIVIDER, $aItem) . ":?'", "", $sCartItems), ":");
148  }
149 
150  $this->_oDb->setCartItems($iClientId, $sCartItems);
151  $this->_oDb->updatePending($aPending['id'], array('processed' => 1));
152  }
153  function parseByVendor($iUserId)
154  {
155  $sItems = $this->_oDb->getCartItems($iUserId);
156  return $this->_reparseBy($this->items2array($sItems), 'vendor_id');
157  }
158  function parseByModule($iUserId)
159  {
160  $sItems = $this->_oDb->getCartItems($iUserId);
161  return $this->_reparseBy($this->items2array($sItems), 'module_id');
162  }
163  function _reparseBy($aItems, $sKey)
164  {
165  $aResult = array();
166  foreach($aItems as $aItem)
167  if(isset($aItem[$sKey]))
168  $aResult[$aItem[$sKey]][] = $aItem;
169 
170  return $aResult;
171  }
180  function _getInfo($iClientId, $iVendorId, $aItems)
181  {
182  $iItemsCount = 0;
183  $fItemsPrice = 0;
184  $aItemsInfo = array();
185  foreach($aItems as $aItem) {
186  $aItemInfo = ChWsbService::call((int)$aItem['module_id'], 'get_cart_item', array($iClientId, $aItem['item_id']));
187  $aItemInfo['module_id'] = (int)$aItem['module_id'];
188  $aItemInfo['quantity'] = (int)$aItem['item_count'];
189 
190  $iItemsCount += $aItem['item_count'];
191  $fItemsPrice += $aItem['item_count'] * $aItemInfo['price'];
192  $aItemsInfo[] = $aItemInfo;
193  }
194 
195  $aVendor = $this->_oDb->getVendorInfoProfile((int)$iVendorId);
196  return array(
197  'client_id' => $iClientId,
198  'vendor_id' => $aVendor['id'],
199  'vendor_username' => $aVendor['username'],
200  'vendor_profile_name' => $aVendor['profile_name'],
201  'vendor_profile_icon' => $aVendor['profile_icon'],
202  'vendor_profile_url' => $aVendor['profile_url'],
203  'vendor_currency_code' => $aVendor['currency_code'],
204  'vendor_currency_sign' => $aVendor['currency_sign'],
205  'items_count' => $iItemsCount,
206  'items_price' => $fItemsPrice,
207  'items' => $aItemsInfo
208  );
209  }
210 
218  public static function items2array($mixed)
219  {
220  $aResult = array();
221 
222  if(is_string($mixed))
223  $aItems = explode(':', $mixed);
224  else if(is_array($mixed))
225  $aItems = $mixed;
226  else
227  $aItems = array();
228 
229  foreach($aItems as $sItem) {
230  $aItem = explode(self::$DESCRIPTOR_DIVIDER, $sItem);
231  $aResult[] = array('vendor_id' => $aItem[0], 'module_id' => $aItem[1], 'item_id' => $aItem[2], 'item_count' => $aItem[3]);
232  }
233 
234  return $aResult;
235  }
236 }
ChPmtCart\_reparseBy
_reparseBy($aItems, $sKey)
Definition: ChPmtCart.php:163
ChPmtCart\getHistoryBlock
getHistoryBlock($iUserId, $iSellerId)
Definition: ChPmtCart.php:27
ChPmtCart\parseByModule
parseByModule($iUserId)
Definition: ChPmtCart.php:158
ChPmtCart\$_sLangsPrefix
$_sLangsPrefix
Definition: ChPmtCart.php:15
$aResult
$aResult
Definition: index.php:19
php
ChPmtCart\getCartJs
getCartJs($bWrapped=true)
Definition: ChPmtCart.php:31
ChPmtCart\_getInfo
_getInfo($iClientId, $iVendorId, $aItems)
Definition: ChPmtCart.php:180
ChPmtCart\getAddToCartLink
getAddToCartLink($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect=false)
Definition: ChPmtCart.php:39
ChPmtCart\getAddToCartJs
getAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect=false, $bWrapped=true)
Definition: ChPmtCart.php:35
ChPmtCart
Definition: ChPmtCart.php:9
ChPmtCart\__construct
__construct(&$oDb, &$oConfig, &$oTemplate)
Definition: ChPmtCart.php:20
$aInfo
$aInfo
Definition: constants.inc.php:21
ChPmtCart\$DESCRIPTOR_DIVIDER
static $DESCRIPTOR_DIVIDER
Definition: ChPmtCart.php:10
ChPmtCart\getDescriptor
getDescriptor($iVendorId, $iModuleId, $iItemId, $iItemCount)
Definition: ChPmtCart.php:115
ChPmtCart\deleteFromCart
deleteFromCart($iClientId, $iVendorId, $iModuleId=0, $iItemId=0)
Definition: ChPmtCart.php:80
ChPmtCart\parseByVendor
parseByVendor($iUserId)
Definition: ChPmtCart.php:153
$oDb
global $oDb
Definition: db.inc.php:39
ChPmtCart\$_oConfig
$_oConfig
Definition: ChPmtCart.php:13
_t
_t($key, $arg0="", $arg1="", $arg2="")
Definition: languages.inc.php:509
CH_PMT_EMPTY_ID
const CH_PMT_EMPTY_ID
Definition: ChPmtModule.php:16
ChPmtCart\getInfo
getInfo($iUserId, $iVendorId=CH_PMT_EMPTY_ID, $aItems=array())
Definition: ChPmtCart.php:99
ChPmtCart\updateInfo
updateInfo($mixedPending)
Definition: ChPmtCart.php:119
ChPmtCart\addToCart
addToCart($iClientId, $iVendorId, $iModuleId, $iItemId, $iItemCount)
Definition: ChPmtCart.php:43
empty
Attr AllowedRel this is empty
Definition: Attr.AllowedRel.txt:7
ChWsbService\call
static call($mixed, $sMethod, $aParams=array(), $sClass='Module')
Definition: ChWsbService.php:32
ChPmtCart\$_oTemplate
$_oTemplate
Definition: ChPmtCart.php:14
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
ChPmtCart\$_oDb
$_oDb
Definition: ChPmtCart.php:12
ChPmtCart\items2array
static items2array($mixed)
Definition: ChPmtCart.php:218