bebeboutik/controllers/ParentOrderController.php
2017-06-30 12:57:06 +02:00

441 lines
16 KiB
PHP
Executable File

<?php
/*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2011 PrestaShop SA
* @version Release: $Revision: 9014 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
/* Class FreeOrder to use PaymentModule (abstract class, cannot be instancied) */
class FreeOrder extends PaymentModule {}
class ParentOrderControllerCore extends FrontController
{
public $ssl = true;
public $php_self = 'order.php';
public $nbProducts;
public function __construct()
{
parent::__construct();
/* Disable some cache related bugs on the cart/order */
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
}
public function init()
{
parent::init();
$this->nbProducts = self::$cart->nbProducts();
}
public function preProcess()
{
global $isVirtualCart;
parent::preProcess();
// Redirect to the good order process
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 0 AND strpos($_SERVER['PHP_SELF'], 'order.php') === false)
Tools::redirect('order.php');
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1 AND strpos($_SERVER['PHP_SELF'], 'order-opc.php') === false)
{
if (isset($_GET['step']) AND $_GET['step'] == 3)
Tools::redirect('order-opc.php?isPaymentStep=true');
Tools::redirect('order-opc.php');
}
if (Configuration::get('PS_CATALOG_MODE'))
$this->errors[] = Tools::displayError('This store has not accepted your new order.');
if (Tools::isSubmit('submitReorder') AND $id_order = (int)Tools::getValue('id_order'))
{
$oldCart = new Cart(Order::getCartIdStatic((int)$id_order, (int)self::$cookie->id_customer));
$duplication = $oldCart->duplicate();
if (!$duplication OR !Validate::isLoadedObject($duplication['cart']))
$this->errors[] = Tools::displayError('Sorry, we cannot renew your order.');
elseif (!$duplication['success'])
$this->errors[] = Tools::displayError('Missing items - we are unable to renew your order');
else
{
self::$cookie->id_cart = $duplication['cart']->id;
self::$cookie->write();
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1)
Tools::redirect('order-opc.php');
Tools::redirect('order.php');
}
}
if ($this->nbProducts)
{
if (Tools::isSubmit('submitAddDiscount') AND Tools::getValue('discount_name'))
{
$discountName = Tools::getValue('discount_name');
if (!Validate::isDiscountName($discountName))
$this->errors[] = Tools::displayError('Voucher name invalid.');
else
{
$discount = new Discount((int)(Discount::getIdByName($discountName)));
if (Validate::isLoadedObject($discount))
{
if ($tmpError = self::$cart->checkDiscountValidity($discount, self::$cart->getDiscounts(), self::$cart->getOrderTotal(), self::$cart->getProducts(), true))
$this->errors[] = $tmpError;
}
else
$this->errors[] = Tools::displayError('Voucher name invalid.');
if (!sizeof($this->errors))
{
self::$cart->addDiscount((int)($discount->id));
Tools::redirect('order-opc.php');
}
}
self::$smarty->assign(array(
'errors' => $this->errors,
'discount_name' => Tools::safeOutput($discountName)
));
}
elseif (isset($_GET['deleteDiscount']) AND Validate::isUnsignedId($_GET['deleteDiscount']))
{
self::$cart->deleteDiscount((int)($_GET['deleteDiscount']));
Tools::redirect('order-opc.php');
}
/* Is there only virtual product in cart */
if ($isVirtualCart = self::$cart->isVirtualCart())
$this->_setNoCarrier();
}
self::$smarty->assign('back', Tools::safeOutput(Tools::getValue('back')));
}
public function setMedia()
{
parent::setMedia();
// Adding CSS style sheet
Tools::addCSS(_THEME_CSS_DIR_.'addresses.css');
Tools::addCSS(_PS_CSS_DIR_.'jquery.fancybox-1.3.4.css', 'screen');
// Adding JS files
Tools::addJS(_THEME_JS_DIR_.'tools.js');
if ((Configuration::get('PS_ORDER_PROCESS_TYPE') == 0 AND Tools::getValue('step') == 1) OR Configuration::get('PS_ORDER_PROCESS_TYPE') == 1)
Tools::addJS(_THEME_JS_DIR_.'order-address.js');
Tools::addJS(_PS_JS_DIR_.'jquery/jquery.fancybox-1.3.4.js');
if ((int)(Configuration::get('PS_BLOCK_CART_AJAX')) OR Configuration::get('PS_ORDER_PROCESS_TYPE') == 1)
{
Tools::addJS(_THEME_JS_DIR_.'cart-summary.js');
Tools::addJS(_PS_JS_DIR_.'jquery/jquery-typewatch.pack.js');
}
}
/**
* @return boolean
*/
protected function _checkFreeOrder()
{
if (self::$cart->getOrderTotal() <= 0)
{
$order = new FreeOrder();
$order->free_order_class = true;
$order->validateOrder((int)(self::$cart->id), Configuration::get('PS_OS_PAYMENT'), 0, Tools::displayError('Free order', false), null, array(), null, false, self::$cart->secure_key);
return (int)Order::getOrderByCartId((int)self::$cart->id);
}
return false;
}
protected function _updateMessage($messageContent)
{
if ($messageContent)
{
if (!Validate::isMessage($messageContent))
$this->errors[] = Tools::displayError('Invalid message');
elseif ($oldMessage = Message::getMessageByCartId((int)(self::$cart->id)))
{
$message = new Message((int)($oldMessage['id_message']));
$message->message = htmlentities($messageContent, ENT_COMPAT, 'UTF-8');
$message->update();
}
else
{
$message = new Message();
$message->message = htmlentities($messageContent, ENT_COMPAT, 'UTF-8');
$message->id_cart = (int)(self::$cart->id);
$message->id_customer = (int)(self::$cart->id_customer);
$message->add();
}
}
else
{
if ($oldMessage = Message::getMessageByCartId((int)(self::$cart->id)))
{
$message = new Message((int)($oldMessage['id_message']));
$message->delete();
}
}
return true;
}
protected function _processCarrier()
{
self::$cart->recyclable = (int)(Tools::getValue('recyclable'));
// @Override Antadis - Gift cart updated on step 1
// self::$cart->gift = (int)(Tools::getValue('gift'));
// if ((int)(Tools::getValue('gift')))
// {
// if (!Validate::isMessage($_POST['gift_message']))
// $this->errors[] = Tools::displayError('Invalid gift message');
// else
// self::$cart->gift_message = strip_tags($_POST['gift_message']);
// }
if (isset(self::$cookie->id_customer) AND self::$cookie->id_customer)
{
$address = new Address((int)(self::$cart->id_address_delivery));
if (!($id_zone = Address::getZoneById($address->id)))
$this->errors[] = Tools::displayError('No zone match with your address');
}
else
$id_zone = Country::getIdZone((int)Configuration::get('PS_COUNTRY_DEFAULT'));
if (Validate::isInt(Tools::getValue('id_carrier')) AND sizeof(Carrier::checkCarrierZone((int)(Tools::getValue('id_carrier')), (int)($id_zone))))
self::$cart->id_carrier = (int)(Tools::getValue('id_carrier'));
elseif (!self::$cart->isVirtualCart() AND (int)(Tools::getValue('id_carrier')) == 0)
$this->errors[] = Tools::displayError('Invalid carrier or no carrier selected');
Module::hookExec('processCarrier', array('cart' => self::$cart));
return self::$cart->update();
}
protected function _assignSummaryInformations()
{
global $currency;
if (file_exists(_PS_SHIP_IMG_DIR_.(int)(self::$cart->id_carrier).'.jpg'))
self::$smarty->assign('carrierPicture', 1);
$summary = self::$cart->getSummaryDetails();
$customizedDatas = Product::getAllCustomizedDatas((int)(self::$cart->id));
// override customization tax rate with real tax (tax rules)
foreach($summary['products'] AS &$productUpdate)
{
$productId = (int)(isset($productUpdate['id_product']) ? $productUpdate['id_product'] : $productUpdate['product_id']);
$productAttributeId = (int)(isset($productUpdate['id_product_attribute']) ? $productUpdate['id_product_attribute'] : $productUpdate['product_attribute_id']);
if (isset($customizedDatas[$productId][$productAttributeId]))
$productUpdate['tax_rate'] = Tax::getProductTaxRate($productId, self::$cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
}
Product::addCustomizationPrice($summary['products'], $customizedDatas);
if ($free_ship = Tools::convertPrice((float)(Configuration::get('PS_SHIPPING_FREE_PRICE')), new Currency((int)(self::$cart->id_currency))))
{
$discounts = self::$cart->getDiscounts();
$total_free_ship = $free_ship - ($summary['total_products_wt'] + $summary['total_discounts']);
foreach ($discounts as $discount)
if ($discount['id_discount_type'] == 3)
{
$total_free_ship = 0;
break;
}
self::$smarty->assign('free_ship', $total_free_ship);
}
// for compatibility with 1.2 themes
foreach($summary['products'] AS $key => $product)
$summary['products'][$key]['quantity'] = $product['cart_quantity'];
self::$smarty->assign($summary);
self::$smarty->assign(array(
'token_cart' => Tools::getToken(false),
'isVirtualCart' => self::$cart->isVirtualCart(),
'productNumber' => self::$cart->nbProducts(),
'voucherAllowed' => Configuration::get('PS_VOUCHERS'),
'shippingCost' => self::$cart->getOrderTotal(true, Cart::ONLY_SHIPPING),
'shippingCostTaxExc' => self::$cart->getOrderTotal(false, Cart::ONLY_SHIPPING),
'customizedDatas' => $customizedDatas,
'CUSTOMIZE_FILE' => _CUSTOMIZE_FILE_,
'CUSTOMIZE_TEXTFIELD' => _CUSTOMIZE_TEXTFIELD_,
'lastProductAdded' => self::$cart->getLastProduct(),
'displayVouchers' => Discount::getVouchersToCartDisplay((int)(self::$cookie->id_lang), (isset(self::$cookie->id_customer) ? (int)(self::$cookie->id_customer) : 0)),
'currencySign' => $currency->sign,
'currencyRate' => $currency->conversion_rate,
'currencyFormat' => $currency->format,
'currencyBlank' => $currency->blank));
self::$smarty->assign(array(
'HOOK_SHOPPING_CART' => Module::hookExec('shoppingCart', $summary),
'HOOK_SHOPPING_CART_EXTRA' => Module::hookExec('shoppingCartExtra', $summary)
));
}
protected function _assignAddress()
{
//if guest checkout disabled and flag is_guest in cookies is actived
if (Configuration::get('PS_GUEST_CHECKOUT_ENABLED') == 0 AND ((int) self::$cookie->is_guest != Configuration::get('PS_GUEST_CHECKOUT_ENABLED')))
{
self::$cookie->logout();
Tools::redirect('');
}
elseif (!Customer::getAddressesTotalById((int)(self::$cookie->id_customer)))
Tools::redirect('address.php?back=order.php?step=1');
$customer = new Customer((int)(self::$cookie->id_customer));
if (Validate::isLoadedObject($customer))
{
/* Getting customer addresses */
$customerAddresses = $customer->getAddresses((int)(self::$cookie->id_lang));
// Getting a list of formated address fields with associated values
$formatedAddressFieldsValuesList = array();
foreach($customerAddresses as $address)
{
$tmpAddress = new Address($address['id_address']);
$formatedAddressFieldsValuesList[$address['id_address']]['ordered_fields'] = AddressFormat::getOrderedAddressFields($address['id_country']);
$formatedAddressFieldsValuesList[$address['id_address']]['formated_fields_values'] = AddressFormat::getFormattedAddressFieldsValues(
$tmpAddress,
$formatedAddressFieldsValuesList[$address['id_address']]['ordered_fields']);
unset($tmpAddress);
}
self::$smarty->assign(array(
'addresses' => $customerAddresses,
'formatedAddressFieldsValuesList' => $formatedAddressFieldsValuesList));
/* Setting default addresses for cart */
if ((!isset(self::$cart->id_address_delivery) OR empty(self::$cart->id_address_delivery)) AND sizeof($customerAddresses))
{
self::$cart->id_address_delivery = (int)($customerAddresses[0]['id_address']);
$update = 1;
}
if ((!isset(self::$cart->id_address_invoice) OR empty(self::$cart->id_address_invoice)) AND sizeof($customerAddresses))
{
self::$cart->id_address_invoice = (int)($customerAddresses[0]['id_address']);
$update = 1;
}
/* Update cart addresses only if needed */
if (isset($update) AND $update)
self::$cart->update();
/* If delivery address is valid in cart, assign it to Smarty */
if (isset(self::$cart->id_address_delivery))
{
$deliveryAddress = new Address((int)(self::$cart->id_address_delivery));
if (Validate::isLoadedObject($deliveryAddress) AND ($deliveryAddress->id_customer == $customer->id))
self::$smarty->assign('delivery', $deliveryAddress);
}
/* If invoice address is valid in cart, assign it to Smarty */
if (isset(self::$cart->id_address_invoice))
{
$invoiceAddress = new Address((int)(self::$cart->id_address_invoice));
if (Validate::isLoadedObject($invoiceAddress) AND ($invoiceAddress->id_customer == $customer->id))
self::$smarty->assign('invoice', $invoiceAddress);
}
}
if ($oldMessage = Message::getMessageByCartId((int)(self::$cart->id)))
self::$smarty->assign('oldMessage', $oldMessage['message']);
}
protected function _assignCarrier()
{
$customer = new Customer((int)(self::$cookie->id_customer));
$address = new Address((int)(self::$cart->id_address_delivery));
$id_zone = Address::getZoneById((int)($address->id));
$carriers = Carrier::getCarriersForOrder($id_zone, $customer->getGroups());
self::$smarty->assign(array(
'checked' => $this->_setDefaultCarrierSelection($carriers),
'carriers' => $carriers,
'default_carrier' => (int)(Configuration::get('PS_CARRIER_DEFAULT'))
));
self::$smarty->assign(array(
'HOOK_EXTRACARRIER' => Module::hookExec('extraCarrier', array('address' => $address)),
'HOOK_BEFORECARRIER' => Module::hookExec('beforeCarrier', array('carriers' => $carriers))
));
}
protected function _assignWrappingAndTOS()
{
// Wrapping fees
$wrapping_fees = (float)(Configuration::get('PS_GIFT_WRAPPING_PRICE'));
$wrapping_fees_tax = new Tax((int)(Configuration::get('PS_GIFT_WRAPPING_TAX')));
$wrapping_fees_tax_inc = $wrapping_fees * (1 + (((float)($wrapping_fees_tax->rate) / 100)));
// TOS
$cms = new CMS((int)(Configuration::get('PS_CONDITIONS_CMS_ID')), (int)(self::$cookie->id_lang));
$this->link_conditions = self::$link->getCMSLink($cms, $cms->link_rewrite, true);
if (!strpos($this->link_conditions, '?'))
$this->link_conditions .= '?content_only=1';
else
$this->link_conditions .= '&content_only=1';
self::$smarty->assign(array(
'checkedTOS' => (int)(self::$cookie->checkedTOS),
'recyclablePackAllowed' => (int)(Configuration::get('PS_RECYCLABLE_PACK')),
'giftAllowed' => (int)(Configuration::get('PS_GIFT_WRAPPING')),
'cms_id' => (int)(Configuration::get('PS_CONDITIONS_CMS_ID')),
'conditions' => (int)(Configuration::get('PS_CONDITIONS')),
'link_conditions' => $this->link_conditions,
'recyclable' => (int)(self::$cart->recyclable),
'gift_wrapping_price' => (float)(Configuration::get('PS_GIFT_WRAPPING_PRICE')),
'total_wrapping_cost' => Tools::convertPrice($wrapping_fees_tax_inc, new Currency((int)(self::$cookie->id_currency))),
'total_wrapping_tax_exc_cost' => Tools::convertPrice($wrapping_fees, new Currency((int)(self::$cookie->id_currency)))));
}
protected function _assignPayment()
{
self::$smarty->assign(array(
'HOOK_TOP_PAYMENT' => Module::hookExec('paymentTop'),
'HOOK_PAYMENT' => Module::hookExecPayment()
));
}
/**
* Set id_carrier to 0 (no shipping price)
*
*/
protected function _setNoCarrier()
{
self::$cart->id_carrier = 0;
self::$cart->update();
}
/**
* Decides what the default carrier is and update the cart with it
*
* @param array $carriers
* @return number the id of the default carrier
*/
protected function _setDefaultCarrierSelection($carriers)
{
self::$cart->id_carrier = Carrier::getDefaultCarrierSelection($carriers, (int)self::$cart->id_carrier);
if (self::$cart->update())
return self::$cart->id_carrier;
return 0;
}
}