bebeboutik/modules/soflexibilite/soflexibilite.php
2017-03-09 12:17:04 +01:00

1799 lines
78 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* NOTICE OF LICENSE
*
* This source file is subject to a commercial license from Common-Services Co., Ltd.
* Use, copy, modification or distribution of this source file without written
* license agreement from the SARL SMC is strictly forbidden.
* In order to obtain a license, please contact us: contact@common-services.com
* ...........................................................................
* INFORMATION SUR LA LICENCE D'UTILISATION
*
* L'utilisation de ce fichier source est soumise a une licence commerciale
* concedee par la societe Common-Services Co., Ltd.
* Toute utilisation, reproduction, modification ou distribution du present
* fichier source sans contrat de licence ecrit de la part de la Common-Services Co. Ltd. est
* expressement interdite.
* Pour obtenir une licence, veuillez contacter Common-Services Co., Ltd. a l'adresse: contact@common-services.com
* ...........................................................................
*
* @package So Colissimo Flexibilite
* @author Alexandre D.
* @copyright Copyright (c) 2011-2015 Common Services Co Ltd - 90/25 Sukhumvit 81 - 10260 Bangkok - Thailand
* @license Commercial license
* Support by mail : support.soflexibilite@common-services.com
*/
require_once(_PS_MODULE_DIR_.'soflexibilite/classes/SoFlexibiliteDelivery.php');
require_once(_PS_MODULE_DIR_.'soflexibilite/classes/SoFlexibiliteTools.php');
if (!class_exists('ConfigureMessage')) {
require_once(_PS_MODULE_DIR_.'soflexibilite/shared/classes/configure_message.class.php');
}
if (!defined('_PS_VERSION_')) {
exit;
}
class soflexibilite extends CarrierModule
{
public $id_carrier;
protected $id_carrier_so = null;
protected $id_carrier_so_keys = null;
protected $soflexibilite_conf_key = array(
'SOFLEXIBILITE_DOM_ID',
'SOFLEXIBILITE_DOS_ID',
'SOFLEXIBILITE_BPR_ID',
'SOFLEXIBILITE_CIT_ID',
);
public $personal_data_phone_error = false;
public $personal_data_zip_code_error = false;
public $siret_error = false;
public $ps15x;
public $ps16x;
public $available_country = array('FR', 'BE', 'NL', 'DE', 'GB', 'LU', 'ES');
public $url;
const ADD = 'a';
const REMOVE = 'd';
const UPDATE = 'u';
const DEFAULT_THEME = '16';
const TEXT_DOM = 'Colissimo Domicile - sans signature';
const TEXT_DOS = 'Colissimo Domicile - avec signature';
const TEXT_BPR = 'Colissimo - En bureau de Poste';
const TEXT_A2P = 'Colissimo - En relais PickUp ou en consigne PickUp Station';
const INSURRANCE_STEP_DEFAULT = 150;
const INSURRANCE_PRICE_DEFAULT = 0.9;
/* Home Delivery Modes */
const HOME_DELIVERY_DOM = 'DOM';
const HOME_DELIVERY_DOS = 'DOS';
const HOME_DELIVERY_RDV = 'RDV';
/* Data Handling Mode */
const MODE_EXPEDITOR_PRESTASHOP = 1;
const MODE_EXPEDITOR_THIRDPARTY = 2;
public static $home_delivery_mode = self::HOME_DELIVERY_DOM;
public static $mode = self::MODE_EXPEDITOR_PRESTASHOP;
public function __construct()
{
$this->name = 'soflexibilite';
$this->tab = 'shipping_logistics';
$this->version = '3.1.05';
$this->author = 'Common-Services';
$this->limited_countries = array('fr');
$this->protocol = (Configuration::get('PS_SSL_ENABLED') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PORT'] == '443')) ? 'https://' : 'http://';
$this->url = $this->protocol.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').
__PS_BASE_URI__.'modules/'.$this->name;
$this->point_list_url = $this->url.'/functions/point_list.php';
$this->saveDelivery_url = $this->url.'/functions/saveDeliveryPoint.php';
$this->saveInfoCommande = $this->url.'/functions/saveInfoCommande.php';
$this->initSoflexibiliteEnv_url = $this->url.'/functions/initSoflexibiliteEnv.php';
$this->getCustomerAddress = $this->url.'/functions/getCustomerAddress.php';
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('So Colissimo Flexibilite - Officiel');
$this->description = $this->l('So Colissimo is a service from La Poste which allow you to suggest 5 carrier mode to your customers.');
$this->confirmUninstall = $this->l('Do you really want to uninstall this module ?');
// 1 - Set the data handling mode
self::$mode = ((int)Configuration::get('SOFLEXIBILITE_MODE') == self::MODE_EXPEDITOR_THIRDPARTY) ?
self::MODE_EXPEDITOR_THIRDPARTY : self::MODE_EXPEDITOR_PRESTASHOP;
// DOM or DOS - Home delivery with or without signature
if (($home_delivery_mode = Configuration::get('SOFLEXIBILITE_HOME_MODE'))) {
self::$home_delivery_mode = $home_delivery_mode;
}
$this->_mapIdentifiers();
// Configuration par defaut des transporteurs
$this->config = array(
'name' => '',
'id_tax' => 1,
'id_tax_rules_group' => 1,
'url' => 'http://www.colissimo.fr/portail_colissimo/suivreResultat.do?parcelnumber=@',
'active' => true,
'deleted' => 0,
'shipping_handling' => false,
'range_behavior' => 0,
'is_module' => false,
'id_zone' => 1,
'shipping_external' => true,
'external_module_name' => 'soflexibilite',
'need_range' => true
);
$this->_initContext();
}
/* Retrocompatibility 1.4/1.5 */
private function _initContext()
{
$this->ps16x = false;
if (version_compare(_PS_VERSION_, '1.6', '>=')) {
$this->ps16x = true;
}
if (version_compare(_PS_VERSION_, '1.5', '>=')) {
$this->context = Context::getContext();
$this->id_lang = (int)Context::getContext()->language->id;
$this->ps15x = true;
} else {
require_once(_PS_MODULE_DIR_.$this->name.'/backward_compatibility/backward.php');
$this->context = Context::getContext();
$this->id_lang = (int)Context::getContext()->language->id;
$this->ps15x = false;
$this->local_path = _PS_MODULE_DIR_.$this->name.'/';
}
}
private function _mapIdentifiers()
{
$this->soflexibilite_conf_key = array('SOFLEXIBILITE_DOM_ID', 'SOFLEXIBILITE_DOS_ID', 'SOFLEXIBILITE_RDV_ID', 'SOFLEXIBILITE_BPR_ID', 'SOFLEXIBILITE_A2P_ID', 'SOFLEXIBILITE_CIT_ID');
$this->id_carrier_so = Configuration::getMultiple($this->soflexibilite_conf_key, null, null, null);
if (is_array($this->id_carrier_so)) {
$this->id_carrier_so_keys = @array_flip($this->id_carrier_so);
} else {
$this->id_carrier_so_keys = array();
$this->id_carrier_so = array();
}
}
private function _autoInstall($state)
{
$pass = true;
if (!$this->createSoColissimo('DOM', html_entity_decode(self::TEXT_DOM, ENT_COMPAT, 'UTF-8'), $state)) {
$this->_errors[] = $this->l('An error occured while creating carrier : mon domicile (sans signature).');
$pass = false;
}
if (!$this->createSoColissimo('DOS', html_entity_decode(self::TEXT_DOS, ENT_COMPAT, 'UTF-8'), $state)) {
$this->_errors[] = $this->l('An error occured while creating carrier : mon domicile (avec signautre).');
$pass = false;
}
if (!$this->createSoColissimo('BPR', html_entity_decode(self::TEXT_BPR, ENT_COMPAT, 'UTF-8'), $state)) {
$this->_errors[] = $this->l('An error occured while creating carrier : mon bureau de poste.');
$pass = false;
}
if (!$this->createSoColissimo('A2P', html_entity_decode(self::TEXT_A2P, ENT_COMPAT, 'UTF-8'), $state)) {
$this->_errors[] = $this->l('An error occured while creating carrier : mon commercant.');
$pass = false;
}
if (!(int)Configuration::get('SOFLEXIBILITE_DOM_ID')) {
$this->_removePreviousVersion();
}
$this->_mapIdentifiers();
if (!$this->_hookSetup(SoFlexibilite::ADD)) {
$this->_errors[] = $this->l('An error occured while registering hooks.');
$pass = false;
}
return ($pass);
}
private function _removePreviousVersion()
{
$table = 'carrier';
$values = array(
'deleted' => (int)1
);
$where = '`external_module_name` = "soflexibilite" ';
if (($rows = Db::getInstance()->executeS('SELECT `id_carrier` FROM '._DB_PREFIX_.'carrier WHERE '.$where))) {
foreach ($rows as $carrier_row) {
if (!in_array($carrier_row['id_carrier'], $this->id_carrier_so)) {
if ($this->ps15x) {
Db::getInstance()->update($table, $values, $where.' AND `id_carrier` = '.(int)$carrier_row['id_carrier']);
} else {
Db::getInstance()->autoExecute($table, $values, 'UPDATE', $where);
}
}
}
}
}
public function install()
{
$pass = true;
if (!parent::install()) {
$this->_errors[] = $this->l('An error occured while installing with parent::install().');
$pass = false;
}
$this->_removePreviousVersion();
$this->_autoInstall(true);
$sql = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'socolissimo_delivery_info` (
`id_cart` INT(10) NOT NULL,
`id_customer` INT(10) NOT NULL,
`delivery_mode` VARCHAR(3) NOT NULL,
`prid` TEXT(10) NOT NULL,
`prname` VARCHAR(64) NOT NULL,
`prfirstname` VARCHAR(64) NOT NULL,
`prcompladress` TEXT NOT NULL,
`pradress1` TEXT NOT NULL,
`pradress2` TEXT NOT NULL,
`pradress3` TEXT NOT NULL,
`pradress4` TEXT NOT NULL,
`przipcode` TEXT(10) NOT NULL,
`prtown` VARCHAR(64) NOT NULL,
`cecountry` VARCHAR(10) NOT NULL,
`cephonenumber` VARCHAR(15) NOT NULL,
`ceemail` VARCHAR(64) NOT NULL,
`cecompanyname` VARCHAR(64) NOT NULL,
`cedeliveryinformation` TEXT NOT NULL,
`cedoorcode1` VARCHAR(10) NOT NULL,
`cedoorcode2` VARCHAR(10) NOT NULL,
`codereseau` VARCHAR(3) DEFAULT NULL,
PRIMARY KEY (`id_cart`,`id_customer`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
if (!Db::getInstance()->Execute($sql)) {
$pass = false;
}
Configuration::updateValue('SOFLEXIBILITE_MODE', 1);
Configuration::updateValue('SOFLEXIBILITE_THEME', self::DEFAULT_THEME);
Configuration::updateValue('SOFLEXIBILITE_GMAP', 1);
Configuration::updateValue('SOFLEXIBILITE_WS', 'https://ws.colissimo.fr/pointretrait-ws-cxf/PointRetraitServiceWS/2.0?wsdl');
Configuration::updateValue('SOFLEXIBILITE_LOGIN', '');
Configuration::updateValue('SOFLEXIBILITE_PASSWORD', '');
Configuration::updateValue('SOFLEXIBILITE_INSURRANCE', false);
Configuration::updateValue('SOFLEXIBILITE_INSURRANCE_PRICE', (float)0.9);
Configuration::updateValue('SOFLEXIBILITE_INSURRANCE_STEP', 150);
Configuration::updateValue('SOFLEXIBILITE_SUB_PHONE', str_replace(' ', '', (string)Configuration::get('PS_SHOP_PHONE')));
Configuration::updateValue('SOFLEXIBILITE_ONLY_MAP', false);
ConfigureMessage::display();
return ((bool)$pass);
}
public function uninstall()
{
$pass = true;
if (!parent::uninstall()) {
$this->_errors[] = $this->l('An error occured while uninstalling with parent::uninstall().');
$pass = false;
}
if (!Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'carrier SET deleted=1 WHERE id_carrier='.(int)$this->id_carrier_so['SOFLEXIBILITE_DOM_ID'])) {
$this->_errors[] = $this->l('An error occured while udating mon domicile.');
$pass = false;
}
if (!Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'carrier SET deleted=1 WHERE id_carrier='.(int)$this->id_carrier_so['SOFLEXIBILITE_DOS_ID'])) {
$this->_errors[] = $this->l('An error occured while udating mon domicile.');
$pass = false;
}
if (!Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'carrier SET deleted=1 WHERE id_carrier='.(int)$this->id_carrier_so['SOFLEXIBILITE_RDV_ID'])) {
$this->_errors[] = $this->l('An error occured while udating mon rendez-vous.');
$pass = false;
}
if (!Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'carrier SET deleted=1 WHERE id_carrier='.(int)$this->id_carrier_so['SOFLEXIBILITE_BPR_ID'])) {
$this->_errors[] = $this->l('An error occured while udating mon bureau de poste.');
$pass = false;
}
if (!Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'carrier SET deleted=1 WHERE id_carrier='.(int)$this->id_carrier_so['SOFLEXIBILITE_A2P_ID'])) {
$this->_errors[] = $this->l('An error occured while udating mon commercant.');
$pass = false;
}
if (!Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'carrier SET deleted=1 WHERE id_carrier='.(int)$this->id_carrier_so['SOFLEXIBILITE_CIT_ID'])) {
$this->_errors[] = $this->l('An error occured while udating mon cityssimo.');
$pass = false;
}
if (!$this->_hookSetup(SoFlexibilite::REMOVE)) {
$this->_errors[] = $this->l('An error occured while unregistering hooks.');
$pass = false;
}
Configuration::deleteByName('SOFLEXIBILITE_DOM_ID');
Configuration::deleteByName('SOFLEXIBILITE_DOS_ID');
Configuration::deleteByName('SOFLEXIBILITE_RDV_ID');
Configuration::deleteByName('SOFLEXIBILITE_BPR_ID');
Configuration::deleteByName('SOFLEXIBILITE_A2P_ID');
Configuration::deleteByName('SOFLEXIBILITE_CIT_ID');
Configuration::deleteByName('SOFLEXIBILITE_DOM');
Configuration::deleteByName('SOFLEXIBILITE_DOS');
Configuration::deleteByName('SOFLEXIBILITE_RDV');
Configuration::deleteByName('SOFLEXIBILITE_BPR');
Configuration::deleteByName('SOFLEXIBILITE_A2P');
Configuration::deleteByName('SOFLEXIBILITE_CIT');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_DOM');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_DOS');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_RDV');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_BPR');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_A2P');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_CIT');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_DOM_ID');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_DOS_ID');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_RDV_ID');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_BPR_ID');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_A2P_ID');
Configuration::deleteByName('SOFLEXIBILITE_ASSOCIATE_CIT_ID');
Configuration::deleteByName('SOFLEXIBILITE_THEME');
Configuration::deleteByName('SOFLEXIBILITE_GMAP');
Configuration::deleteByName('SOFLEXIBILITE_MODE');
Configuration::deleteByName('SOFLEXIBILITE_HOME_MODE');
Configuration::deleteByName('SOFLEXIBILITE_WS');
Configuration::deleteByName('SOFLEXIBILITE_LOGIN');
Configuration::deleteByName('SOFLEXIBILITE_PASSWORD');
Configuration::deleteByName('SOFLEXIBILITE_INSURRANCE');
Configuration::deleteByName('SOFLEXIBILITE_INSURRANCE_PRICE');
Configuration::deleteByName('SOFLEXIBILITE_INSURRANCE_STEP');
Configuration::deleteByName('SOFLEXIBILITE_USER_HOME_MODE');
Configuration::deleteByName('SOFLEXIBILITE_FORCE_DOS');
Configuration::deleteByName('SOFLEXIBILITE_FORCE_DOS_VALUE');
Configuration::deleteByName('SOFLEXIBILITE_SUB_PHONE');
Configuration::deleteByName('SOFLEXIBILITE_ONLY_MAP');
Configuration::deleteByName('SOFLEXIBILITE_MAP_STYLE');
return ((bool)$pass);
}
public static function isDirWriteable($path)
{
$path = rtrim($path, '/\\');
$testfile = sprintf('%s%stestfile_%s.chk', $path, DIRECTORY_SEPARATOR, uniqid());
$timestamp = time();
if (@file_put_contents($testfile, $timestamp)) {
$result = trim(@SoFlexibiliteTools::file_get_contents($testfile));
@unlink($testfile);
if ((int)$result == (int)$timestamp) {
return (true);
}
}
return (false);
}
private function createSoColissimo($mode, $str, $state)
{
foreach ($this->id_carrier_so as $configuration_key => $id_carrier) {
// Not the target carrier
if ($configuration_key != 'SOFLEXIBILITE_'.$mode.'_ID') {
continue;
}
// Not Yet Configured
if ($id_carrier === false) {
break;
}
$carrier = new Carrier($id_carrier);
if (Validate::isLoadedObject($carrier)) {
if ($carrier->deleted) {
break;
}
// Already active
return (true);
}
}
$carrier = new Carrier();
foreach ($this->config as $k => $v) {
$carrier->{$k} = $v;
}
$carrier->{'name'} .= $str;
$carrier->{'active'} = (int)$state;
foreach (Language::getLanguages(false) as $language) {
if ($language['iso_code'] == 'fr') {
if ($mode === 'DOM' || $mode === 'DOS') {
$carrier->delay[$language['id_lang']] = 'Faites vous livrer à l\'adresse de votre choix, '.($mode === 'DOM' ? 'sans' : 'avec').' signature';
} elseif ($mode === 'BPR') {
$carrier->delay[$language['id_lang']] = 'Faites vous livrer dans l\'un des bureaux de poste parmi 10 000 points de retrait partout en France';
} elseif ($mode === 'A2P') {
$carrier->delay[$language['id_lang']] = 'Faites vous livrer dans l\'un des relais pickup ou consignes Pickup Station parmi 8 000 points de retrait partout en France';
} else {
$carrier->delay[$language['id_lang']] = 'Faites vous livrer en France selon votre choix.';
}
} else {
$carrier->delay[$language['id_lang']] = 'Get delivered at home, in France.';
}
}
if ($carrier->add()) {
if ($this->ps15x && Feature::isFeatureActive()) {
Configuration::updateGlobalValue('SOFLEXIBILITE_'.$mode.'_ID', (int)$carrier->id, false);
} else {
Configuration::updateValue('SOFLEXIBILITE_'.$mode.'_ID', (int)$carrier->id);
}
$groups = Group::getGroups((int)$this->id_lang);
foreach ($groups as $group) {
$table = 'carrier_group';
$values = array(
'id_carrier' => (int)$carrier->id,
'id_group' => (int)$group['id_group']
);
if ($this->ps15x) {
Db::getInstance()->insert($table, $values);
} else {
Db::getInstance()->autoExecute(_DB_PREFIX_.$table, $values, 'INSERT');
}
}
$rangePrice = new RangePrice();
$rangePrice->id_carrier = $carrier->id;
$rangePrice->delimiter1 = 0;
$rangePrice->delimiter2 = 10000;
$rangePrice->add();
$rangeWeight = new RangeWeight();
$rangeWeight->id_carrier = $carrier->id;
$rangeWeight->delimiter1 = 0;
$rangeWeight->delimiter2 = 10000;
$rangeWeight->add();
$zones = Zone::getZones(true);
foreach ($zones as $zone) {
$carrier->addZone((int)$zone['id_zone']);
}
// copie du logo
if (!self::isDirWriteable(dirname(__FILE__).'/img/')) {
$this->_errors[] = printf('Fatal Error - %s: %d - %s.', __FILE__, __LINE__, $this->l('The image directory is not writable'));
return (false);
} else {
$img_path = null;
switch ($mode) {
case 'DOM':
case 'DOS':
case 'BPR':
case 'A2P':
$img_path = dirname(__FILE__).'/img/colissimo_carrier_logo.png';
break;
}
$pass = true;
if (!$img_path) {
$pass = false;
} elseif (method_exists('Tools', 'copy') && !Tools::copy($img_path, _PS_SHIP_IMG_DIR_.'/'.$carrier->id.'.jpg')) {
$pass = false;
} elseif (!method_exists('Tools', 'copy') && !SoFlexibiliteTools::copy($img_path, _PS_SHIP_IMG_DIR_.'/'.$carrier->id.'.jpg')) {
$pass = false;
}
if (!$pass) {
$this->_errors[] = printf('Fatal Error - %s: %d - %s (%d) %s.', __FILE__, __LINE__, $this->l('Impossible to copy image for carrier'), $carrier->id, $carrier->name);
return (false);
}
}
} else {
$this->_errors[] = printf('Fatal Error - %s: %d - %s (%s).', __FILE__, __LINE__, $this->l('Impossible to create carrier.'), $mode);
return (false);
}
return (true);
}
public function getContent()
{
$output = null;
$expeditor_conf = Configuration::getMultiple(array(
'EXPEDITOR_CARRIER_CODES_'.$this->id_carrier_so['SOFLEXIBILITE_DOM_ID'],
'EXPEDITOR_CARRIER_CODES_'.$this->id_carrier_so['SOFLEXIBILITE_DOS_ID'],
'EXPEDITOR_CARRIER_CODES_'.$this->id_carrier_so['SOFLEXIBILITE_BPR_ID'],
'EXPEDITOR_CARRIER_CODES_'.$this->id_carrier_so['SOFLEXIBILITE_A2P_ID'],
));
if (Module::isInstalled('expeditor')) {
foreach ($expeditor_conf as $exp_carrier_conf => $val) {
if ($val !== 'SO') {
Configuration::updateValue($exp_carrier_conf, 'SO');
$output .= $this->displayConfirmation('Une erreur avec le module Expeditor Inet a &eacute;t&eacute; corrig&eacute; ('.$exp_carrier_conf.').');
}
}
}
$this->_removePreviousVersion();
if (version_compare(_PS_VERSION_, '1.4.4.0', '>=')) {
$this->_autoInstall(false);
}
// Bug Fix with Prestashop form management
$real_submit = (bool)Tools::getValue('SOFLEXIBILITE_LOGIN');
if (Tools::isSubmit('submit'.$this->name) && $real_submit) {
$success = true;
$compat_type = Tools::getValue('SOFLEXIBILITE_MODE', 1);
// Theme
$success &= Configuration::updateValue('SOFLEXIBILITE_ONLY_MAP', Tools::getValue('SOFLEXIBILITE_ONLY_MAP', false));
$success &= Configuration::updateValue('SOFLEXIBILITE_THEME', Tools::getValue('SOFLEXIBILITE_THEME', self::DEFAULT_THEME));
$success &= Configuration::updateValue('SOFLEXIBILITE_MAP_STYLE', Tools::getValue('SOFLEXIBILITE_MAP_STYLE'));
// Compatibility mode
$success &= Configuration::updateValue('SOFLEXIBILITE_MODE', Tools::getValue('SOFLEXIBILITE_MODE', 1));
// Insurrance
$success &= Configuration::updateValue('SOFLEXIBILITE_INSURRANCE', (int)Tools::getValue('SOFLEXIBILITE_INSURRANCE', false));
$success &= Configuration::updateValue('SOFLEXIBILITE_INSURRANCE_PRICE', (float)Tools::getValue('SOFLEXIBILITE_INSURRANCE_PRICE', self::INSURRANCE_PRICE_DEFAULT));
$success &= Configuration::updateValue('SOFLEXIBILITE_INSURRANCE_STEP', (float)Tools::getValue('SOFLEXIBILITE_INSURRANCE_STEP', self::INSURRANCE_STEP_DEFAULT));
// Sub phone
$success &= Configuration::updateValue('SOFLEXIBILITE_SUB_PHONE', (string)Tools::getValue('SOFLEXIBILITE_SUB_PHONE', false));
if (Tools::getValue('SOFLEXIBILITE_SUB_PHONE') && !preg_match('/^0[67](\s?\d{2}){4}$/i', Tools::getValue('SOFLEXIBILITE_SUB_PHONE', false))) {
ConfigureMessage::error($this->l('Your substitution phone number do not have the required format.'));
}
// Login and password check
$success &= Configuration::updateValue('SOFLEXIBILITE_LOGIN', Tools::getValue('SOFLEXIBILITE_LOGIN'));
$success &= Configuration::updateValue('SOFLEXIBILITE_PASSWORD', Tools::getValue('SOFLEXIBILITE_PASSWORD'));
$success &= Configuration::updateValue('SOFLEXIBILITE_WS', Tools::getValue('SOFLEXIBILITE_WS'));
// Enable Google Map
$success &= Configuration::updateValue('SOFLEXIBILITE_GMAP', Tools::getValue('SOFLEXIBILITE_GMAP', 1));
$tables = array();
$query = Db::getInstance()->executeS('SHOW TABLES');
foreach ($query as $rows) {
foreach ($rows as $table) {
$tables[$table] = 1;
}
}
SoFlexibiliteTools::checkTables($compat_type, $tables);
$fields = array();
if ($compat_type == 1 && isset($tables[_DB_PREFIX_.'socolissimo_delivery_info'])) {
$query = Db::getInstance()->ExecuteS('SHOW COLUMNS FROM `'._DB_PREFIX_.'socolissimo_delivery_info`');
foreach ($query as $row) {
$fields[$row['Field']] = 1;
}
if (!isset($fields['codereseau'])) {
$sql = 'ALTER TABLE `'._DB_PREFIX_.'socolissimo_delivery_info` ADD `codereseau` VARCHAR(3) DEFAULT NULL';
if (!Db::getInstance()->execute($sql)) {
ConfigureMessage::error($this->l('Error while updating table `socolissimo_delivery_info`.'));
} else {
ConfigureMessage::success($this->l('Field `codereseau` added to the table `socolissimo_delivery_info`.'));
}
}
} elseif ($compat_type == 2 && isset($tables[_DB_PREFIX_.'so_delivery'])) {
$query = Db::getInstance()->ExecuteS('SHOW COLUMNS FROM `'._DB_PREFIX_.'so_delivery`');
foreach ($query as $row) {
$fields[$row['Field']] = 1;
}
if (!isset($fields['codereseau'])) {
$sql = 'ALTER TABLE `'._DB_PREFIX_.'so_delivery` ADD `codereseau` VARCHAR(3) DEFAULT NULL';
if (!Db::getInstance()->execute($sql)) {
ConfigureMessage::error($this->l('Error while updating table `so_delivery`.'));
} else {
ConfigureMessage::success($this->l('Field `codereseau` added to the table `so_delivery`.'));
}
}
}
if ($success) {
ConfigureMessage::success($this->l('Options updated.'));
} else {
ConfigureMessage::error($this->l('An error occurred.'));
}
}
if (!empty($_POST) && (Tools::isSubmit('submitPersonalSave') || Tools::isSubmit('submitPersonalCancel'))) {
$validation = $this->postPersonalProcess();
} else {
$validation = true;
}
if (!Configuration::get('SOCOLISSIMO_PERSONAL_DATA')) {
$output .= $this->displayPersonalDataForm($validation);
}
return $output.$this->displayForm();
}
protected function displayPersonalDataForm($validation = false)
{
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false;
if ((!$referer || ($referer && strpos($referer, 'configure'))) && ($validation == true)) {
return false;
}
$phone = Tools::getValue('SOCOLISSIMO_PERSONAL_PHONE');
$zip_code = Tools::getValue('SOCOLISSIMO_PERSONAL_ZIP_CODE');
$shop_zip_code = Configuration::get('PS_SHOP_CODE');
$shop_phone = Configuration::get('PS_SHOP_PHONE');
$parcels = Tools::getValue('SOCOLISSIMO_PERSONAL_QUANTITIES');
$siret = Tools::getValue('SOCOLISSIMO_PERSONAL_SIRET');
$module_dir = _MODULE_DIR_.$this->name;
$this->context->smarty->assign(array(
'moduleDir' => $module_dir,
'siret' => $siret,
'parcels' => $parcels,
'phone' => $phone,
'zip_code' => $zip_code,
'shop_zip_code' => $shop_zip_code,
'shop_phone' => $shop_phone,
'personal_data_phone_error' => $this->personal_data_phone_error,
'personal_data_zip_code_error' => $this->personal_data_zip_code_error,
'siret_error' => $this->siret_error
));
return ($this->context->smarty->fetch(dirname(__FILE__).'/views/templates/admin/personnal_data.tpl'));
}
protected function postPersonalProcess()
{
if (Tools::isSubmit('submitPersonalSave')) {
$phone = Tools::getValue('SOCOLISSIMO_PERSONAL_PHONE');
$zip_code = Tools::getValue('SOCOLISSIMO_PERSONAL_ZIP_CODE');
$quantities = Tools::getValue('SOCOLISSIMO_PERSONAL_QUANTITIES');
$siret = Tools::getValue('SOCOLISSIMO_PERSONAL_SIRET');
$this->personal_data_phone_error = false;
$this->personal_data_zip_code_error = false;
$this->siret_error = false;
if (!(bool)preg_match('#^(([\d]{2})([\s]){0,1}){5}$#', $phone)) {
$this->personal_data_phone_error = true;
return (false);
}
if (!(bool)preg_match('#^(([0-8][0-9])|(9[0-5]))[0-9]{3}$#', $zip_code)) {
$this->personal_data_zip_code_error = true;
return (false);
}
if (!$siret) {
$this->siret_error = true;
return (false);
}
Configuration::updateValue('SOCOLISSIMO_PERSONAL_PHONE', $phone);
Configuration::updateValue('SOCOLISSIMO_PERSONAL_ZIP_CODE', $zip_code);
Configuration::updateValue('SOCOLISSIMO_PERSONAL_QUANTITIES', $quantities);
Configuration::updateValue('SOCOLISSIMO_PERSONAL_SIRET', $siret);
$this->savePreactivationRequest();
}
if (Tools::isSubmit('submitPersonalSave') || Tools::isSubmit('submitPersonalCancel')) {
Configuration::updateValue('SOCOLISSIMO_PERSONAL_DATA', true);
}
return (true);
}
protected function savePreactivationRequest()
{
return;
/*if (version_compare(_PS_VERSION_, '1.5', '<')) {
return ($this->savePreactivationRequest14());
}
return ($this->savePreactivationRequest15());*/
}
protected function savePreactivationRequest14()
{
return;
/*$employee = new Employee((int)Context::getContext()->cookie->id_employee);
$data = array(
'version' => '1.0',
'partner' => $this->name,
'country_iso_code' => Tools::strtoupper(Country::getIsoById(Configuration::get('PS_COUNTRY_DEFAULT'))),
'security' => md5($employee->email._COOKIE_IV_),
'partner' => $this->name,
'email' => $employee->email,
'firstName' => $employee->firstname,
'lastName' => $employee->lastname,
'shop' => Configuration::get('PS_SHOP_NAME'),
'host' => $_SERVER['HTTP_HOST'],
'phoneNumber' => Configuration::get('SOCOLISSIMO_PERSONAL_PHONE'),
'postalCode' => Configuration::get('SOCOLISSIMO_PERSONAL_ZIP_CODE'),
'businessType' => Configuration::get('SOCOLISSIMO_PERSONAL_QUANTITIES'),
'siret' => Configuration::get('SOCOLISSIMO_PERSONAL_SIRET'),
);
$query = http_build_query($data);
return (@SoFlexibiliteTools::file_get_contents('http://api.prestashop.com/partner/preactivation/actions.php?'.$query));*/
}
protected function savePreactivationRequest15()
{
return;
$employee = new Employee((int)Context::getContext()->cookie->id_employee);
/*$data = array(
'iso_lang' => Tools::strtolower($this->context->language->iso_code),
'iso_country' => Tools::strtoupper($this->context->country->iso_code),
'host' => $_SERVER['HTTP_HOST'],
'ps_version' => _PS_VERSION_,
'ps_creation' => _PS_CREATION_DATE_,
'partner' => $this->name,
'firstname' => $employee->firstname,
'lastname' => $employee->lastname,
'email' => $employee->email,
'shop' => Configuration::get('PS_SHOP_NAME'),
'type' => 'home',
'phone' => Configuration::get('SOCOLISSIMO_PERSONAL_PHONE'),
'zipcode' => Configuration::get('SOCOLISSIMO_PERSONAL_ZIP_CODE'),
'fields' => serialize(
array(
'quantities' => Configuration::get('SOCOLISSIMO_PERSONAL_QUANTITIES'),
'siret' => Configuration::get('SOCOLISSIMO_PERSONAL_SIRET'),
)
),
);
$query = http_build_query($data);
return (@SoFlexibiliteTools::file_get_contents('http://api.prestashop.com/partner/premium/set_request.php?'.$query));*/
}
public function toMegaBytes($memsize)
{
$unit = Tools::strtolower(Tools::substr($memsize, -1));
$val = preg_replace('[^0-9]', '', $memsize);
switch ($unit) {
case 'g':
$val = $val * 1024 * 1024 * 1024;
break;
case 'm':
$val = $val * 1024 * 1024;
break;
case 'k':
$val = $val * 1024;
break;
default:
$val = false;
}
// Switch to MB
$memsize = $val / (1024 * 1024);
return ($memsize);
}
private function _atLeastOneOutIsActive()
{
$bpr_carrier = new Carrier(Configuration::get('SOFLEXIBILITE_BPR_ID'));
if (Validate::isLoadedObject($bpr_carrier) && $bpr_carrier->active) {
return (true);
}
$a2p_carrier = new Carrier(Configuration::get('SOFLEXIBILITE_A2P_ID'));
if (Validate::isLoadedObject($a2p_carrier) && $a2p_carrier->active) {
return (true);
}
$cit_carrier = new Carrier(Configuration::get('SOFLEXIBILITE_CIT_ID'));
if (Validate::isLoadedObject($cit_carrier) && $cit_carrier->active) {
return (true);
}
return (false);
}
private function _backofficeInformations()
{
$php_infos = array();
$module_infos = array();
$prestashop_infos = array();
// WEB SERVICE SETTINGS
if (Configuration::get('SOFLEXIBILITE_WS') == '') {
$module_infos['web_service']['message'] = sprintf($this->l('The web service URL is empty, please fill it with a valid link to the ColiPoste web service.'));
$module_infos['web_service']['level'] = $this->ps16x ? 'alert alert-warning' : 'warn';
}
if ((Configuration::get('SOFLEXIBILITE_LOGIN')) == '') {
$module_infos['ws_login']['message'] = sprintf($this->l('You did not set a login yet, please fill the login field in the Configuration tab.'));
$module_infos['ws_login']['level'] = $this->ps16x ? 'alert alert-warning' : 'warn';
}
if ((Configuration::get('SOFLEXIBILITE_PASSWORD')) == '') {
$module_infos['ws_pwd']['message'] = sprintf($this->l('You did not set a password yet, please fill the password field in the Configuration tab.'));
$module_infos['ws_pwd']['level'] = $this->ps16x ? 'alert alert-warning' : 'warn';
}
$dom_carrier = new Carrier(Configuration::get('SOFLEXIBILITE_DOM_ID'));
$dos_carrier = new Carrier(Configuration::get('SOFLEXIBILITE_DOS_ID'));
if (!Validate::isLoadedObject($dom_carrier) || !Validate::isLoadedObject($dos_carrier) || !max(0, (int)$dom_carrier->active, (int)$dos_carrier->active)) {
$module_infos['coliposte']['message'] = sprintf($this->l('You have to activate the home carrier with at least one out of home carrier, this is a contract condition with coliposte.'));
$module_infos['coliposte']['level'] = $this->ps16x ? 'alert alert-danger' : 'error';
} else {
if (!$this->_atLeastOneOutIsActive()) {
$module_infos['coliposte']['message'] = sprintf($this->l('You have to activate the home carrier with at least one out of home carrier, this is a contract condition with coliposte.'));
$module_infos['coliposte']['level'] = $this->ps16x ? 'alert alert-danger' : 'error';
}
}
// PHP Configuration Check
/*if (($max_execution_time = ini_get('max_execution_time')) && $max_execution_time > -1 && $max_execution_time < 60) {
$php_infos['max_execution_time']['message'] = sprintf($this->l('PHP value: max_execution_time recommended value is at least 60. your limit is currently set to %d'), $max_execution_time);
$php_infos['max_execution_time']['level'] = $this->ps16x ? 'alert alert-warning' : 'warn';
}*/
if (!class_exists('SoapClient')) {
$php_infos['soap_client']['message'] = $this->l('Soap Client Extension must be active for running this extension');
$php_infos['soap_client']['level'] = $this->ps16x ? 'alert alert-danger' : 'error';
$php_infos['soap_client']['link'] = 'http://php.net/manual/'.$this->context->language->iso_code.'/soap.setup.php';
}
if (in_array(@Tools::strtolower(ini_get('display_errors')), array('1', 'on'))) {
$php_infos['display_errors']['message'] = $this->l('PHP variable display_errors is On.');
$php_infos['display_errors']['level'] = $this->ps16x ? 'alert alert-info' : (version_compare(_PS_VERSION_, '1.5', '<') ? 'hint' : 'info');
}
// Memory Limit
$memory_limit = $this->toMegaBytes(ini_get('memory_limit'));
if ($memory_limit < 128) {
$php_infos['memory']['message'] = sprintf($this->l('PHP value: memory_limit recommended value is at least 128MB. your limit is currently set to %sMB'), $memory_limit);
$php_infos['memory']['level'] = $this->ps16x ? 'alert alert-warning' : 'warn';
}
// Prestashop Configuration Check
if (!(int)Configuration::get('PS_SHOP_ENABLE')) {
$prestashop_infos['maintenance']['message'] = $this->l('Be carefull, your shop is in maintenance mode, the module might not work in that mode');
$prestashop_infos['maintenance']['level'] = $this->ps16x ? 'alert alert-warning' : 'warn';
}
if (_PS_MODE_DEV_) {
$prestashop_infos['dev_mode']['message'] = $this->l('The Prestashop constant _PS_MODE_DEV_ is enabled.');
$prestashop_infos['dev_mode']['level'] = $this->ps16x ? 'alert alert-info' : (version_compare(_PS_VERSION_, '1.5', '<') ? 'hint' : 'info');
}
// URL issues for Ajax
/*$pass = true;
if (version_compare(_PS_VERSION_, '1.5', '>=')) {
if (Shop::isFeatureActive()) {
$shop = Context::getContext()->shop;
if ($_SERVER['HTTP_HOST'] != $shop->domain && $_SERVER['HTTP_HOST'] != $shop->domain_ssl) {
$pass = false;
}
} else {
$urls = ShopUrl::getShopUrls($this->context->shop->id)->where('main', '=', 1)->getFirst();
if ($_SERVER['HTTP_HOST'] != $urls->domain && $_SERVER['HTTP_HOST'] != $urls->domain_ssl) {
$pass = false;
}
}
} elseif (version_compare(_PS_VERSION_, '1.4', '>=')) {
if ($_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN') && $_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN_SSL')) {
$pass = false;
}
}
if (!$pass) {
$prestashop_infos['wrong_domain']['message'] = $this->l('Your are currently connected with the following domain name:').' <span style="color:navy">'.$_SERVER['HTTP_HOST'].'</span><br />'.
$this->l('This one is different from the main shop domain name set in "Preferences > SEO & URLs":').' <span style="color:green">'.Configuration::get('PS_SHOP_DOMAIN').'</span>';
$prestashop_infos['wrong_domain']['level'] = $this->ps16x ? 'alert alert-danger' : 'error';
}*/
if (!count($prestashop_infos)) {
$prestashop_info_ok = true;
} else {
$prestashop_info_ok = false;
}
if (!count($php_infos)) {
$php_info_ok = true;
} else {
$php_info_ok = false;
}
if (!count($module_infos)) {
$module_info_ok = true;
} else {
$module_info_ok = false;
}
$view_params = array();
$view_params['module_infos'] = $module_infos;
$view_params['module_info_ok'] = $module_info_ok;
$view_params['php_infos'] = $php_infos;
$view_params['php_info_ok'] = $php_info_ok;
$view_params['prestashop_infos'] = $prestashop_infos;
$view_params['prestashop_info_ok'] = $prestashop_info_ok;
ob_start();
phpinfo(INFO_ALL & ~INFO_CREDITS & ~INFO_LICENSE & ~INFO_ENVIRONMENT & ~INFO_VARIABLES);
$phpinfos = ob_get_clean();
$phpinfos = preg_replace('/(a:link.*)|(body, td, th, h1, h2.*)|(img.*)|(td, th.*)|(a:hover.*)|(class="center")/', '', $phpinfos);
$view_params['phpinfo_str'] = $phpinfos;
$view_params['psinfo_str'] = $this->prestashopInfo();
$view_params['dbinfo_str'] = $this->dbInfo();
return ($view_params);
}
public function dbInfo()
{
$db_info = '';
$table = _DB_PREFIX_.'socolissimo_delivery_info';
$order_by = 'id_cart';
if (Configuration::get('SOFLEXIBILITE_MODE') == self::MODE_EXPEDITOR_THIRDPARTY) {
$table = _DB_PREFIX_.'so_delivery';
$order_by = 'id';
}
$query = Db::getInstance()->executeS('SHOW TABLES');
$tables = array();
foreach ($query as $rows) {
foreach ($rows as $t) {
$tables[$t] = 1;
}
}
if (!isset($tables[$table])) {
ConfigureMessage::error($this->l('No So Colissimo table found in your database. Please save configuration to create the table and check again.'));
return $this->l('No So Colissimo table found in your database. Please save configuration to create the table and check again.');
}
$results = Db::getInstance()->executeS('SELECT * FROM `'.$table.'` ORDER BY '.$order_by.' DESC LIMIT 5');
$fields = array();
$query = Db::getInstance()->ExecuteS('SHOW COLUMNS FROM `'.$table.'`');
foreach ($query as $row) {
$fields[] = $row['Field'];
}
$db_info = '<h1>'.$this->l('Database').'</h1>';
$db_info .= '<pre>';
$db_info .= 'SHOW COLUMNS FROM `'.$table.'` : '.print_r($fields, true);
$db_info .= 'SELECT * FROM `'.$table.'` ORDER BY '.$order_by.' DESC LIMIT 5 : '.print_r($results, true);
$db_info .= '</pre>';
return ($db_info);
}
public function prestashopInfo()
{
$prestashop_info = '';
if ($this->ps15x) {
$sort = 'ORDER by `name`,`id_shop`';
} else {
$sort = 'ORDER by `name`';
}
$results = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'configuration` WHERE `name` LIKE "PS_%" OR `name` LIKE "SOFLE%" '.$sort);
$ps_configuration = null;
foreach ($results as $result) {
if (strpos($result['name'], 'KEY') || strpos($result['name'], 'EMAIL') || strpos($result['name'], 'PASSWORD') || strpos($result['name'], 'PASSWD')
|| strpos($result['name'], 'CONTEXT_DATA')
) {
continue;
}
$value = $result['value'];
if (base64_encode(base64_decode($value, true)) === $value) {
$value = base64_decode($value, true);
} else {
$value = $result['value'];
}
if (@serialize(@unserialize($value)) == $value) {
$value = '<div class="print_r">'.print_r(unserialize($value), true).'</div>';
} else {
$value = Tools::strlen($result['value']) > 128 ? Tools::substr($result['value'], 0, 128).'...' : $result['value'];
}
if ($this->ps15x) {
$ps_configuration .= sprintf('%-50s %03d %03d : %s'."\n", $result['name'], $result['id_shop'], $result['id_shop_group'], $value);
} else {
$ps_configuration .= sprintf('%-50s : %s'."\n", $result['name'], $value);
}
}
$prestashop_info .= '<h1>Prestashop</h1>';
$prestashop_info .= '<pre>';
$prestashop_info .= 'Version: '._PS_VERSION_."\n\n";
$prestashop_info .= "\n";
$prestashop_info .= $ps_configuration;
$prestashop_info .= '</pre>'."\n\n";
return ($prestashop_info);
}
public function displayForm()
{
require_once(dirname(__FILE__).'/shared/classes/configure_tab.class.php');
$html = '';
$alert_class = array();
$alert_class['danger'] = $this->ps16x ? 'alert alert-danger' : 'error';
$alert_class['warning'] = $this->ps16x ? 'alert alert-warning' : 'warn';
$alert_class['success'] = $this->ps16x ? 'alert alert-success' : 'conf';
$alert_class['info'] = $this->ps16x ? 'alert alert-info' : 'hint';
$this->context->smarty->assign(
array(
'ps16x' => version_compare(_PS_VERSION_, '1.6', '>='),
'soflexibilite_version' => $this->version,
'ps_version' => _PS_VERSION_,
'module_dir' => $this->url,
'images_url' => $this->url.'/img/',
'tpl_url' => dirname(__FILE__).'/views/templates/admin',
'soflexibilite_info' => $this->_backofficeInformations(),
'soflexibilite_theme' => Configuration::get('SOFLEXIBILITE_THEME'),
'soflexibilite_google_map' => Configuration::get('SOFLEXIBILITE_GMAP'),
'soflexibilite_mode' => Configuration::get('SOFLEXIBILITE_MODE'),
'soflexibilite_login' => Configuration::get('SOFLEXIBILITE_LOGIN'),
'soflexibilite_password' => Configuration::get('SOFLEXIBILITE_PASSWORD'),
'soflexibilite_ws' => Configuration::get('SOFLEXIBILITE_WS'),
'soflexibilite_point_list_url' => $this->url.'/functions/check_login.php',
'soflexibilite_set_shiiping_cost_url' => $this->url.'/functions/set_carriers_shipping_cost.php',
'selected_tab' => Tools::getValue('selected_tab', '0'),
'soflexibilite_form_action' => $_SERVER['REQUEST_URI'],
'alert_class' => $alert_class,
'soflexibilite_insurrance' => Configuration::get('SOFLEXIBILITE_INSURRANCE'),
'soflexibilite_insurrance_price' => Configuration::get('SOFLEXIBILITE_INSURRANCE_PRICE') ?
sprintf('%.2f', Configuration::get('SOFLEXIBILITE_INSURRANCE_PRICE')) : self::INSURRANCE_PRICE_DEFAULT,
'soflexibilite_insurrance_step' => Configuration::get('SOFLEXIBILITE_INSURRANCE_STEP') ?
sprintf('%.2f', Configuration::get('SOFLEXIBILITE_INSURRANCE_STEP')) : self::INSURRANCE_STEP_DEFAULT,
'soflexibilite_sub_phone' => Configuration::get('SOFLEXIBILITE_SUB_PHONE'),
'soflexibilite_only_map' => Configuration::get('SOFLEXIBILITE_ONLY_MAP'),
'soflexibilite_map_style' => Configuration::get('SOFLEXIBILITE_MAP_STYLE'),
'soflexibilite_carriers' => $this->getSoColissimoCarriers(),
'soflexibilite_carrier_wizard_token' => Tools::getAdminToken('AdminCarrierWizard'.
(int)Tab::getIdFromClassName('AdminCarrierWizard').(int)$this->context->employee->id)
));
$this->autoAddCSS($this->_path.'css/configuration.css', 'all');
$this->autoAddJS($this->_path.'js/configuration.js');
if ($this->ps15x) {
$this->autoAddCSS($this->_path.'css/jquery.qtip.min.css', 'all');
$this->autoAddJS($this->_path.'js/jquery.qtip.min.js');
}
$tab_list = array();
$tab_list[] = array('id' => 'soflexibilite', 'img' => 'soflexibilite', 'name' => 'Colissimo web service', 'selected' => true);
$tab_list[] = array('id' => 'informations', 'img' => 'information', 'name' => 'Informations', 'selected' => false);
$tab_list[] = array('id' => 'credentials', 'img' => 'key', 'name' => $this->l('Credentials'), 'selected' => false);
$tab_list[] = array('id' => 'param', 'img' => 'cog_edit', 'name' => 'Configuration', 'selected' => false);
$tab_list[] = array('id' => 'personalization', 'img' => 'color_management', 'name' => $this->l('Personalization'), 'selected' => false);
$tab_list[] = array('id' => 'carriers', 'img' => 'lorry', 'name' => $this->l('Carriers'), 'selected' => false);
$html .= ConfigureMessage::display();
$html .= $this->context->smarty->fetch(dirname(__FILE__).'/views/templates/admin/header.tpl');
$html .= ConfigureTab::generateTabs($tab_list);
$html .= $this->context->smarty->fetch(dirname(__FILE__).'/views/templates/admin/configuration.tpl');
$html .= $this->context->smarty->fetch(dirname(__FILE__).'/views/templates/admin/glossary.tpl');
return $html;
}
protected function getSoColissimoCarriers()
{
$sql = 'SELECT c.*, cl.delay
FROM `'._DB_PREFIX_.'carrier` c
LEFT JOIN `'._DB_PREFIX_.'carrier_lang` cl ON (c.`id_carrier` = cl.`id_carrier` AND cl.`id_lang` = '.(int)$this->context->language->id.')
WHERE c.`deleted` = 0
AND c.`external_module_name` = "soflexibilite"
GROUP BY c.`id_carrier`';
if ($this->ps15x) {
$sql .= '
ORDER BY c.`position` ASC';
}
$carriers = Db::getInstance()->executeS($sql);
if (!is_array($carriers)) {
$carriers = array();
ConfigureMessage::error($this->l('Beware : you do not have any So Colissimo carrier linked to this module. A new install or reset is necessary.'));
} else {
foreach (array_keys($carriers) as $key) {
$carriers[$key]['logo'] = __PS_BASE_URI__.'img/s/'.(int)$carriers[$key]['id_carrier'].'.jpg';
if (version_compare(_PS_VERSION_, '1.5.4.1', '>=')) {
$carriers[$key]['conf_url'] = '?controller=AdminCarrierWizard&token='.Tools::getAdminToken('AdminCarrierWizard'.(int)Tab::getIdFromClassName('AdminCarrierWizard').(int)$this->context->employee->id).'&id_carrier='.(int)$carriers[$key]['id_carrier'];
} elseif ($this->ps15x) {
$carriers[$key]['conf_url'] = '?controller=AdminCarriers&id_carrier='.(int)$carriers[$key]['id_carrier'].'&updatecarrier&token='.Tools::getAdminToken('AdminCarriers'.(int)Tab::getIdFromClassName('AdminCarriers').(int)$this->context->employee->id);
} else {
$carriers[$key]['conf_url'] = '?tab=AdminCarriers&id_carrier='.(int)$carriers[$key]['id_carrier'].'&updatecarrier&token='.Tools::getAdminToken('AdminCarriers'.(int)Tab::getIdFromClassName('AdminCarriers').(int)$this->context->employee->id);
}
}
}
return ($carriers);
}
/* HOOKS FOR BACKWARD COMPATIBILITY - PRESTASHOP 1.4 */
public function hookNewOrder($params)
{
return ($this->hookActionValidateOrder($params));
}
public function hookAdminOrder($params)
{
return ($this->hookDisplayAdminOrder($params));
}
public function hookBeforeCarrier($params)
{
return ($this->hookDisplayBeforeCarrier($params));
}
public function hookHeader()
{
return $this->hookDisplayHeader();
}
public function hookBackOfficeHeader()
{
if (!Configuration::get('SOCOLISSIMO_PERSONAL_DATA')) {
if (version_compare(_PS_VERSION_, '1.5', '<') || !method_exists($this->context->controller, 'addJQuery')) {
return '<script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery.fancybox-1.3.4.js"></script>
<link type="text/css" rel="stylesheet" href="'.__PS_BASE_URI__.'css/jquery.fancybox-1.3.4.css" />';
}
}
}
public function hookUpdateCarrier($params)
{
return ($this->hookActionCarrierUpdate($params));
}
private function _hookSetup($action)
{
if ($this->ps15x) {
$expectedHooks = array(
'actionValidateOrder',
'displayAdminOrder',
'displayBeforeCarrier',
'displayHeader',
'actionCarrierUpdate'
);
} else {
$expectedHooks = array(
'newOrder',
'adminOrder',
'beforeCarrier',
'header',
'updateCarrier',
'backOfficeHeader',
'processCarrier',
);
}
$pass = true;
if ($action == SoFlexibilite::ADD) {
foreach ($expectedHooks as $expectedHook) {
if (!$this->registerHook($expectedHook)) {
$pass = false;
}
}
}
if ($action == SoFlexibilite::REMOVE) {
foreach ($expectedHooks as $expectedHook) {
if (!$this->unregisterHook($expectedHook)) {
$pass = false;
}
}
}
return ($pass);
}
public function hookActionCarrierUpdate($params)
{
if (in_array((int)($params['id_carrier']), $this->id_carrier_so)) {
if ($this->ps15x) {
Configuration::updateGlobalValue($this->id_carrier_so_keys[(int)($params['id_carrier'])], (int)($params['carrier']->id), false);
} else {
Configuration::updateValue($this->id_carrier_so_keys[(int)($params['id_carrier'])], (int)($params['carrier']->id), false);
}
}
}
public function hookActionValidateOrder($params)
{
$check_address = new Address((int)$params['cart']->id_address_delivery);
if (Validate::isLoadedObject($check_address)) {
if (strpos($check_address->company, 'So Colissimo') !== false) {
return (false);
}
}
if (in_array($params['order']->id_carrier, $this->id_carrier_so)) {
if (!in_array($params['order']->id_carrier, array($this->id_carrier_so['SOFLEXIBILITE_DOM_ID'], $this->id_carrier_so['SOFLEXIBILITE_DOS_ID']))) {
$soDelivery = new SoFlexibiliteDelivery((int)$params['cart']->id, (int)$params['cart']->id_customer);
$soDelivery->loadDelivery();
// OCARAT modification de création d'adresse a partir de la facturation
// if (!($id_address_new = (int)$soDelivery->createAddressForPickupPoint((int)$params['cart']->id_address_invoice))) {
if (!($id_address_new = (int)$soDelivery->createAddressForPickupPoint((int)$params['cart']->id_address_delivery))) {
return (false);
}
if ($this->ps15x) {
$params['order']->id_address_delivery = $id_address_new;
} else {
$params['order']->id_address_delivery = $id_address_new;
$params['order']->save();
}
// Change pickup address by customer address invoice in case of a problem with the pickup
/*$address_invoice = new Address((int)$params['cart']->id_address_invoice);
if (Validate::isLoadedObject($address_invoice)) {
$soDelivery->address1 = $address_invoice->address1;
$soDelivery->address2 = $address_invoice->address2;
$soDelivery->postcode = $address_invoice->postcode;
$soDelivery->city = $address_invoice->city;
$soDelivery->country = Country::getIsoById((int)$address_invoice->id_country);
}*/
// OCARAT modif update for customizations
if ($this->ps15x) {
$sql = 'UPDATE `'._DB_PREFIX_.'cart_product`
SET `id_address_delivery` = '.(int)$id_address_new.'
WHERE `id_cart` = '.(int)$params['order']->id_cart;
Db::getInstance()->execute($sql);
$sql = 'UPDATE `'._DB_PREFIX_.'customization`
SET `id_address_delivery` = '.(int)$id_address_new.'
WHERE `id_cart` = '.(int)$params['order']->id_cart;
Db::getInstance()->execute($sql);
}
$soDelivery->id_order = (int)$params['order']->id;
// Check phone number, if empty at least we need to put something, phone is compulsory to register on prestashop, we get it
// $address = new Address((int)$params['cart']->id_address_invoice);
$address = new Address((int)$params['cart']->id_address_delivery);
$address_delivery = new Address($id_address_new);
if (Validate::isLoadedObject($address_delivery)) {
$soDelivery->lastname = $address->lastname;
}
$soDelivery->saveDelivery();
if (Validate::isLoadedObject($address)) {
if (is_null($soDelivery->telephone) || empty($soDelivery->telephone) || Tools::strlen($soDelivery->telephone) < 7) {
$soDelivery->telephone = $address->phone_mobile ? $address->phone_mobile : ($address->phone ? $address->phone : '');
}
}
$soDelivery->saveDelivery();
} else {
$soDelivery = new SoFlexibiliteDelivery((int)$params['cart']->id, (int)$params['cart']->id_customer);
$soDelivery->loadDelivery();
switch ($params['order']->id_carrier) {
case ($this->id_carrier_so['SOFLEXIBILITE_DOM_ID']) :
$delivery_mode = 'DOM';
break;
case ($this->id_carrier_so['SOFLEXIBILITE_DOS_ID']) :
$delivery_mode = 'DOS';
break;
default :
$delivery_mode = 'DOM';
break;
}
// Ocarat change delivery address to invoice one
// $address = new Address((int)$params['cart']->id_address_invoice);
$address = new Address((int)$params['cart']->id_address_delivery);
if (!Validate::isLoadedObject($address)) {
return (false);
}
$customer = new Customer((int)$params['cart']->id_customer);
if (!Validate::isLoadedObject($customer)) {
return (false);
}
$soDelivery->type = $delivery_mode;
$soDelivery->id_order = (int)$params['order']->id;
$soDelivery->id_point = null;
$soDelivery->firstname = $address->firstname;
$soDelivery->lastname = $address->lastname;
$soDelivery->company = $address->company;
$soDelivery->telephone = !empty($soDelivery->telephone) ? $soDelivery->telephone : $address->phone_mobile;
$soDelivery->email = !empty($soDelivery->email) ? $soDelivery->email : $customer->email;
$soDelivery->libelle = null;
$soDelivery->indice = null;
$soDelivery->postcode = $address->postcode;
$soDelivery->city = $address->city;
$soDelivery->country = Country::getIsoById($address->id_country);
$soDelivery->address1 = $address->address1;
$soDelivery->address2 = $address->address2;
$soDelivery->lieudit = null;
// Check phone number, if empty at least we need to put something, phone is compulsory to register on prestashop, we use it
if (is_null($soDelivery->telephone) || empty($soDelivery->telephone) || Tools::strlen($soDelivery->telephone) < 7) {
$soDelivery->telephone = $address->phone_mobile ? $address->phone_mobile : ($address->phone ? $address->phone : '');
}
$soDelivery->saveDelivery();
}
} else {
$soDelivery = new SoFlexibiliteDelivery();
$soDelivery->removeDelivery((int)$params['cart']->id);
}
}
public function hookDisplayAdminOrder($params)
{
$order = new Order((int)$params['id_order']);
if (!Validate::isLoadedObject($order)) {
return (false);
}
$soDelivery = new SoFlexibiliteDelivery((int)$order->id_cart, (int)$order->id_customer);
if (!$soDelivery->loadDelivery() || !$soDelivery->isLoadedObject()) {
return (false);
}
// Customer Info
$customer = new Customer($order->id_customer);
$customer_address = new Address($order->id_address_delivery);
if (!Validate::isLoadedObject($customer) || !Validate::isLoadedObject($customer_address)) {
return (false);
}
require_once dirname(__FILE__).'/classes/SoFlexibiliteWebService.php';
// Customer Name
/*$address = Db::getInstance()->ExecuteS('SELECT * FROM ps_socolissimo_delivery_info WHERE id_cart = '.pSQL((int)$order->id_cart));
if(count($address) > 0) {
$address = $address[0];
}
if (!empty($address['prname']) && !empty($address['prname'])) {
$fullname = sprintf('%s %s', $address['prfirstname'], $address['prname']);
} else*/
if (!empty($soDelivery->firstname) && !empty($soDelivery->lastname)) {
$fullname = sprintf('%s %s', $soDelivery->firstname, $soDelivery->lastname);
} else {
$fullname = sprintf('%s %s', $customer_address->firstname, $customer_address->lastname);
}
if (strpos($fullname, ' c/o ')) {
$fullname = reset(explode(' c/o ', $fullname));
}
// Customer Email
$email = null;
if (!empty($soDelivery->ceemail)) {
$email = trim($soDelivery->email);
} elseif (!empty($customer->email)) {
$email = trim($customer->email);
}
// Delivery Informations
if (!empty($soDelivery->informations)) {
$result = explode('|', wordwrap($soDelivery->informations, 64, '|', true));
if (isset($result[1])) {
$informations = sprintf('%s...', $result[0]);
} else {
$informations = $result[0];
}
} else {
$informations = null;
}
$soflexibilite_bo_title = 'Colissimo';
if (in_array($soDelivery->type, array('BPR', 'BDP', 'CDI'))) {
$soflexibilite_bo_title = $this->l('Delivery at post-office');
} elseif (in_array($soDelivery->type, array('A2P', 'CMT'))) {
$soflexibilite_bo_title = $this->l('Delivery in a shopkeeper');
} elseif (in_array($soDelivery->type, array('DOM', 'BOM'))) {
$soflexibilite_bo_title = $this->l('Delivery at home (without signature)');
} elseif (in_array($soDelivery->type, array('DOS', 'BOS'))) {
$soflexibilite_bo_title = $this->l('Delivery at home (with signature)');
}
$relay_informations = SoFlexibiliteWebService::getRelayStatic(sprintf('%06s', $soDelivery->id_point));
$soflexibilite_delivery_address = array(
'name' => $fullname,
'libelle' => in_array($soDelivery->type, array('DOM', 'DOS', 'BOM', 'BOS')) ? '' : $soDelivery->libelle,
'prid' => $soDelivery->id_point ? sprintf('%06s', $soDelivery->id_point) : null,
/*'company' => $soDelivery->company ? $soDelivery->company : $customer_address->company,*/
'company' => $soDelivery->company,
'prname' => isset($relay_informations->nom) ? $relay_informations->nom : '',
'address1' => isset($relay_informations->adresse1) ? $relay_informations->adresse1 : (
in_array($soDelivery->type, array('DOM', 'DOS', 'BOM', 'BOS')) ?
$soDelivery->lieudit :
$soDelivery->address1
),
'address2' => isset($relay_informations->adresse2) ? $relay_informations->adresse2 : (
in_array($soDelivery->type, array('DOM', 'DOS', 'BOM', 'BOS')) ?
$soDelivery->address1 :
$soDelivery->address2
),
'postcode' => isset($relay_informations->codePostal) ? $relay_informations->codePostal : $soDelivery->postcode,
'city' => isset($relay_informations->localite) ? $relay_informations->localite : $soDelivery->city,
'country' => isset($relay_informations->libellePays) ? $relay_informations->libellePays : (
Tools::strlen($soDelivery->country) == 2 ?
Country::getNameById($this->context->employee->id_lang, strtolower($soDelivery->country) == 'fr'? 8: Country::getByIso($soDelivery->country)) :
$soDelivery->country
),
'iso_country' => isset($relay_informations->codePays) ? $relay_informations->codePays : $soDelivery->country,
'mobile' => $this->betterPhoneNumber($soDelivery->telephone),
'email' => $email,
'informations' => str_replace('\\', '', $informations),
'search_address' => sprintf('%s, %s %s, %s', $soDelivery->address1, $soDelivery->postcode, $soDelivery->city, $soDelivery->country)
);
$this->context->smarty->assign(
array(
'soflexibilite_bo_title' => $soflexibilite_bo_title,
'images_url' => $this->url.'/img/',
'soflexibilite_socolissimo_logo' => $this->url.'/img/colissimo_order.png',
'soflexibilite_delivery_address' => $soflexibilite_delivery_address,
'soflexibilite_is_ps16x' => $this->ps16x,
'soflexibilite_version' => $this->ps15x,
'soflexibilite_url' => $this->url,
'soflexibilite_change_pickup_url' => $this->url.'/functions/changepickup.php',
'soflexibilite_save_info_commande_url' => $this->saveInfoCommande,
'soflexibilite_id_cart' => $soDelivery->id_cart,
'soflexibilite_id_customer' => $soDelivery->id_customer,
'soflexibilite_id_order' => $order->id,
'soflexibilite_point_list_url' => $this->point_list_url
)
);
$this->autoAddJS($this->_path.'js/adminorder.js');
$this->autoAddCSS($this->_path.'css/soflexibiliteAdminOrder.css', 'all');
return ($this->display(__FILE__, 'views/templates/hook/displayAdminOrder.tpl'));
}
public function hookDisplayBeforeCarrier($params)
{
$so_found = FALSE;
foreach($params['carriers'] as $carrier) {
if(in_array((int) $carrier['id_carrier'], $this->id_carrier_so)) {
$so_found = TRUE;
break;
}
}
if(!$so_found) {
return;
}
$this->context->smarty->assign('ps16x', $this->ps16x);
if ($this->ps15x) {
$customerAddresses = $this->context->customer->getAddresses((int)$this->context->cookie->id_lang);
$id_delivery_address = (int)$this->context->cart->id_address_delivery;
} else {
$customerAddresses = Db::getInstance()->ExecuteS('SELECT * FROM '._DB_PREFIX_.'address WHERE id_customer='
.(int)$this->context->cookie->id_customer);
$id_delivery_address = (int)$params['cart']->id_address_delivery;
}
$mobile = '';
$inputs = array();
foreach ($customerAddresses as $address) {
if ((int)$address['id_address'] === $id_delivery_address) {
$inputs[] = array(
'id_address' => $address['id_address'],
'alias' => $address['alias'],
'company' => $address['company'],
'firstname' => $address['firstname'],
'lastname' => $address['lastname'],
'address1' => $address['address1'],
'address2' => $address['address2'],
'postcode' => $address['postcode'],
'city' => $address['city'],
'phone' => $address['phone_mobile'],
'country' => Country::getIsoById($address['id_country']),
'abdefault' => $address['id_address'] == (int)$params['cart']->id_address_delivery ? '1' : '0'
);
if (isset($address['phone_mobile'])) {
$phone_mobile = '/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/i';
$phone_mobile_be = '/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/i';
if (preg_match($phone_mobile, $address['phone_mobile']) || preg_match($phone_mobile_be, $address['phone_mobile'])) {
$mobile = $address['phone_mobile'];
}
}
}
}
// Check if went to cart previously, changed page, then came back --> Load delivery_mode for "mon domicile"
$soDelivery = new SoFlexibiliteDelivery((int)$params['cart']->id, (int)$params['cart']->id_customer);
$soDelivery->loadDelivery();
if (!is_null($soDelivery->type) && Tools::strlen($soDelivery->type) && ($soDelivery->type == 'DOM' || $soDelivery->type == 'DOS')) {
$soflexibilite_delivery_mode = $soDelivery->type;
} else {
$soflexibilite_delivery_mode = Configuration::get('SOFLEXIBILITE_HOME_MODE');
}
// !Check if went to cart previously
$force_dos_delivery = false;
$cart_price = 0;
if ($params['cart']->id) {
$cart_price = Cart::getTotalCart((int)$params['cart']->id, true);
}
if (Configuration::get('SOFLEXIBILITE_FORCE_DOS') && Configuration::get('SOFLEXIBILITE_FORCE_DOS_VALUE') <= $cart_price) {
$force_dos_delivery = true;
}
$this->context->smarty->assign(
array(
'soflexibilite_dom_id' => (int)$this->id_carrier_so['SOFLEXIBILITE_DOM_ID'],
'soflexibilite_dos_id' => (int)$this->id_carrier_so['SOFLEXIBILITE_DOS_ID'],
'soflexibilite_bpr_id' => (int)$this->id_carrier_so['SOFLEXIBILITE_BPR_ID'],
'soflexibilite_a2p_id' => (int)$this->id_carrier_so['SOFLEXIBILITE_A2P_ID'],
'soflexibilite_cust_id' => $id_delivery_address,
'inputs' => $inputs,
'soflexibilite_mobile' => $mobile,
'soflexibilite_point_list_url' => $this->point_list_url,
'getCustomerAddress' => $this->getCustomerAddress,
'saveDeliveryPoint' => $this->saveDelivery_url,
'initSoflexibiliteEnv' => $this->url.'/functions/initSoflexibiliteEnv.php',
'checkPointSelectedOPC' => $this->initSoflexibiliteEnv_url,
'saveInfoCommande' => $this->saveInfoCommande,
'protocol' => $this->protocol,
'soflexibilite_cust_mail' => $params['cookie']->email,
'soflexibilite_cart_id' => $params['cart']->id,
'lang' => Language::getIsoById($this->id_lang),
'signature' => (self::$home_delivery_mode == self::HOME_DELIVERY_DOS) ? 1 : 0,
'ps15x' => $this->ps15x,
'so_url' => $this->url,
'images_url' => $this->url.'/img/',
'soflexibilite_bpr_active' => (int)SoFlexibiliteTools::carrierIsEnabled($this->id_carrier_so['SOFLEXIBILITE_BPR_ID']),
'soflexibilite_a2p_active' => (int)SoFlexibiliteTools::carrierIsEnabled($this->id_carrier_so['SOFLEXIBILITE_A2P_ID']),
'soflexibilite_delivery_mode' => $soflexibilite_delivery_mode,
'soflexibilite_user_home_mode' => (bool)Configuration::get('SOFLEXIBILITE_USER_HOME_MODE'),
'soflexibilite_force_dos' => $force_dos_delivery,
'soflexibilite_only_map' => Configuration::get('SOFLEXIBILITE_ONLY_MAP'),
'soflexibilite_map_style' => Configuration::get('SOFLEXIBILITE_MAP_STYLE')
)
);
if ($this->ps15x) {
$this->autoAddCSS($this->url.'/css/jquery.qtip.min.css', 'all');
$this->autoAddJS($this->url.'/js/jquery.qtip.min.js');
}
$this->autoAddCSS($this->url.'/css/soflexibilite.css', 'all');
$this->autoAddCSS($this->url.'/css/soflexibilite'.Configuration::get('SOFLEXIBILITE_THEME').'.css', 'all');
$this->autoAddJS($this->url.'/js/front_flexibilite.js');
$this->autoAddJS($this->url.'/js/fcts.js');
if (Configuration::get('SOFLEXIBILITE_GMAP')) {
$this->autoAddJS('https://maps.google.com/maps/api/js?sensor=false');
}
return ($this->display(__FILE__, 'views/templates/hook/displayBeforeCarrier.tpl'));
}
private function autoAddJS($url)
{
if ($this->ps15x) {
return ($this->context->controller->addJS($url));
}
echo '<script type="text/javascript" src="'.$url.'"></script>';
}
private function autoAddCSS($url, $media = null)
{
if ($this->ps15x) {
return ($this->context->controller->addCSS($url, $media));
}
echo '<link type="text/css" rel="stylesheet" href="'.$url.'">';
}
public function hookDisplayHeader()
{
return false;
}
private function betterPhoneNumber($nb)
{
$prefix = '';
$prefix_length = 0;
$retNb = '';
if (preg_match('/^((\+)33)/i', $nb)) {
$prefix = '+33 (0)';
$prefix_length = 3;
} elseif (preg_match('/^((00)33)/i', $nb)) {
$prefix = '0033 (0)';
$prefix_length = 4;
} elseif (preg_match('/^((\+)32)/i', $nb)) {
$prefix = '+32 (0)';
$prefix_length = 3;
} elseif (preg_match('/^((00)32)/i', $nb)) {
$prefix = '0032 (0)';
$prefix_length = 4;
}
if (Tools::strlen($prefix)) {
$nb = Tools::substr($nb, $prefix_length);
}
$nb = strrev($nb);
$length = Tools::strlen($nb);
for ($i = 0; $i < $length; $i += 1) {
if ($i % 2 === 0) {
$retNb .= ' ';
}
$retNb .= $nb[$i];
}
$retNb = strrev($retNb);
return ($prefix.$retNb);
}
public function isFlexibiliteEnabled()
{
if ($this->ps15x) {
return (Module::isEnabled($this->name));
}
return ($this->active);
}
public function getOrderShippingCost($params, $shipping_cost)
{
// if (!$this->isFlexibiliteEnabled() || $shipping_cost < 0) {
// return (false);
// }
//
// $address_delivery = new Address((int)$params->id_address_delivery);
// if (!Validate::isLoadedObject($address_delivery)) {
// // TODO
// // la fonction getOrderShippingCost de soflexibilite.php, retourne false si l'adresse de livraison n'est pas définie,
// // ce qui nous a posé un problème pour l'affichage des frais de livraison dans le panier avant que le client ne soit connecté,
// // car prestashop excluait les transporteurs socolissmo dans sa fonction getPackageShippingCost (//get external shipping cost from module) étant donné que le module retournait false.
//// return (false);
// }
/*if ($this->isOnlyExpendable($this->context->cart)) {
$shipping_cost = 5;
return $shipping_cost;
}*/
return ((float)$shipping_cost);
}
public function isOnlyExpendable($cart) {
$product_cats = array();
foreach($cart->getProducts() as $product) {
$product_cats[] = (int) $product['id_category_default'];
}
$sales = Db::getInstance()->ExecuteS('
SELECT DISTINCT `id_sale`
FROM `'._DB_PREFIX_.'privatesale_category`
WHERE `id_category` IN ('.implode(', ', $product_cats).')
');
if ($sales) {
$cpt_sales = count($sales);
} else {
$cpt_sales = 0;
}
// si une seule vente et vente consommable on retourne true
if ($cpt_sales==1 && (int) $sales[0]['id_sale'] == (int) _SHOP_PRIVATESALES_CONSUMABLE) {
return true;
}
return false;
}
public function getOrderShippingCostExternal($params)
{
return true;
}
public function hookProcessCarrier($params) {
if(in_array($params['cart']->id_carrier, $this->id_carrier_so)) {
Db::getInstance()->Execute('
UPDATE `'._DB_PREFIX_.'socolissimo_delivery_info`
SET `ceemail` = "'.pSQL(Tools::getValue('so_custMail')).'",
`cephonenumber` = "'.pSQL(Tools::getValue('so_custPhone')).'"
WHERE `id_cart` = '.(int) $params['cart']->id.'
');
} else {
Db::getInstance()->Execute('
DELETE FROM `'._DB_PREFIX_.'socolissimo_delivery_info`
WHERE `id_cart` = '.(int) $params['cart']->id.'
LIMIT 1
');
}
}
}