11 define(
'CH_PMT_ORDERS_TYPE_PENDING',
'pending');
12 define(
'CH_PMT_ORDERS_TYPE_PROCESSED',
'processed');
13 define(
'CH_PMT_ORDERS_TYPE_SUBSCRIPTION',
'subscription');
14 define(
'CH_PMT_ORDERS_TYPE_HISTORY',
'history');
16 define(
'CH_PMT_EMPTY_ID', -1);
17 define(
'CH_PMT_ADMINISTRATOR_ID', 0);
18 define(
'CH_PMT_ADMINISTRATOR_USERNAME',
'administrator');
99 $this->_oConfig->init($this->_oDb);
102 $this->_sGeneralPrefix = $this->_oConfig->getGeneralPrefix();
103 $this->_sLangsPrefix = $this->_oConfig->getLangsPrefix();
104 $this->_sEmailTemplatesPrefix = $this->_oConfig->getEmailTemplatesPrefix();
106 $this->_sSessionKeyPending = $this->_sGeneralPrefix .
'pending_id';
107 $this->_sRequestKeyPending = $this->_sGeneralPrefix .
'pending_id';
109 $sClassPrefix = $this->_oConfig->getClassPrefix();
112 $sClassName = $sClassPrefix .
'Cart';
113 $this->_oCart =
new $sClassName($this->_oDb, $this->_oConfig, $this->_oTemplate);
116 $sClassName = $sClassPrefix .
'Details';
117 $this->_oDetails =
new $sClassName($this->_oDb, $this->_oConfig);
120 $sClassName = $sClassPrefix .
'Orders';
121 $this->_oOrders =
new $sClassName($this->_iUserId, $this->_oDb, $this->_oConfig, $this->_oTemplate);
123 $this->_aOrderTypes = array(
142 $sResult = $this->_oOrders->getExtraJs();
156 return $this->_oOrders->getMoreWindow();
160 return $this->_oOrders->getManualOrderWindow();
164 return $this->_oOrders->getOrdersBlock(
$sType, $iUserId);
171 return CH_WSB_URL_ROOT . $this->_oConfig->getBaseUri() .
'orders/';
176 if(is_array($aItems) && !
empty($aItems)) {
177 $aResult = array(
'code' => 0,
'message' =>
'',
'data' => $this->_oTemplate->displayItems($aItems));
178 if(isset($aItems[0][
'vendor_id']))
179 $aResult[
'vendor_id'] = $aItems[0][
'vendor_id'];
181 $aResult = array(
'code' => 1,
'message' =>
MsgBox(
_t($this->_sLangsPrefix .
'msg_no_results')));
183 header(
'Content-Type:text/javascript; charset=utf-8');
190 header(
'Content-Type:text/javascript; charset=utf-8');
192 if(!isset($aData[
'type']) || !in_array($aData[
'type'], $this->_aOrderTypes))
193 return json_encode(array(
'code' => 1,
'message' =>
MsgBox(
_t($this->_sLangsPrefix .
'err_wrong_data'))));
196 if(isset($aData[
'id']))
197 $iId = (int)$aData[
'id'];
199 $sData = $this->_oOrders->getOrder($aData[
'type'],
$iId);
200 return json_encode(array(
'code' => 0,
'message' =>
'',
'data' => $sData));
206 header(
'Content-Type:text/javascript; charset=utf-8');
208 if(!isset($aData[
'type']) || !in_array($aData[
'type'], $this->_aOrderTypes))
209 return json_encode(array(
'code' => 1,
'message' => $this->_sLangsPrefix .
'err_wrong_data'));
212 if(isset($aData[
'start']))
213 $iStart = (int)$aData[
'start'];
216 if(isset($aData[
'per_page']))
220 if(isset($aData[
'filter']))
226 'filter' => $sFilter,
227 'seller_id' => (
int)$aData[
'seller_id']
230 $aParams[
'user_id'] = (int)$this->_iUserId;
232 $sData = $this->_oOrders->getOrders($aData[
'type'], $aParams);
233 return json_encode(array(
'code' => 0,
'message' =>
'',
'data' => $sData));
238 'js_object' => $this->_oConfig->getJsObject(
'orders'),
239 'parent_id' =>
'pmt-mo-content'
243 return $this->
_onResultInline(array_merge(
$aResult, array(
'code' => 1,
'message' => $this->_sLangsPrefix .
'err_required_login')));
245 $mixedResult = $this->_oOrders->addManualOrder($_POST);
246 if(is_array($mixedResult))
249 $this->_oCart->updateInfo((
int)$mixedResult);
255 'js_object' => $this->_oConfig->getJsObject(
'orders'),
256 'parent_id' =>
'pmt-form-' .
$sType
260 return $this->
_onResultInline(array_merge(
$aResult, array(
'code' => 1,
'message' => $this->_sLangsPrefix .
'err_required_login')));
264 if(!isset($aData[
'orders']) || !is_array($aData[
'orders']) ||
empty($aData[
'orders']))
265 return $this->
_onResultInline(array_merge(
$aResult, array(
'code' => 2,
'message' => $this->_sLangsPrefix .
'err_nothing_selected')));
269 if(isset($aData[
'pmt-report']) && !
empty($aData[
'pmt-report']))
270 $mixedResult = $this->_oOrders->report(
$sType, $aData[
'orders']);
271 else if(isset($aData[
'pmt-cancel']) && !
empty($aData[
'pmt-cancel']))
272 $mixedResult = $this->_oOrders->cancel(
$sType, $aData[
'orders']);
274 foreach($aData[
'orders']
as $iOrderId) {
275 $sKey =
'order-data-' . $iOrderId;
276 if(!isset($aData[$sKey]) ||
empty($aData[$sKey])) {
277 $mixedResult = array(
'code' => 4,
'message' => $this->_sLangsPrefix .
'err_empty_orders');
280 $this->_oDb->updatePending($iOrderId, array(
281 'order' => $aData[$sKey],
283 'error_msg' =>
'Manually processed'
285 $this->_oCart->updateInfo((
int)$iOrderId);
287 $mixedResult = array(
'code' => 3,
'message' => $this->_sLangsPrefix .
'err_unknown');
289 if(is_array($mixedResult))
304 return $this->_oDetails->getFormBlock($iUserId);
309 'sign' => $this->_oConfig->getCurrencySign(),
310 'code' => $this->_oConfig->getCurrencyCode()
315 $aIds = $this->_oDb->getAdminsIds();
318 array(
'key' =>
'',
'value' =>
_t($this->_sLangsPrefix .
'txt_select_one'))
336 $sCategory = $this->_oConfig->getOptionsCategory();
337 $sLangsPrefix = $this->_oConfig->getLangsPrefix();
339 $iId = (int)$this->_oDb->getOne(
"SELECT `ID` FROM `sys_options_cats` WHERE `name`='" . $sCategory .
"'");
341 return MsgBox(
_t($sLangsPrefix .
'msg_no_results'));
346 if($mixedResult !==
true && !
empty($mixedResult))
353 $sCategory = $this->_oConfig->getOptionsCategory();
354 $sLangsPrefix = $this->_oConfig->getLangsPrefix();
356 $iId = (int)$this->_oDb->getOne(
"SELECT `ID` FROM `sys_options_cats` WHERE `name`='" . $sCategory .
"'");
358 return MsgBox(
_t($sLangsPrefix .
'err_wrong_data'));
365 $aModules = $sModuleUri ==
'all' ? $this->_oDb->getModulesBy() : array($this->_oDb->getModuleByUri($sModuleUri));
373 $this->_oDb->insertData($aData);
375 $this->_oDb->deleteData($aData);
388 'pmt-cart' => array(
'href' => CH_WSB_URL_ROOT . $this->_oConfig->getBaseUri() .
'cart/',
'title' =>
_t($this->_sLangsPrefix .
'btn_cart')),
389 'pmt-cart-history' => array(
'href' => CH_WSB_URL_ROOT . $this->_oConfig->getBaseUri() .
'history/' . ($iVendorId ==
CH_PMT_ADMINISTRATOR_ID ?
'site/' :
''),
'title' =>
_t($this->_sLangsPrefix .
'btn_history'),
'active' => 1)
392 $sResult = $this->_oCart->getHistoryBlock($this->_iUserId, $iVendorId);
393 return array(
$sResult, $aTopMenu, array(),
true,
'getBlockCaptionMenu');
398 return MsgBox(
_t($this->_sLangsPrefix .
'err_required_login'));
401 if(is_string($mixedVendor))
402 $iVendorId = $this->_oDb->getVendorId($mixedVendor);
403 else if(is_int($mixedVendor))
404 $iVendorId = $mixedVendor;
406 $aCartInfo = $this->_oCart->getInfo($this->_iUserId, $iVendorId);
408 unset($aCartInfo[$this->_oConfig->getAdminId()]);
411 'pmt-cart' => array(
'href' => CH_WSB_URL_ROOT . $this->_oConfig->getBaseUri() .
'cart/',
'title' =>
_t($this->_sLangsPrefix .
'btn_cart'),
'active' => 1),
412 'pmt-cart-history' => array(
'href' => CH_WSB_URL_ROOT . $this->_oConfig->getBaseUri() .
'history/' . ($iVendorId ==
CH_PMT_ADMINISTRATOR_ID ?
'site/' :
''),
'title' =>
_t($this->_sLangsPrefix .
'btn_history'))
415 $sResult = !
empty($aCartInfo) ? $this->_oTemplate->displayCartContent($aCartInfo, $iVendorId) :
MsgBox(
_t($this->_sLangsPrefix .
'msg_no_results'));
416 return array(
$sResult, $aTopMenu, array(),
true,
'getBlockCaptionMenu');
420 return $this->_oCart->getCartJs($bWrapped);
422 function serviceGetAddToCartJs($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect =
false, $bWrapped =
true)
424 if(is_string($mixedModuleId)) {
425 $aModuleInfo = $this->_oDb->getModuleByUri($mixedModuleId);
426 $iModuleId = isset($aModuleInfo[
'id']) ? (int)$aModuleInfo[
'id'] : 0;
428 $iModuleId = (int)$mixedModuleId;
430 if(
empty($iModuleId))
433 return $this->_oCart->getAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect, $bWrapped);
437 if(is_string($mixedModuleId)) {
438 $aModuleInfo = $this->_oDb->getModuleByUri($mixedModuleId);
439 $iModuleId = isset($aModuleInfo[
'id']) ? (int)$aModuleInfo[
'id'] : 0;
441 $iModuleId = (int)$mixedModuleId;
443 if(
empty($iModuleId))
446 return $this->_oCart->getAddToCartLink($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect);
451 return array(
'count' => 0,
'messages' => array());
453 $aInfo = $this->_oCart->getInfo($this->_iUserId);
456 foreach(
$aInfo as $iVendorId => $aVendorCart)
457 $iCount += $aVendorCart[
'items_count'];
461 'messages' => array()
467 return MsgBox(
_t($this->_sLangsPrefix .
'err_required_login'));
469 $aInfo = $this->_oCart->getInfo($this->_iUserId);
471 return MsgBox(
_t($this->_sLangsPrefix .
'msg_no_results'));
473 return $this->_oTemplate->displayToolbarSubmenu(
$aInfo);
480 return CH_WSB_URL_ROOT . $this->_oConfig->getBaseUri() .
'cart/';
484 return $this->_oCart->getDescriptor($iVendorId, $iModuleId, $iItemId, $iItemCount);
489 $this->_oTemplate->getPageCodeError($this->_sLangsPrefix .
'err_required_login');
495 if(isset($aData[
'pmt-delete']) && !
empty($aData[
'items']))
496 foreach($aData[
'items']
as $sItem) {
497 list($iVendorId, $iModuleId, $iItemId, $iItemCount) = explode(
'_', $sItem);
498 $this->_oCart->deleteFromCart($this->_iUserId, $iVendorId, $iModuleId, $iItemId);
500 else if(isset($aData[
'pmt-checkout']) && !
empty($aData[
'items'])) {
503 $this->_oTemplate->getPageCodeError(
$sError,
false);
508 header(
'Location: ' . CH_WSB_URL_ROOT . $this->_oConfig->getBaseUri() .
'cart/');
513 $aResult = $this->_oCart->addToCart($this->_iUserId, $iVendorId, $iModuleId, $iItemId, $iItemCount);
515 header(
'Content-Type:text/javascript; charset=utf-8');
520 return $this->_oCart->addToCart($this->_iUserId, $iVendorId, $iModuleId, $iItemId, $iItemCount);
527 $aResult = $this->_oCart->deleteFromCart($this->_iUserId, $iVendorId, $iModuleId, $iItemId);
529 header(
'Content-Type:text/javascript; charset=utf-8');
537 $aResult = $this->_oCart->deleteFromCart($this->_iUserId, $iVendorId);
539 header(
'Content-Type:text/javascript; charset=utf-8');
554 $aVendorProviders = $this->_oDb->getVendorInfoProviders($iVendorId, $sProvider);
555 foreach($aVendorProviders
as $aProvider) {
556 $aProvider[
'caption_cart'] =
_t($this->_sLangsPrefix .
'txt_cart_' . $aProvider[
'name']);
565 if(!is_array($aItems))
566 $aItems = array($aItems);
573 return MsgBox(
_t($this->_sLangsPrefix .
'err_unknown_vendor'));
575 $aProvider = $this->_oDb->getVendorInfoProviders($iVendorId, $sProvider);
576 $sClassPath = !
empty($aProvider[
'class_file']) ? CH_DIRECTORY_PATH_ROOT . $aProvider[
'class_file'] : $this->_oConfig->getClassPath() . $aProvider[
'class_name'] .
'.php';
577 if(
empty($aProvider) || !file_exists($sClassPath))
578 return MsgBox(
_t($this->_sLangsPrefix .
'err_incorrect_provider'));
580 require_once($sClassPath);
583 $aInfo = $this->_oCart->getInfo($this->_iUserId, $iVendorId, $aItems);
585 return MsgBox(
_t($this->_sLangsPrefix .
'err_empty_order'));
591 $bProcessedFree =
false;
593 if((
int)
$aInfo[
'client_id'] != 0 && (float)$aItem[
'price'] == 0) {
594 $aItemInfo =
ChWsbService::call((
int)$aItem[
'module_id'],
'register_cart_item', array(
$aInfo[
'client_id'],
$aInfo[
'vendor_id'], $aItem[
'id'], $aItem[
'quantity'], $this->_oConfig->generateLicense()));
595 if(is_array($aItemInfo) && !
empty($aItemInfo))
596 $bProcessedFree =
true;
598 $aInfo[
'items_count'] -= 1;
601 $sCartItems = $this->_oDb->getCartItems(
$aInfo[
'client_id']);
602 $sCartItems = trim(preg_replace(
"'" . implode(
ChPmtCart::$DESCRIPTOR_DIVIDER, array(
$aInfo[
'vendor_id'], $aItem[
'module_id'], $aItem[
'id'], $aItem[
'quantity'])) .
":?'",
"", $sCartItems),
":");
603 $this->_oDb->setCartItems(
$aInfo[
'client_id'], $sCartItems);
607 return MsgBox(
_t($this->_sLangsPrefix . ($bProcessedFree ?
'inf_successfully_processed_free' :
'err_empty_order')));
609 $iPendingId = $this->_oDb->insertPending($this->_iUserId, $aProvider[
'name'],
$aInfo);
610 if(
empty($iPendingId))
611 return MsgBox(
_t($this->_sLangsPrefix .
'err_access_db'));
617 if((
int)
$aInfo[
'client_id'] == 0 && (
int)
$aInfo[
'items_count'] == 1) {
619 $aItem = current(
$aInfo[
'items']);
621 if(!
empty($aItem) && $aItem[
'price'] == 0) {
622 $this->_oDb->updatePending($iPendingId, array(
623 'order' => $this->_oConfig->generateLicense(),
632 $sError = $oProvider->initializeCheckout($iPendingId,
$aInfo);
642 $aProvider = is_numeric($mixedVendorId) && (int)$mixedVendorId !=
CH_PMT_EMPTY_ID ? $this->_oDb->getVendorInfoProviders((
int)$mixedVendorId, $sProvider) : $this->_oDb->getProviders($sProvider);
643 $sClassPath = !
empty($aProvider[
'class_file']) ? CH_DIRECTORY_PATH_ROOT . $aProvider[
'class_file'] : $this->_oConfig->getClassPath() . $aProvider[
'class_name'] .
'.php';
644 if(
empty($aProvider) || !file_exists($sClassPath)) {
645 $this->
_onResultPage(array(
'message' =>
_t($this->_sLangsPrefix .
'err_incorrect_provider')));
649 require_once($sClassPath);
652 $aResult = $oProvider->finalizeCheckout($aData);
654 $aPending = $this->_oDb->getPending(array(
'type' =>
'id',
'id' => (
int)
$aResult[
'pending_id']));
657 if((
int)$aPending[
'client_id'] == 0)
661 $this->_oCart->updateInfo($aPending);
663 if($oProvider->needRedirect()) {
664 header(
'Location: ' . $this->_oConfig->getReturnUrl());
674 $aProvider = is_numeric($mixedVendorId) && (int)$mixedVendorId !=
CH_PMT_EMPTY_ID ? $this->_oDb->getVendorInfoProviders((
int)$mixedVendorId, $sProvider) : $this->_oDb->getProviders($sProvider);
675 $sClassPath = !
empty($aProvider[
'class_file']) ? CH_DIRECTORY_PATH_ROOT . $aProvider[
'class_file'] : $this->_oConfig->getClassPath() . $aProvider[
'class_name'] .
'.php';
676 if(
empty($aProvider) || !file_exists($sClassPath)) {
677 $this->
_onResultPage(array(
'message' =>
_t($this->_sLangsPrefix .
'err_incorrect_provider')));
681 require_once($sClassPath);
683 $aResult = $oProvider->checkoutFinished();
704 return $this->_oDb->getProcessed(array(
'type' =>
'mixed',
'conditions' => $aConditions));
709 $sOptionPrefix = $this->_oConfig->getOptionsPrefix();
710 return $this->_oDb->getParam($sOptionPrefix . $sOption);
715 if(
$oAlert->sUnit !=
'profile' || !in_array(
$oAlert->sAction, array(
'join',
'delete')))
724 $this->_oDb->onProfileDelete(
$oAlert->iObject);
737 $oSession->setValue($this->_sSessionKeyPending, (
int)$iPendingId);
739 if(!
empty($aPayment[
'payer_name']) && !
empty($aPayment[
'payer_email'])) {
743 $aTemplate = $oEmailTemplates->parseTemplate($this->_sEmailTemplatesPrefix .
'paid_need_join', array(
744 'RealName' => $aPayment[
'payer_name'],
745 'JoinLink' =>
ch_append_url_params($this->_oConfig->getJoinUrl(), array($this->_sRequestKeyPending => (
int)$iPendingId))
748 sendMail($aPayment[
'payer_email'], $aTemplate[
'Subject'], $aTemplate[
'Body'], 0, array(),
'html',
false,
true);
751 header(
'Location: ' . $this->_oConfig->getJoinUrl());
757 $iPendingId = (int)$oSession->getValue($this->_sSessionKeyPending);
759 if(
empty($iPendingId) &&
ch_get($this->_sRequestKeyPending) !==
false) {
760 $iPendingId = (int)
ch_get($this->_sRequestKeyPending);
762 $oSession->setValue($this->_sSessionKeyPending, $iPendingId);
765 if(
empty($iPendingId)) {
766 $this->_oTemplate->getPageCodeError($this->_sLangsPrefix .
'err_not_allowed');
770 $aPending = $this->_oDb->getPending(array(
'type' =>
'id',
'id' => $iPendingId));
771 if(
empty($aPending[
'order']) || (int)$aPending[
'error_code'] != 1) {
772 $this->_oTemplate->getPageCodeError($this->_sLangsPrefix .
'err_not_processed');
776 if((
int)$aPending[
'processed'] == 1) {
777 $this->_oTemplate->getPageCodeError($this->_sLangsPrefix .
'err_already_processed');
783 $sOverrideError =
'';
786 $oAlert =
new ChWsbAlerts(
'system',
'join_after_payment', 0, 0, array(
'override' => &$bOverride,
'override_error' => &$sOverrideError));
793 ch_import(
'ProfileFields', $this->_aModule);
799 $sBlockCaption =
_t($this->_sLangsPrefix .
'bcpt_join');
800 $sBlockContent = (!
empty($sOverrideError) ?
MsgBox(
_t($sOverrideError)) :
'') . $oJoin->process();
804 'css' => array(
'join.css'),
805 'js' => array(
'join.js',
'jquery.form.min.js'),
807 'page' =>
_t($this->_sLangsPrefix .
'pcpt_join')
813 $this->_oTemplate->getPageCode($aParams);
826 $iPendingId = (int)$oSession->getValue($this->_sSessionKeyPending);
831 $aPending = $this->_oDb->getPending(array(
'type' =>
'id',
'id' => $iPendingId));
832 if(
empty($aPending) || (isset($aPending[
'client_id']) && (int)$aPending[
'client_id'] != 0))
835 if(!$this->_oDb->updatePending($iPendingId, array(
'client_id' =>
$iProfileId)))
838 $this->_oCart->updateInfo($iPendingId);
840 $oSession->unsetValue($this->_sSessionKeyPending);
844 echo $this->_oTemplate->parseHtmlByTemplateName(
'on_result', array(
'message' =>
$aResult[
'message']));
849 return $this->_oTemplate->parseHtmlByTemplateName(
'on_result_inline', array(
850 'js_object' =>
$aResult[
'js_object'],
851 'params' => json_encode(array(
854 'parent_id' =>
$aResult[
'parent_id']
867 $sContent = $this->_oTemplate->parseHtmlByName(
'default_padding.html', array(