BxPaymentSubscriptions.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup Payment Payment
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. class BxPaymentSubscriptions extends BxBaseModPaymentSubscriptions
  12. {
  13. function __construct()
  14. {
  15. $this->MODULE = 'bx_payment';
  16. parent::__construct();
  17. }
  18. /*
  19. * Service methods
  20. */
  21. public function serviceGetBlockListMy()
  22. {
  23. return $this->_getBlock('list_my');
  24. }
  25. public function serviceGetBlockListAll()
  26. {
  27. return $this->_getBlock('list_all');
  28. }
  29. public function serviceGetBlockHistory()
  30. {
  31. return $this->_getBlock('history');
  32. }
  33. public function serviceSubscribe($iSellerId, $sSellerProvider, $iModuleId, $iItemId, $iItemCount)
  34. {
  35. $CNF = &$this->_oModule->_oConfig->CNF;
  36. $iClientId = $this->_oModule->getProfileId();
  37. $mixedResult = $this->_checkData($iClientId, $iSellerId, $iModuleId, $iItemId, $iItemCount);
  38. if($mixedResult !== true)
  39. return $mixedResult;
  40. $aSellerProviders = $this->_oModule->_oDb->getVendorInfoProvidersRecurring($iSellerId);
  41. if(empty($aSellerProviders))
  42. return array('code' => 5, 'message' => _t($CNF['T']['ERR_NOT_ACCEPT_PAYMENTS']));
  43. $aCartItem = array($iSellerId, $iModuleId, $iItemId, $iItemCount);
  44. $sCartItem = $this->_oModule->_oConfig->descriptorA2S($aCartItem);
  45. if(empty($sSellerProvider)) {
  46. $sId = $this->_oModule->_oConfig->getHtmlIds('cart', 'providers_select') . BX_PAYMENT_TYPE_RECURRING;
  47. $sTitle = _t($CNF['T']['POPUP_PROVIDERS_SELECT']);
  48. return array('popup' => BxTemplStudioFunctions::getInstance()->popupBox($sId, $sTitle, $this->_oModule->_oTemplate->displayProvidersSelector($aCartItem, $aSellerProviders)));
  49. }
  50. $aProvider = $aSellerProviders[$sSellerProvider];
  51. $mixedResult = $this->_oModule->serviceInitializeCheckout(BX_PAYMENT_TYPE_RECURRING, $iSellerId, $aProvider['name'], array($sCartItem));
  52. if(is_string($mixedResult))
  53. return array('code' => 6, 'message' => _t($mixedResult));
  54. return $mixedResult;
  55. }
  56. public function cancel($iPendingId)
  57. {
  58. $aSubscription = $this->_oModule->_oDb->getSubscription(array('type' => 'pending_id', 'pending_id' => $iPendingId));
  59. if(empty($aSubscription) || !is_array($aSubscription))
  60. return true;
  61. $aOrder = $this->_oModule->_oDb->getOrderSubscription(array('type' => 'id', 'id' => $iPendingId));
  62. if(empty($aOrder) || !is_array($aOrder))
  63. return false;
  64. $iSellerId = (int)$aOrder['seller_id'];
  65. $oProvider = $this->_oModule->getObjectProvider($aOrder['provider'], $iSellerId);
  66. if($oProvider === false || !$oProvider->isActive())
  67. return false;
  68. if(!$oProvider->cancelRecurring($iPendingId, $aSubscription['customer_id'], $aSubscription['subscription_id']))
  69. return false;
  70. list($iSellerId, $iModuleId, $iItemId, $iItemCount) = $this->_oModule->_oConfig->descriptorS2A($aOrder['items']);
  71. if(!$this->_oModule->callCancelSubscriptionItem((int)$iModuleId, array($aOrder['client_id'], $iSellerId, $iItemId, $iItemCount, $aOrder['order'])))
  72. return false;
  73. if(!$this->_oModule->_oDb->deleteSubscription($aSubscription['id'], 'cancel'))
  74. return false;
  75. return true;
  76. }
  77. protected function _getBlock($sType)
  78. {
  79. $CNF = &$this->_oModule->_oConfig->CNF;
  80. $sMethod = 'displayBlockSbs' . bx_gen_method_name($sType);
  81. if(!method_exists($this->_oModule->_oTemplate, $sMethod))
  82. return MsgBox(_t('_Empty'));
  83. $iUserId = $this->_oModule->getProfileId();
  84. if(empty($iUserId))
  85. return MsgBox(_t($CNF['T']['ERR_REQUIRED_LOGIN']));
  86. $this->_oModule->setSiteSubmenu('menu_dashboard', 'system', 'dashboard-subscriptions');
  87. $sBlockSubmenu = $this->_oModule->_oConfig->getObject('menu_sbs_submenu');
  88. $oBlockSubmenu = BxDolMenu::getObjectInstance($sBlockSubmenu);
  89. if($oBlockSubmenu)
  90. $oBlockSubmenu->setSelected($this->MODULE, 'sbs-' . str_replace('_', '-', $sType));
  91. return array(
  92. 'content' => $this->_oModule->_oTemplate->$sMethod($iUserId),
  93. 'menu' => $this->_oModule->_oConfig->getObject('menu_sbs_submenu')
  94. );
  95. }
  96. }
  97. /** @} */