This commit is contained in:
rGaillard
2011-07-06 10:54:11 +00:00
parent 4d2c770c6f
commit 8fc7f11014
5398 changed files with 482149 additions and 0 deletions
+303
View File
@@ -0,0 +1,303 @@
<?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: 7095 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if(Configuration::get('VATNUMBER_MANAGEMENT') AND file_exists(_PS_MODULE_DIR_.'vatnumber/vatnumber.php'))
include_once(_PS_MODULE_DIR_.'vatnumber/vatnumber.php');
class AddressControllerCore extends FrontController
{
protected $_address;
public function __construct()
{
$this->auth = true;
$this->guestAllowed = true;
$this->php_self = 'address.php';
$this->authRedirection = 'addresses.php';
$this->ssl = true;
parent::__construct();
}
public function preProcess()
{
parent::preProcess();
if ($back = Tools::getValue('back'))
self::$smarty->assign('back', Tools::safeOutput($back));
if ($mod = Tools::getValue('mod'))
self::$smarty->assign('mod', Tools::safeOutput($mod));
if (Tools::isSubmit('ajax') AND Tools::isSubmit('type'))
{
if (Tools::getValue('type') == 'delivery')
$id_address = isset(self::$cart->id_address_delivery) ? (int)self::$cart->id_address_delivery : 0;
elseif (Tools::getValue('type') == 'invoice')
$id_address = (isset(self::$cart->id_address_invoice) AND self::$cart->id_address_invoice != self::$cart->id_address_delivery) ? (int)self::$cart->id_address_invoice : 0;
else
exit;
}
else
$id_address = (int)Tools::getValue('id_address', 0);
if ($id_address)
{
$this->_address = new Address((int)$id_address);
if (Validate::isLoadedObject($this->_address) AND Customer::customerHasAddress((int)(self::$cookie->id_customer), (int)($id_address)))
{
if (Tools::isSubmit('delete'))
{
if (self::$cart->id_address_invoice == $this->_address->id)
unset(self::$cart->id_address_invoice);
if (self::$cart->id_address_delivery == $this->_address->id)
unset(self::$cart->id_address_delivery);
if ($this->_address->delete())
Tools::redirect('index.php?controller=addresses');
$this->errors[] = Tools::displayError('This address cannot be deleted.');
}
self::$smarty->assign(array('address' => $this->_address, 'id_address' => (int)$id_address));
}
elseif (Tools::isSubmit('ajax'))
exit;
else
Tools::redirect('index.php?controller=addresses');
}
if (Tools::isSubmit('submitAddress'))
{
$address = new Address();
$this->errors = $address->validateControler();
$address->id_customer = (int)(self::$cookie->id_customer);
if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))
$this->errors[] = Tools::displayError('You must register at least one phone number');
if (!$country = new Country((int)$address->id_country) OR !Validate::isLoadedObject($country))
die(Tools::displayError());
/* US customer: normalize the address */
if($address->id_country == Country::getByIso('US'))
{
include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');
$normalize = new AddressStandardizationSolution;
$address->address1 = $normalize->AddressLineStandardization($address->address1);
$address->address2 = $normalize->AddressLineStandardization($address->address2);
}
$zip_code_format = $country->zip_code_format;
if ($country->need_zip_code)
{
if (($postcode = Tools::getValue('postcode')) AND $zip_code_format)
{
$zip_regexp = '/^'.$zip_code_format.'$/ui';
$zip_regexp = str_replace(' ', '( |)', $zip_regexp);
$zip_regexp = str_replace('-', '(-|)', $zip_regexp);
$zip_regexp = str_replace('N', '[0-9]', $zip_regexp);
$zip_regexp = str_replace('L', '[a-zA-Z]', $zip_regexp);
$zip_regexp = str_replace('C', $country->iso_code, $zip_regexp);
if (!preg_match($zip_regexp, $postcode))
$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $zip_code_format)));
}
elseif ($zip_code_format)
$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is required.');
elseif ($postcode AND !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode))
$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $zip_code_format)));
}
if ($country->isNeedDni() AND (!Tools::getValue('dni') OR !Validate::isDniLite(Tools::getValue('dni'))))
$this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.');
elseif (!$country->isNeedDni())
$address->dni = NULL;
if (Configuration::get('PS_TOKEN_ENABLE') == 1 AND
strcmp(Tools::getToken(false), Tools::getValue('token')) AND
self::$cookie->isLogged(true) === true)
$this->errors[] = Tools::displayError('Invalid token');
if ((int)($country->contains_states) AND !(int)($address->id_state))
$this->errors[] = Tools::displayError('This country requires a state selection.');
if (!sizeof($this->errors))
{
if (isset($id_address))
{
$country = new Country((int)($address->id_country));
if (Validate::isLoadedObject($country) AND !$country->contains_states)
$address->id_state = 0;
$address_old = new Address((int)$id_address);
if (Validate::isLoadedObject($address_old) AND Customer::customerHasAddress((int)self::$cookie->id_customer, (int)$address_old->id))
{
if ($address_old->isUsed())
{
$address_old->delete();
if (!Tools::isSubmit('ajax'))
{
$to_update = false;
if (self::$cart->id_address_invoice == $address_old->id)
{
$to_update = true;
self::$cart->id_address_invoice = 0;
}
if (self::$cart->id_address_delivery == $address_old->id)
{
$to_update = true;
self::$cart->id_address_delivery = 0;
}
if ($to_update)
self::$cart->update();
}
}
else
{
$address->id = (int)($address_old->id);
$address->date_add = $address_old->date_add;
}
}
}
elseif (self::$cookie->is_guest)
Tools::redirect('index.php?controller=addresses');
if ($result = $address->save())
{
/* In order to select this new address : order-address.tpl */
if ((bool)(Tools::getValue('select_address', false)) == true OR (Tools::isSubmit('ajax') AND Tools::getValue('type') == 'invoice'))
{
/* This new adress is for invoice_adress, select it */
self::$cart->id_address_invoice = (int)($address->id);
self::$cart->update();
}
if (Tools::isSubmit('ajax'))
{
$return = array(
'hasError' => !empty($this->errors),
'errors' => $this->errors,
'id_address_delivery' => self::$cart->id_address_delivery,
'id_address_invoice' => self::$cart->id_address_invoice
);
die(Tools::jsonEncode($return));
}
Tools::redirect($back ? ($mod ? $back.'&back='.$mod : $back) : 'addresses.php');
}
$this->errors[] = Tools::displayError('An error occurred while updating your address.');
}
}
elseif (!$id_address)
{
$customer = new Customer((int)(self::$cookie->id_customer));
if (Validate::isLoadedObject($customer))
{
$_POST['firstname'] = $customer->firstname;
$_POST['lastname'] = $customer->lastname;
}
}
if (Tools::isSubmit('ajax') AND sizeof($this->errors))
{
$return = array(
'hasError' => !empty($this->errors),
'errors' => $this->errors
);
die(Tools::jsonEncode($return));
}
}
public function setMedia()
{
parent::setMedia();
Tools::addJS(_THEME_JS_DIR_.'tools/statesManagement.js');
}
public function process()
{
parent::process();
/* Secure restriction for guest */
if (self::$cookie->is_guest)
Tools::redirect('index.php?controller=addresses');
if (Tools::isSubmit('id_country') AND Tools::getValue('id_country') != NULL AND is_numeric(Tools::getValue('id_country')))
$selectedCountry = (int)Tools::getValue('id_country');
elseif (isset($this->_address) AND isset($this->_address->id_country) AND !empty($this->_address->id_country) AND is_numeric($this->_address->id_country))
$selectedCountry = (int)$this->_address->id_country;
elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
$array = preg_split('/,|-/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (!Validate::isLanguageIsoCode($array[0]) OR !($selectedCountry = Country::getByIso($array[0])))
$selectedCountry = (int)Configuration::get('PS_COUNTRY_DEFAULT');
}
else
$selectedCountry = (int)Configuration::get('PS_COUNTRY_DEFAULT');
$countries = Country::getCountries((int)self::$cookie->id_lang, true, NULL, $this->id_current_shop);
$countriesList = '';
foreach ($countries AS $country)
$countriesList .= '<option value="'.(int)($country['id_country']).'" '.($country['id_country'] == $selectedCountry ? 'selected="selected"' : '').'>'.htmlentities($country['name'], ENT_COMPAT, 'UTF-8').'</option>';
if ((Configuration::get('VATNUMBER_MANAGEMENT') AND file_exists(_PS_MODULE_DIR_.'vatnumber/vatnumber.php')) && VatNumber::isApplicable(Configuration::get('PS_COUNTRY_DEFAULT')))
self::$smarty->assign('vat_display', 2);
else if(Configuration::get('VATNUMBER_MANAGEMENT'))
self::$smarty->assign('vat_display', 1);
else
self::$smarty->assign('vat_display', 0);
self::$smarty->assign('ajaxurl', _MODULE_DIR_);
self::$smarty->assign('vatnumber_ajax_call', (int)file_exists(_PS_MODULE_DIR_.'vatnumber/ajax.php'));
self::$smarty->assign(array(
'countries_list' => $countriesList,
'countries' => $countries,
'errors' => $this->errors,
'token' => Tools::getToken(false),
'select_address' => (int)(Tools::getValue('select_address'))
));
}
protected function _processAddressFormat()
{
$id_country = is_null($this->_address)? 0 : (int)$this->_address->id_country;
$dlv_adr_fields = AddressFormat::getOrderedAddressFields($id_country, $split_all = true);
self::$smarty->assign('ordered_adr_fields', $dlv_adr_fields);
}
public function displayHeader()
{
if (Tools::getValue('ajax') != 'true')
parent::displayHeader();
}
public function displayContent()
{
parent::displayContent();
$this->_processAddressFormat();
self::$smarty->display(_PS_THEME_DIR_.'address.tpl');
}
public function displayFooter()
{
if (Tools::getValue('ajax') != 'true')
parent::displayFooter();
}
}
+110
View File
@@ -0,0 +1,110 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AddressesControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'addresses.php';
$this->authRedirection = 'addresses.php';
$this->ssl = true;
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'addresses.css');
Tools::addJS(_THEME_JS_DIR_.'tools.js');
}
public function process()
{
parent::process();
$multipleAddressesFormated = array();
$ordered_fields = array();
$customer = new Customer((int)(self::$cookie->id_customer));
if (!Validate::isLoadedObject($customer))
die(Tools::displayError('Customer not found'));
// Retro Compatibility Theme < 1.4.1
self::$smarty->assign('addresses', $customer->getAddresses((int)(self::$cookie->id_lang)));
$customerAddressesDetailed = $customer->getAddresses((int)(self::$cookie->id_lang));
$total = 0;
foreach($customerAddressesDetailed as $addressDetailed)
{
$address = new Address($addressDetailed['id_address']);
$multipleAddressesFormated[$total]['ordered'] = AddressFormat::getOrderedAddressFields($addressDetailed['id_country']);
$multipleAddressesFormated[$total]['formated'] = AddressFormat::getFormattedAddressFieldsValues(
$address,
$multipleAddressesFormated[$total]['ordered']);
$multipleAddressesFormated[$total]['object'] = $addressDetailed;
unset($address);
++$total;
// Retro theme < 1.4.2
$ordered_fields = AddressFormat::getOrderedAddressFields($addressDetailed['id_country']);
}
// Retro theme 1.4.2
if (($key = array_search('Country:name', $ordered_fields)))
$ordered_fields[$key] = 'country';
self::$smarty->assign('addresses_style', array(
'company' => 'address_company'
,'vat_number' => 'address_company'
,'firstname' => 'address_name'
,'lastname' => 'address_name'
,'address1' => 'address_address1'
,'address2' => 'address_address2'
,'city' => 'address_city'
,'country' => 'address_country'
,'phone' => 'address_phone'
,'phone_mobile' => 'address_phone_mobile'
,'alias' => 'address_title'
));
self::$smarty->assign(array(
'multipleAddresses' => $multipleAddressesFormated,
'ordered_fields' => $ordered_fields));
unset($customer);
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'addresses.tpl');
}
}
+45
View File
@@ -0,0 +1,45 @@
<?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: 7104 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AttachmentControllerCore extends FrontController
{
public function process()
{
parent::process();
$a = new Attachment((int)(Tools::getValue('id_attachment')), (int)(self::$cookie->id_lang));
if (!$a->id)
Tools::redirect('index.php');
header('Content-Transfer-Encoding: binary');
header('Content-Type: '.$a->mime);
header('Content-Length: '.filesize(_PS_DOWNLOAD_DIR_.$a->file));
header('Content-Disposition: attachment; filename="'.utf8_decode($a->file_name).'"');
readfile(_PS_DOWNLOAD_DIR_.$a->file);
exit;
}
}
+407
View File
@@ -0,0 +1,407 @@
<?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: 7499 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AuthControllerCore extends FrontController
{
public function __construct()
{
$this->ssl = true;
$this->php_self = 'authentication.php';
parent::__construct();
}
public function preProcess()
{
parent::preProcess();
if (self::$cookie->isLogged() AND !Tools::isSubmit('ajax'))
Tools::redirect('index.php?controller=my-account');
if (Tools::getValue('create_account'))
{
$create_account = 1;
self::$smarty->assign('email_create', 1);
}
if (Tools::isSubmit('SubmitCreate'))
{
if (!Validate::isEmail($email = Tools::getValue('email_create')) OR empty($email))
$this->errors[] = Tools::displayError('Invalid e-mail address');
elseif (Customer::customerExists($email))
{
$this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.');
$_POST['email'] = $_POST['email_create'];
unset($_POST['email_create']);
}
else
{
$create_account = 1;
self::$smarty->assign('email_create', Tools::safeOutput($email));
$_POST['email'] = $email;
}
}
if (Tools::isSubmit('submitAccount') OR Tools::isSubmit('submitGuestAccount'))
{
$create_account = 1;
if (Tools::isSubmit('submitAccount'))
self::$smarty->assign('email_create', 1);
/* New Guest customer */
if (!Tools::getValue('is_new_customer', 1) AND !Configuration::get('PS_GUEST_CHECKOUT_ENABLED'))
$this->errors[] = Tools::displayError('You cannot create a guest account.');
if (!Tools::getValue('is_new_customer', 1))
$_POST['passwd'] = md5(time()._COOKIE_KEY_);
if (isset($_POST['guest_email']) AND $_POST['guest_email'])
$_POST['email'] = $_POST['guest_email'];
/* Preparing customer */
$customer = new Customer();
$lastnameAddress = $_POST['lastname'];
$firstnameAddress = $_POST['firstname'];
$_POST['lastname'] = $_POST['customer_lastname'];
$_POST['firstname'] = $_POST['customer_firstname'];
if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))
$this->errors[] = Tools::displayError('You must register at least one phone number');
$this->errors = array_unique(array_merge($this->errors, $customer->validateControler()));
/* Preparing address */
$address = new Address();
$_POST['lastname'] = $lastnameAddress;
$_POST['firstname'] = $firstnameAddress;
$address->id_customer = 1;
$this->errors = array_unique(array_merge($this->errors, $address->validateControler()));
/* US customer: normalize the address */
if($address->id_country == Country::getByIso('US'))
{
include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');
$normalize = new AddressStandardizationSolution;
$address->address1 = $normalize->AddressLineStandardization($address->address1);
$address->address2 = $normalize->AddressLineStandardization($address->address2);
}
$zip_code_format = Country::getZipCodeFormat((int)(Tools::getValue('id_country')));
if (Country::getNeedZipCode((int)(Tools::getValue('id_country'))))
{
if (($postcode = Tools::getValue('postcode')) AND $zip_code_format)
{
$zip_regexp = '/^'.$zip_code_format.'$/ui';
$zip_regexp = str_replace(' ', '( |)', $zip_regexp);
$zip_regexp = str_replace('-', '(-|)', $zip_regexp);
$zip_regexp = str_replace('N', '[0-9]', $zip_regexp);
$zip_regexp = str_replace('L', '[a-zA-Z]', $zip_regexp);
$zip_regexp = str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))), $zip_regexp);
if (!preg_match($zip_regexp, $postcode))
$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))), str_replace('N', '0', str_replace('L', 'A', $zip_code_format)));
}
elseif ($zip_code_format)
$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is required.');
elseif ($postcode AND !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode))
$this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.');
}
if (Country::isNeedDniByCountryId($address->id_country) AND (!Tools::getValue('dni') OR !Validate::isDniLite(Tools::getValue('dni'))))
$this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.');
elseif (!Country::isNeedDniByCountryId($address->id_country))
$address->dni = NULL;
if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
$this->errors[] = Tools::displayError('Invalid date of birth');
if (!sizeof($this->errors))
{
if (Customer::customerExists(Tools::getValue('email'), false, true, (int)$this->id_current_group_shop, (int)$this->id_current_shop))
$this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.');
if (Tools::isSubmit('newsletter'))
{
$customer->ip_registration_newsletter = pSQL(Tools::getRemoteAddr());
$customer->newsletter_date_add = pSQL(date('Y-m-d H:i:s'));
}
$customer->birthday = (empty($_POST['years']) ? '' : (int)($_POST['years']).'-'.(int)($_POST['months']).'-'.(int)($_POST['days']));
if (!sizeof($this->errors))
{
if (!$country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT')) OR !Validate::isLoadedObject($country))
die(Tools::displayError());
if ((int)($country->contains_states) AND !(int)($address->id_state))
$this->errors[] = Tools::displayError('This country requires a state selection.');
else
{
$customer->active = 1;
/* New Guest customer */
if (Tools::isSubmit('is_new_customer'))
$customer->is_guest = !Tools::getValue('is_new_customer', 1);
else
$customer->is_guest = 0;
if (!$customer->add())
$this->errors[] = Tools::displayError('An error occurred while creating your account.');
else
{
$address->id_customer = (int)($customer->id);
if (!$address->add())
$this->errors[] = Tools::displayError('An error occurred while creating your address.');
else
{
if (!$customer->is_guest)
{
if (!Mail::Send((int)(self::$cookie->id_lang), 'account', Mail::l('Welcome!'),
array('{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue('passwd')), $customer->email, $customer->firstname.' '.$customer->lastname))
$this->errors[] = Tools::displayError('Cannot send email');
}
self::$smarty->assign('confirmation', 1);
self::$cookie->id_customer = (int)($customer->id);
self::$cookie->customer_lastname = $customer->lastname;
self::$cookie->customer_firstname = $customer->firstname;
self::$cookie->passwd = $customer->passwd;
self::$cookie->logged = 1;
self::$cookie->email = $customer->email;
self::$cookie->is_guest = !Tools::getValue('is_new_customer', 1);
/* Update cart address */
self::$cart->secure_key = $customer->secure_key;
self::$cart->id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id));
self::$cart->id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id));
self::$cart->update();
Module::hookExec('createAccount', array(
'_POST' => $_POST,
'newCustomer' => $customer
));
if (Tools::isSubmit('ajax'))
{
$return = array(
'hasError' => !empty($this->errors),
'errors' => $this->errors,
'isSaved' => true,
'id_customer' => (int)self::$cookie->id_customer,
'id_address_delivery' => self::$cart->id_address_delivery,
'id_address_invoice' => self::$cart->id_address_invoice,
'token' => Tools::getToken(false)
);
die(Tools::jsonEncode($return));
}
if ($back = Tools::getValue('back'))
Tools::redirect($back);
Tools::redirect('index.php?controller=my-account');
}
}
}
}
}
if (sizeof($this->errors))
{
if (!Tools::getValue('is_new_customer'))
unset($_POST['passwd']);
if (Tools::isSubmit('ajax'))
{
$return = array(
'hasError' => !empty($this->errors),
'errors' => $this->errors,
'isSaved' => false,
'id_customer' => 0
);
die(Tools::jsonEncode($return));
}
}
}
if (Tools::isSubmit('SubmitLogin'))
{
Module::hookExec('beforeAuthentication');
$passwd = trim(Tools::getValue('passwd'));
$email = trim(Tools::getValue('email'));
if (empty($email))
$this->errors[] = Tools::displayError('E-mail address required');
elseif (!Validate::isEmail($email))
$this->errors[] = Tools::displayError('Invalid e-mail address');
elseif (empty($passwd))
$this->errors[] = Tools::displayError('Password is required');
elseif (Tools::strlen($passwd) > 32)
$this->errors[] = Tools::displayError('Password is too long');
elseif (!Validate::isPasswd($passwd))
$this->errors[] = Tools::displayError('Invalid password');
else
{
$customer = new Customer();
$authentication = $customer->getByEmail(trim($email), trim($passwd));
if (!$authentication OR !$customer->id)
{
/* Handle brute force attacks */
sleep(1);
$this->errors[] = Tools::displayError('Authentication failed');
}
else
{
self::$cookie->id_customer = (int)($customer->id);
self::$cookie->customer_lastname = $customer->lastname;
self::$cookie->customer_firstname = $customer->firstname;
self::$cookie->logged = 1;
self::$cookie->is_guest = $customer->isGuest();
self::$cookie->passwd = $customer->passwd;
self::$cookie->email = $customer->email;
if (Configuration::get('PS_CART_FOLLOWING') AND (empty(self::$cookie->id_cart) OR Cart::getNbProducts(self::$cookie->id_cart) == 0))
self::$cookie->id_cart = (int)Cart::lastNoneOrderedCart((int)$customer->id);
/* Update cart address */
self::$cart->id_carrier = 0;
self::$cart->id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id));
self::$cart->id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id));
self::$cart->update();
Module::hookExec('authentication');
if (!Tools::isSubmit('ajax'))
{
if ($back = Tools::getValue('back'))
Tools::redirect($back);
Tools::redirect('index.php?controller=my-account');
}
}
}
if (Tools::isSubmit('ajax'))
{
$return = array(
'hasError' => !empty($this->errors),
'errors' => $this->errors,
'token' => Tools::getToken(false)
);
die(Tools::jsonEncode($return));
}
}
if (isset($create_account))
{
/* Select the most appropriate country */
if (isset($_POST['id_country']) AND is_numeric($_POST['id_country']))
$selectedCountry = (int)($_POST['id_country']);
/* FIXME : language iso and country iso are not similar,
* maybe an associative table with country an language can resolve it,
* But for now it's a bug !
* @see : bug #6968
* @link:http://www.prestashop.com/bug_tracker/view/6968/
elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
$array = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (Validate::isLanguageIsoCode($array[0]))
{
$selectedCountry = Country::getByIso($array[0]);
if (!$selectedCountry)
$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
}
}*/
if (!isset($selectedCountry))
$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
$countries = Country::getCountries((int)(self::$cookie->id_lang), true, NULL, $this->id_current_shop);
self::$smarty->assign(array(
'countries' => $countries,
'sl_country' => (isset($selectedCountry) ? $selectedCountry : 0),
'vat_management' => Configuration::get('VATNUMBER_MANAGEMENT')
));
/* Call a hook to display more information on form */
self::$smarty->assign(array(
'HOOK_CREATE_ACCOUNT_FORM' => Module::hookExec('createAccountForm'),
'HOOK_CREATE_ACCOUNT_TOP' => Module::hookExec('createAccountTop')
));
}
/* Generate years, months and days */
if (isset($_POST['years']) AND is_numeric($_POST['years']))
$selectedYears = (int)($_POST['years']);
$years = Tools::dateYears();
if (isset($_POST['months']) AND is_numeric($_POST['months']))
$selectedMonths = (int)($_POST['months']);
$months = Tools::dateMonths();
if (isset($_POST['days']) AND is_numeric($_POST['days']))
$selectedDays = (int)($_POST['days']);
$days = Tools::dateDays();
self::$smarty->assign(array(
'years' => $years,
'sl_year' => (isset($selectedYears) ? $selectedYears : 0),
'months' => $months,
'sl_month' => (isset($selectedMonths) ? $selectedMonths : 0),
'days' => $days,
'sl_day' => (isset($selectedDays) ? $selectedDays : 0)
));
self::$smarty->assign('newsletter', (int)Module::getInstanceByName('blocknewsletter')->active);
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'authentication.css');
Tools::addJS(array(_THEME_JS_DIR_.'tools/statesManagement.js', _PS_JS_DIR_.'jquery/jquery-typewatch.pack.js'));
}
public function process()
{
parent::process();
$back = Tools::getValue('back');
$key = Tools::safeOutput(Tools::getValue('key'));
if (!empty($key))
$back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key;
if (!empty($back))
{
self::$smarty->assign('back', Tools::safeOutput($back));
if (strpos($back, 'order.php') !== false)
{
$countries = Country::getCountries((int)(self::$cookie->id_lang), true);
self::$smarty->assign(array(
'inOrderProcess' => true,
'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'),
'sl_country' => (int)Tools::getValue('id_country', Configuration::get('PS_COUNTRY_DEFAULT')),
'countries' => $countries
));
}
}
}
public function displayContent()
{
$this->processAddressFormat();
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'authentication.tpl');
}
protected function processAddressFormat()
{
$addressItems = array();
$addressFormat = AddressFormat::getOrderedAddressFields(Configuration::get('PS_COUNTRY_DEFAULT'));
$requireFormFieldsList = AddressFormat::$requireFormFieldsList;
foreach ($addressFormat as $addressline)
foreach (explode(' ', $addressline) as $addressItem)
$addressItems[] = trim($addressItem);
// Add missing require fields for a new user susbscription form
foreach($requireFormFieldsList as $fieldName)
if (!in_array($fieldName, $addressItems))
$addressItems[] = trim($fieldName);
foreach (array('inv', 'dlv') as $addressType)
self::$smarty->assign(array($addressType.'_adr_fields' => $addressFormat, $addressType.'_all_fields' => $addressItems));
}
}
+63
View File
@@ -0,0 +1,63 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class BestSalesControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = 'best-sales.php';
parent::__construct();
}
public function process()
{
$this->productSort();
$nbProducts = (int)(ProductSale::getNbSales((int)$this->id_current_shop));
$this->pagination($nbProducts);
self::$smarty->assign(array(
'products' => ProductSale::getBestSales((int)(self::$cookie->id_lang), (int)($this->p) - 1, (int)($this->n), $this->orderBy, $this->orderWay, (int)$this->id_current_shop),
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
'nbProducts' => $nbProducts,
'homeSize' => Image::getSize('home')
));
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'product_list.css');
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'best-sales.tpl');
}
}
+126
View File
@@ -0,0 +1,126 @@
<?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: 7331 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class CmsControllerCore extends FrontController
{
public $assignCase;
public $cms;
public $cms_category;
public function preProcess()
{
if ($id_cms = (int)Tools::getValue('id_cms'))
$this->cms = new CMS($id_cms, self::$cookie->id_lang);
elseif ($id_cms_category = (int)Tools::getValue('id_cms_category'))
$this->cms_category = new CMSCategory($id_cms_category, self::$cookie->id_lang);
// Automatically redirect to the canonical URL if the current in is the right one
// $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain
if ($this->cms AND $canonicalURL = self::$link->getCMSLink($this->cms))
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/i', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
if (defined(_PS_MODE_DEV_) AND _PS_MODE_DEV_ )
die('[Debug] This page has moved<br />Please use the following URL instead: <a href="'.$canonicalURL.'">'.$canonicalURL.'</a>');
Tools::redirectLink($canonicalURL);
}
if ($this->cms_category AND $canonicalURL = self::$link->getCMSCategoryLink($this->cms_category))
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/i', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
if (_PS_MODE_DEV_ )
die('[Debug] This page has moved<br />Please use the following URL instead: <a href="'.$canonicalURL.'">'.$canonicalURL.'</a>');
Tools::redirectLink($canonicalURL);
}
parent::preProcess();
/* assignCase (1 = CMS page, 2 = CMS category) */
if (Validate::isLoadedObject($this->cms) AND ($this->cms->isAssociatedToShop((int)$this->id_current_shop) AND $this->cms->active OR (Tools::getValue('adtoken') == Tools::encrypt('PreviewCMS'.$this->cms->id) AND file_exists(dirname(__FILE__).'/../'.Tools::getValue('ad').'/ajax.php'))))
$this->assignCase = 1;
elseif (Validate::isLoadedObject($this->cms_category))
$this->assignCase = 2;
else
Tools::redirect('index.php?controller=404');
if((int)(Configuration::get('PS_REWRITING_SETTINGS')))
{
$rewrite_infos = (isset($id_cms) AND !isset($id_cms_category)) ? CMS::getUrlRewriteInformations($id_cms) : CMSCategory::getUrlRewriteInformations($id_cms_category);
$default_rewrite = array();
foreach ($rewrite_infos AS $infos)
{
$arr_link = (isset($id_cms) AND !isset($id_cms_category)) ?
self::$link->getCMSLink($id_cms, $infos['link_rewrite'], $this->ssl, $infos['id_lang']) :
self::$link->getCMSCategoryLink($id_cms_category, $infos['link_rewrite'], $infos['id_lang']);
$default_rewrite[$infos['id_lang']] = $arr_link;
}
self::$smarty->assign('lang_rewrite_urls', $default_rewrite);
}
}
public function setMedia()
{
parent::setMedia();
if ($this->assignCase == 1)
Tools::addJS(_THEME_JS_DIR_.'cms.js');
Tools::addCSS(_THEME_CSS_DIR_.'cms.css');
}
public function process()
{
parent::process();
$parent_cat = new CMSCategory(1, (int)(self::$cookie->id_lang));
self::$smarty->assign('id_current_lang', self::$cookie->id_lang);
self::$smarty->assign('home_title', $parent_cat->name);
self::$smarty->assign('cgv_id', Configuration::get('PS_CONDITIONS_CMS_ID'));
if ($this->assignCase == 1)
{
self::$smarty->assign(array(
'cms' => $this->cms,
'content_only' => (int)(Tools::getValue('content_only')),
'path' => ((isset($this->cms->id_cms_category) AND $this->cms->id_cms_category) ? Tools::getFullPath((int)($this->cms->id_cms_category), $this->cms->meta_title, 'CMS') : Tools::getFullPath(1, $this->cms->meta_title, 'CMS'))
));
}
elseif ($this->assignCase == 2)
{
self::$smarty->assign(array(
'category' => $this->cms_category,
'sub_category' => $this->cms_category->getSubCategories((int)(self::$cookie->id_lang)),
'cms_pages' => CMS::getCMSPages((int)(self::$cookie->id_lang), (int)($this->cms_category->id) ),
'path' => ($this->cms_category->id !== 1) ? Tools::getPath((int)($this->cms_category->id), $this->cms_category->name, false, 'CMS') : '',
));
}
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'cms.tpl');
}
}
+258
View File
@@ -0,0 +1,258 @@
<?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: 7310 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class CartControllerCore extends FrontController
{
public function run()
{
$this->init();
$this->preProcess();
if (Tools::getValue('ajax') == 'true')
{
if (Tools::getIsset('summary'))
{
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1)
{
if (self::$cookie->id_customer)
{
$customer = new Customer((int)(self::$cookie->id_customer));
$groups = $customer->getGroups();
}
else
$groups = array(1);
if ((int)self::$cart->id_address_delivery)
$deliveryAddress = new Address((int)self::$cart->id_address_delivery);
$result = array('carriers' => Carrier::getCarriersForOrder((int)Country::getIdZone((isset($deliveryAddress) AND (int)$deliveryAddress->id) ? (int)$deliveryAddress->id_country : (int)Configuration::get('PS_COUNTRY_DEFAULT')), $groups));
}
$result['summary'] = self::$cart->getSummaryDetails();
$result['customizedDatas'] = Product::getAllCustomizedDatas((int)(self::$cart->id));
$result['HOOK_SHOPPING_CART'] = Module::hookExec('shoppingCart', $result['summary']);
$result['HOOK_SHOPPING_CART_EXTRA'] = Module::hookExec('shoppingCartExtra', $result['summary']);
die(Tools::jsonEncode($result));
}
else
$this->includeCartModule();
}
else
{
$this->setMedia();
$this->displayHeader();
$this->process();
$this->displayContent();
$this->displayFooter();
}
}
public function includeCartModule()
{
require_once(_PS_MODULE_DIR_.'/blockcart/blockcart-ajax.php');
}
public function preProcess()
{
parent::preProcess();
$orderTotal = self::$cart->getOrderTotal(true, Cart::ONLY_PRODUCTS);
$this->cartDiscounts = self::$cart->getDiscounts();
foreach ($this->cartDiscounts AS $k => $this->cartDiscount)
if ($error = self::$cart->checkDiscountValidity(new Discount((int)($this->cartDiscount['id_discount'])), $this->cartDiscounts, $orderTotal, self::$cart->getProducts(), false, (int)$this->id_current_group_shop, (int)$this->id_current_shop))
self::$cart->deleteDiscount((int)($this->cartDiscount['id_discount']));
$add = Tools::getIsset('add') ? 1 : 0;
$delete = Tools::getIsset('delete') ? 1 : 0;
if (Configuration::get('PS_TOKEN_ENABLE') == 1 &&
strcasecmp(Tools::getToken(false), strval(Tools::getValue('token'))) &&
self::$cookie->isLogged() === true)
$this->errors[] = Tools::displayError('Invalid token');
// Update the cart ONLY if $this->cookies are available, in order to avoid ghost carts created by bots
if (($add OR Tools::getIsset('update') OR $delete) AND isset($_COOKIE[self::$cookie->getName()]))
{
//get the values
$idProduct = (int)(Tools::getValue('id_product', NULL));
$idProductAttribute = (int)(Tools::getValue('id_product_attribute', Tools::getValue('ipa')));
$customizationId = (int)(Tools::getValue('id_customization', 0));
$qty = (int)(abs(Tools::getValue('qty', 1)));
if ($qty == 0)
$this->errors[] = Tools::displayError('Null quantity');
elseif (!$idProduct)
$this->errors[] = Tools::displayError('Product not found');
else
{
$producToAdd = new Product((int)($idProduct), true, (int)self::$cookie->id_lang, (int)$this->id_current_shop);
if ((!$producToAdd->id OR !$producToAdd->active) AND !$delete)
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('Product is no longer available.', false).'"]}');
else
$this->errors[] = Tools::displayError('Product is no longer available.', false);
else
{
/* Check the quantity availability */
if ($idProductAttribute AND is_numeric($idProductAttribute))
{
if (!$delete AND !$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) AND !Attribute::checkAttributeQty((int)$idProductAttribute, (int)$qty))
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('There is not enough product in stock.', false).'"]}');
else
$this->errors[] = Tools::displayError('There is not enough product in stock.');
}
elseif ($producToAdd->hasAttributes() AND !$delete)
{
$idProductAttribute = Product::getDefaultAttribute((int)$producToAdd->id, (int)$producToAdd->out_of_stock == 2 ? !(int)Configuration::get('PS_ORDER_OUT_OF_STOCK') : !(int)$producToAdd->out_of_stock);
if (!$idProductAttribute)
Tools::redirectAdmin($link->getProductLink($producToAdd));
elseif (!$delete AND !$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) AND !Attribute::checkAttributeQty((int)$idProductAttribute, (int)$qty))
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('There is not enough product in stock.', false).'"]}');
else
$this->errors[] = Tools::displayError('There is not enough product in stock.');
}
elseif (!$delete AND !$producToAdd->checkQty((int)$qty))
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('There is not enough product in stock.').'"]}');
else
$this->errors[] = Tools::displayError('There is not enough product in stock.');
/* Check vouchers compatibility */
if ($add AND (($producToAdd->specificPrice AND (float)($producToAdd->specificPrice['reduction'])) OR $producToAdd->on_sale))
{
$discounts = self::$cart->getDiscounts();
$hasUndiscountedProduct = null;
foreach($discounts as $discount)
{
if(is_null($hasUndiscountedProduct))
{
$hasUndiscountedProduct = false;
foreach(self::$cart->getProducts() as $product)
if($product['reduction_applies'] === false)
{
$hasUndiscountedProduct = true;
break;
}
}
if (!$discount['cumulable_reduction'] && ($discount['id_discount_type'] != 1 || !$hasUndiscountedProduct))
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('Cannot add this product because current voucher does not allow additional discounts.').'"]}');
else
$this->errors[] = Tools::displayError('Cannot add this product because current voucher does not allow additional discounts.');
}
}
if (!sizeof($this->errors))
{
if ($add AND $qty >= 0)
{
/* Product addition to the cart */
if (!isset(self::$cart->id) OR !self::$cart->id)
{
self::$cart->add();
if (self::$cart->id)
self::$cookie->id_cart = (int)(self::$cart->id);
}
if ($add AND !$producToAdd->hasAllRequiredCustomizableFields() AND !$customizationId)
$this->errors[] = Tools::displayError('Please fill in all required fields, then save the customization.');
if (!sizeof($this->errors))
{
$updateQuantity = self::$cart->updateQty((int)($qty), (int)($idProduct), (int)($idProductAttribute), $customizationId, Tools::getValue('op', 'up'));
if ($updateQuantity < 0)
{
/* if product has attribute, minimal quantity is set with minimal quantity of attribute*/
if ((int)$idProductAttribute)
$minimal_quantity = Attribute::getAttributeMinimalQty((int)$idProductAttribute);
else
$minimal_quantity = $producToAdd->minimal_quantity;
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('You must add', false).' '.$minimal_quantity.' '.Tools::displayError('Minimum quantity', false).'"]}');
else
$this->errors[] = Tools::displayError('You must add').' '.$minimal_quantity.' '.Tools::displayError('Minimum quantity')
.((isset($_SERVER['HTTP_REFERER']) AND basename($_SERVER['HTTP_REFERER']) == 'order.php' OR (!Tools::isSubmit('ajax') AND substr(basename($_SERVER['REQUEST_URI']),0, strlen('cart.php')) == 'cart.php')) ? ('<script language="javascript">setTimeout("history.back()",5000);</script><br />- '.
Tools::displayError('You will be redirected to your cart in a few seconds.')) : '');
}
elseif (!$updateQuantity)
{
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('You already have the maximum quantity available for this product.', false).'"]}');
else
$this->errors[] = Tools::displayError('You already have the maximum quantity available for this product.')
.((isset($_SERVER['HTTP_REFERER']) AND basename($_SERVER['HTTP_REFERER']) == 'order.php' OR (!Tools::isSubmit('ajax') AND substr(basename($_SERVER['REQUEST_URI']),0, strlen('cart.php')) == 'cart.php')) ? ('<script language="javascript">setTimeout("history.back()",5000);</script><br />- '.
Tools::displayError('You will be redirected to your cart in a few seconds.')) : '');
}
}
}
elseif ($delete)
{
if (self::$cart->deleteProduct((int)($idProduct), (int)($idProductAttribute), (int)($customizationId)))
if (!Cart::getNbProducts((int)(self::$cart->id)))
{
self::$cart->id_carrier = 0;
self::$cart->gift = 0;
self::$cart->gift_message = '';
self::$cart->update();
}
}
}
$discounts = self::$cart->getDiscounts();
foreach($discounts AS $discount)
{
$discountObj = new Discount((int)($discount['id_discount']), (int)(self::$cookie->id_lang));
if ($error = self::$cart->checkDiscountValidity($discountObj, $discounts, self::$cart->getOrderTotal(true, Cart::ONLY_PRODUCTS), self::$cart->getProducts(), false, (int)$this->id_current_group_shop, (int)$this->id_current_shop))
{
self::$cart->deleteDiscount((int)($discount['id_discount']));
self::$cart->update();
$errors[] = $error;
}
}
if (!sizeof($this->errors))
{
$queryString = Tools::safeOutput(Tools::getValue('query', NULL));
if ($queryString AND !Configuration::get('PS_CART_REDIRECT'))
Tools::redirect('index.php?controller=search&search='.$queryString);
if (isset($_SERVER['HTTP_REFERER']))
{
// Redirect to previous page
preg_match('!http(s?)://(.*)/(.*)!', $_SERVER['HTTP_REFERER'], $regs);
if (isset($regs[3]) AND !Configuration::get('PS_CART_REDIRECT') AND Tools::getValue('ajax') != 'true')
Tools::redirect($_SERVER['HTTP_REFERER']);
}
}
}
if (Tools::getValue('ajax') != 'true' AND !sizeof($this->errors))
Tools::redirect('index.php?controller=order&'.(isset($idProduct) ? 'ipa='.(int)($idProduct) : ''));
}
}
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'errors.tpl');
}
}
+170
View File
@@ -0,0 +1,170 @@
<?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: 7331 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class CategoryControllerCore extends FrontController
{
protected $category;
public function setMedia()
{
parent::setMedia();
Tools::addCSS(array(
_PS_CSS_DIR_.'jquery.cluetip.css' => 'all',
_THEME_CSS_DIR_.'scenes.css' => 'all',
_THEME_CSS_DIR_.'category.css' => 'all',
_THEME_CSS_DIR_.'product_list.css' => 'all'));
if (Configuration::get('PS_COMPARATOR_MAX_ITEM') > 0)
Tools::addJS(_THEME_JS_DIR_.'products-comparison.js');
}
public function displayHeader()
{
parent::displayHeader();
$this->productSort();
}
public function preProcess()
{
if ($id_category = (int)Tools::getValue('id_category'))
$this->category = new Category($id_category, self::$cookie->id_lang, (int)$this->id_current_shop);
if (!Validate::isLoadedObject($this->category))
{
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
}
else
{
// Automatically redirect to the canonical URL if the current in is the right one
// $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain
$currentURL = self::$link->getCategoryLink($this->category);
$currentURL = preg_replace('/[?&].*$/', '', $currentURL);
if (!preg_match('/^'.Tools::pRegexp($currentURL, '/').'([&?].*)?$/i', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
if (defined('_PS_MODE_DEV_') AND _PS_MODE_DEV_ )
die('[Debug] This page has moved<br />Please use the following URL instead: <a href="'.$currentURL.'">'.$currentURL.'</a>');
Tools::redirectLink($currentURL);
}
}
parent::preProcess();
if((int)(Configuration::get('PS_REWRITING_SETTINGS')))
if ($id_category = (int)Tools::getValue('id_category'))
{
$rewrite_infos = Category::getUrlRewriteInformations((int)$id_category);
$default_rewrite = array();
foreach ($rewrite_infos AS $infos)
$default_rewrite[$infos['id_lang']] = self::$link->getCategoryLink((int)$id_category, $infos['link_rewrite'], $infos['id_lang']);
self::$smarty->assign('lang_rewrite_urls', $default_rewrite);
}
}
public function process()
{
parent::process();
if (!($id_category = (int)Tools::getValue('id_category')) OR !Validate::isUnsignedId($id_category))
$this->errors[] = Tools::displayError('Missing category ID');
else
{
if (!Validate::isLoadedObject($this->category))
$this->errors[] = Tools::displayError('Category does not exist');
elseif (!$this->category->checkAccess((int)(self::$cookie->id_customer)))
$this->errors[] = Tools::displayError('You do not have access to this category.');
elseif (!$this->category->active)
self::$smarty->assign('category', $this->category);
else
{
$rewrited_url = self::$link->getCategoryLink((int)$this->category->id, $this->category->link_rewrite);
/* Scenes (could be externalised to another controler if you need them */
self::$smarty->assign('scenes', Scene::getScenes((int)($this->category->id), (int)(self::$cookie->id_lang), true, false));
/* Scenes images formats */
if ($sceneImageTypes = ImageType::getImagesTypes('scenes'))
{
foreach ($sceneImageTypes AS $sceneImageType)
{
if ($sceneImageType['name'] == 'thumb_scene')
$thumbSceneImageType = $sceneImageType;
elseif ($sceneImageType['name'] == 'large_scene')
$largeSceneImageType = $sceneImageType;
}
self::$smarty->assign('thumbSceneImageType', isset($thumbSceneImageType) ? $thumbSceneImageType : NULL);
self::$smarty->assign('largeSceneImageType', isset($largeSceneImageType) ? $largeSceneImageType : NULL);
}
$this->category->description = nl2br2($this->category->description);
$subCategories = $this->category->getSubCategories((int)(self::$cookie->id_lang));
self::$smarty->assign('category', $this->category);
if (isset($subCategories) AND !empty($subCategories) AND $subCategories)
{
self::$smarty->assign('subcategories', $subCategories);
self::$smarty->assign(array(
'subcategories_nb_total' => sizeof($subCategories),
'subcategories_nb_half' => ceil(sizeof($subCategories) / 2)));
}
if ($this->category->id != 1)
{
$nbProducts = $this->category->getProducts(NULL, NULL, NULL, $this->orderBy, $this->orderWay, true);
$this->pagination((int)$nbProducts);
self::$smarty->assign('nb_products', (int)$nbProducts);
$cat_products = $this->category->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay);
}
self::$smarty->assign(array(
'products' => (isset($cat_products) AND $cat_products) ? $cat_products : NULL,
'id_category' => (int)($this->category->id),
'id_category_parent' => (int)($this->category->id_parent),
'return_category_name' => Tools::safeOutput($this->category->name),
'path' => Tools::getPath((int)($this->category->id)),
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
'categorySize' => Image::getSize('category'),
'mediumSize' => Image::getSize('medium'),
'thumbSceneSize' => Image::getSize('thumb_scene'),
'homeSize' => Image::getSize('home')
));
}
}
self::$smarty->assign(array(
'allow_oosp' => (int)(Configuration::get('PS_ORDER_OUT_OF_STOCK')),
'comparator_max_item' => (int)(Configuration::get('PS_COMPARATOR_MAX_ITEM')),
'suppliers' => Supplier::getSuppliers()
));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'category.tpl');
}
}
+47
View File
@@ -0,0 +1,47 @@
<?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: 7448 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class ChangeCurrencyControllerCore extends FrontController
{
public function process()
{
parent::process();
$currency = new Currency((int)Tools::getValue('id_currency'));
if (Validate::isLoadedObject($currency) AND !$currency->deleted)
{
self::$cookie->id_currency = (int)($currency->id);
die('1');
}
die('0');
}
public function run()
{
$this->init();
$this->process();
}
}
+120
View File
@@ -0,0 +1,120 @@
<?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: 7507 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class CompareControllerCore extends FrontController
{
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'/comparator.css');
}
public function process()
{
parent::process();
$hasProduct = false;
$product_list = Tools::getValue('compare_product_list');
$postProducts = isset($product_list) ? rtrim($product_list,'|') : '';
if (!Configuration::get('PS_COMPARATOR_MAX_ITEM'))
return Tools::redirect('index.php?controller=404');
if ($postProducts)
{
$ids = array_unique(explode('|', $postProducts));
if (sizeof($ids) > 0)
{
if (sizeof($ids) > Configuration::get('PS_COMPARATOR_MAX_ITEM'))
$ids = array_slice($ids, 0, Configuration::get('PS_COMPARATOR_MAX_ITEM'));
$listProducts = array();
$listFeatures = array();
foreach ($ids AS $k => &$id)
{
$curProduct = new Product((int)$id, true, (int)self::$cookie->id_lang,(int)$this->id_current_shop);
if (!$curProduct->active OR !$curProduct->isAssociatedToShop((int)$this->id_current_shop))
{
unset($ids[$k]);
continue;
}
if (!$curProduct->active OR !$curProduct->isAssociatedToShop((int)$this->id_current_shop))
{
unset($ids[$k]);
continue;
}
if (!Validate::isLoadedObject($curProduct))
continue;
if (!$curProduct->active)
{
unset($ids[$k]);
continue;
}
foreach ($curProduct->getFrontFeatures(self::$cookie->id_lang) AS $feature)
$listFeatures[$curProduct->id][$feature['id_feature']] = $feature['value'];
$cover = Product::getCover((int)$id, (int)$this->id_current_shop);
$curProduct->id_image = Tools::htmlentitiesUTF8(Product::defineProductImage(array('id_image' => $cover['id_image'], 'id_product' => $id), self::$cookie->id_lang));
$curProduct->allow_oosp = Product::isAvailableWhenOutOfStock($curProduct->out_of_stock);
$listProducts[] = $curProduct;
}
if (sizeof($listProducts) > 0)
{
$width = 80 / sizeof($listProducts);
$hasProduct = true;
$ordered_features = Feature::getFeaturesForComparison($ids, self::$cookie->id_lang);
self::$smarty->assign(array(
'ordered_features' => $ordered_features,
'product_features' => $listFeatures,
'products' => $listProducts,
'link' => new Link(),
'width' => $width,
'homeSize' => Image::getSize('home')
));
self::$smarty->assign('HOOK_EXTRA_PRODUCT_COMPARISON', Module::hookExec('extraProductComparison', array('list_ids_product' => $ids)));
}
}
}
self::$smarty->assign('hasProduct', $hasProduct);
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'products-comparison.tpl');
}
}
+264
View File
@@ -0,0 +1,264 @@
<?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: 7471 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class ContactControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = 'contact';
$this->ssl = true;
parent::__construct();
}
public function preProcess()
{
parent::preProcess();
if (self::$cookie->isLogged())
{
self::$smarty->assign('isLogged', 1);
$customer = new Customer((int)(self::$cookie->id_customer));
if (!Validate::isLoadedObject($customer))
die(Tools::displayError('Customer not found'));
$products = array();
$orders = array();
$getOrders = Db::getInstance()->ExecuteS('
SELECT id_order
FROM '._DB_PREFIX_.'orders
WHERE id_customer = '.(int)$customer->id.' ORDER BY date_add');
foreach ($getOrders as $row)
{
$order = new Order($row['id_order']);
$date = explode(' ', $order->date_add);
$orders[$row['id_order']] = Tools::displayDate($date[0], self::$cookie->id_lang);
$tmp = $order->getProducts();
foreach ($tmp as $key => $val)
$products[$val['product_id']] = $val['product_name'];
}
$orderList = '';
foreach ($orders as $key => $val)
$orderList .= '<option value="'.$key.'" '.((int)(Tools::getValue('id_order')) == $key ? 'selected' : '').' >'.$key.' -- '.$val.'</option>';
$orderedProductList = '';
foreach ($products as $key => $val)
$orderedProductList .= '<option value="'.$key.'" '.((int)(Tools::getValue('id_product')) == $key ? 'selected' : '').' >'.$val.'</option>';
self::$smarty->assign('orderList', $orderList);
self::$smarty->assign('orderedProductList', $orderedProductList);
}
if (Tools::isSubmit('submitMessage'))
{
$fileAttachment = NULL;
if (isset($_FILES['fileUpload']['name']) AND !empty($_FILES['fileUpload']['name']) AND !empty($_FILES['fileUpload']['tmp_name']))
{
$extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg');
$filename = uniqid().substr($_FILES['fileUpload']['name'], -5);
$fileAttachment['content'] = file_get_contents($_FILES['fileUpload']['tmp_name']);
$fileAttachment['name'] = $_FILES['fileUpload']['name'];
$fileAttachment['mime'] = $_FILES['fileUpload']['type'];
}
$message = Tools::htmlentitiesUTF8(Tools::getValue('message'));
if (!($from = trim(Tools::getValue('from'))) OR !Validate::isEmail($from))
$this->errors[] = Tools::displayError('Invalid e-mail address');
elseif (!($message = nl2br2($message)))
$this->errors[] = Tools::displayError('Message cannot be blank');
elseif (!Validate::isCleanHtml($message))
$this->errors[] = Tools::displayError('Invalid message');
elseif (!($id_contact = (int)(Tools::getValue('id_contact'))) OR !(Validate::isLoadedObject($contact = new Contact((int)($id_contact), (int)(self::$cookie->id_lang)))))
$this->errors[] = Tools::displayError('Please select a subject on the list.');
elseif (!empty($_FILES['fileUpload']['name']) AND $_FILES['fileUpload']['error'] != 0)
$this->errors[] = Tools::displayError('An error occurred during the file upload');
elseif (!empty($_FILES['fileUpload']['name']) AND !in_array(substr($_FILES['fileUpload']['name'], -4), $extension) AND !in_array(substr($_FILES['fileUpload']['name'], -5), $extension))
$this->errors[] = Tools::displayError('Bad file extension');
else
{
if ((int)(self::$cookie->id_customer))
$customer = new Customer((int)(self::$cookie->id_customer));
else
{
$customer = new Customer();
$customer->getByEmail($from, NULL, (int)$this->id_current_group_shop, (int)$this->id_current_shop);
}
$contact = new Contact($id_contact, self::$cookie->id_lang);
if (!((
$id_customer_thread = (int)Tools::getValue('id_customer_thread')
AND (int)Db::getInstance()->getValue('
SELECT cm.id_customer_thread FROM '._DB_PREFIX_.'customer_thread cm
WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop='.(int)$this->id_current_shop.' AND token = \''.pSQL(Tools::getValue('token')).'\'')
) OR (
$id_customer_thread = (int)Db::getInstance()->getValue('
SELECT cm.id_customer_thread FROM '._DB_PREFIX_.'customer_thread cm
WHERE cm.email = \''.pSQL($from).'\' AND cm.id_shop='.(int)$this->id_current_shop.' AND cm.id_order = '.(int)(Tools::getValue('id_order')).'')
)))
{
$fields = Db::getInstance()->ExecuteS('
SELECT cm.id_customer_thread, cm.id_contact, cm.id_customer, cm.id_order, cm.id_product, cm.email
FROM '._DB_PREFIX_.'customer_thread cm
WHERE email = \''.pSQL($from).'\' AND cm.id_shop='.(int)$this->id_current_shop.' AND ('.
($customer->id ? 'id_customer = '.(int)($customer->id).' OR ' : '').'
id_order = '.(int)(Tools::getValue('id_order')).')');
$score = 0;
foreach ($fields as $key => $row)
{
$tmp = 0;
if ((int)$row['id_customer'] AND $row['id_customer'] != $customer->id AND $row['email'] != $from)
continue;
if ($row['id_order'] != 0 AND Tools::getValue('id_order') != $row['id_order'])
continue;
if ($row['email'] == $from)
$tmp += 4;
if ($row['id_contact'] == $id_contact)
$tmp++;
if (Tools::getValue('id_product') != 0 AND $row['id_product'] == Tools::getValue('id_product'))
$tmp += 2;
if ($tmp >= 5 AND $tmp >= $score)
{
$score = $tmp;
$id_customer_thread = $row['id_customer_thread'];
}
}
}
$old_message = Db::getInstance()->getValue('
SELECT cm.message FROM '._DB_PREFIX_.'customer_message cm
WHERE cm.id_customer_thread = '.(int)($id_customer_thread).'AND cm.id_shop='.(int)$this->id_current_shop.'
ORDER BY date_add DESC');
if ($old_message == htmlentities($message, ENT_COMPAT, 'UTF-8'))
{
self::$smarty->assign('alreadySent', 1);
$contact->email = '';
$contact->customer_service = 0;
}
if (!empty($contact->email))
{
if (Mail::Send((int)(self::$cookie->id_lang), 'contact', Mail::l('Message from contact form'), array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, ((int)(self::$cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment)
AND Mail::Send((int)(self::$cookie->id_lang), 'contact_form', Mail::l('Your message has been correctly sent'), array('{message}' => stripslashes($message)), $from))
self::$smarty->assign('confirmation', 1);
else
$this->errors[] = Tools::displayError('An error occurred while sending message.');
}
if ($contact->customer_service)
{
if ((int)$id_customer_thread)
{
$ct = new CustomerThread($id_customer_thread);
$ct->status = 'open';
$ct->id_lang = (int)self::$cookie->id_lang;
$ct->id_contact = (int)($id_contact);
if ($id_order = (int)Tools::getValue('id_order'))
$ct->id_order = $id_order;
if ($id_product = (int)Tools::getValue('id_product'))
$ct->id_product = $id_product;
$ct->update();
}
else
{
$ct = new CustomerThread();
if (isset($customer->id))
$ct->id_customer = (int)($customer->id);
$ct->id_shop = (int)$this->id_current_shop;
if ($id_order = (int)Tools::getValue('id_order'))
$ct->id_order = $id_order;
if ($id_product = (int)Tools::getValue('id_product'))
$ct->id_product = $id_product;
$ct->id_contact = (int)($id_contact);
$ct->id_lang = (int)self::$cookie->id_lang;
$ct->email = $from;
$ct->status = 'open';
$ct->token = Tools::passwdGen(12);
$ct->add();
}
if ($ct->id)
{
$cm = new CustomerMessage();
$cm->id_customer_thread = $ct->id;
$cm->message = htmlentities($message, ENT_COMPAT, 'UTF-8');
if (isset($filename) AND rename($_FILES['fileUpload']['tmp_name'], _PS_MODULE_DIR_.'../upload/'.$filename))
$cm->file_name = $filename;
$cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']);
$cm->user_agent = $_SERVER['HTTP_USER_AGENT'];
if ($cm->add())
{
if (empty($contact->email))
Mail::Send((int)(self::$cookie->id_lang), 'contact_form', Mail::l('Your message has been correctly sent'), array('{message}' => stripslashes($message)), $from);
self::$smarty->assign('confirmation', 1);
}
else
$this->errors[] = Tools::displayError('An error occurred while sending message.');
}
else
$this->errors[] = Tools::displayError('An error occurred while sending message.');
}
if (count($this->errors) > 1)
array_unique($this->errors);
}
}
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'contact-form.css');
}
public function process()
{
parent::process();
$email = Tools::safeOutput(Tools::getValue('from', ((isset(self::$cookie) AND isset(self::$cookie->email) AND Validate::isEmail(self::$cookie->email)) ? self::$cookie->email : '')));
self::$smarty->assign(array(
'errors' => $this->errors,
'email' => $email,
'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD')
));
if ($id_customer_thread = (int)Tools::getValue('id_customer_thread') AND $token = Tools::getValue('token'))
{
$customerThread = Db::getInstance()->getRow('
SELECT cm.* FROM '._DB_PREFIX_.'customer_thread cm
WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop='.(int)$this->id_current_shop.' AND token = \''.pSQL($token).'\'');
self::$smarty->assign('customerThread', $customerThread);
}
self::$smarty->assign(array('contacts' => Contact::getContacts((int)self::$cookie->id_lang, (int)$this->id_current_shop),
'message' => html_entity_decode(Tools::getValue('message'))
));
}
public function displayContent()
{
$_POST = array_merge($_POST, $_GET);
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'contact-form.tpl');
}
}
+59
View File
@@ -0,0 +1,59 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class DiscountControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'discount.php';
$this->authRedirection = 'discount.php';
$this->ssl = true;
parent::__construct();
}
public function process()
{
parent::process();
$discounts = Discount::getCustomerDiscounts((int)(self::$cookie->id_lang), (int)(self::$cookie->id_customer), true, false);
$nbDiscounts = 0;
foreach ($discounts AS $discount)
if ($discount['quantity_for_user'])
$nbDiscounts++;
self::$smarty->assign(array('nbDiscounts' => (int)($nbDiscounts), 'discount' => $discounts));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'discount.tpl');
}
}
+303
View File
@@ -0,0 +1,303 @@
<?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: 7104 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class getFileControllerCore extends FrontController
{
public function process()
{
$cookie = self::$cookie;
if ($cookie->isLoggedBack() AND Tools::getValue('file'))
{
/* Admin can directly access to file */
$filename = Tools::getValue('file');
if (!Validate::isSha1($filename))
die(Tools::displayError());
$file = _PS_DOWNLOAD_DIR_.strval(preg_replace('/\.{2,}/', '.',$filename));
$filename = ProductDownload::getFilenameFromFilename(Tools::getValue('file'));
if (empty($filename))
{
$newFileName = Tools::getValue('filename');
if (!empty($newFileName))
$filename = Tools::getValue('filename');
else
$filename = 'file';
}
if (!file_exists($file))
Tools::redirect('index.php');
}
else
{
if (!($key = Tools::getValue('key')))
$this->displayCustomError('Invalid key.');
$cookie = new Cookie('ps');
Tools::setCookieLanguage();
if (!$cookie->isLogged() AND !Tools::getValue('secure_key') AND !Tools::getValue('id_order'))
Tools::redirect('index.php?controller=authentication&back=get-file.php&key='.$key);
elseif (!$cookie->isLogged() AND Tools::getValue('secure_key') AND Tools::getValue('id_order'))
{
$order = new Order((int)Tools::getValue('id_order'));
if (!Validate::isLoadedObject($order))
$this->displayCustomError('Invalid key.');
if ($order->secure_key != Tools::getValue('secure_key'))
$this->displayCustomError('Invalid key.');
}
/* Key format: <sha1-filename>-<hashOrder> */
$tmp = explode('-', $key);
if (sizeof($tmp) != 2)
$this->displayCustomError('Invalid key.');
$filename = $tmp[0];
$hash = $tmp[1];
if (!($info = OrderDetail::getDownloadFromHash($hash)))
$this->displayCustomError('This product does not exist in our store.');
/* Product no more present in catalog */
if (!isset($info['id_product_download']) OR empty($info['id_product_download']))
$this->displayCustomError('This product has been deleted.');
if (!file_exists(_PS_DOWNLOAD_DIR_.$filename))
$this->displayCustomError('This file no longer exists.');
$now = time();
$product_deadline = strtotime($info['download_deadline']);
if ($now > $product_deadline AND $info['download_deadline'] != '0000-00-00 00:00:00')
$this->displayCustomError('The product deadline is in the past.');
$customer_deadline = strtotime($info['date_expiration']);
if ($now > $customer_deadline AND $info['date_expiration'] != '0000-00-00 00:00:00')
$this->displayCustomError('Expiration date exceeded');
if ($info['download_nb'] >= $info['nb_downloadable'] AND $info['nb_downloadable'])
$this->displayCustomError('You have reached the maximum number of allowed downloads.');
/* Access is authorized -> increment download value for the customer */
OrderDetail::incrementDownload($info['id_order_detail']);
$file = _PS_DOWNLOAD_DIR_.$info['physically_filename'];
$filename = $info['display_filename'];
}
/* Detect mime content type */
$mimeType = false;
if (function_exists('finfo_open'))
{
$finfo = @finfo_open(FILEINFO_MIME);
$mimeType = @finfo_file($finfo, $file);
@finfo_close($finfo);
}
elseif (function_exists('mime_content_type'))
$mimeType = @mime_content_type($file);
elseif (function_exists('exec'))
{
$mimeType = trim(@exec('file -b --mime-type '.escapeshellarg($file)));
if (!$mimeType)
$mimeType = trim(@exec('file --mime '.escapeshellarg($file)));
if (!$mimeType)
$mimeType = trim(@exec('file -bi '.escapeshellarg($file)));
}
if (empty($mimeType))
{
$bName = basename($filename);
$bName = explode('.', $bName);
$bName = strtolower($bName[count($bName) - 1]);
$mimeTypes = array(
'ez' => 'application/andrew-inset',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'doc' => 'application/msword',
'oda' => 'application/oda',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'bcpio' => 'application/x-bcpio',
'vcd' => 'application/x-cdlink',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'js' => 'application/x-javascript',
'skp' => 'application/x-koan',
'skd' => 'application/x-koan',
'skt' => 'application/x-koan',
'skm' => 'application/x-koan',
'latex' => 'application/x-latex',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'texi' => 'application/x-texinfo',
't' => 'application/x-troff',
'tr' => 'application/x-troff',
'roff' => 'application/x-troff',
'man' => 'application/x-troff-man',
'me' => 'application/x-troff-me',
'ms' => 'application/x-troff-ms',
'ustar' => 'application/x-ustar',
'src' => 'application/x-wais-source',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'wav' => 'audio/x-wav',
'pdb' => 'chemical/x-pdb',
'xyz' => 'chemical/x-xyz',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'ief' => 'image/ief',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'png' => 'image/png',
'tiff' => 'image/tiff',
'tif' => 'image/tif',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
'wbmp' => 'image/vnd.wap.wbmp',
'ras' => 'image/x-cmu-raster',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'rgb' => 'image/x-rgb',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'xwd' => 'image/x-windowdump',
'igs' => 'model/iges',
'iges' => 'model/iges',
'msh' => 'model/mesh',
'mesh' => 'model/mesh',
'silo' => 'model/mesh',
'wrl' => 'model/vrml',
'vrml' => 'model/vrml',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'asc' => 'text/plain',
'txt' => 'text/plain',
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'sgml' => 'text/sgml',
'sgm' => 'text/sgml',
'tsv' => 'text/tab-seperated-values',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
'etx' => 'text/x-setext',
'xml' => 'text/xml',
'xsl' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'mxu' => 'video/vnd.mpegurl',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference-xcooltalk');
if (isset($mimeTypes[$bName]))
$mimeType = $mimeTypes[$bName];
else
$mimeType = 'application/octet-stream';
}
/* Set headers for download */
header('Content-Transfer-Encoding: binary');
header('Content-Type: '.$mimeType);
header('Content-Length: '.filesize($file));
header('Content-Disposition: attachment; filename="'.$filename.'"');
ob_end_flush();
$fp = fopen($file, 'rb');
while (!feof($fp))
echo fgets($fp, 16384);
exit;
}
protected function displayCustomError($msg)
{
$translations = array(
'Invalid key.' => Tools::displayError('Invalid key.'),
'This product does not exist in our store.' => Tools::displayError('This product does not exist in our store.'),
'This product has been deleted.' => Tools::displayError('This product has been deleted.'),
'This file no longer exists.' => Tools::displayError('This file no longer exists.'),
'The product deadline is in the past.' => Tools::displayError('The product deadline is in the past.'),
'Expiration date exceeded' => Tools::displayError('Expiration date exceeded'),
'You have reached the maximum number of allowed downloads.' => Tools::displayError('You have reached the maximum number of allowed downloads.'));
?>
<script type="text/javascript">
//<![CDATA[
alert("<?php echo html_entity_decode($translations[$msg], ENT_QUOTES, 'utf-8'); ?>");
window.location.href = '<?php echo __PS_BASE_URI__ ?>';
//]]>
</script>
<?php
exit();
}
}
+147
View File
@@ -0,0 +1,147 @@
<?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: 7095 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class GuestTrackingControllerCore extends FrontController
{
public function preProcess()
{
parent::preProcess();
if (self::$cookie->isLogged())
Tools::redirect('index.php?controller=history');
}
public function process()
{
parent::process();
if ($id_order = Tools::getValue('id_order') AND $email = Tools::getValue('email'))
{
$order = new Order((int)$id_order);
if (!Validate::isLoadedObject($order))
$this->errors[] = Tools::displayError('Invalid order');
elseif (!$order->isAssociatedAtGuest($email))
$this->errors[] = Tools::displayError('Invalid order');
else
{
$customer = new Customer((int)$order->id_customer);
$id_order_state = (int)($order->getCurrentState());
$carrier = new Carrier((int)($order->id_carrier), (int)($order->id_lang));
$addressInvoice = new Address((int)($order->id_address_invoice));
$addressDelivery = new Address((int)($order->id_address_delivery));
$inv_adr_fields = AddressFormat::getOrderedAddressFields($addressInvoice->id_country);
$dlv_adr_fields = AddressFormat::getOrderedAddressFields($addressDelivery->id_country);
$invoiceAddressFormatedValues = AddressFormat::getFormattedAddressFieldsValues($addressInvoice, $inv_adr_fields);
$deliveryAddressFormatedValues = AddressFormat::getFormattedAddressFieldsValues($addressDelivery, $dlv_adr_fields);
if ($order->total_discounts > 0)
self::$smarty->assign('total_old', (float)($order->total_paid - $order->total_discounts));
$products = $order->getProducts();
$customizedDatas = Product::getAllCustomizedDatas((int)($order->id_cart));
Product::addCustomizationPrice($products, $customizedDatas);
$this->processAddressFormat($addressDelivery, $addressInvoice);
self::$smarty->assign(array(
'shop_name' => Configuration::get('PS_SHOP_NAME'),
'order' => $order,
'return_allowed' => false,
'currency' => new Currency($order->id_currency),
'order_state' => (int)($id_order_state),
'invoiceAllowed' => (int)(Configuration::get('PS_INVOICE')),
'invoice' => (OrderState::invoiceAvailable((int)($id_order_state)) AND $order->invoice_number),
'order_history' => $order->getHistory((int)(self::$cookie->id_lang), false, true),
'products' => $products,
'discounts' => $order->getDiscounts(),
'carrier' => $carrier,
'address_invoice' => $addressInvoice,
'invoiceState' => (Validate::isLoadedObject($addressInvoice) AND $addressInvoice->id_state) ? new State((int)($addressInvoice->id_state)) : false,
'address_delivery' => $addressDelivery,
'deliveryState' => (Validate::isLoadedObject($addressDelivery) AND $addressDelivery->id_state) ? new State((int)($addressDelivery->id_state)) : false,
'is_guest' => true,
'group_use_tax' => (Group::getPriceDisplayMethod($customer->id_default_group) == PS_TAX_INC),
'CUSTOMIZE_FILE' => _CUSTOMIZE_FILE_,
'CUSTOMIZE_TEXTFIELD' => _CUSTOMIZE_TEXTFIELD_,
'use_tax' => Configuration::get('PS_TAX'),
'customizedDatas' => $customizedDatas,
'invoiceAddressFormatedValues' => $invoiceAddressFormatedValues,
'deliveryAddressFormatedValues' => $deliveryAddressFormatedValues));
if ($carrier->url AND $order->shipping_number)
self::$smarty->assign('followup', str_replace('@', $order->shipping_number, $carrier->url));
self::$smarty->assign('HOOK_ORDERDETAILDISPLAYED', Module::hookExec('orderDetailDisplayed', array('order' => $order)));
Module::hookExec('OrderDetail', array('carrier' => $carrier, 'order' => $order));
if (Tools::isSubmit('submitTransformGuestToCustomer'))
{
$customer = new Customer((int)$order->id_customer);
if (!Validate::isLoadedObject($customer))
$this->errors[] = Tools::displayError('Invalid customer');
if (!$customer->transformToCustomer(self::$cookie->id_lang, Tools::getValue('password')))
$this->errors[] = Tools::displayError('An error occurred while transforming guest to customer.');
if (!Tools::getValue('password'))
$this->errors[] = Tools::displayError('Invalid password');
else
self::$smarty->assign('transformSuccess', true);
}
}
if (sizeof($this->errors))
/* Handle brute force attacks */
sleep(1);
}
self::$smarty->assign(array(
'action' => 'guest-tracking.php',
'errors' => $this->errors
));
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'history.css');
Tools::addCSS(_THEME_CSS_DIR_.'addresses.css');
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'guest-tracking.tpl');
}
private function processAddressFormat(Address $delivery, Address $invoice)
{
$inv_adr_fields = AddressFormat::getOrderedAddressFields($invoice->id_country);
$dlv_adr_fields = AddressFormat::getOrderedAddressFields($delivery->id_country);
self::$smarty->assign('inv_adr_fields', $inv_adr_fields);
self::$smarty->assign('dlv_adr_fields', $dlv_adr_fields);
}
}
+75
View File
@@ -0,0 +1,75 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class HistoryControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'history.php';
$this->authRedirection = 'history.php';
$this->ssl = true;
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'history.css');
Tools::addCSS(_THEME_CSS_DIR_.'addresses.css');
Tools::addJS(array(
_PS_JS_DIR_.'jquery/jquery.scrollTo-1.4.2-min.js',
_THEME_JS_DIR_.'history.js',
_THEME_JS_DIR_.'tools.js'));
}
public function process()
{
parent::process();
if ($orders = Order::getCustomerOrders((int)(self::$cookie->id_customer)))
foreach ($orders AS &$order)
{
$myOrder = new Order((int)($order['id_order']));
if (Validate::isLoadedObject($myOrder))
$order['virtual'] = $myOrder->isVirtual(false);
}
self::$smarty->assign(array(
'orders' => $orders,
'invoiceAllowed' => (int)(Configuration::get('PS_INVOICE')),
'slowValidation' => Tools::isSubmit('slowvalidation')
));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'history.tpl');
}
}
+129
View File
@@ -0,0 +1,129 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class IdentityControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'identity.php';
$this->authRedirection = 'identity.php';
$this->ssl = true;
parent::__construct();
}
public function preProcess()
{
parent::preProcess();
$customer = new Customer((int)(self::$cookie->id_customer));
if (sizeof($_POST))
{
$exclusion = array('secure_key', 'old_passwd', 'passwd', 'active', 'date_add', 'date_upd', 'last_passwd_gen', 'newsletter_date_add', 'id_default_group');
$fields = $customer->getFields();
foreach ($fields AS $key => $value)
if (!in_array($key, $exclusion))
$customer->{$key} = key_exists($key, $_POST) ? trim($_POST[$key]) : 0;
}
if (isset($_POST['years']) AND isset($_POST['months']) AND isset($_POST['days']))
$customer->birthday = (int)($_POST['years']).'-'.(int)($_POST['months']).'-'.(int)($_POST['days']);
if (Tools::isSubmit('submitIdentity'))
{
if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND
!(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
$this->errors[] = Tools::displayError('Invalid date of birth');
else
{
$customer->birthday = (empty($_POST['years']) ? '' : (int)($_POST['years']).'-'.(int)($_POST['months']).'-'.(int)($_POST['days']));
$_POST['old_passwd'] = trim($_POST['old_passwd']);
if (empty($_POST['old_passwd']) OR (Tools::encrypt($_POST['old_passwd']) != self::$cookie->passwd))
$this->errors[] = Tools::displayError('Your password is incorrect.');
elseif ($_POST['passwd'] != $_POST['confirmation'])
$this->errors[] = Tools::displayError('Password and confirmation do not match');
else
{
$prev_id_default_group = $customer->id_default_group;
$this->errors = $customer->validateControler();
}
if (!sizeof($this->errors))
{
$customer->id_default_group = (int)($prev_id_default_group);
$customer->firstname = Tools::ucfirst(Tools::strtolower($customer->firstname));
if (Tools::getValue('passwd'))
self::$cookie->passwd = $customer->passwd;
if ($customer->update())
{
self::$cookie->customer_lastname = $customer->lastname;
self::$cookie->customer_firstname = $customer->firstname;
self::$smarty->assign('confirmation', 1);
}
else
$this->errors[] = Tools::displayError('Cannot update information');
}
}
}
else
$_POST = array_map('stripslashes', $customer->getFields());
if ($customer->birthday)
$birthday = explode('-', $customer->birthday);
else
$birthday = array('-', '-', '-');
/* Generate years, months and days */
self::$smarty->assign(array(
'years' => Tools::dateYears(),
'sl_year' => $birthday[0],
'months' => Tools::dateMonths(),
'sl_month' => $birthday[1],
'days' => Tools::dateDays(),
'sl_day' => $birthday[2],
'errors' => $this->errors
));
self::$smarty->assign('newsletter', (int)Module::getInstanceByName('blocknewsletter')->active);
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'identity.css');
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'identity.tpl');
}
}
+48
View File
@@ -0,0 +1,48 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class IndexControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = Configuration::get('PS_HOMEPAGE_PHP_SELF');
parent::__construct();
}
public function process()
{
parent::process();
self::$smarty->assign('HOOK_HOME', Module::hookExec('home'));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'index.tpl');
}
}
+102
View File
@@ -0,0 +1,102 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class ManufacturerControllerCore extends FrontController
{
protected $manufacturer;
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'product_list.css');
}
public function process()
{
if ($id_manufacturer = Tools::getValue('id_manufacturer'))
{
$this->manufacturer = new Manufacturer((int)$id_manufacturer, self::$cookie->id_lang);
if (Validate::isLoadedObject($this->manufacturer) AND $this->manufacturer->active AND $this->manufacturer->isAssociatedToGroupShop((int)$this->id_current_shop))
{
$nbProducts = $this->manufacturer->getProducts($id_manufacturer, NULL, NULL, NULL, $this->orderBy, $this->orderWay, true);
$this->pagination((int)$nbProducts);
self::$smarty->assign(array(
'nb_products' => $nbProducts,
'products' => $this->manufacturer->getProducts($id_manufacturer, (int)self::$cookie->id_lang, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay),
'path' => ($this->manufacturer->active ? Tools::safeOutput($this->manufacturer->name) : ''),
'manufacturer' => $this->manufacturer));
}
else
{
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
$this->errors[] = Tools::displayError('Manufacturer does not exist.');
}
}
else
{
if (Configuration::get('PS_DISPLAY_SUPPLIERS'))
{
$id_current_group_shop = (int)Shop::getCurrentGroupShop();
$data = call_user_func(array('Manufacturer', 'getManufacturers'), true, (int)self::$cookie->id_lang, true, false, false, false, $id_current_group_shop);
$nbProducts = count($data);
$this->pagination($nbProducts);
$data = call_user_func(array('Manufacturer', 'getManufacturers'), true, (int)self::$cookie->id_lang, true, $this->p, $this->n, false, $id_current_group_shop);
$imgDir = _PS_MANU_IMG_DIR_;
foreach ($data AS &$item)
$item['image'] = (!file_exists($imgDir.'/'.$item['id_manufacturer'].'-medium.jpg')) ?
Language::getIsoById((int)(self::$cookie->id_lang)).'-default' : $item['id_manufacturer'];
self::$smarty->assign(array(
'pages_nb' => ceil($nbProducts / (int)($this->n)),
'nbManufacturers' => $nbProducts,
'mediumSize' => Image::getSize('medium'),
'manufacturers' => $data,
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
));
}
else
self::$smarty->assign('nbManufacturers', 0);
}
}
public function displayHeader()
{
parent::displayHeader();
$this->productSort();
}
public function displayContent()
{
parent::displayContent();
if ($this->manufacturer)
self::$smarty->display(_PS_THEME_DIR_.'manufacturer.tpl');
else
self::$smarty->display(_PS_THEME_DIR_.'manufacturer-list.tpl');
}
}
+63
View File
@@ -0,0 +1,63 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class MyAccountControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'my-account.php';
$this->authRedirection = 'my-account.php';
$this->ssl = true;
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'my-account.css');
}
public function process()
{
parent::process();
self::$smarty->assign(array(
'voucherAllowed' => (int)(Configuration::get('PS_VOUCHERS')),
'returnAllowed' => (int)(Configuration::get('PS_ORDER_RETURN'))
));
self::$smarty->assign('HOOK_CUSTOMER_ACCOUNT', Module::hookExec('customerAccount'));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'my-account.tpl');
}
}
+66
View File
@@ -0,0 +1,66 @@
<?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: 7480 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class NewProductsControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = 'new-products.php';
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'product_list.css');
}
public function process()
{
parent::process();
$this->productSort();
$nbProducts = (int)Product::getNewProducts((int)self::$cookie->id_lang, (isset($this->p) ? (int)($this->p) - 1 : NULL), (isset($this->n) ? (int)($this->n) : NULL), true);
$this->pagination($nbProducts);
self::$smarty->assign(array(
'products' => Product::getNewProducts((int)(self::$cookie->id_lang), (int)($this->p) - 1, (int)($this->n), false, $this->orderBy, $this->orderWay),
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
'nbProducts' => (int)($nbProducts),
'homeSize' => Image::getSize('home')
));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'new-products.tpl');
}
}
@@ -0,0 +1,94 @@
<?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: 7104 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class OrderConfirmationControllerCore extends FrontController
{
public $id_cart;
public $id_module;
public $id_order;
public $secure_key;
public function __construct()
{
$this->php_self = 'order-confirmation.php';
parent::__construct();
}
public function preProcess()
{
parent::preProcess();
$this->id_cart = (int)(Tools::getValue('id_cart', 0));
/* check if the cart has been made by a Guest customer, for redirect link */
if (Cart::isGuestCartByCartId($this->id_cart))
$redirectLink = 'index.php?controller=guest-tracking';
else
$redirectLink = 'index.php?controller=history';
$this->id_module = (int)(Tools::getValue('id_module', 0));
$this->id_order = Order::getOrderByCartId((int)($this->id_cart));
$this->secure_key = Tools::getValue('key', false);
if (!$this->id_order OR !$this->id_module OR !$this->secure_key OR empty($this->secure_key))
Tools::redirect($redirectLink.(Tools::isSubmit('slowvalidation') ? '&slowvalidation' : ''));
$order = new Order((int)($this->id_order));
if (!Validate::isLoadedObject($order) OR $order->id_customer != self::$cookie->id_customer OR $this->secure_key != $order->secure_key)
Tools::redirect($redirectLink);
$module = Module::getInstanceById((int)($this->id_module));
if ($order->payment != $module->displayName)
Tools::redirect($redirectLink);
}
public function process()
{
parent::process();
self::$smarty->assign(array(
'is_guest' => self::$cookie->is_guest,
'HOOK_ORDER_CONFIRMATION' => Hook::orderConfirmation((int)($this->id_order)),
'HOOK_PAYMENT_RETURN' => Hook::paymentReturn((int)($this->id_order), (int)($this->id_module))
));
if (self::$cookie->is_guest)
{
self::$smarty->assign(array(
'id_order' => $this->id_order,
'id_order_formatted' => sprintf('#%06d', $this->id_order)
));
/* If guest we clear the cookie for security reason */
self::$cookie->logout();
}
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'order-confirmation.tpl');
}
}
+296
View File
@@ -0,0 +1,296 @@
<?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: 7095 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
ControllerFactory::includeController('ParentOrderController');
class OrderControllerCore extends ParentOrderController
{
public $step;
public function init()
{
parent::init();
$this->step = (int)(Tools::getValue('step'));
if (!$this->nbProducts)
$this->step = -1;
}
public function preProcess()
{
global $isVirtualCart, $orderTotal;
parent::preProcess();
/* If some products have disappear */
if (!self::$cart->checkQuantities())
{
$this->step = 0;
$this->errors[] = Tools::displayError('An item in your cart is no longer available for this quantity, you cannot proceed with your order.');
}
/* Check minimal amount */
$currency = Currency::getCurrency((int)self::$cart->id_currency);
$orderTotal = self::$cart->getOrderTotal();
$minimalPurchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency);
if (self::$cart->getOrderTotal(false) < $minimalPurchase && $this->step != -1)
{
$this->step = 0;
$this->errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, $currency).
' '.Tools::displayError('is required in order to validate your order.');
}
if (!self::$cookie->isLogged(true) AND in_array($this->step, array(1, 2, 3)))
Tools::redirect('index.php?controller=authentication&back='.urlencode('order.php&step='.$this->step));
if ($this->nbProducts)
self::$smarty->assign('virtual_cart', $isVirtualCart);
}
public function displayHeader()
{
if (!Tools::getValue('ajax'))
parent::displayHeader();
}
public function process()
{
parent::process();
/* 4 steps to the order */
switch ((int)$this->step)
{
case -1;
self::$smarty->assign('empty', 1);
break;
case 1:
$this->_assignAddress();
break;
case 2:
if(Tools::isSubmit('processAddress'))
$this->processAddress();
$this->autoStep();
$this->_assignCarrier();
break;
case 3:
//Test that the conditions (so active) were accepted by the customer
$cgv = Tools::getValue('cgv');
if (Configuration::get('PS_CONDITIONS') AND (!Validate::isBool($cgv)))
Tools::redirect('index.php?controller=order&step=2');
if(Tools::isSubmit('processCarrier'))
$this->processCarrier();
$this->autoStep();
/* Bypass payment step if total is 0 */
if (($id_order = $this->_checkFreeOrder()) AND $id_order)
{
if (self::$cookie->is_guest)
{
$email = self::$cookie->email;
self::$cookie->logout(); // If guest we clear the cookie for security reason
Tools::redirect('index.php?controller=guest-tracking&id_order='.(int)$id_order.'&email='.urlencode($email));
}
else
Tools::redirect('index.php?controller=history');
}
$this->_assignPayment();
break;
default:
$this->_assignSummaryInformations();
break;
}
}
private function processAddressFormat()
{
$addressDelivery = new Address((int)(self::$cart->id_address_delivery));
$addressInvoice = new Address((int)(self::$cart->id_address_invoice));
$invoiceAddressFields = AddressFormat::getOrderedAddressFields($addressInvoice->id_country);
$deliveryAddressFields = AddressFormat::getOrderedAddressFields($addressDelivery->id_country);
self::$smarty->assign(array(
'inv_adr_fields' => $invoiceAddressFields,
'dlv_adr_fields' => $deliveryAddressFields));
}
public function displayContent()
{
global $currency;
parent::displayContent();
self::$smarty->assign(array(
'currencySign' => $currency->sign,
'currencyRate' => $currency->conversion_rate,
'currencyFormat' => $currency->format,
'currencyBlank' => $currency->blank,
));
switch ((int)$this->step)
{
case -1:
self::$smarty->display(_PS_THEME_DIR_.'shopping-cart.tpl');
break;
case 1:
$this->processAddressFormat();
self::$smarty->display(_PS_THEME_DIR_.'order-address.tpl');
break;
case 2:
self::$smarty->display(_PS_THEME_DIR_.'order-carrier.tpl');
break;
case 3:
self::$smarty->display(_PS_THEME_DIR_.'order-payment.tpl');
break;
default:
self::$smarty->display(_PS_THEME_DIR_.'shopping-cart.tpl');
break;
}
}
public function displayFooter()
{
if (!Tools::getValue('ajax'))
parent::displayFooter();
}
/* Order process controller */
public function autoStep()
{
global $isVirtualCart;
if ($this->step >= 2 AND (!self::$cart->id_address_delivery OR !self::$cart->id_address_invoice))
Tools::redirect('index.php?controller=order&step=1');
$delivery = new Address((int)(self::$cart->id_address_delivery));
$invoice = new Address((int)(self::$cart->id_address_invoice));
if ($delivery->deleted OR $invoice->deleted)
{
if ($delivery->deleted)
unset(self::$cart->id_address_delivery);
if ($invoice->deleted)
unset(self::$cart->id_address_invoice);
Tools::redirect('index.php?controller=order&step=1');
}
elseif ($this->step >= 3 AND !self::$cart->id_carrier AND !$isVirtualCart)
Tools::redirect('index.php?controller=order&step=2');
}
/*
* Manage address
*/
public function processAddress()
{
if (!Tools::isSubmit('id_address_delivery') OR !Address::isCountryActiveById((int)Tools::getValue('id_address_delivery')))
$this->errors[] = Tools::displayError('This address is not in a valid area.');
else
{
self::$cart->id_address_delivery = (int)(Tools::getValue('id_address_delivery'));
self::$cart->id_address_invoice = Tools::isSubmit('same') ? self::$cart->id_address_delivery : (int)(Tools::getValue('id_address_invoice'));
if (!self::$cart->update())
$this->errors[] = Tools::displayError('An error occurred while updating your cart.');
if (Tools::isSubmit('message'))
$this->_updateMessage(Tools::getValue('message'));
}
if (sizeof($this->errors))
{
if (Tools::getValue('ajax'))
die('{"hasError" : true, "errors" : ["'.implode('\',\'', $this->errors).'"]}');
$this->step = 1;
}
if (Tools::getValue('ajax'))
die(true);
}
/* Carrier step */
protected function processCarrier()
{
global $orderTotal;
parent::_processCarrier();
if (sizeof($this->errors))
{
self::$smarty->assign('errors', $this->errors);
$this->_assignCarrier();
$this->step = 2;
$this->displayContent();
include(dirname(__FILE__).'/../footer.php');
exit;
}
$orderTotal = self::$cart->getOrderTotal();
}
/* Address step */
protected function _assignAddress()
{
parent::_assignAddress();
self::$smarty->assign('cart', self::$cart);
if (self::$cookie->is_guest)
Tools::redirect('index.php?controller=order&step=2');
}
/* Carrier step */
protected function _assignCarrier()
{
global $defaultCountry;
if (isset(self::$cookie->id_customer))
$customer = new Customer((int)(self::$cookie->id_customer));
else
die(Tools::displayError('Fatal error: No customer'));
// Assign carrier
parent::_assignCarrier();
// Assign wrapping and TOS
$this->_assignWrappingAndTOS();
self::$smarty->assign('is_guest' ,(isset(self::$cookie->is_guest) ? self::$cookie->is_guest : 0));
}
/* Payment step */
protected function _assignPayment()
{
global $orderTotal;
// Redirect instead of displaying payment modules if any module are grefted on
Hook::backBeforePayment('order.php?step=3');
/* We may need to display an order summary */
self::$smarty->assign(self::$cart->getSummaryDetails());
self::$smarty->assign(array(
'total_price' => (float)($orderTotal),
'taxes_enabled' => (int)(Configuration::get('PS_TAX'))
));
self::$cookie->checkedTOS = '1';
parent::_assignPayment();
}
}
+185
View File
@@ -0,0 +1,185 @@
<?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: 7091 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class OrderDetailControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->authRedirection = 'history.php';
$this->ssl = true;
parent::__construct();
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
}
public function preProcess()
{
parent::preProcess();
if (Tools::isSubmit('submitMessage'))
{
$idOrder = (int)(Tools::getValue('id_order'));
$msgText = htmlentities(Tools::getValue('msgText'), ENT_COMPAT, 'UTF-8');
if (!$idOrder OR !Validate::isUnsignedId($idOrder))
$this->errors[] = Tools::displayError('Order is no longer valid');
elseif (empty($msgText))
$this->errors[] = Tools::displayError('Message cannot be blank');
elseif (!Validate::isMessage($msgText))
$this->errors[] = Tools::displayError('Message is invalid (HTML is not allowed)');
if(!sizeof($this->errors))
{
$order = new Order((int)($idOrder));
if (Validate::isLoadedObject($order) AND $order->id_customer == self::$cookie->id_customer)
{
$message = new Message();
$message->id_customer = (int)(self::$cookie->id_customer);
$message->message = $msgText;
$message->id_order = (int)($idOrder);
$message->private = false;
$message->add();
if (!Configuration::get('PS_MAIL_EMAIL_MESSAGE'))
$to = strval(Configuration::get('PS_SHOP_EMAIL'));
else
{
$to = new Contact((int)(Configuration::get('PS_MAIL_EMAIL_MESSAGE')));
$to = strval($to->email);
}
$toName = strval(Configuration::get('PS_SHOP_NAME'));
$customer = new Customer((int)(self::$cookie->id_customer));
if (Validate::isLoadedObject($customer))
Mail::Send((int)(self::$cookie->id_lang), 'order_customer_comment', Mail::l('Message from a customer'),
array(
'{lastname}' => $customer->lastname,
'{firstname}' => $customer->firstname,
'{email}' => $customer->email,
'{id_order}' => (int)($message->id_order),
'{message}' => $message->message),
$to, $toName, $customer->email, $customer->firstname.' '.$customer->lastname);
if (Tools::getValue('ajax') != 'true')
Tools::redirect('index.php?controller=order-detail&id_order='.(int)($idOrder));
}
else
{
$this->errors[] = Tools::displayError('Order not found');
}
}
}
if (!$id_order = (int)(Tools::getValue('id_order')) OR !Validate::isUnsignedId($id_order))
$this->errors[] = Tools::displayError('Order ID required');
else
{
$order = new Order($id_order);
if (Validate::isLoadedObject($order) AND $order->id_customer == self::$cookie->id_customer)
{
$id_order_state = (int)($order->getCurrentState());
$carrier = new Carrier((int)($order->id_carrier), (int)($order->id_lang));
$addressInvoice = new Address((int)($order->id_address_invoice));
$addressDelivery = new Address((int)($order->id_address_delivery));
// $stateInvoiceAddress = new State((int)$addressInvoice->id_state);
$inv_adr_fields = AddressFormat::getOrderedAddressFields($addressInvoice->id_country);
$dlv_adr_fields = AddressFormat::getOrderedAddressFields($addressDelivery->id_country);
$invoiceAddressFormatedValues = AddressFormat::getFormattedAddressFieldsValues($addressInvoice, $inv_adr_fields);
$deliveryAddressFormatedValues = AddressFormat::getFormattedAddressFieldsValues($addressDelivery, $dlv_adr_fields);
if ($order->total_discounts > 0)
self::$smarty->assign('total_old', (float)($order->total_paid - $order->total_discounts));
$products = $order->getProducts();
$customizedDatas = Product::getAllCustomizedDatas((int)($order->id_cart));
Product::addCustomizationPrice($products, $customizedDatas);
$customer = new Customer($order->id_customer);
self::$smarty->assign(array(
'shop_name' => strval(Configuration::get('PS_SHOP_NAME')),
'order' => $order,
'return_allowed' => (int)($order->isReturnable()),
'currency' => new Currency($order->id_currency),
'order_state' => (int)($id_order_state),
'invoiceAllowed' => (int)(Configuration::get('PS_INVOICE')),
'invoice' => (OrderState::invoiceAvailable((int)($id_order_state)) AND $order->invoice_number),
'order_history' => $order->getHistory((int)(self::$cookie->id_lang), false, true),
'products' => $products,
'discounts' => $order->getDiscounts(),
'carrier' => $carrier,
'address_invoice' => $addressInvoice,
'invoiceState' => (Validate::isLoadedObject($addressInvoice) AND $addressInvoice->id_state) ? new State((int)($addressInvoice->id_state)) : false,
'address_delivery' => $addressDelivery,
'inv_adr_fields' => $inv_adr_fields,
'dlv_adr_fields' => $dlv_adr_fields,
'invoiceAddressFormatedValues' => $invoiceAddressFormatedValues,
'deliveryAddressFormatedValues' => $deliveryAddressFormatedValues,
'deliveryState' => (Validate::isLoadedObject($addressDelivery) AND $addressDelivery->id_state) ? new State((int)($addressDelivery->id_state)) : false,
'is_guest' => false,
'messages' => Message::getMessagesByOrderId((int)($order->id)),
'CUSTOMIZE_FILE' => _CUSTOMIZE_FILE_,
'CUSTOMIZE_TEXTFIELD' => _CUSTOMIZE_TEXTFIELD_,
'use_tax' => Configuration::get('PS_TAX'),
'group_use_tax' => (Group::getPriceDisplayMethod($customer->id_default_group) == PS_TAX_INC),
'customizedDatas' => $customizedDatas));
if ($carrier->url AND $order->shipping_number)
self::$smarty->assign('followup', str_replace('@', $order->shipping_number, $carrier->url));
self::$smarty->assign('HOOK_ORDERDETAILDISPLAYED', Module::hookExec('orderDetailDisplayed', array('order' => $order)));
Module::hookExec('OrderDetail', array('carrier' => $carrier, 'order' => $order));
unset($carrier);
unset($addressInvoice);
unset($addressDelivery);
}
else
$this->errors[] = Tools::displayError('Cannot find this order');
unset($order);
}
}
public function displayHeader()
{
if (Tools::getValue('ajax') != 'true')
parent::displayHeader();
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'order-detail.tpl');
}
public function displayFooter()
{
if (Tools::getValue('ajax') != 'true')
parent::displayFooter();
}
}
+106
View File
@@ -0,0 +1,106 @@
<?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: 7095 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class OrderFollowControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'order-follow.php';
$this->authRedirection = 'order-follow.php';
$this->ssl = true;
parent::__construct();
}
public function preProcess()
{
parent::preProcess();
if (Tools::isSubmit('submitReturnMerchandise'))
{
$customizationQtyInput = Tools::getValue('customization_qty_input');
if (!$id_order = (int)(Tools::getValue('id_order')))
Tools::redirect('index.php?controller=history');
if (!$order_qte_input = Tools::getValue('order_qte_input'))
Tools::redirect('index.php?controller=order-follow&errorDetail1');
if ($customizationIds = Tools::getValue('customization_ids') AND !$customizationQtyInput)
Tools::redirect('index.php?controller=order-follow&errorDetail1');
if (!$ids_order_detail = Tools::getValue('ids_order_detail') AND !$customizationIds)
Tools::redirect('index.php?controller=order-follow&errorDetail2');
$order = new Order((int)($id_order));
if (!$order->isReturnable()) Tools::redirect('index.php?controller=order-follow&errorNotReturnable');
if ($order->id_customer != self::$cookie->id_customer)
die(Tools::displayError());
$orderReturn = new OrderReturn();
$orderReturn->id_customer = (int)(self::$cookie->id_customer);
$orderReturn->id_order = $id_order;
$orderReturn->question = strval(Tools::getValue('returnText'));
if (empty($orderReturn->question))
Tools::redirect('index.php?controller=order-follow&errorMsg');
if (!$orderReturn->checkEnoughProduct($ids_order_detail, $order_qte_input, $customizationIds, $customizationQtyInput))
Tools::redirect('index.php?controller=order-follow&errorQuantity');
$orderReturn->state = 1;
$orderReturn->add();
$orderReturn->addReturnDetail($ids_order_detail, $order_qte_input, $customizationIds, $customizationQtyInput);
Module::hookExec('orderReturn', array('orderReturn' => $orderReturn));
Tools::redirect('index.php?controller=order-follow');
}
$ordersReturn = OrderReturn::getOrdersReturn((int)(self::$cookie->id_customer));
if (Tools::isSubmit('errorQuantity'))
self::$smarty->assign('errorQuantity', true);
elseif (Tools::isSubmit('errorMsg'))
self::$smarty->assign('errorMsg', true);
elseif (Tools::isSubmit('errorDetail1'))
self::$smarty->assign('errorDetail1', true);
elseif (Tools::isSubmit('errorDetail2'))
self::$smarty->assign('errorDetail2', true);
elseif (Tools::isSubmit('errorNotReturnable'))
self::$smarty->assign('errorNotReturnable',true);
self::$smarty->assign('ordersReturn', $ordersReturn);
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'history.css');
Tools::addCSS(_THEME_CSS_DIR_.'addresses.css');
Tools::addJS(array(_PS_JS_DIR_.'jquery/jquery.scrollTo-1.4.2-min.js', _THEME_JS_DIR_.'history.js'));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'order-follow.tpl');
}
}
+457
View File
@@ -0,0 +1,457 @@
<?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: 7465 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
ControllerFactory::includeController('ParentOrderController');
class OrderOpcControllerCore extends ParentOrderController
{
public $isLogged;
public function preProcess()
{
parent::preProcess();
if ($this->nbProducts)
self::$smarty->assign('virtual_cart', false);
$this->isLogged = (bool)((int)(self::$cookie->id_customer) AND Customer::customerIdExistsStatic((int)(self::$cookie->id_customer)));
if (self::$cart->nbProducts())
{
if (Tools::isSubmit('ajax'))
{
if (Tools::isSubmit('method'))
{
switch (Tools::getValue('method'))
{
case 'updateMessage':
if (Tools::isSubmit('message'))
{
$txtMessage = urldecode(Tools::getValue('message'));
$this->_updateMessage($txtMessage);
if (sizeof($this->errors))
die('{"hasError" : true, "errors" : ["'.implode('\',\'', $this->errors).'"]}');
die(true);
}
break;
case 'updateCarrierAndGetPayments':
if (Tools::isSubmit('id_carrier') AND Tools::isSubmit('recyclable') AND Tools::isSubmit('gift') AND Tools::isSubmit('gift_message'))
{
if ($this->_processCarrier())
{
$return = array(
'summary' => self::$cart->getSummaryDetails(),
'HOOK_TOP_PAYMENT' => Module::hookExec('paymentTop'),
'HOOK_PAYMENT' => $this->_getPaymentMethods()
);
die(Tools::jsonEncode($return));
}
else
$this->errors[] = Tools::displayError('Error occurred updating cart.');
if (sizeof($this->errors))
die('{"hasError" : true, "errors" : ["'.implode('\',\'', $this->errors).'"]}');
exit;
}
break;
case 'updateTOSStatusAndGetPayments':
if (Tools::isSubmit('checked'))
{
self::$cookie->checkedTOS = (int)(Tools::getValue('checked'));
die(Tools::jsonEncode(array(
'HOOK_TOP_PAYMENT' => Module::hookExec('paymentTop'),
'HOOK_PAYMENT' => $this->_getPaymentMethods()
)));
}
break;
case 'getCarrierList':
die(Tools::jsonEncode($this->_getCarrierList()));
break;
case 'editCustomer':
if (!$this->isLogged)
exit;
$customer = new Customer((int)self::$cookie->id_customer);
if (Tools::getValue('years'))
$customer->birthday = (int)Tools::getValue('years').'-'.(int)Tools::getValue('months').'-'.(int)Tools::getValue('days');
$_POST['lastname'] = $_POST['customer_lastname'];
$_POST['firstname'] = $_POST['customer_firstname'];
$this->errors = $customer->validateControler();
$customer->newsletter = (int)Tools::isSubmit('newsletter');
$customer->optin = (int)Tools::isSubmit('optin');
$return = array(
'hasError' => !empty($this->errors),
'errors' => $this->errors,
'id_customer' => (int)self::$cookie->id_customer,
'token' => Tools::getToken(false)
);
if (!sizeof($this->errors))
$return['isSaved'] = (bool)$customer->update();
else
$return['isSaved'] = false;
die(Tools::jsonEncode($return));
break;
case 'getAddressBlockAndCarriersAndPayments':
if (self::$cookie->isLogged())
{
// check if customer have addresses
if (!Customer::getAddressesTotalById((int)(self::$cookie->id_customer)))
die(Tools::jsonEncode(array('no_address' => 1)));
if (file_exists(_PS_MODULE_DIR_.'blockuserinfo/blockuserinfo.php'))
{
include_once(_PS_MODULE_DIR_.'blockuserinfo/blockuserinfo.php');
$blockUserInfo = new BlockUserInfo();
}
self::$smarty->assign('isVirtualCart', self::$cart->isVirtualCart());
$this->_processAddressFormat();
$this->_assignAddress();
// 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)));
$return = array(
'summary' => self::$cart->getSummaryDetails(),
'order_opc_adress' => self::$smarty->fetch(_PS_THEME_DIR_.'order-address.tpl'),
'block_user_info' => (isset($blockUserInfo) ? $blockUserInfo->hookTop(array()) : ''),
'carrier_list' => $this->_getCarrierList(),
'HOOK_TOP_PAYMENT' => Module::hookExec('paymentTop'),
'HOOK_PAYMENT' => $this->_getPaymentMethods(),
'no_address' => 0,
'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int)(self::$cookie->id_currency))))
);
die(Tools::jsonEncode($return));
}
die(Tools::displayError());
break;
case 'makeFreeOrder':
/* Bypass payment step if total is 0 */
if (($id_order = $this->_checkFreeOrder()) AND $id_order)
{
$email = self::$cookie->email;
if (self::$cookie->is_guest)
self::$cookie->logout(); // If guest we clear the cookie for security reason
die('freeorder:'.$id_order.':'.$email);
}
exit;
break;
case 'updateAddressesSelected':
if (self::$cookie->isLogged(true))
{
$id_address_delivery = (int)(Tools::getValue('id_address_delivery'));
$id_address_invoice = (int)(Tools::getValue('id_address_invoice'));
$address_delivery = new Address((int)(Tools::getValue('id_address_delivery')));
$address_invoice = ((int)(Tools::getValue('id_address_delivery')) == (int)(Tools::getValue('id_address_invoice')) ? $address_delivery : new Address((int)(Tools::getValue('id_address_invoice'))));
if ($address_delivery->id_customer != self::$cookie->id_customer || $address_invoice->id_customer != self::$cookie->id_customer)
$this->errors[] = Tools::displayError('This address is not yours.');
elseif (!Address::isCountryActiveById((int)(Tools::getValue('id_address_delivery'))))
$this->errors[] = Tools::displayError('This address is not in a valid area.');
elseif (!Validate::isLoadedObject($address_delivery) OR !Validate::isLoadedObject($address_invoice) OR $address_invoice->deleted OR $address_delivery->deleted)
$this->errors[] = Tools::displayError('This address is invalid.');
else
{
self::$cart->id_address_delivery = (int)(Tools::getValue('id_address_delivery'));
self::$cart->id_address_invoice = Tools::isSubmit('same') ? self::$cart->id_address_delivery : (int)(Tools::getValue('id_address_invoice'));
if (!self::$cart->update())
$this->errors[] = Tools::displayError('An error occurred while updating your cart.');
if (!sizeof($this->errors))
{
if (self::$cookie->id_customer)
{
$customer = new Customer((int)(self::$cookie->id_customer));
$groups = $customer->getGroups();
}
else
$groups = array(1);
$result = $this->_getCarrierList();
// 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)));
$result = array_merge($result, array(
'summary' => self::$cart->getSummaryDetails(),
'HOOK_TOP_PAYMENT' => Module::hookExec('paymentTop'),
'HOOK_PAYMENT' => $this->_getPaymentMethods(),
'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int)(self::$cookie->id_currency))))
));
die(Tools::jsonEncode($result));
}
}
if (sizeof($this->errors))
die('{"hasError" : true, "errors" : ["'.implode('\',\'', $this->errors).'"]}');
}
die(Tools::displayError());
break;
default:
exit;
}
}
exit;
}
}
elseif (Tools::isSubmit('ajax'))
exit;
}
public function setMedia()
{
parent::setMedia();
// Adding CSS style sheet
Tools::addCSS(_THEME_CSS_DIR_.'order-opc.css');
// Adding JS files
Tools::addJS(_THEME_JS_DIR_.'order-opc.js');
Tools::addJs(_PS_JS_DIR_.'jquery/jquery.scrollTo-1.4.2-min.js');
Tools::addJS(_THEME_JS_DIR_.'tools/statesManagement.js');
}
public function process()
{
// SHOPPING CART
$this->_assignSummaryInformations();
// WRAPPING AND TOS
$this->_assignWrappingAndTOS();
$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
$countries = Country::getCountries((int)(self::$cookie->id_lang), true);
self::$smarty->assign(array(
'isLogged' => $this->isLogged,
'isGuest' => isset(self::$cookie->is_guest) ? self::$cookie->is_guest : 0,
'countries' => $countries,
'sl_country' => isset($selectedCountry) ? $selectedCountry : 0,
'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'),
'errorCarrier' => Tools::displayError('You must choose a carrier before', false),
'errorTOS' => Tools::displayError('You must accept terms of service before', false),
'isPaymentStep' => (bool)(isset($_GET['isPaymentStep']) AND $_GET['isPaymentStep'])
));
$years = Tools::dateYears();
$months = Tools::dateMonths();
$days = Tools::dateDays();
self::$smarty->assign(array(
'years' => $years,
'months' => $months,
'days' => $days,
));
/* Load guest informations */
if ($this->isLogged AND self::$cookie->is_guest)
self::$smarty->assign('guestInformations', $this->_getGuestInformations());
if ($this->isLogged)
$this->_assignAddress(); // ADDRESS
// CARRIER
$this->_assignCarrier();
// PAYMENT
$this->_assignPayment();
Tools::safePostVars();
self::$smarty->assign('newsletter', (int)Module::getInstanceByName('blocknewsletter')->active);
}
public function displayHeader()
{
if (Tools::getValue('ajax') != 'true')
parent::displayHeader();
}
public function displayContent()
{
parent::displayContent();
$this->_processAddressFormat();
self::$smarty->display(_PS_THEME_DIR_.'order-opc.tpl');
}
public function displayFooter()
{
if (Tools::getValue('ajax') != 'true')
parent::displayFooter();
}
protected function _getGuestInformations()
{
$customer = new Customer((int)(self::$cookie->id_customer));
$address_delivery = new Address((int)self::$cart->id_address_delivery);
if ($customer->birthday)
$birthday = explode('-', $customer->birthday);
else
$birthday = array('0', '0', '0');
return array(
'id_customer' => (int)(self::$cookie->id_customer),
'email' => Tools::htmlentitiesUTF8($customer->email),
'customer_lastname' => Tools::htmlentitiesUTF8($customer->lastname),
'customer_firstname' => Tools::htmlentitiesUTF8($customer->firstname),
'newsletter' => (int)$customer->newsletter,
'optin' => (int)$customer->optin,
'id_address_delivery' => (int)self::$cart->id_address_delivery,
'company' => Tools::htmlentitiesUTF8($address_delivery->company),
'lastname' => Tools::htmlentitiesUTF8($address_delivery->lastname),
'firstname' => Tools::htmlentitiesUTF8($address_delivery->firstname),
'vat_number' => Tools::htmlentitiesUTF8($address_delivery->vat_number),
'dni' => Tools::htmlentitiesUTF8($address_delivery->dni),
'address1' => Tools::htmlentitiesUTF8($address_delivery->address1),
'postcode' => Tools::htmlentitiesUTF8($address_delivery->postcode),
'city' => Tools::htmlentitiesUTF8($address_delivery->city),
'phone' => Tools::htmlentitiesUTF8($address_delivery->phone),
'phone_mobile' => Tools::htmlentitiesUTF8($address_delivery->phone_mobile),
'id_country' => (int)($address_delivery->id_country),
'id_state' => (int)($address_delivery->id_state),
'id_gender' => (int)$customer->id_gender,
'sl_year' => $birthday[0],
'sl_month' => $birthday[1],
'sl_day' => $birthday[2]
);
}
protected function _assignCarrier()
{
if (!$this->isLogged)
{
$carriers = Carrier::getCarriersForOrder(Country::getIdZone((int)Configuration::get('PS_COUNTRY_DEFAULT')));
self::$smarty->assign(array(
'checked' => $this->_setDefaultCarrierSelection($carriers),
'carriers' => $carriers,
'default_carrier' => (int)(Configuration::get('PS_CARRIER_DEFAULT')),
'HOOK_EXTRACARRIER' => NULL,
'HOOK_BEFORECARRIER' => Module::hookExec('beforeCarrier', array('carriers' => $carriers))
));
}
else
parent::_assignCarrier();
}
protected function _assignPayment()
{
self::$smarty->assign(array(
'HOOK_TOP_PAYMENT' => ($this->isLogged ? Module::hookExec('paymentTop') : ''),
'HOOK_PAYMENT' => $this->_getPaymentMethods()
));
}
protected function _getPaymentMethods()
{
if (!$this->isLogged)
return '<p class="warning">'.Tools::displayError('Please sign in to see payment methods').'</p>';
if (self::$cart->OrderExists())
return '<p class="warning">'.Tools::displayError('Error: this order is already validated').'</p>';
if (!self::$cart->id_customer OR !Customer::customerIdExistsStatic(self::$cart->id_customer) OR Customer::isBanned(self::$cart->id_customer))
return '<p class="warning">'.Tools::displayError('Error: no customer').'</p>';
$address_delivery = new Address(self::$cart->id_address_delivery);
$address_invoice = (self::$cart->id_address_delivery == self::$cart->id_address_invoice ? $address_delivery : new Address(self::$cart->id_address_invoice));
if (!self::$cart->id_address_delivery OR !self::$cart->id_address_invoice OR !Validate::isLoadedObject($address_delivery) OR !Validate::isLoadedObject($address_invoice) OR $address_invoice->deleted OR $address_delivery->deleted)
return '<p class="warning">'.Tools::displayError('Error: please choose an address').'</p>';
if (!self::$cart->id_carrier AND !self::$cart->isVirtualCart())
return '<p class="warning">'.Tools::displayError('Error: please choose a carrier').'</p>';
elseif (self::$cart->id_carrier != 0)
{
$carrier = new Carrier((int)(self::$cart->id_carrier));
if (!Validate::isLoadedObject($carrier) OR $carrier->deleted OR !$carrier->active)
return '<p class="warning">'.Tools::displayError('Error: the carrier is invalid').'</p>';
}
if (!self::$cart->id_currency)
return '<p class="warning">'.Tools::displayError('Error: no currency has been selected').'</p>';
if (!self::$cookie->checkedTOS AND Configuration::get('PS_CONDITIONS'))
return '<p class="warning">'.Tools::displayError('Please accept Terms of Service').'</p>';
/* If some products have disappear */
if (!self::$cart->checkQuantities())
return '<p class="warning">'.Tools::displayError('An item in your cart is no longer available, you cannot proceed with your order.').'</p>';
/* Check minimal amount */
$currency = Currency::getCurrency((int)self::$cart->id_currency);
$minimalPurchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency);
if (self::$cart->getOrderTotal(false) < $minimalPurchase)
return '<p class="warning">'.Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, $currency).
' '.Tools::displayError('is required in order to validate your order.').'</p>';
/* Bypass payment step if total is 0 */
if (self::$cart->getOrderTotal() <= 0)
return '<p class="center"><input type="button" class="exclusive_large" name="confirmOrder" id="confirmOrder" value="'.Tools::displayError('I confirm my order').'" onclick="confirmFreeOrder();" /></p>';
$return = Module::hookExecPayment();
if (!$return)
return '<p class="warning">'.Tools::displayError('No payment method is available').'</p>';
return $return;
}
protected function _getCarrierList()
{
$address_delivery = new Address(self::$cart->id_address_delivery);
if (self::$cookie->id_customer)
{
$customer = new Customer((int)(self::$cookie->id_customer));
$groups = $customer->getGroups();
}
else
$groups = array(1);
if (!Address::isCountryActiveById((int)(self::$cart->id_address_delivery)))
$this->errors[] = Tools::displayError('This address is not in a valid area.');
elseif (!Validate::isLoadedObject($address_delivery) OR $address_delivery->deleted)
$this->errors[] = Tools::displayError('This address is invalid.');
else
{
$carriers = Carrier::getCarriersForOrder((int)Address::getZoneById((int)($address_delivery->id)), $groups);
$result = array(
'checked' => $this->_setDefaultCarrierSelection($carriers),
'carriers' => $carriers,
'HOOK_BEFORECARRIER' => Module::hookExec('beforeCarrier', array('carriers' => $carriers)),
'HOOK_EXTRACARRIER' => Module::hookExec('extraCarrier', array('address' => $address_delivery))
);
return $result;
}
if (sizeof($this->errors))
return array(
'hasError' => true,
'errors' => $this->errors
);
}
protected function _processAddressFormat()
{
$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
$address_delivery = new Address((int)self::$cart->id_address_delivery);
$address_invoice = new Address((int)self::$cart->id_address_invoice);
$inv_adr_fields = AddressFormat::getOrderedAddressFields((int)$address_delivery->id_country);
$dlv_adr_fields = AddressFormat::getOrderedAddressFields((int)$address_invoice->id_country);
$inv_all_fields = array();
$dlv_all_fields = array();
foreach (array('inv','dlv') as $adr_type)
{
foreach (${$adr_type.'_adr_fields'} as $fields_line)
foreach(explode(' ',$fields_line) as $field_item)
${$adr_type.'_all_fields'}[] = trim($field_item);
self::$smarty->assign($adr_type.'_adr_fields', ${$adr_type.'_adr_fields'});
self::$smarty->assign($adr_type.'_all_fields', ${$adr_type.'_all_fields'});
}
}
}
+99
View File
@@ -0,0 +1,99 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class OrderReturnControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'order-return.php';
$this->authRedirection = 'order-follow.php';
$this->ssl = true;
parent::__construct();
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
}
public function preProcess()
{
parent::preProcess();
if (!isset($_GET['id_order_return']) OR !Validate::isUnsignedId($_GET['id_order_return']))
$this->errors[] = Tools::displayError('Order ID required');
else
{
$orderRet = new OrderReturn((int)($_GET['id_order_return']));
if (Validate::isLoadedObject($orderRet) AND $orderRet->id_customer == self::$cookie->id_customer)
{
$order = new Order((int)($orderRet->id_order));
if (Validate::isLoadedObject($order))
{
$state = new OrderReturnState((int)($orderRet->state));
self::$smarty->assign(array(
'orderRet' => $orderRet,
'order' => $order,
'state_name' => $state->name[(int)(self::$cookie->id_lang)],
'return_allowed' => false,
'products' => OrderReturn::getOrdersReturnProducts((int)($orderRet->id), $order),
'returnedCustomizations' => OrderReturn::getReturnedCustomizedProducts((int)($orderRet->id_order)),
'customizedDatas' => Product::getAllCustomizedDatas((int)($order->id_cart))
));
}
else
$this->errors[] = Tools::displayError('Cannot find this order return');
}
else
$this->errors[] = Tools::displayError('Cannot find this order return');
}
self::$smarty->assign(array(
'errors' => $this->errors,
'nbdaysreturn' => (int)(Configuration::get('PS_ORDER_RETURN_NB_DAYS'))
));
}
public function displayHeader()
{
if (Tools::getValue('ajax') != 'true')
parent::displayHeader();
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'order-return.tpl');
}
public function displayFooter()
{
if (Tools::getValue('ajax') != 'true')
parent::displayFooter();
}
}
+60
View File
@@ -0,0 +1,60 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class OrderSlipControllerCore extends FrontController
{
public function __construct()
{
$this->auth = true;
$this->php_self = 'order-slip.php';
$this->authRedirection = 'order-slip.php';
$this->ssl = true;
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'history.css');
Tools::addCSS(_THEME_CSS_DIR_.'addresses.css');
Tools::addJS(array(_PS_JS_DIR_.'jquery/jquery.scrollTo-1.4.2-min.js',_THEME_JS_DIR_.'history.js'));
}
public function process()
{
parent::process();
self::$smarty->assign('ordersSlip', OrderSlip::getOrdersSlip((int)(self::$cookie->id_customer)));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'order-slip.tpl');
}
}
+35
View File
@@ -0,0 +1,35 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class PageNotFoundControllerCore extends FrontController
{
public function displayContent()
{
self::$smarty->display(_PS_THEME_DIR_.'404.tpl');
}
}
+452
View File
@@ -0,0 +1,452 @@
<?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: 7310 $
* @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 $nbProducts;
public function __construct()
{
$this->ssl = true;
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 Tools::getValue('controller') != 'order')
Tools::redirect('index.php?controller=order');
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1 AND Tools::getValue('controller') != 'order-opc')
{
if (isset($_GET['step']) AND $_GET['step'] == 3)
Tools::redirect('index.php?controller=order-opc&isPaymentStep=true');
Tools::redirect('index.php?controller=order-opc');
}
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('index.php?controller=order-opc');
Tools::redirect('index.php?controller=order');
}
}
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, (int)$this->id_current_group_shop, (int)$this->id_current_shop))
$this->errors[] = $tmpError;
}
else
$this->errors[] = Tools::displayError('Voucher name invalid.');
if (!sizeof($this->errors))
{
self::$cart->addDiscount((int)($discount->id));
Tools::redirect('index.php?controller=order-opc');
}
}
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('index.php?controller=order-opc');
}
/* 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), _PS_OS_PAYMENT_, 0, Tools::displayError('Free order', false));
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'));
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('index.php?controller=address&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')),
'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)
{
if (sizeof($carriers))
{
$defaultCarrierIsPresent = false;
if ((int)self::$cart->id_carrier != 0)
foreach ($carriers AS $carrier)
if ($carrier['id_carrier'] == (int)self::$cart->id_carrier)
$defaultCarrierIsPresent = true;
if (!$defaultCarrierIsPresent)
foreach ($carriers AS $carrier)
if ($carrier['id_carrier'] == (int)Configuration::get('PS_CARRIER_DEFAULT'))
{
$defaultCarrierIsPresent = true;
self::$cart->id_carrier = (int)$carrier['id_carrier'];
}
if (!$defaultCarrierIsPresent)
self::$cart->id_carrier = (int)$carriers[0]['id_carrier'];
}
else
self::$cart->id_carrier = 0;
if (self::$cart->update())
return self::$cart->id_carrier;
return 0;
}
}
+116
View File
@@ -0,0 +1,116 @@
<?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: 7471 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
define('MIN_PASSWD_LENGTH', 8);
class PasswordControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = 'password.php';
parent::__construct();
}
public function process()
{
parent::process();
if (Tools::isSubmit('email'))
{
if (!($email = Tools::getValue('email')) OR !Validate::isEmail($email))
$this->errors[] = Tools::displayError('Invalid e-mail address');
else
{
$customer = new Customer();
$customer->getByemail($email);
if (!Validate::isLoadedObject($customer))
$this->errors[] = Tools::displayError('There is no account registered to this e-mail address.');
else
{
if ((strtotime($customer->last_passwd_gen.'+'.(int)($min_time = Configuration::get('PS_PASSWD_TIME_FRONT')).' minutes') - time()) > 0)
$this->errors[] = Tools::displayError('You can regenerate your password only every').' '.(int)($min_time).' '.Tools::displayError('minute(s)');
else
{
if (Mail::Send((int)(self::$cookie->id_lang), 'password_query', Mail::l('Password query confirmation'),
array('{email}' => $customer->email,
'{lastname}' => $customer->lastname,
'{firstname}' => $customer->firstname,
'{url}' => self::$link->getPageLink('password', true, NULL, 'token='.$customer->secure_key.'&id_customer='.(int)$customer->id)),
$customer->email,
$customer->firstname.' '.$customer->lastname))
self::$smarty->assign(array('confirmation' => 2, 'email' => $customer->email));
else
$this->errors[] = Tools::displayError('Error occurred when sending the e-mail.');
}
}
}
}
elseif (($token = Tools::getValue('token')) && ($id_customer = (int)(Tools::getValue('id_customer'))))
{
$email = Db::getInstance()->getValue('SELECT `email` FROM '._DB_PREFIX_.'customer c WHERE c.`secure_key` = "'.pSQL($token).'" AND c.id_customer='.(int)($id_customer));
if ($email)
{
$customer = new Customer();
$customer->getByemail($email);
if ((strtotime($customer->last_passwd_gen.'+'.(int)($min_time = Configuration::get('PS_PASSWD_TIME_FRONT')).' minutes') - time()) > 0)
Tools::redirect('index.php?controller=authentication&error_regen_pwd');
else
{
$customer->passwd = Tools::encrypt($password = Tools::passwdGen((int)(MIN_PASSWD_LENGTH)));
$customer->last_passwd_gen = date('Y-m-d H:i:s', time());
if ($customer->update())
{
if (Mail::Send((int)(self::$cookie->id_lang), 'password', Mail::l('Your password'),
array('{email}' => $customer->email,
'{lastname}' => $customer->lastname,
'{firstname}' => $customer->firstname,
'{passwd}' => $password),
$customer->email,
$customer->firstname.' '.$customer->lastname))
self::$smarty->assign(array('confirmation' => 1, 'email' => $customer->email));
else
$this->errors[] = Tools::displayError('Error occurred when sending the e-mail.');
}
else
$this->errors[] = Tools::displayError('An error occurred with your account and your new password cannot be sent to your e-mail. Please report your problem using the contact form.');
}
}
else
$this->errors[] = Tools::displayError('We cannot regenerate your password with the data you submitted');
}
elseif (($token = Tools::getValue('token')) || ($id_customer = Tools::getValue('id_customer')))
$this->errors[] = Tools::displayError('We cannot regenerate your password with the data you submitted');
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'password.tpl');
}
}
+50
View File
@@ -0,0 +1,50 @@
<?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: 7104 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class PdfInvoiceControllerCore extends FrontController
{
public function process()
{
parent::process();
$cookie = self::$cookie;
if (!$cookie->isLogged() AND !Tools::getValue('secure_key'))
Tools::redirect('index.php?controller=authentication&back=pdf-invoice');
if (!(int)(Configuration::get('PS_INVOICE')))
die(Tools::displayError('Invoices are disabled in this shop.'));
if (isset($_GET['id_order']) AND Validate::isUnsignedId($_GET['id_order']))
$order = new Order((int)($_GET['id_order']));
if (!isset($order) OR !Validate::isLoadedObject($order))
die(Tools::displayError('Invoice not found'));
elseif ((isset($cookie->id_customer) AND $order->id_customer != $cookie->id_customer) OR (Tools::isSubmit('secure_key') AND $order->secure_key != Tools::getValue('secure_key')))
die(Tools::displayError('Invoice not found'));
elseif (!OrderState::invoiceAvailable($order->getCurrentState()) AND !$order->invoice_number)
die(Tools::displayError('No invoice available'));
else
PDF::invoice($order);
}
}
+65
View File
@@ -0,0 +1,65 @@
<?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: 7506 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class PricesDropControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = 'prices-drop.php';
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'product_list.css');
}
public function process()
{
parent::process();
$this->productSort();
$nbProducts = Product::getPricesDrop((int)self::$cookie->id_lang, NULL, NULL, true);
$this->pagination($nbProducts);
self::$smarty->assign(array(
'products' => Product::getPricesDrop((int)self::$cookie->id_lang, (int)$this->p - 1, (int)$this->n, false, $this->orderBy, $this->orderWay, false, false, (int)$this->id_current_shop),
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
'nbProducts' => $nbProducts,
'homeSize' => Image::getSize('home')
));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'prices-drop.tpl');
}
}
+470
View File
@@ -0,0 +1,470 @@
<?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: 7331 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class ProductControllerCore extends FrontController
{
protected $product;
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'product.css');
Tools::addCSS(_PS_CSS_DIR_.'jquery.fancybox-1.3.4.css', 'screen');
Tools::addJS(array(
_PS_JS_DIR_.'jquery/jquery.fancybox-1.3.4.js',
_PS_JS_DIR_.'jquery/jquery.idTabs.modified.js',
_PS_JS_DIR_.'jquery/jquery.scrollTo-1.4.2-min.js',
_PS_JS_DIR_.'jquery/jquery.serialScroll-1.2.2-min.js',
_THEME_JS_DIR_.'tools.js',
_THEME_JS_DIR_.'product.js'));
if (Configuration::get('PS_DISPLAY_JQZOOM') == 1)
{
Tools::addCSS(_PS_CSS_DIR_.'jqzoom.css', 'screen');
Tools::addJS(_PS_JS_DIR_.'jquery/jquery.jqzoom.js');
}
}
public function preProcess()
{
if ($id_product = (int)Tools::getValue('id_product'))
$this->product = new Product($id_product, true, self::$cookie->id_lang, (int)$this->id_current_shop);
if (!Validate::isLoadedObject($this->product))
{
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
}
else
{
// Automatically redirect to the canonical URL if the current in is the right one
// $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain
if (Validate::isLoadedObject($this->product))
{
$canonicalURL = self::$link->getProductLink($this->product);
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/i', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
if (defined('_PS_MODE_DEV_') AND _PS_MODE_DEV_)
die('[Debug] This page has moved<br />Please use the following URL instead: <a href="'.$canonicalURL.'">'.$canonicalURL.'</a>');
Tools::redirectLink($canonicalURL);
}
}
}
parent::preProcess();
if((int)(Configuration::get('PS_REWRITING_SETTINGS')))
if ($id_product = (int)Tools::getValue('id_product'))
{
$rewrite_infos = Product::getUrlRewriteInformations((int)$id_product);
$default_rewrite = array();
foreach ($rewrite_infos AS $infos)
$default_rewrite[$infos['id_lang']] = self::$link->getProductLink((int)$id_product, $infos['link_rewrite'], $infos['category_rewrite'], $infos['ean13'], (int)$infos['id_lang']);
self::$smarty->assign('lang_rewrite_urls', $default_rewrite);
}
}
public function process()
{
global $cart, $currency;;
parent::process();
if (!$id_product = (int)(Tools::getValue('id_product')) OR !Validate::isUnsignedId($id_product))
$this->errors[] = Tools::displayError('Product not found');
else
{
if (!Validate::isLoadedObject($this->product) OR !$this->product->isAssociatedToShop((int)$this->id_current_shop)
OR (!$this->product->active AND (Tools::getValue('adtoken') != Tools::encrypt('PreviewProduct'.$this->product->id))
|| !file_exists(dirname(__FILE__).'/../'.Tools::getValue('ad').'/ajax.php')))
{
header('HTTP/1.1 404 page not found');
$this->errors[] = Tools::displayError('Pproduct is no longer available.');
}
elseif (!$this->product->checkAccess((int)(self::$cookie->id_customer)))
$this->errors[] = Tools::displayError('You do not have access to this product.');
else
{
self::$smarty->assign('virtual', ProductDownload::getIdFromIdProduct((int)($this->product->id)));
if (!$this->product->active)
self::$smarty->assign('adminActionDisplay', true);
/* rewrited url set */
$rewrited_url = self::$link->getProductLink($this->product->id, $this->product->link_rewrite);
/* Product pictures management */
require_once('images.inc.php');
self::$smarty->assign('customizationFormTarget', Tools::safeOutput(urldecode($_SERVER['REQUEST_URI'])));
if (Tools::isSubmit('submitCustomizedDatas'))
{
$this->pictureUpload($this->product, $cart);
$this->textRecord($this->product, $cart);
$this->formTargetFormat();
}
elseif (isset($_GET['deletePicture']) AND !$cart->deletePictureToProduct((int)($this->product->id), (int)(Tools::getValue('deletePicture'))))
$this->errors[] = Tools::displayError('An error occurred while deleting the selected picture');
$files = self::$cookie->getFamily('pictures_'.(int)($this->product->id));
$textFields = self::$cookie->getFamily('textFields_'.(int)($this->product->id));
foreach ($textFields as $key => $textField)
$textFields[$key] = str_replace('<br />', "\n", $textField);
self::$smarty->assign(array(
'pictures' => $files,
'textFields' => $textFields));
$productPriceWithTax = Product::getPriceStatic($id_product, true, NULL, 6);
if (Product::$_taxCalculationMethod == PS_TAX_INC)
$productPriceWithTax = Tools::ps_round($productPriceWithTax, 2);
$productPriceWithoutEcoTax = (float)($productPriceWithTax - $this->product->ecotax);
$configs = Configuration::getMultiple(array('PS_ORDER_OUT_OF_STOCK', 'PS_LAST_QTIES'));
/* Features / Values */
$features = $this->product->getFrontFeatures((int)(self::$cookie->id_lang));
$attachments = $this->product->getAttachments((int)(self::$cookie->id_lang));
/* Category */
$category = false;
if (isset($_SERVER['HTTP_REFERER']) AND preg_match('!^(.*)\/([0-9]+)\-(.*[^\.])|(.*)id_category=([0-9]+)(.*)$!', $_SERVER['HTTP_REFERER'], $regs) AND !strstr($_SERVER['HTTP_REFERER'], '.html'))
{
if (isset($regs[2]) AND is_numeric($regs[2]))
{
if (Product::idIsOnCategoryId((int)($this->product->id), array('0' => array('id_category' => (int)($regs[2])))))
$category = new Category((int)($regs[2]), (int)self::$cookie->id_lang, (int)$this->id_current_shop);
}
elseif (isset($regs[5]) AND is_numeric($regs[5]))
{
if (Product::idIsOnCategoryId((int)($this->product->id), array('0' => array('id_category' => (int)($regs[5])))))
$category = new Category((int)($regs[5]), (int)self::$cookie->id_lang, (int)$this->id_current_shop);
}
}
if (!$category)
$category = new Category($this->product->id_category_default, (int)self::$cookie->id_lang, (int)$this->id_current_shop);
if (isset($category) AND Validate::isLoadedObject($category))
{
self::$smarty->assign(array(
'path' => Tools::getPath((int)$category->id, $this->product->name, true),
'category' => $category,
'subCategories' => $category->getSubCategories((int)(self::$cookie->id_lang), true),
'id_category_current' => (int)($category->id),
'id_category_parent' => (int)($category->id_parent),
'return_category_name' => Tools::safeOutput($category->name)));
}
else
self::$smarty->assign('path', Tools::getPath((int)$this->product->id_category_default, $this->product->name));
self::$smarty->assign('return_link', (isset($category->id) AND $category->id) ? Tools::safeOutput(self::$link->getCategoryLink($category)) : 'javascript: history.back();');
$lang = Configuration::get('PS_LANG_DEFAULT');
if (Pack::isPack((int)($this->product->id), (int)($lang)) AND !Pack::isInStock((int)($this->product->id), (int)($lang)))
$this->product->quantity = 0;
$group_reduction = (100 - Group::getReduction((int)(self::$cookie->id_customer))) / 100;
$id_customer = (isset(self::$cookie->id_customer) AND self::$cookie->id_customer) ? (int)(self::$cookie->id_customer) : 0;
$id_group = $id_customer ? (int)(Customer::getDefaultGroupId($id_customer)) : _PS_DEFAULT_CUSTOMER_GROUP_;
$id_country = (int)($id_customer ? Customer::getCurrentCountry($id_customer) : Configuration::get('PS_COUNTRY_DEFAULT'));
// Tax
$tax = (float)(Tax::getProductTaxRate((int)($this->product->id), $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}));
self::$smarty->assign('tax_rate', $tax);
$ecotax_rate = (float) Tax::getProductEcotaxRate($cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
$ecotaxTaxAmount = Tools::ps_round($this->product->ecotax, 2);
if (Product::$_taxCalculationMethod == PS_TAX_INC && (int)Configuration::get('PS_TAX'))
$ecotaxTaxAmount = Tools::ps_round($ecotaxTaxAmount * (1 + $ecotax_rate / 100), 2);
self::$smarty->assign(array(
'quantity_discounts' => $this->formatQuantityDiscounts(SpecificPrice::getQuantityDiscounts((int)($this->product->id), (int)(Shop::getCurrentShop()), (int)(self::$cookie->id_currency), $id_country, $id_group), $this->product->getPrice(Product::$_taxCalculationMethod == PS_TAX_INC, false), (float)($tax)),
'product' => $this->product,
'ecotax_tax_inc' => $ecotaxTaxAmount,
'ecotax_tax_exc' => Tools::ps_round($this->product->ecotax, 2),
'ecotaxTax_rate' => $ecotax_rate,
'homeSize' => Image::getSize('home'),
'product_manufacturer' => new Manufacturer((int)($this->product->id_manufacturer), Configuration::get('PS_LANG_DEFAULT')),
'token' => Tools::getToken(false),
'productPriceWithoutEcoTax' => (float)($productPriceWithoutEcoTax),
'features' => $features,
'attachments' => $attachments,
'allow_oosp' => $this->product->isAvailableWhenOutOfStock((int)($this->product->out_of_stock)),
'last_qties' => (int)($configs['PS_LAST_QTIES']),
'group_reduction' => $group_reduction,
'col_img_dir' => _PS_COL_IMG_DIR_,
));
self::$smarty->assign(array(
'HOOK_EXTRA_LEFT' => Module::hookExec('extraLeft'),
'HOOK_EXTRA_RIGHT' => Module::hookExec('extraRight'),
'HOOK_PRODUCT_OOS' => Hook::productOutOfStock($this->product),
'HOOK_PRODUCT_FOOTER' => Hook::productFooter($this->product, $category),
'HOOK_PRODUCT_ACTIONS' => Module::hookExec('productActions'),
'HOOK_PRODUCT_TAB' => Module::hookExec('productTab'),
'HOOK_PRODUCT_TAB_CONTENT' => Module::hookExec('productTabContent')
));
$images = $this->product->getImages((int)self::$cookie->id_lang, (int)$this->id_current_shop);
$productImages = array();
foreach ($images AS $k => $image)
{
if ($image['cover'])
{
self::$smarty->assign('mainImage', $images[0]);
$cover = $image;
$cover['id_image'] = (Configuration::get('PS_LEGACY_IMAGES') ? ($this->product->id.'-'.$image['id_image']) : $image['id_image']);
$cover['id_image_only'] = (int)($image['id_image']);
}
$productImages[(int)($image['id_image'])] = $image;
}
if (!isset($cover))
$cover = array('id_image' => Language::getIsoById(self::$cookie->id_lang).'-default', 'legend' => 'No picture', 'title' => 'No picture');
$size = Image::getSize('large');
self::$smarty->assign(array(
'cover' => $cover,
'imgWidth' => (int)($size['width']),
'mediumSize' => Image::getSize('medium'),
'largeSize' => Image::getSize('large'),
'accessories' => $this->product->getAccessories((int)(self::$cookie->id_lang))));
if (sizeof($productImages))
self::$smarty->assign('images', $productImages);
/* Attributes / Groups & colors */
$colors = array();
$attributesGroups = $this->product->getAttributesGroups((int)(self::$cookie->id_lang)); // @todo (RM) should only get groups and not all declination ?
if (is_array($attributesGroups) AND $attributesGroups)
{
$groups = array();
$combinationImages = $this->product->getCombinationImages((int)(self::$cookie->id_lang));
foreach ($attributesGroups AS $k => $row)
{
/* Color management */
if (((isset($row['attribute_color']) AND $row['attribute_color']) OR (file_exists(_PS_COL_IMG_DIR_.$row['id_attribute'].'.jpg'))) AND $row['id_attribute_group'] == $this->product->id_color_default)
{
$colors[$row['id_attribute']]['value'] = $row['attribute_color'];
$colors[$row['id_attribute']]['name'] = $row['attribute_name'];
if (!isset($colors[$row['id_attribute']]['attributes_quantity']))
$colors[$row['id_attribute']]['attributes_quantity'] = 0;
$colors[$row['id_attribute']]['attributes_quantity'] += (int)($row['quantity']);
}
if (!isset($groups[$row['id_attribute_group']]))
{
$groups[$row['id_attribute_group']] = array(
'name' => $row['public_group_name'],
'is_color_group' => $row['is_color_group'],
'default' => -1,
);
}
$groups[$row['id_attribute_group']]['attributes'][$row['id_attribute']] = $row['attribute_name'];
if ($row['default_on'] && $groups[$row['id_attribute_group']]['default'] == -1)
$groups[$row['id_attribute_group']]['default'] = (int)($row['id_attribute']);
if (!isset($groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']]))
$groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] = 0;
$groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] += (int)($row['quantity']);
$combinations[$row['id_product_attribute']]['attributes_values'][$row['id_attribute_group']] = $row['attribute_name'];
$combinations[$row['id_product_attribute']]['attributes'][] = (int)($row['id_attribute']);
$combinations[$row['id_product_attribute']]['price'] = (float)($row['price']);
$combinations[$row['id_product_attribute']]['ecotax'] = (float)($row['ecotax']);
$combinations[$row['id_product_attribute']]['weight'] = (float)($row['weight']);
$combinations[$row['id_product_attribute']]['quantity'] = (int)($row['quantity']);
$combinations[$row['id_product_attribute']]['reference'] = $row['reference'];
$combinations[$row['id_product_attribute']]['unit_impact'] = $row['unit_price_impact'];
$combinations[$row['id_product_attribute']]['minimal_quantity'] = $row['minimal_quantity'];
$combinations[$row['id_product_attribute']]['id_image'] = isset($combinationImages[$row['id_product_attribute']][0]['id_image']) ? $combinationImages[$row['id_product_attribute']][0]['id_image'] : -1;
}
//wash attributes list (if some attributes are unavailables and if allowed to wash it)
if (!Product::isAvailableWhenOutOfStock($this->product->out_of_stock) && Configuration::get('PS_DISP_UNAVAILABLE_ATTR') == 0)
{
foreach ($groups AS &$group)
foreach ($group['attributes_quantity'] AS $key => &$quantity)
if (!$quantity)
unset($group['attributes'][$key]);
foreach ($colors AS $key => $color)
if (!$color['attributes_quantity'])
unset($colors[$key]);
}
foreach ($groups AS &$group)
natcasesort($group['attributes']);
foreach ($combinations AS $id_product_attribute => $comb)
{
$attributeList = '';
foreach ($comb['attributes'] AS $id_attribute)
$attributeList .= '\''.(int)($id_attribute).'\',';
$attributeList = rtrim($attributeList, ',');
$combinations[$id_product_attribute]['list'] = $attributeList;
}
self::$smarty->assign(array(
'groups' => $groups,
'combinaisons' => $combinations, /* Kept for compatibility purpose only */
'combinations' => $combinations,
'colors' => (sizeof($colors) AND $this->product->id_color_default) ? $colors : false,
'combinationImages' => $combinationImages));
}
self::$smarty->assign(array(
'no_tax' => Tax::excludeTaxeOption() OR !Tax::getProductTaxRate((int)$this->product->id, $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}),
'customizationFields' => $this->product->getCustomizationFields((int)(self::$cookie->id_lang))
));
// Pack management
self::$smarty->assign('packItems', $this->product->cache_is_pack ? Pack::getItemTable($this->product->id, (int)(self::$cookie->id_lang), true) : array());
self::$smarty->assign('packs', Pack::getPacksTable($this->product->id, (int)(self::$cookie->id_lang), true, 1));
}
}
self::$smarty->assign(array(
'ENT_NOQUOTES' => ENT_NOQUOTES,
'outOfStockAllowed' => (int)(Configuration::get('PS_ORDER_OUT_OF_STOCK')),
'errors' => $this->errors,
'categories' => Category::getHomeCategories((int)(self::$cookie->id_lang)),
'have_image' => Product::getCover((int)(Tools::getValue('id_product'))),
'tax_enabled' => Configuration::get('PS_TAX'),
'display_qties' => (int)(Configuration::get('PS_DISPLAY_QTIES')),
'display_ht' => !Tax::excludeTaxeOption(),
'ecotax' => (!sizeof($this->errors) AND $this->product->ecotax > 0 ? Tools::convertPrice((float)($this->product->ecotax)) : 0),
'currencySign' => $currency->sign,
'currencyRate' => $currency->conversion_rate,
'currencyFormat' => $currency->format,
'currencyBlank' => $currency->blank,
'jqZoomEnabled' => Configuration::get('PS_DISPLAY_JQZOOM')
));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'product.tpl');
}
public function pictureUpload(Product $product, Cart $cart)
{
if (!$fieldIds = $this->product->getCustomizationFieldIds())
return false;
$authorizedFileFields = array();
foreach ($fieldIds AS $fieldId)
if ($fieldId['type'] == _CUSTOMIZE_FILE_)
$authorizedFileFields[(int)($fieldId['id_customization_field'])] = 'file'.(int)($fieldId['id_customization_field']);
$indexes = array_flip($authorizedFileFields);
foreach ($_FILES AS $fieldName => $file)
if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))
{
$fileName = md5(uniqid(rand(), true));
if ($error = checkImage($file, (int)(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE'))))
$this->errors[] = $error;
if ($error OR (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)))
return false;
/* Original file */
elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName))
$this->errors[] = Tools::displayError('An error occurred during the image upload.');
/* A smaller one */
elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName.'_small', (int)(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), (int)(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT'))))
$this->errors[] = Tools::displayError('An error occurred during the image upload.');
elseif (!chmod(_PS_UPLOAD_DIR_.$fileName, 0777) OR !chmod(_PS_UPLOAD_DIR_.$fileName.'_small', 0777))
$this->errors[] = Tools::displayError('An error occurred during the image upload.');
else
$cart->addPictureToProduct((int)($this->product->id), $indexes[$fieldName], $fileName);
unlink($tmpName);
}
return true;
}
public function textRecord(Product $product, Cart $cart)
{
if (!$fieldIds = $this->product->getCustomizationFieldIds())
return false;
$authorizedTextFields = array();
foreach ($fieldIds AS $fieldId)
if ($fieldId['type'] == _CUSTOMIZE_TEXTFIELD_)
$authorizedTextFields[(int)($fieldId['id_customization_field'])] = 'textField'.(int)($fieldId['id_customization_field']);
$indexes = array_flip($authorizedTextFields);
foreach ($_POST AS $fieldName => $value)
if (in_array($fieldName, $authorizedTextFields) AND !empty($value))
{
if (!Validate::isMessage($value))
$this->errors[] = Tools::displayError('Invalid message');
else
$cart->addTextFieldToProduct((int)($this->product->id), $indexes[$fieldName], $value);
}
elseif (in_array($fieldName, $authorizedTextFields) AND empty($value))
$cart->deleteTextFieldFromProduct((int)($this->product->id), $indexes[$fieldName]);
}
public function formTargetFormat()
{
$customizationFormTarget = Tools::safeOutput(urldecode($_SERVER['REQUEST_URI']));
foreach ($_GET AS $field => $value)
if (strncmp($field, 'group_', 6) == 0)
$customizationFormTarget = preg_replace('/&group_([[:digit:]]+)=([[:digit:]]+)/', '', $customizationFormTarget);
if (isset($_POST['quantityBackup']))
self::$smarty->assign('quantityBackup', (int)($_POST['quantityBackup']));
self::$smarty->assign('customizationFormTarget', $customizationFormTarget);
}
public function formatQuantityDiscounts($specificPrices, $price, $taxRate)
{
foreach ($specificPrices AS $key => &$row)
{
$row['quantity'] = &$row['from_quantity'];
if ($row['price'] != 0) // The price may be directly set
{
$cur_price = (Product::$_taxCalculationMethod == PS_TAX_EXC ? $row['price'] : $row['price'] * (1 + $taxRate / 100));
if ($row['reduction_type'] == 'amount')
{
$cur_price = Product::$_taxCalculationMethod == PS_TAX_INC ? $cur_price - $row['reduction'] : $cur_price - ($row['reduction'] / (1 + $taxRate / 100));
} else {
$cur_price = $cur_price * ( 1 - ($row['reduction']));
}
$row['real_value'] = $price - $cur_price;
}
else
{
if ($row['reduction_type'] == 'amount')
{
$row['real_value'] = Product::$_taxCalculationMethod == PS_TAX_INC ? $row['reduction'] : $row['reduction'] / (1 + $taxRate / 100);
} else {
$row['real_value'] = $row['reduction'] * 100;
}
}
$row['nextQuantity'] = (isset($specificPrices[$key + 1]) ? (int)($specificPrices[$key + 1]['from_quantity']) : -1);
}
return $specificPrices;
}
}
+142
View File
@@ -0,0 +1,142 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class SearchControllerCore extends FrontController
{
public $instantSearch;
public $ajaxSearch;
public function __construct()
{
$this->php_self = 'search.php';
parent::__construct();
$this->instantSearch = Tools::getValue('instantSearch');
$this->ajaxSearch = Tools::getValue('ajaxSearch');
}
public function preProcess()
{
parent::preProcess();
$query = urldecode(Tools::getValue('q'));
if ($this->ajaxSearch)
{
self::$link = new Link();
$searchResults = Search::find((int)(Tools::getValue('id_lang')), $query, 1, 10, 'position', 'desc', true, true, (int)$this->id_current_shop);
foreach ($searchResults AS &$product)
$product['product_link'] = self::$link->getProductLink($product['id_product'], $product['prewrite'], $product['crewrite']);
die(Tools::jsonEncode($searchResults));
}
if ($this->instantSearch && !is_array($query))
{
$this->productSort();
$this->n = abs((int)(Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'))));
$this->p = abs((int)(Tools::getValue('p', 1)));
$search = Search::find((int)(self::$cookie->id_lang), $query, $this->p, $this->n, $this->orderBy, $this->orderWay, false, true, (int)$this->id_current_shop);
Module::hookExec('search', array('expr' => $query, 'total' => $search['total']));
$nbProducts = $search['total'];
$this->pagination($nbProducts);
self::$smarty->assign(array(
'products' => $search['result'], // DEPRECATED (since to 1.4), not use this: conflict with block_cart module
'search_products' => $search['result'],
'nbProducts' => $search['total'],
'search_query' => $query,
'instantSearch' => $this->instantSearch,
'homeSize' => Image::getSize('home')));
}
elseif ($query = Tools::getValue('search_query', Tools::getValue('ref')) AND !is_array($query))
{
$this->productSort();
$this->n = abs((int)(Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'))));
$this->p = abs((int)(Tools::getValue('p', 1)));
$search = Search::find((int)(self::$cookie->id_lang), $query, $this->p, $this->n, $this->orderBy, $this->orderWay, false, true, (int)$this->id_current_shop);
Module::hookExec('search', array('expr' => $query, 'total' => $search['total']));
$nbProducts = $search['total'];
$this->pagination($nbProducts);
self::$smarty->assign(array(
'products' => $search['result'], // DEPRECATED (since to 1.4), not use this: conflict with block_cart module
'search_products' => $search['result'],
'nbProducts' => $search['total'],
'search_query' => $query,
'homeSize' => Image::getSize('home')));
}
elseif ($tag = urldecode(Tools::getValue('tag')) AND !is_array($tag))
{
$nbProducts = (int)(Search::searchTag((int)(self::$cookie->id_lang), $tag, true));
$this->pagination($nbProducts);
$result = Search::searchTag((int)(self::$cookie->id_lang), $tag, false, $this->p, $this->n, $this->orderBy, $this->orderWay, false, true, (int)$this->id_current_shop);
Module::hookExec('search', array('expr' => $tag, 'total' => sizeof($result)));
self::$smarty->assign(array(
'search_tag' => $tag,
'products' => $result, // DEPRECATED (since to 1.4), not use this: conflict with block_cart module
'search_products' => $result,
'nbProducts' => $nbProducts,
'homeSize' => Image::getSize('home')));
}
else
{
self::$smarty->assign(array(
'products' => array(),
'search_products' => array(),
'pages_nb' => 1,
'nbProducts' => 0));
}
self::$smarty->assign('add_prod_display', Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'));
}
public function displayHeader()
{
if (!$this->instantSearch AND !$this->ajaxSearch)
parent::displayHeader();
else
self::$smarty->assign('static_token', Tools::getToken(false));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'search.tpl');
}
public function displayFooter()
{
if (!$this->instantSearch AND !$this->ajaxSearch)
parent::displayFooter();
}
public function setMedia()
{
parent::setMedia();
if (!$this->instantSearch AND !$this->ajaxSearch)
Tools::addCSS(_THEME_CSS_DIR_.'product_list.css');
}
}
+63
View File
@@ -0,0 +1,63 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class SitemapControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = 'sitemap.php';
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'sitemap.css');
Tools::addJS(_THEME_JS_DIR_.'tools/treeManagement.js');
}
public function process()
{
parent::process();
self::$smarty->assign('categoriesTree', Category::getRootCategory(NULL, (int)$this->id_current_shop)->recurseLiteCategTree(0));
self::$smarty->assign('categoriescmsTree', CMSCategory::getRecurseCategory(_USER_ID_LANG_, 1, 1, 1, (int)$this->id_current_shop));
self::$smarty->assign('voucherAllowed', (int)(Configuration::get('PS_VOUCHERS')));
$blockmanufacturer = Module::getInstanceByName('blockmanufacturer');
$blocksupplier = Module::getInstanceByName('blocksupplier');
self::$smarty->assign('display_manufacturer_link', (((int)$blockmanufacturer->id) ? true : false));
self::$smarty->assign('display_supplier_link', (((int)$blocksupplier->id) ? true : false));
self::$smarty->assign('PS_DISPLAY_SUPPLIERS', Configuration::get('PS_DISPLAY_SUPPLIERS'));
self::$smarty->assign('display_store', Configuration::get('PS_STORES_DISPLAY_SITEMAP'));
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'sitemap.tpl');
}
}
+64
View File
@@ -0,0 +1,64 @@
<?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: 7104 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class StatisticsControllerCore extends FrontController
{
public function process()
{
parent::process();
if (!isset($_POST['token']) OR !isset($_POST['type']))
die;
if ($_POST['type'] == 'navinfo')
{
if (sha1($_POST['id_guest']._COOKIE_KEY_) != $_POST['token'])
die;
$guest = new Guest((int)$_POST['id_guest']);
$guest->javascript = true;
$guest->screen_resolution_x = (int)($_POST['screen_resolution_x']);
$guest->screen_resolution_y = (int)($_POST['screen_resolution_y']);
$guest->screen_color = (int)($_POST['screen_color']);
$guest->sun_java = (int)($_POST['sun_java']);
$guest->adobe_flash = (int)($_POST['adobe_flash']);
$guest->adobe_director = (int)($_POST['adobe_director']);
$guest->apple_quicktime = (int)($_POST['apple_quicktime']);
$guest->real_player = (int)($_POST['real_player']);
$guest->windows_media = (int)($_POST['windows_media']);
$guest->update();
}
elseif ($_POST['type'] == 'pagetime')
{
if (sha1($_POST['id_connections'].$_POST['id_page'].$_POST['time_start']._COOKIE_KEY_) != $_POST['token'])
die;
if (!Validate::isInt($_POST['time']) OR $_POST['time'] <= 0)
die;
Connection::setPageTime((int)$_POST['id_connections'], (int)$_POST['id_page'], substr($_POST['time_start'], 0, 19), intval($_POST['time']));
}
}
}
+216
View File
@@ -0,0 +1,216 @@
<?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: 7471 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class StoresControllerCore extends FrontController
{
public function __construct()
{
$this->php_self = 'stores.php';
parent::__construct();
}
public function preProcess()
{
global $smarty, $cookie;
$simplifiedStoreLocator = Configuration::get('PS_STORES_SIMPLIFIED');
$distanceUnit = Configuration::get('PS_DISTANCE_UNIT');
if (!in_array($distanceUnit, array('km', 'mi')))
$distanceUnit = 'km';
if ($simplifiedStoreLocator)
{
$stores = Db::getInstance()->ExecuteS('
SELECT s.*, cl.name country, st.iso_code state
FROM '._DB_PREFIX_.'store_shop ss
LEFT JOIN '._DB_PREFIX_.'store s ON (ss.id_store = s.id_store)
LEFT JOIN '._DB_PREFIX_.'country_lang cl ON (cl.id_country = s.id_country)
LEFT JOIN '._DB_PREFIX_.'state st ON (st.id_state = s.id_state)
WHERE s.active = 1 AND cl.id_lang = '.(int)($cookie->id_lang).' AND ss.id_shop='.(int)$this->id_current_shop);
foreach ($stores AS &$store)
$store['has_picture'] = file_exists(_PS_STORE_IMG_DIR_.(int)($store['id_store']).'.jpg');
}
else
{
if (Tools::getValue('all') == 1)
{
$stores = Db::getInstance()->ExecuteS('
SELECT s.*, cl.name country, st.iso_code state
FROM '._DB_PREFIX_.'store_shop ss
LEFT JOIN '._DB_PREFIX_.'store s ON (ss.id_store = s.id_store)
LEFT JOIN '._DB_PREFIX_.'country_lang cl ON (cl.id_country = s.id_country)
LEFT JOIN '._DB_PREFIX_.'state st ON (st.id_state = s.id_state)
WHERE s.active = 1 AND cl.id_lang = '.(int)($cookie->id_lang).' AND ss.id_shop='.(int)$this->id_current_shop);
}
else
{
$distance = (int)(Tools::getValue('radius', 100));
$multiplicator = ($distanceUnit == 'km' ? 6371 : 3959);
$stores = Db::getInstance()->ExecuteS('
SELECT s.*, cl.name country, st.iso_code state,
('.(int)($multiplicator).' * acos(cos(radians('.(float)(Tools::getValue('latitude')).')) * cos(radians(latitude)) * cos(radians(longitude) - radians('.(float)(Tools::getValue('longitude')).')) + sin(radians('.(float)(Tools::getValue('latitude')).')) * sin(radians(latitude)))) distance, cl.id_country id_country
FROM '._DB_PREFIX_.'store_shop ss
LEFT JOIN '._DB_PREFIX_.'store s ON (ss.id_store = s.id_store)
LEFT JOIN '._DB_PREFIX_.'country_lang cl ON (cl.id_country = s.id_country)
LEFT JOIN '._DB_PREFIX_.'state st ON (st.id_state = s.id_state)
WHERE s.active = 1 AND cl.id_lang = '.(int)($cookie->id_lang).' AND ss.id_shop='.(int)$this->id_current_shop.'
HAVING distance < '.(int)($distance).'
ORDER BY distance ASC
LIMIT 0,20');
}
if (Tools::getValue('ajax') == 1)
{
$dom = new DOMDocument('1.0');
$node = $dom->createElement('markers');
$parnode = $dom->appendChild($node);
$days[1] = 'Monday';
$days[2] = 'Tuesday';
$days[3] = 'Wednesday';
$days[4] = 'Thursday';
$days[5] = 'Friday';
$days[6] = 'Saturday';
$days[7] = 'Sunday';
foreach ($stores AS $store)
{
$days_datas = array();
$node = $dom->createElement('marker');
$newnode = $parnode->appendChild($node);
$newnode->setAttribute('name', $store['name']);
$address = $this->_processStoreAddress($store);
$other = '';
if (!empty($store['hours']))
{
$hours = unserialize($store['hours']);
for ($i = 1; $i < 8; $i++)
{
$hours_datas = array();
$hours_datas['day'] = $days[$i];
$hours_datas['hours'] = $hours[(int)($i) - 1];
$days_datas[] = $hours_datas;
}
$smarty->assign('days_datas', $days_datas);
$smarty->assign('id_country', $store['id_country']);
$other .= self::$smarty->fetch(_PS_THEME_DIR_.'store_infos.tpl');
}
$newnode->setAttribute('addressNoHtml', strip_tags(str_replace('<br />', ' ', $address)));
$newnode->setAttribute('address', $address);
$newnode->setAttribute('other', $other);
$newnode->setAttribute('phone', $store['phone']);
$newnode->setAttribute('id_store', (int)($store['id_store']));
$newnode->setAttribute('has_store_picture', file_exists(_PS_STORE_IMG_DIR_.(int)($store['id_store']).'.jpg'));
$newnode->setAttribute('lat', (float)($store['latitude']));
$newnode->setAttribute('lng', (float)($store['longitude']));
if (isset($store['distance']))
$newnode->setAttribute('distance', (int)($store['distance']));
}
header('Content-type: text/xml');
die($dom->saveXML());
}
else
$smarty->assign('hasStoreIcon', file_exists(dirname(__FILE__).'/../img/logo_stores.gif'));
}
$smarty->assign(array('distance_unit' => $distanceUnit, 'simplifiedStoresDiplay' => $simplifiedStoreLocator, 'stores' => $stores, 'mediumSize' => Image::getSize('medium')));
}
private function _processStoreAddress($store)
{
$ignore_field = array(
'firstname' =>1
, 'lastname' =>1
);
$out = '';
$out_datas = array();
$address_datas = AddressFormat::getOrderedAddressFields($store['id_country']);
$state = (isset($store['id_state'])) ? new State($store['id_state']) : NULL;
foreach ($address_datas as $data_line)
{
$data_fields = explode(' ', $data_line);
$adr_out = array();
$data_fields_mod = false;
foreach ($data_fields as $field_item)
{
$field_item = trim($field_item);
if (!isset($ignore_field[$field_item]) && !empty($store[$field_item]) && $store[$field_item] != '')
{
$adr_out[] = ($field_item == "city" && $state && isset($state->iso_code) && strlen($state->iso_code)) ?
$store[$field_item].', '.$state->iso_code : $store[$field_item];
$data_fields_mod = true;
}
}
if ($data_fields_mod)
$out_datas[] = implode(' ', $adr_out);
}
$out = implode('<br />', $out_datas);
return $out;
}
public function process()
{
global $link;
parent::process();
self::$smarty->assign(array(
'defaultLat' => (float)Configuration::get('PS_STORES_CENTER_LAT'),
'defaultLong' => (float)Configuration::get('PS_STORES_CENTER_LONG'),
'searchUrl' => $link->getPageLink('stores')
));
}
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'stores.css');
if (!Configuration::get('PS_STORES_SIMPLIFIED'))
Tools::addJS(_THEME_JS_DIR_.'stores.js');
Tools::addJS('http://maps.google.com/maps/api/js?sensor=true');
}
public function displayContent()
{
parent::displayContent();
self::$smarty->display(_PS_THEME_DIR_.'stores.tpl');
}
}
+101
View File
@@ -0,0 +1,101 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class SupplierControllerCore extends FrontController
{
protected $supplier;
public function setMedia()
{
parent::setMedia();
Tools::addCSS(_THEME_CSS_DIR_.'product_list.css');
}
public function process()
{
if ($id_supplier = Tools::getValue('id_supplier'))
{
$this->supplier = new Supplier((int)$id_supplier, self::$cookie->id_lang);
if (Validate::isLoadedObject($this->supplier) AND $this->supplier->active AND $this->supplier->isAssociatedToGroupShop((int)$this->id_current_shop))
{
$nbProducts = $this->supplier->getProducts($id_supplier, NULL, NULL, NULL, $this->orderBy, $this->orderWay, true);
$this->pagination((int)$nbProducts);
self::$smarty->assign(array(
'nb_products' => $nbProducts,
'products' => $this->supplier->getProducts($id_supplier, (int)self::$cookie->id_lang, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay),
'path' => ($this->supplier->active ? Tools::safeOutput($this->supplier->name) : ''),
'supplier' => $this->supplier));
}
else
{
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
$this->errors[] = Tools::displayError('Supplier does not exist');
}
}
else
{
if (Configuration::get('PS_DISPLAY_SUPPLIERS'))
{
$data = call_user_func(array('Supplier', 'getSuppliers'), true, (int)(self::$cookie->id_lang), true);
$nbProducts = count($data);
$this->pagination($nbProducts);
$data = call_user_func(array('Supplier', 'getSuppliers'), true, (int)(self::$cookie->id_lang), true, $this->p, $this->n);
$imgDir = _PS_SUPP_IMG_DIR_;
foreach ($data AS &$item)
$item['image'] = (!file_exists($imgDir.'/'.$item['id_supplier'].'-medium.jpg')) ?
Language::getIsoById((int)(self::$cookie->id_lang)).'-default' : $item['id_supplier'];
self::$smarty->assign(array(
'pages_nb' => ceil($nbProducts / (int)($this->n)),
'nbSuppliers' => $nbProducts,
'mediumSize' => Image::getSize('medium'),
'suppliers' => $data,
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
));
}
else
self::$smarty->assign('nbSuppliers', 0);
}
}
public function displayHeader()
{
parent::displayHeader();
$this->productSort();
}
public function displayContent()
{
parent::displayContent();
if ($this->supplier)
self::$smarty->display(_PS_THEME_DIR_.'supplier.tpl');
else
self::$smarty->display(_PS_THEME_DIR_.'supplier-list.tpl');
}
}
+49
View File
@@ -0,0 +1,49 @@
<?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: 7104 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class PdfOrderReturnControllerCore extends FrontController
{
public function process()
{
parent::process();
$cookie = self::$cookie;
if (!$cookie->isLogged())
Tools::redirect('index.php?controller=authentication&back=order-follow');
if (isset($_GET['id_order_return']) AND Validate::isUnsignedId($_GET['id_order_return']))
$orderReturn = new OrderReturn((int)($_GET['id_order_return']));
if (!isset($orderReturn) OR !Validate::isLoadedObject($orderReturn))
die(Tools::displayError('Order return not found'));
else if ($orderReturn->id_customer != $cookie->id_customer)
die(Tools::displayError('Order return not found'));
else if ($orderReturn->state < 2)
die(Tools::displayError('Order return not confirmed'));
else
PDF::orderReturn($orderReturn);
}
}
+51
View File
@@ -0,0 +1,51 @@
<?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: 7104 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class PdfOrderSlipControllerCore extends FrontController
{
public function process()
{
parent::process();
$cookie = self::$cookie;
if (!$cookie->isLogged())
Tools::redirect('index.php?controller=authentication&back=order-follow');
if (isset($_GET['id_order_slip']) AND Validate::isUnsignedId($_GET['id_order_slip']))
$orderSlip = new OrderSlip((int)($_GET['id_order_slip']));
if (!isset($orderSlip) OR !Validate::isLoadedObject($orderSlip))
die(Tools::displayError('Order return not found'));
elseif ($orderSlip->id_customer != $cookie->id_customer)
die(Tools::displayError('Order return not found'));
$order = new Order((int)($orderSlip->id_order));
if (!Validate::isLoadedObject($order))
die(Tools::displayError('Order not found'));
$order->products = OrderSlip::getOrdersSlipProducts((int)($orderSlip->id), $order);
$ref = NULL;
PDF::invoice($order, 'D', false, $ref, $orderSlip);
}
}