BxPaymentTemplate.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  4. * CC-BY License - http://creativecommons.org/licenses/by/3.0/
  5. *
  6. * @defgroup Payment Payment
  7. * @ingroup TridentModules
  8. *
  9. * @{
  10. */
  11. class BxPaymentTemplate extends BxBaseModPaymentTemplate
  12. {
  13. protected $_sLangsPrefix;
  14. function __construct(&$oConfig, &$oDb)
  15. {
  16. $this->MODULE = 'bx_payment';
  17. parent::__construct($oConfig, $oDb);
  18. $this->_sLangsPrefix = $this->_oConfig->getPrefix('langs');
  19. }
  20. public function addJsCssOrders()
  21. {
  22. $this->addJs(array(
  23. 'jquery-ui/jquery.ui.widget.min.js',
  24. 'jquery-ui/jquery.ui.menu.min.js',
  25. 'jquery-ui/jquery.ui.autocomplete.min.js',
  26. 'jquery.form.min.js',
  27. 'jquery.anim.js',
  28. 'jquery.webForms.js',
  29. 'orders.js'
  30. ));
  31. $this->addCss(array('orders.css'));
  32. }
  33. public function addJsCssCart($sType = '', $iVendorId = 0)
  34. {
  35. $this->addJsTranslation(array('_bx_payment_err_nothing_selected'));
  36. $this->addJs(array('jquery.anim.js', 'main.js', 'cart.js'));
  37. $this->addCss(array('orders.css', 'cart.css'));
  38. $oModule = $this->_getModule();
  39. if(!empty($iVendorId)) {
  40. $sMethod = 'getVendorInfoProviders' . bx_gen_method_name($sType);
  41. $aProviders = $this->_oDb->$sMethod($iVendorId);
  42. foreach($aProviders as $sProvider => $aProvider)
  43. $oModule->getObjectProvider($sProvider, $iVendorId)->addJsCss();
  44. }
  45. }
  46. public function displayCartJs($sType = '', $iVendorId = 0)
  47. {
  48. $this->addJsCssCart($sType, $iVendorId);
  49. return $this->displayJsCode('cart');
  50. }
  51. public function displayAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
  52. {
  53. $sJsCode = $this->displayCartJs(BX_PAYMENT_TYPE_SINGLE, $iVendorId);
  54. $sJsMethod = $this->parseHtmlByName('add_to_cart_js.html', array(
  55. 'js_object' => $this->_oConfig->getJsObject('cart'),
  56. 'vendor_id' => $iVendorId,
  57. 'module_id' => $iModuleId,
  58. 'item_id' => $iItemId,
  59. 'item_count' => $iItemCount,
  60. 'need_redirect' => (int)$bNeedRedirect
  61. ));
  62. return array($sJsCode, $sJsMethod);
  63. }
  64. public function displayAddToCartLink($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
  65. {
  66. $this->addJsCssCart(BX_PAYMENT_TYPE_SINGLE, $iVendorId);
  67. return $this->parseHtmlByName('add_to_cart.html', array(
  68. 'js_object' => $this->_oConfig->getJsObject('cart'),
  69. 'js_content' => $this->displayJsCode('cart'),
  70. 'txt_add_to_cart' => _t($this->_sLangsPrefix . 'txt_add_to_cart'),
  71. 'vendor_id' => $iVendorId,
  72. 'module_id' => $iModuleId,
  73. 'item_id' => $iItemId,
  74. 'item_count' => $iItemCount,
  75. 'need_redirect' => (int)$bNeedRedirect
  76. ));
  77. }
  78. public function displaySubscribeJs($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount = 1)
  79. {
  80. $sJsCode = $this->displayCartJs(BX_PAYMENT_TYPE_RECURRING, $iVendorId);
  81. $sJsMethod = $this->parseHtmlByName('subscribe_js.html', array(
  82. 'js_object' => $this->_oConfig->getJsObject('cart'),
  83. 'vendor_id' => $iVendorId,
  84. 'vendor_provider' => $sVendorProvider,
  85. 'module_id' => $iModuleId,
  86. 'item_id' => $iItemId,
  87. 'item_count' => $iItemCount
  88. ));
  89. return array($sJsCode, $sJsMethod);
  90. }
  91. public function displaySubscribeLink($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount = 1)
  92. {
  93. $this->addJsCssCart(BX_PAYMENT_TYPE_RECURRING, $iVendorId);
  94. return $this->parseHtmlByName('subscribe.html', array(
  95. 'js_object' => $this->_oConfig->getJsObject('cart'),
  96. 'js_content' => $this->displayJsCode('cart'),
  97. 'txt_add_to_cart' => _t($this->_sLangsPrefix . 'txt_subscribe'),
  98. 'vendor_id' => $iVendorId,
  99. 'vendor_provider' => $sVendorProvider,
  100. 'module_id' => $iModuleId,
  101. 'item_id' => $iItemId,
  102. 'item_count' => $iItemCount,
  103. ));
  104. }
  105. public function displayBlockCarts($iClientId)
  106. {
  107. $oGrid = BxDolGrid::getObjectInstance($this->_oConfig->getObject('grid_carts'));
  108. if(!$oGrid)
  109. return MsgBox(_t($this->_sLangsPrefix . 'msg_no_results'));
  110. $oGrid->addQueryParam('client_id', $iClientId);
  111. $this->addJsCssCart(BX_PAYMENT_TYPE_SINGLE);
  112. return $this->displayJsCode('cart') . $oGrid->getCode();
  113. }
  114. public function displayBlockCart($iClientId, $iSellerId = 0)
  115. {
  116. $oGrid = BxDolGrid::getObjectInstance($this->_oConfig->getObject('grid_cart'));
  117. if(!$oGrid || empty($iSellerId))
  118. return MsgBox(_t($this->_sLangsPrefix . 'msg_no_results'));
  119. $oGrid->addQueryParam('client_id', $iClientId);
  120. $oGrid->addQueryParam('seller_id', $iSellerId);
  121. $this->addJsCssCart(BX_PAYMENT_TYPE_SINGLE, $iSellerId);
  122. return $this->displayJsCode('cart') . $oGrid->getCode();
  123. }
  124. public function displayBlockHistory($iClientId, $iSellerId)
  125. {
  126. return $this->_displayBlockHistory('grid_history', $iClientId, $iSellerId);
  127. }
  128. public function displayBlockSbsList($iClientId)
  129. {
  130. return $this->_displayBlockHistory('grid_sbs_list', $iClientId);
  131. }
  132. public function displayBlockSbsHistory($iClientId)
  133. {
  134. return $this->_displayBlockHistory('grid_sbs_history', $iClientId);
  135. }
  136. public function displayBlockSbsDetails($iClientId)
  137. {
  138. return 'Details would be here';
  139. }
  140. public function displayBlockOrders($sType, $iSellerId)
  141. {
  142. $oGrid = BxDolGrid::getObjectInstance($this->_oConfig->getObject('grid_' . $sType));
  143. if(!$oGrid || empty($iSellerId))
  144. return MsgBox(_t($this->_sLangsPrefix . 'msg_no_results'));
  145. $oGrid->addQueryParam('seller_id', $iSellerId);
  146. $this->addJsCssOrders();
  147. return $this->displayJsCode($sType) . $oGrid->getCode();
  148. }
  149. public function displayOrder($sType, $iId)
  150. {
  151. $sMethodName = 'getOrder' . bx_gen_method_name($sType);
  152. $aOrder = $this->_oDb->$sMethodName(array('type' => 'id', 'id' => $iId));
  153. $oModule = $this->_getModule();
  154. $aSeller = $oModule->getVendorInfo((int)$aOrder['seller_id']);
  155. $aClient = $oModule->getProfileInfo((int)$aOrder['client_id']);
  156. $aResult = array(
  157. 'txt_client' => _t($this->_sLangsPrefix . 'txt_client'),
  158. 'txt_seller' => _t($this->_sLangsPrefix . 'txt_seller'),
  159. 'txt_order' => _t($this->_sLangsPrefix . 'txt_order'),
  160. 'txt_processed_with' => _t($this->_sLangsPrefix . 'txt_processed_with'),
  161. 'txt_message' => _t($this->_sLangsPrefix . 'txt_message'),
  162. 'txt_date' => _t($this->_sLangsPrefix . 'txt_date'),
  163. 'txt_products' => _t($this->_sLangsPrefix . 'txt_products'),
  164. 'client_name' => $aClient['name'],
  165. 'client_url' => $aClient['link'],
  166. 'bx_if:show_link' => array(
  167. 'condition' => !empty($aSeller['link']),
  168. 'content' => array(
  169. 'seller_name' => $aSeller['name'],
  170. 'seller_url' => $aSeller['link'],
  171. )
  172. ),
  173. 'bx_if:show_text' => array(
  174. 'condition' => empty($aSeller['link']),
  175. 'content' => array(
  176. 'seller_name' => $aSeller['name']
  177. )
  178. ),
  179. 'order' => $aOrder['order'],
  180. 'provider' => $aOrder['provider'],
  181. 'error' => $aOrder['error_msg'],
  182. 'date' => bx_time_js($aOrder['date']),
  183. 'bx_repeat:items' => array()
  184. );
  185. if($sType == BX_PAYMENT_ORDERS_TYPE_PENDING)
  186. $aItems = $this->_oConfig->descriptorsM2A($aOrder['items']);
  187. else
  188. $aItems = $this->_oConfig->descriptorsM2A($this->_oConfig->descriptorA2S(array($aOrder['seller_id'], $aOrder['module_id'], $aOrder['item_id'], $aOrder['item_count'])));
  189. foreach($aItems as $aItem) {
  190. $aInfo = $oModule->callGetCartItem((int)$aItem['module_id'], array($aItem['item_id']));
  191. if(!empty($aInfo) && is_array($aInfo))
  192. $aResult['bx_repeat:items'][] = array(
  193. 'bx_if:link' => array(
  194. 'condition' => !empty($aInfo['url']),
  195. 'content' => array(
  196. 'title' => $aInfo['title'],
  197. 'url' => $aInfo['url']
  198. )
  199. ),
  200. 'bx_if:text' => array(
  201. 'condition' => empty($aInfo['url']),
  202. 'content' => array(
  203. 'title' => $aInfo['title'],
  204. )
  205. ),
  206. 'quantity' => $aItem['item_count'],
  207. 'price' => $this->_oConfig->getPrice($aOrder['type'], $aInfo),
  208. 'currency_code' => $aSeller['currency_code']
  209. );
  210. }
  211. return $this->parseHtmlByName('order_' . $sType . '.html', $aResult);
  212. }
  213. public function displayItems($sType, $aItems = array())
  214. {
  215. $aTmplVarsItems = array();
  216. foreach($aItems as $aItem) {
  217. $aTmplVarsItems[] = array(
  218. 'id' => $aItem['id'],
  219. 'price' => $this->_oConfig->getPrice($sType, $aItem),
  220. 'bx_if:link' => array(
  221. 'condition' => !empty($aItem['url']),
  222. 'content' => array(
  223. 'url' => $aItem['url'],
  224. 'title' => $aItem['title']
  225. )
  226. ),
  227. 'bx_if:text' => array(
  228. 'condition' => empty($aItem['url']),
  229. 'content' => array(
  230. 'title' => $aItem['title']
  231. )
  232. ),
  233. );
  234. }
  235. if(empty($aTmplVarsItems))
  236. $aTmplVarsItems = MsgBox(_t($this->_sLangsPrefix . 'msg_no_results'));
  237. return $this->parseHtmlByName('items.html', array(
  238. 'html_id' => $this->_oConfig->getHtmlIds('processed', 'order_processed_items'),
  239. 'bx_repeat:items' => $aTmplVarsItems
  240. ));
  241. }
  242. public function displayProvidersSelector($aCartItem, $aProviders)
  243. {
  244. $oModule = $this->_getModule();
  245. $oCart = $oModule->getObjectCart();
  246. list($iSellerId, $iModuleId, $iItemId, $iItemCount) = $aCartItem;
  247. $aTmplVarsProviders = array();
  248. foreach($aProviders as $sProvider => $aProvider) {
  249. $oProvider = $oModule->getObjectProvider($sProvider, $iSellerId);
  250. if($oProvider !== false && method_exists($oProvider, 'getButtonRecurring'))
  251. $sButton = $oProvider->getButtonRecurring($oModule->getProfileId(), $iSellerId, array(
  252. 'sObjNameCart' => $oModule->_oConfig->getJsObject('cart'),
  253. 'iSellerId' => $iSellerId,
  254. 'iModuleId' => $iModuleId,
  255. 'iItemId' => $iItemId,
  256. 'iItemCount' => $iItemCount
  257. ));
  258. else {
  259. list($sJsCode, $sJsOnclick) = $oCart->serviceGetSubscribeJs($iSellerId, $aProvider['name'], $iModuleId, $iItemId, $iItemCount);
  260. $sButton = $this->parsePageByName('providers_select_button.html', array(
  261. 'onclick' => $sJsOnclick,
  262. 'title' => _t('_bx_payment_txt_checkout_with', _t($aProvider['caption']))
  263. ));
  264. }
  265. $aTmplVarsProviders[] = array(
  266. 'button' => $sButton
  267. );
  268. }
  269. return $this->parseHtmlByName('providers_select.html', array(
  270. 'bx_repeat:providers' => $aTmplVarsProviders
  271. ));
  272. }
  273. protected function _getModule()
  274. {
  275. $sName = $this->_oConfig->getName();
  276. return BxDolModule::getInstance($sName);
  277. }
  278. protected function _displayBlockHistory($sObject, $iClientId, $iSellerId = 0)
  279. {
  280. $oGrid = BxDolGrid::getObjectInstance($this->_oConfig->getObject($sObject));
  281. if(!$oGrid || empty($iClientId))
  282. return MsgBox(_t($this->_sLangsPrefix . 'msg_no_results'));
  283. $oGrid->addQueryParam('client_id', $iClientId);
  284. if(!empty($iSellerId))
  285. $oGrid->addQueryParam('seller_id', $iSellerId);
  286. $this->addJsCssOrders();
  287. return $this->displayJsCode('history') . $oGrid->getCode();
  288. }
  289. }
  290. /** @} */