diff --git a/classes/FrontController.php b/classes/FrontController.php index a4ead778a..8fc7c87e6 100755 --- a/classes/FrontController.php +++ b/classes/FrontController.php @@ -53,6 +53,8 @@ class FrontControllerCore extends Controller public $display_column_right = true; public static $initialized = false; + + protected $page_name = null; protected static $currentCustomerGroups; @@ -235,7 +237,9 @@ class FrontControllerCore extends Controller // Are we in a payment module $module_name = Tools::getValue('module'); - if (Tools::getValue('controller') == 'module' && $module_name != '' && new $module_name() instanceof PaymentModule) + if (!is_null($this->page_name)) + $page_name = $this->page_name; + else if (Tools::getValue('controller') == 'module' && $module_name != '' && new $module_name() instanceof PaymentModule) $page_name = 'module-payment-submit'; // Are we in a module else if (preg_match('#^'.preg_quote($this->context->shop->getPhysicalURI(), '#').'modules/([a-zA-Z0-9_-]+?)/(.*)$#', $_SERVER['REQUEST_URI'], $m)) diff --git a/modules/loyalty/loyalty-program.php b/modules/loyalty/loyalty-program.php index b0ebd177b..0a7581e10 100644 --- a/modules/loyalty/loyalty-program.php +++ b/modules/loyalty/loyalty-program.php @@ -35,6 +35,8 @@ include_once(dirname(__FILE__).'/LoyaltyModule.php'); include_once(dirname(__FILE__).'/LoyaltyStateModule.php'); include_once(dirname(__FILE__).'/loyalty.php'); +Tools::displayFileAsDeprecated(); + $context = Context::getContext(); if (!$context->customer->isLogged()) Tools::redirect('index.php?controller=authentication&back=modules/loyalty/loyalty-program.php'); @@ -98,7 +100,7 @@ if (Tools::getValue('transform-points') == 'true' AND $customerPoints > 0) $cartRule->add(); /* Register order(s) which contributed to create this voucher */ - LoyaltyModule::registerDiscount($voucher); + LoyaltyModule::registerDiscount($cartRule); Tools::redirect('modules/loyalty/loyalty-program.php'); } diff --git a/modules/loyalty/loyalty.tpl b/modules/loyalty/loyalty.tpl index abdeb3973..b0808f953 100644 --- a/modules/loyalty/loyalty.tpl +++ b/modules/loyalty/loyalty.tpl @@ -124,7 +124,7 @@ {if $transformation_allowed}

- {l s='Transform my points into a voucher of' mod='loyalty'} {convertPrice price=$voucher}. + {l s='Transform my points into a voucher of' mod='loyalty'} {convertPrice price=$voucher}.

