diff --git a/classes/Dispatcher.php b/classes/Dispatcher.php index 1bdc1c15f..a16eb9f54 100644 --- a/classes/Dispatcher.php +++ b/classes/Dispatcher.php @@ -108,10 +108,10 @@ class DispatcherCore ), 'module' => array( 'controller' => 'module', - 'rule' => 'module/{module}/{action}', + 'rule' => 'module/{module}/{process}', 'keywords' => array( 'module' => array('regexp' => '[a-zA-Z0-9_-]+', 'param' => 'module'), - 'action' => array('regexp' => '[a-zA-Z0-9_-]+', 'param' => 'action'), + 'process' => array('regexp' => '[a-zA-Z0-9_-]+', 'param' => 'process'), ), ), ); @@ -149,7 +149,7 @@ class DispatcherCore /** * @var string Controller to use if found controller doesn't exist */ - protected $controller_not_found = 'PageNotFound'; + protected $controller_not_found = 'pagenotfound'; /** * @var array List of controllers where are stored controllers @@ -286,6 +286,20 @@ class DispatcherCore if (!isset($controllers[$this->controller])) $this->controller = strtolower($this->controller_not_found); $controller_class = $controllers[$this->controller]; + + // If module controller is called, we have to call the right module controller + if ($controller_class == 'ModuleController') + { + $module_name = Tools::getValue('module'); + $module = Module::getInstanceByName($module_name); + if (Validate::isLoadedObject($module) && $module->active && file_exists(_PS_MODULE_DIR_.$module_name.'/'.$module_name.'Controller.php')) + { + include_once(_PS_MODULE_DIR_.$module_name.'/'.$module_name.'Controller.php'); + $controller_class = 'Module'.$module_name.'Controller'; + } + else + $controller_class = $controllers[$this->controller_not_found]; + } } // BO dispatch else diff --git a/classes/FrontController.php b/classes/FrontController.php index a34a2b09d..1b39e5590 100755 --- a/classes/FrontController.php +++ b/classes/FrontController.php @@ -464,16 +464,11 @@ class FrontControllerCore extends Controller $this->context->smarty->assign('css_files', $this->css_files); $this->context->smarty->assign('js_files', array_unique($this->js_files)); - $this->context->smarty->assign(array( 'errors' => $this->errors, 'display_header' => $this->display_header, 'display_footer' => $this->display_footer, - 'template' => $this->context->smarty->fetch($this->template), )); - - - if (Tools::isSubmit('live_edit')) { @@ -482,14 +477,18 @@ class FrontControllerCore extends Controller // handle 1.4 theme (with layout.tpl missing) if (file_exists(_PS_THEME_DIR_.'layout.tpl')) + { + if ($this->template) + $this->context->smarty->assign('template', $this->context->smarty->fetch($this->template)); $this->context->smarty->display(_PS_THEME_DIR_.'layout.tpl'); + } else { // BEGIN - 1.4 retrocompatibility - will be removed in 1.6 Tools::displayAsDeprecated('layout.tpl is missing in your theme directory'); if ($this->display_header) $this->context->smarty->display(_PS_THEME_DIR_.'header.tpl'); - + if ($this->template) $this->context->smarty->display($this->template); diff --git a/classes/Link.php b/classes/Link.php index 929214a61..10b65fee7 100644 --- a/classes/Link.php +++ b/classes/Link.php @@ -266,11 +266,11 @@ class LinkCore * * @since 1.5.0 * @param string $module Module name - * @param string $action Action name + * @param string $process Action name * @param int $id_lang * @return string */ - public function getModuleLink($module, $action, $ssl = false, $id_lang = null) + public function getModuleLink($module, $process, $ssl = false, $id_lang = null) { $base = (($ssl && Configuration::get('PS_SSL_ENABLED')) ? _PS_BASE_URL_SSL_ : _PS_BASE_URL_); $url = $base.__PS_BASE_URI__.$this->getLangLink($id_lang); @@ -280,7 +280,7 @@ class LinkCore // Set available keywords $params = array(); $params['module'] = $module; - $params['action'] = $action; + $params['process'] = $process; return $url.Dispatcher::getInstance()->createUrl('module', $params, $this->allow); } diff --git a/classes/Module.php b/classes/Module.php index e8194cef9..ed996ecce 100644 --- a/classes/Module.php +++ b/classes/Module.php @@ -1588,16 +1588,35 @@ abstract class ModuleCore /** * Get module errors + * * @since 1.5.0 * @return array errors */ - public function getErrors() { return $this->_errors; } + public function getErrors() + { + return $this->_errors; + } /** * Get module messages confirmation - * @since 1.5.1 + * + * @since 1.5.0 * @return array conf */ - public function getConfirmations() { return $this->_confirmations; } + public function getConfirmations() + { + return $this->_confirmations; + } + + /** + * Get uri path for module + * + * @since 1.5.0 + * @return string + */ + public function getPathUri() + { + return $this->_path; + } } diff --git a/controllers/front/ModuleController.php b/controllers/front/ModuleController.php index f4a8d9268..eeb2079ab 100644 --- a/controllers/front/ModuleController.php +++ b/controllers/front/ModuleController.php @@ -26,38 +26,32 @@ */ /** - * The module controller call a module action. Module action method need to have the name : - * public function actionMyAction(FrontController $controller) - * * @since 1.5.0 */ class ModuleControllerCore extends FrontController { /** - * Assign template vars related to page content - * @see FrontController::initContent() + * @var Module */ - public function initContent() + public $module; + + public function __construct() { - // Check module existence - $name = Tools::getValue('module'); - if (!Validate::isModuleName($name) || !file_exists(_PS_MODULE_DIR_.$name)) + $this->module = Module::getInstanceByName(Tools::getValue('module')); + if (!$this->module->active) Tools::redirect('index'); + $this->process = Tools::getValue('process'); - $module = Module::getInstanceByName($name); - if (!$module->active) - Tools::redirect('index'); + parent::__construct(); + } - // Trigger module action - $action = Tools::getValue('action'); - $method = 'action'.$action; - - $this->context->smarty->assign('page_name', 'module-'.$name.'-'.$action); - - if ($action && method_exists($module, $method)) - $this->setTemplate($module->$method()); - else - die('Module action not found'); - parent::initContent(); + /** + * Assign module template + * + * @param string $template + */ + public function setTemplate($template) + { + $this->template = $this->module->getTemplatePath($template); } } diff --git a/modules/bankwire/bankwire.php b/modules/bankwire/bankwire.php index 47dd7eb08..dc661dead 100644 --- a/modules/bankwire/bankwire.php +++ b/modules/bankwire/bankwire.php @@ -162,31 +162,11 @@ class BankWire extends PaymentModule return $this->_html; } - public function execPayment($cart) - { - if (!$this->active) - return ; - if (!$this->_checkCurrency($cart)) - Tools::redirect('index.php?controller=order'); - - - $this->context->smarty->assign(array( - 'nbProducts' => $cart->nbProducts(), - 'cust_currency' => $cart->id_currency, - 'currencies' => $this->getCurrency((int)$cart->id_currency), - 'total' => $cart->getOrderTotal(true, Cart::BOTH), - 'this_path' => $this->_path, - 'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/' - )); - - return $this->display(__FILE__, 'payment_execution.tpl'); - } - public function hookPayment($params) { if (!$this->active) return ; - if (!$this->_checkCurrency($params['cart'])) + if (!$this->checkCurrency($params['cart'])) return ; @@ -221,14 +201,13 @@ class BankWire extends PaymentModule return $this->display(__FILE__, 'payment_return.tpl'); } - private function _checkCurrency($cart) + public function checkCurrency($cart) { - $currency_order = new Currency((int)($cart->id_currency)); - $currencies_module = $this->getCurrency((int)$cart->id_currency); - $currency_default = Configuration::get('PS_CURRENCY_DEFAULT'); - + $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) + foreach ($currencies_module as $currency_module) if ($currency_order->id == $currency_module['id_currency']) return true; return false; diff --git a/modules/bankwire/bankwireController.php b/modules/bankwire/bankwireController.php new file mode 100644 index 000000000..c3a0a97eb --- /dev/null +++ b/modules/bankwire/bankwireController.php @@ -0,0 +1,109 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +/** + * @since 1.5.0 + */ +class ModuleBankwireController extends ModuleController +{ + /** + * @see FrontController::postProcess() + */ + public function postProcess() + { + if ($this->process == 'validation') + $this->processValidation(); + } + + /** + * Validate bankwire payment + */ + public function processValidation() + { + $cart = $this->context->cart; + if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->module->active) + Tools::redirect('index.php?controller=order&step=1'); + + // Check that this payment option is still available in case the customer changed his address just before the end of the checkout process + $authorized = false; + foreach (Module::getPaymentModules() as $module) + if ($module['name'] == 'bankwire') + { + $authorized = true; + break; + } + if (!$authorized) + die(Tools::displayError('This payment method is not available.')); + + $customer = new Customer($cart->id_customer); + if (!Validate::isLoadedObject($customer)) + Tools::redirect('index.php?controller=order&step=1'); + + $currency = Tools::getValue('currency_payement', false) ? new Currency(Tools::getValue('currency_payement')) : Context::getContext()->currency; + $total = (float)$cart->getOrderTotal(true, Cart::BOTH); + $mailVars = array( + '{bankwire_owner}' => Configuration::get('BANK_WIRE_OWNER'), + '{bankwire_details}' => nl2br(Configuration::get('BANK_WIRE_DETAILS')), + '{bankwire_address}' => nl2br(Configuration::get('BANK_WIRE_ADDRESS')) + ); + + $this->module->validateOrder($cart->id, Configuration::get('PS_OS_BANKWIRE'), $total, $this->module->displayName, NULL, $mailVars, (int)$currency->id, false, $customer->secure_key); + Tools::redirect('index.php?controller=order-confirmation&id_cart='.$cart->id.'&id_module='.$this->module->id.'&id_order='.$this->module->currentOrder.'&key='.$customer->secure_key); + } + + /** + * @see FrontController::initContent() + */ + public function initContent() + { + parent::initContent(); + + if ($this->process == 'payment') + $this->assignPaymentExecution(); + } + + /** + * Assign bankwire payment template + */ + public function assignPaymentExecution() + { + $cart = $this->context->cart; + if (!$this->module->checkCurrency($cart)) + Tools::redirect('index.php?controller=order'); + + $this->context->smarty->assign(array( + 'nbProducts' => $cart->nbProducts(), + 'cust_currency' => $cart->id_currency, + 'currencies' => $this->module->getCurrency((int)$cart->id_currency), + 'total' => $cart->getOrderTotal(true, Cart::BOTH), + 'this_path' => $this->module->getPathUri(), + 'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->module->name.'/' + )); + + $this->setTemplate('payment_execution.tpl'); + } +} \ No newline at end of file diff --git a/modules/bankwire/payment.php b/modules/bankwire/payment.php index d528f9943..5085b12cd 100644 --- a/modules/bankwire/payment.php +++ b/modules/bankwire/payment.php @@ -24,18 +24,18 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ +/** + * @deprecated This file is deprecated, use moduleController instead + */ /* SSL Management */ $useSSL = true; -include(dirname(__FILE__).'/../../config/config.inc.php'); -include(dirname(__FILE__).'/../../header.php'); -include(dirname(__FILE__).'/bankwire.php'); +require('../../config/config.inc.php'); +Tools::displayFileAsDeprecated(); -if (!Context::getContext()->customer->isLogged(true)) - Tools::redirect('index.php?controller=authentication&back=order.php'); -$bankwire = new BankWire(); -echo $bankwire->execPayment($cart); - -include_once(dirname(__FILE__).'/../../footer.php'); +// init front controller in order to use Tools::redirect +$controller = new FrontController(); +$controller->init(); +Tools::redirect('index.php?controller=module&module=bankwire&process=payment'); \ No newline at end of file diff --git a/modules/bankwire/payment.tpl b/modules/bankwire/payment.tpl index 1f1be2df8..bdadec387 100644 --- a/modules/bankwire/payment.tpl +++ b/modules/bankwire/payment.tpl @@ -25,7 +25,7 @@ *}
-
+
{l s='Pay by bank wire (order process will be longer)' mod='bankwire'}
diff --git a/modules/cheque/cheque.php b/modules/cheque/cheque.php
index 74da5549c..4455a6684 100644
--- a/modules/cheque/cheque.php
+++ b/modules/cheque/cheque.php
@@ -147,16 +147,11 @@ class Cheque extends PaymentModule
return $this->_html;
}
- public function execPayment($cart)
- {
- return $this->actionPayment(true);
- }
-
public function hookPayment($params)
{
if (!$this->active)
return ;
- if (!$this->_checkCurrency($params['cart']))
+ if (!$this->checkCurrency($params['cart']))
return ;
$this->context->smarty->assign(array(
@@ -189,7 +184,7 @@ class Cheque extends PaymentModule
return $this->display(__FILE__, 'payment_return.tpl');
}
- private function _checkCurrency($cart)
+ public function checkCurrency($cart)
{
$currency_order = new Currency((int)($cart->id_currency));
$currencies_module = $this->getCurrency((int)$cart->id_currency);
@@ -200,75 +195,4 @@ class Cheque extends PaymentModule
return true;
return false;
}
-
- /**
- * This action display payment form
- *
- * @param bool $direct_call For retrocompatibility
- */
- public function actionPayment($direct_call = false)
- {
- if (!$this->active)
- return ;
-
- $cart = $this->context->cart;
- if (!$this->_checkCurrency($cart))
- Tools::redirect('index.php?controller=order');
- $this->context->smarty->assign(array(
- 'nbProducts' => $cart->nbProducts(),
- 'cust_currency' => $cart->id_currency,
- 'currencies' => $this->getCurrency((int)$cart->id_currency),
- 'total' => $cart->getOrderTotal(true, Cart::BOTH),
- 'isoCode' => $this->context->language->iso_code,
- 'chequeName' => $this->chequeName,
- 'chequeAddress' => Tools::nl2br($this->address),
- 'cheque_path' => $this->_path,
- 'cheque_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
- ));
-
- if (!$direct_call)
- return $this->getTemplatePath('payment_execution.tpl');
- else
- // For retrocompatibility
- return $this->display(__FILE__, 'payment_execution.tpl');
- }
-
- /**
- * This action validate the payment
- */
- public function actionValidation($direct_call = false)
- {
- $cart = $this->context->cart;
-
- if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->active)
- Tools::redirect('index.php?controller=order&step=1');
-
- // Check that this payment option is still available in case the customer changed his address just before the end of the checkout process
- $authorized = false;
- foreach (Module::getPaymentModules() as $module)
- if ($module['name'] == 'cheque')
- {
- $authorized = true;
- break;
- }
- if (!$authorized)
- die(Tools::displayError('This payment method is not available.'));
-
- $customer = new Customer($cart->id_customer);
-
- if (!Validate::isLoadedObject($customer))
- Tools::redirect('index.php?controller=order&step=1');
-
- $currency = Tools::isSubmit('currency_payement') ? new Currency(Tools::getValue('currency_payement')) : $this->context->currency;
- $total = (float)$cart->getOrderTotal(true, Cart::BOTH);
-
- $mailVars = array(
- '{cheque_name}' => Configuration::get('CHEQUE_NAME'),
- '{cheque_address}' => Configuration::get('CHEQUE_ADDRESS'),
- '{cheque_address_html}' => str_replace("\n", '
', Configuration::get('CHEQUE_ADDRESS')));
-
- $this->validateOrder((int)$cart->id, Configuration::get('PS_OS_CHEQUE'), $total, $this->displayName, NULL, $mailVars, (int)$currency->id, false, $customer->secure_key);
-
- Tools::redirect('index.php?controller=order-confirmation&id_cart='.(int)($cart->id).'&id_module='.(int)$this->id.'&id_order='.$this->currentOrder.'&key='.$customer->secure_key);
- }
}
diff --git a/modules/cheque/chequeController.php b/modules/cheque/chequeController.php
new file mode 100644
index 000000000..926cb13c2
--- /dev/null
+++ b/modules/cheque/chequeController.php
@@ -0,0 +1,115 @@
+
+* @copyright 2007-2011 PrestaShop SA
+* @version Release: $Revision$
+* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
+* International Registered Trademark & Property of PrestaShop SA
+*/
+
+/**
+ * @since 1.5.0
+ */
+class ModuleChequeController extends ModuleController
+{
+ /**
+ * @see FrontController::postProcess()
+ */
+ public function postProcess()
+ {
+ if ($this->process == 'validation')
+ $this->processValidation();
+ }
+
+ /**
+ * Validate cheque payment
+ */
+ public function processValidation()
+ {
+ $cart = $this->context->cart;
+
+ if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->module->active)
+ Tools::redirect('index.php?controller=order&step=1');
+
+ // Check that this payment option is still available in case the customer changed his address just before the end of the checkout process
+ $authorized = false;
+ foreach (Module::getPaymentModules() as $module)
+ if ($module['name'] == 'cheque')
+ {
+ $authorized = true;
+ break;
+ }
+
+ if (!$authorized)
+ die(Tools::displayError('This payment method is not available.'));
+
+ $customer = new Customer($cart->id_customer);
+
+ if (!Validate::isLoadedObject($customer))
+ Tools::redirect('index.php?controller=order&step=1');
+
+ $currency = Tools::isSubmit('currency_payement') ? new Currency(Tools::getValue('currency_payement')) : $this->context->currency;
+ $total = (float)$cart->getOrderTotal(true, Cart::BOTH);
+
+ $mailVars = array(
+ '{cheque_name}' => Configuration::get('CHEQUE_NAME'),
+ '{cheque_address}' => Configuration::get('CHEQUE_ADDRESS'),
+ '{cheque_address_html}' => str_replace("\n", '
', Configuration::get('CHEQUE_ADDRESS')));
+
+ $this->module->validateOrder((int)$cart->id, Configuration::get('PS_OS_CHEQUE'), $total, $this->module->displayName, NULL, $mailVars, (int)$currency->id, false, $customer->secure_key);
+ Tools::redirect('index.php?controller=order-confirmation&id_cart='.(int)$cart->id.'&id_module='.(int)$this->module->id.'&id_order='.$this->module->currentOrder.'&key='.$customer->secure_key);
+ }
+
+ /**
+ * @see FrontController::initContent()
+ */
+ public function initContent()
+ {
+ parent::initContent();
+
+ if ($this->process == 'payment')
+ $this->assignPaymentExecution();
+ }
+
+ /**
+ * Assign cheque payment template
+ */
+ public function assignPaymentExecution()
+ {
+ $cart = $this->context->cart;
+ if (!$this->module->checkCurrency($cart))
+ Tools::redirect('index.php?controller=order');
+
+ $this->context->smarty->assign(array(
+ 'nbProducts' => $cart->nbProducts(),
+ 'cust_currency' => $cart->id_currency,
+ 'currencies' => $this->module->getCurrency((int)$cart->id_currency),
+ 'total' => $cart->getOrderTotal(true, Cart::BOTH),
+ 'isoCode' => $this->context->language->iso_code,
+ 'chequeName' => $this->module->chequeName,
+ 'chequeAddress' => Tools::nl2br($this->module->address),
+ 'cheque_path' => $this->module->getPathUri(),
+ 'cheque_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->module->name.'/'
+ ));
+
+ $this->setTemplate('payment_execution.tpl');
+ }
+}
\ No newline at end of file
diff --git a/modules/cheque/payment.php b/modules/cheque/payment.php
index f5c391ce5..09c21ff76 100644
--- a/modules/cheque/payment.php
+++ b/modules/cheque/payment.php
@@ -32,18 +32,11 @@
/* SSL Management */
$useSSL = true;
-include(dirname(__FILE__).'/../../config/config.inc.php');
+require('../../config/config.inc.php');
Tools::displayFileAsDeprecated();
-include(dirname(__FILE__).'/../../header.php');
-include(dirname(__FILE__).'/cheque.php');
-
-if (!Context::getContext()->customer->isLogged(true))
- Tools::redirect('index.php?controller=authentication&back=order.php');
-
-$cheque = new Cheque();
-echo $cheque->execPayment($cart);
-
-include_once(dirname(__FILE__).'/../../footer.php');
-
+// init front controller in order to use Tools::redirect
+$controller = new FrontController();
+$controller->init();
+Tools::redirect('index.php?controller=module&module=cheque&process=payment');
\ No newline at end of file