* @copyright 2007-2016 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_PS_VERSION_')) { exit; } class Bankwire extends PaymentModule { protected $_html = ''; protected $_postErrors = array(); public $details; public $owner; public $address; public $extra_mail_vars; public function __construct() { $this->name = 'bankwire'; $this->tab = 'payments_gateways'; $this->version = '1.1.5'; $this->author = 'PrestaShop'; $this->controllers = array('payment', 'validation'); $this->is_eu_compatible = 1; $this->currencies = true; $this->currencies_mode = 'checkbox'; $config = Configuration::getMultiple(array('BANK_WIRE_DETAILS', 'BANK_WIRE_OWNER', 'BANK_WIRE_ADDRESS')); if (!empty($config['BANK_WIRE_OWNER'])) { $this->owner = $config['BANK_WIRE_OWNER']; } if (!empty($config['BANK_WIRE_DETAILS'])) { $this->details = $config['BANK_WIRE_DETAILS']; } if (!empty($config['BANK_WIRE_ADDRESS'])) { $this->address = $config['BANK_WIRE_ADDRESS']; } $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Bank wire'); $this->description = $this->l('This module allows you to accept payments for bookings via bank wire transfer.'); $this->confirmUninstall = $this->l('Are you sure about removing these details?'); if (!isset($this->owner) || !isset($this->details) || !isset($this->address)) { $this->warning = $this->l('Account owner and account details must be configured before using this module.'); } $currencies = Currency::checkPaymentCurrencies($this->id); if (!$currencies || !count($currencies)) { $this->warning = $this->l('No currency has been set for this module.'); } $this->payment_type = OrderPayment::PAYMENT_TYPE_REMOTE_PAYMENT; } public function getExtraMailContent($id_order_state, $order) { if (Configuration::get('PS_OS_AWAITING_PAYMENT') == $id_order_state) { $this->context->smarty->assign(array( 'bankwire_owner' => Configuration::get('BANK_WIRE_OWNER'), 'bankwire_details' => nl2br(Configuration::get('BANK_WIRE_DETAILS')), 'bankwire_address' => nl2br(Configuration::get('BANK_WIRE_ADDRESS')), 'lang' => new Language($order->id_lang) )); return array( '{extra_mail_content_html}' => $this->context->smarty->fetch( $this->local_path.'views/templates/mail/mail_template_html.tpl' ), '{extra_mail_content_txt}' => $this->context->smarty->fetch( $this->local_path.'views/templates/mail/mail_template_text.tpl' ) ); } return array(); } public function install() { if (!parent::install() || !$this->registerHook('payment') || ! $this->registerHook('displayPaymentEU') || !$this->registerHook('paymentReturn')) { return false; } return true; } public function uninstall() { if (!Configuration::deleteByName('BANK_WIRE_DETAILS') || !Configuration::deleteByName('BANK_WIRE_OWNER') || !Configuration::deleteByName('BANK_WIRE_ADDRESS') || !parent::uninstall()) { return false; } return true; } protected function _postValidation() { if (Tools::isSubmit('btnSubmit')) { if (!Tools::getValue('BANK_WIRE_DETAILS')) { $this->_postErrors[] = $this->l('Account details are required.'); } elseif (!Tools::getValue('BANK_WIRE_OWNER')) { $this->_postErrors[] = $this->l('Account owner is required.'); } } } protected function _postProcess() { if (Tools::isSubmit('btnSubmit')) { Configuration::updateValue('BANK_WIRE_DETAILS', Tools::getValue('BANK_WIRE_DETAILS')); Configuration::updateValue('BANK_WIRE_OWNER', Tools::getValue('BANK_WIRE_OWNER')); Configuration::updateValue('BANK_WIRE_ADDRESS', Tools::getValue('BANK_WIRE_ADDRESS')); } $this->_html .= $this->displayConfirmation($this->l('Settings updated')); } protected function _displayBankWire() { return $this->display(__FILE__, 'infos.tpl'); } public function getContent() { if (Tools::isSubmit('btnSubmit')) { $this->_postValidation(); if (!count($this->_postErrors)) { $this->_postProcess(); } else { foreach ($this->_postErrors as $err) { $this->_html .= $this->displayError($err); } } } else { $this->_html .= '
'; } $this->_html .= $this->_displayBankWire(); $this->_html .= $this->renderForm(); return $this->_html; } public function hookPayment($params) { if (!$this->active) { return; } if (!$this->checkCurrency($params['cart'])) { return; } $this->smarty->assign(array( 'this_path' => $this->_path, 'this_path_bw' => $this->_path, 'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/' )); return $this->display(__FILE__, 'payment.tpl'); } public function hookDisplayPaymentEU($params) { if (!$this->active) { return; } if (!$this->checkCurrency($params['cart'])) { return; } $payment_options = array( 'cta_text' => $this->l('Pay by Bank Wire'), 'logo' => Media::getMediaPath(dirname(__FILE__).'/bankwire.jpg'), 'action' => $this->context->link->getModuleLink($this->name, 'validation', array(), true) ); return $payment_options; } public function hookPaymentReturn($params) { if (!$this->active) { return; } $objOrder = $params['objOrder']; $orderState = $objOrder->getCurrentState(); $smartyVars = array(); if (in_array( $orderState, array( Configuration::get('PS_OS_AWAITING_PAYMENT'), ) )) { $objCart = new Cart($objOrder->id_cart); if ($objCart->is_advance_payment) { $cartTotal = $objOrder->getOrdersTotalPaid(1); } else { $cartTotal = $objOrder->getOrdersTotalPaid(); } $smartyVars['total_to_pay'] = Tools::displayPrice($cartTotal, $params['currencyObj'], false); $smartyVars['bankwireDetails'] = Tools::nl2br($this->details); $smartyVars['bankwireAddress'] = Tools::nl2br($this->address); $smartyVars['bankwireOwner'] = $this->owner; $smartyVars['status'] = 'ok'; $smartyVars['id_order'] = $objOrder->id; $smartyVars['reference'] = $objOrder->reference; } else { $smartyVars['status'] = 'failed'; } $this->smarty->assign($smartyVars); return $this->display(__FILE__, 'payment_return.tpl'); } public function checkCurrency($cart) { $currency_order = new Currency($cart->id_currency); $currencies_module = $this->getCurrency($cart->id_currency); if (is_array($currencies_module)) { foreach ($currencies_module as $currency_module) { if ($currency_order->id == $currency_module['id_currency']) { return true; } } } return false; } public function renderForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => $this->l('Contact details'), 'icon' => 'icon-envelope' ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Account owner'), 'name' => 'BANK_WIRE_OWNER', 'required' => true ), array( 'type' => 'textarea', 'label' => $this->l('Details'), 'name' => 'BANK_WIRE_DETAILS', 'desc' => $this->l('Such as bank branch, IBAN number, BIC, etc.'), 'required' => true ), array( 'type' => 'textarea', 'label' => $this->l('Bank address'), 'name' => 'BANK_WIRE_ADDRESS', 'required' => true ), ), 'submit' => array( 'title' => $this->l('Save'), ) ), ); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper->default_form_language = $lang->id; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $this->fields_form = array(); $helper->id = (int)Tools::getValue('id_carrier'); $helper->identifier = $this->identifier; $helper->submit_action = 'btnSubmit'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues(), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form)); } public function getConfigFieldsValues() { return array( 'BANK_WIRE_DETAILS' => Tools::getValue('BANK_WIRE_DETAILS', Configuration::get('BANK_WIRE_DETAILS')), 'BANK_WIRE_OWNER' => Tools::getValue('BANK_WIRE_OWNER', Configuration::get('BANK_WIRE_OWNER')), 'BANK_WIRE_ADDRESS' => Tools::getValue('BANK_WIRE_ADDRESS', Configuration::get('BANK_WIRE_ADDRESS')), ); } }