{/if} @@ -149,14 +149,14 @@ {foreach from=$discounts item=discount name=myLoop} {dateFormat date=$discount->date_add} - {if $discount->id_discount_type == 1} - {$discount->value}% - {elseif $discount->id_discount_type == 2} - {displayPrice price=$discount->value currency=$discount->id_currency} + {if $discount->reduction_percent > 0} + {$discount->reduction_percent}% + {elseif $discount->reduction_amount} + {displayPrice price=$discount->reduction_amount currency=$discount->reduction_currency} {else} {l s='Free shipping' mod='loyalty'} {/if} - {$discount->name} + {$discount->code} {dateFormat date=$discount->date_from} {dateFormat date=$discount->date_to} {if $discount->quantity > 0}{l s='To use' mod='loyalty'}{else}{l s='Used' mod='loyalty'}{/if} diff --git a/modules/loyalty/loyaltyController.php b/modules/loyalty/loyaltyController.php new file mode 100644 index 000000000..9d21b2035 --- /dev/null +++ b/modules/loyalty/loyaltyController.php @@ -0,0 +1,190 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +/** + * @since 1.5.0 + */ + +include_once(dirname(__FILE__).'/LoyaltyModule.php'); +include_once(dirname(__FILE__).'/LoyaltyStateModule.php'); + +class ModuleLoyaltyController extends ModuleController +{ + protected $page_name = 'module-loyalty-loyalty-program'; + + /** + * @see FrontController::postProcess() + */ + public function postProcess() + { + $this->display_column_left = false; + if ($this->process == 'transformpoints') + $this->processTransformPoints(); + } + + /** + * Transform loyalty point to a voucher + */ + public function processTransformPoints() + { + $customerPoints = (int)(LoyaltyModule::getPointsByCustomer((int)($this->context->customer->id))); + if ($customerPoints > 0) + { + /* Generate a voucher code */ + $voucherCode = NULL; + do + $voucherCode = 'FID'.rand(1000, 100000); + while (CartRule::cartRuleExists($voucherCode)); + + /* Voucher creation and affectation to the customer */ + $cartRule = new CartRule(); + $cartRule->code = $voucherCode; + $cartRule->id_customer = (int)$this->context->cookie->id_customer; + $cartRule->id_currency = (int)$this->context->cookie->id_currency; + $cartRule->reduction_amount = LoyaltyModule::getVoucherValue((int)$customerPoints); + $cartRule->quantity = 1; + $cartRule->quantity_per_user = 1; + + /* If merchandise returns are allowed, the voucher musn't be usable before this max return date */ + $dateFrom = Db::getInstance()->getValue(' + SELECT UNIX_TIMESTAMP(date_add) n + FROM '._DB_PREFIX_.'loyalty + WHERE id_cart_rule = 0 AND id_customer = '.(int)$this->context->cookie->id_customer.' + ORDER BY date_add DESC'); + + if (Configuration::get('PS_ORDER_RETURN')) + $dateFrom += 60 * 60 * 24 * (int)Configuration::get('PS_ORDER_RETURN_NB_DAYS'); + + $cartRule->date_from = date('Y-m-d H:i:s', $dateFrom); + $cartRule->date_to = date('Y-m-d H:i:s', $dateFrom + 31536000); // + 1 year + + $cartRule->minimum_amount = (float)Configuration::get('PS_LOYALTY_MINIMAL'); + $cartRule->active = 1; + + $categories = Configuration::get('PS_LOYALTY_VOUCHER_CATEGORY'); + if ($categories != '' AND $categories != 0) + $categories = explode(',', Configuration::get('PS_LOYALTY_VOUCHER_CATEGORY')); + else + die (Tools::displayError()); + + $languages = Language::getLanguages(true); + $default_text = Configuration::get('PS_LOYALTY_VOUCHER_DETAILS', (int)Configuration::get('PS_LANG_DEFAULT')); + + foreach ($languages AS $language) + { + $text = Configuration::get('PS_LOYALTY_VOUCHER_DETAILS', (int)$language['id_lang']); + $cartRule->name[(int)$language['id_lang']] = $text ? strval($text) : strval($default_text); + } + + if (is_array($categories) AND sizeof($categories)) + $cartRule->add(true, false, $categories); + else + $cartRule->add(); + + /* Register order(s) which contributed to create this voucher */ + LoyaltyModule::registerDiscount($cartRule); + + Tools::redirect($this->context->link->getModuleLink('loyalty', 'summary')); + } + } + + /** + * @see FrontController::initContent() + */ + public function initContent() + { + parent::initContent(); + $this->context->controller->addJqueryPlugin(array('dimensions', 'cluetip')); + + if ($this->process == 'summary') + $this->assignSummaryExecution(); + } + + /** + * Assign summary template + */ + public function assignSummaryExecution() + { + $customerPoints = (int)(LoyaltyModule::getPointsByCustomer((int)($this->context->customer->id))); + $orders = LoyaltyModule::getAllByIdCustomer((int)($this->context->cookie->id_customer), (int)($this->context->cookie->id_lang)); + $displayorders = LoyaltyModule::getAllByIdCustomer((int)($this->context->cookie->id_customer), (int)($this->context->cookie->id_lang), false, true, ((int)(Tools::getValue('n')) > 0 ? (int)(Tools::getValue('n')) : 10), ((int)(Tools::getValue('p')) > 0 ? (int)(Tools::getValue('p')) : 1)); + $this->context->smarty->assign(array( + 'orders' => $orders, + 'displayorders' => $displayorders, + 'pagination_link' => $this->context->link->getModuleLink('loyalty', 'summary'), + 'totalPoints' => (int)$customerPoints, + 'voucher' => LoyaltyModule::getVoucherValue($customerPoints, (int)($this->context->cookie->id_currency)), + 'validation_id' => LoyaltyStateModule::getValidationId(), + 'transformation_allowed' => $customerPoints > 0, + 'page' => ((int)(Tools::getValue('p')) > 0 ? (int)(Tools::getValue('p')) : 1), + 'nbpagination' => ((int)(Tools::getValue('n') > 0) ? (int)(Tools::getValue('n')) : 10), + 'nArray' => array(10, 20, 50), + 'max_page' => floor(sizeof($orders) / ((int)(Tools::getValue('n') > 0) ? (int)(Tools::getValue('n')) : 10)) + )); + + /* Discounts */ + $nbDiscounts = 0; + $discounts = array(); + if ($ids_discount = LoyaltyModule::getDiscountByIdCustomer((int)$this->context->cookie->id_customer)) + { + $nbDiscounts = count($ids_discount); + foreach ($ids_discount AS $key => $discount) + { + $discounts[$key] = new CartRule((int)$discount['id_cart_rule'], (int)$this->context->cookie->id_lang); + $discounts[$key]->orders = LoyaltyModule::getOrdersByIdDiscount((int)$discount['id_cart_rule']); + } + } + + $allCategories = Category::getSimpleCategories((int)($this->context->cookie->id_lang)); + $voucherCategories = Configuration::get('PS_LOYALTY_VOUCHER_CATEGORY'); + if ($voucherCategories != '' AND $voucherCategories != 0) + $voucherCategories = explode(',', Configuration::get('PS_LOYALTY_VOUCHER_CATEGORY')); + else + die(Tools::displayError()); + + if (sizeof($voucherCategories) == sizeof($allCategories)) + $categoriesNames = null; + else + { + $categoriesNames = array(); + foreach ($allCategories AS $k => $allCategory) + if (in_array($allCategory['id_category'], $voucherCategories)) + $categoriesNames[$allCategory['id_category']] = trim($allCategory['name']); + if (!empty($categoriesNames)) + $categoriesNames = Tools::truncate(implode(', ', $categoriesNames), 100).'.'; + else + $categoriesNames = null; + } + $this->context->smarty->assign(array( + 'nbDiscounts' => (int)$nbDiscounts, + 'discounts' => $discounts, + 'minimalLoyalty' => (float)Configuration::get('PS_LOYALTY_MINIMAL'), + 'categories' => $categoriesNames)); + + $this->setTemplate('loyalty.tpl'); + } +} diff --git a/modules/loyalty/my-account.tpl b/modules/loyalty/my-account.tpl index 6dd93fa22..cb95214ab 100644 --- a/modules/loyalty/my-account.tpl +++ b/modules/loyalty/my-account.tpl @@ -25,5 +25,5 @@ *} -
  • {l s='My loyalty points' mod='loyalty'} {l s='My loyalty points' mod='loyalty'}
  • +
  • {l s='My loyalty points' mod='loyalty'} {l s='My loyalty points' mod='loyalty'}
  • \ No newline at end of file