* @copyright 2016-2019 GFI Informatique, 2016-2019 TNT * @license https://opensource.org/licenses/MIT MIT License */ require_once _PS_MODULE_DIR_.'tntofficiel/libraries/TNTOfficiel_ClassLoader.php'; /** * Class AdminAccountSettingController */ class AdminAccountSettingController extends ModuleAdminController { /** * Constructor. */ public function __construct() { TNTOfficiel_Logstack::log(); // Bootstrap enable. $this->bootstrap = true; parent::__construct(); $this->page_header_toolbar_title = sprintf($this->l('Configure %s'), TNTOfficiel::CARRIER_NAME); } /** * {@inheritdoc} */ public function createTemplate($tpl_name) { TNTOfficiel_Logstack::log(); if (file_exists($this->getTemplatePath().$tpl_name) && $this->viewAccess()) { return $this->context->smarty->createTemplate($this->getTemplatePath().$tpl_name, $this->context->smarty); } return parent::createTemplate($tpl_name); } /** * Load script. */ public function setMedia($isNewTheme = false) { TNTOfficiel_Logstack::log(); parent::setMedia(false); //$strAssetCSSPath = $this->module->getPathUri().'views/css/'.TNTOfficiel::MODULE_RELEASE.'/'; $strAssetJSPath = $this->module->getPathUri().'views/js/'.TNTOfficiel::MODULE_RELEASE.'/'; $this->context->controller->addJS($strAssetJSPath.'AdminAccountSetting.js'); } /** * Display page. */ public function renderList() { TNTOfficiel_Logstack::log(); parent::renderList(); // Display warning message in the module list for weight unit. if (Tools::strtolower(Configuration::get('PS_WEIGHT_UNIT')) !== 'kg') { $this->warnings[] = sprintf( $this->l('The supported weight unit is \'kg\', but is currently \'%s\'.'), Configuration::get('PS_WEIGHT_UNIT') ); } $objTNTContextAccountModel = TNTOfficielAccount::loadContextShop(); // If no account available for this context. if ($objTNTContextAccountModel === null) { return false; } // Form Helper. $objHelperForm = new HelperForm(); // Form Structure used as parameter for Helper 'generateForm' method. $arrFormStruct = array(); // Form Values used for Helper 'fields_value' property. $arrFieldsValue = array(); //$objHelperForm->base_folder = 'helpers/form/'; $objHelperForm->base_tpl = 'AdminAccountSetting.tpl'; // Module using this form. $objHelperForm->module = $this->module; // Controller name. $objHelperForm->name_controller = TNTOfficiel::MODULE_NAME; // Token. $objHelperForm->token = Tools::getAdminTokenLite('AdminAccountSetting'); // Form action attribute. $objHelperForm->currentIndex = AdminController::$currentIndex.'&configure='.TNTOfficiel::MODULE_NAME; // Language. $objHelperForm->default_form_language = (int)Configuration::get('PS_LANG_DEFAULT'); $objHelperForm->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; // Smarty assign(). // /modules//views/templates/admin/_configure/helpers/form/form.tpl // extends //themes/default/template/helpers/form/form.tpl $objHelperForm->tpl_vars['tntofficiel'] = array( 'srcTNTLogoImage' => $this->module->getPathUri().'views/img/logo/500x100.png', 'hrefExportLog' => $this->context->link->getAdminLink('AdminTNTOrders').'&action=downloadLogs', 'langExportLog' => $this->l('Export logs'), 'hrefManualPDF' => 'http://www.tnt.fr/Telechargements/cit/manuel-prestashop-1.7.pdf', // $this->module->getPathUri().'manuel-prestashop.pdf', 'langManualPDF' => $this->l('Installation manual') ); /* * Configuration Form */ $arrFormInputAccountConfig = array(); $arrAllMessageList = array(); $arrFormHR = array( array( 'type' => 'html', 'name' => 'html_data', 'html_content' => '

', ) ); $strIdFormAccountConfig = 'submit'.TNTOfficiel::MODULE_NAME.'AccountConfig'; $boolWasValidated = $objTNTContextAccountModel->getAuthValidatedDateTime(); // Form auth. $arrFormAuth = $this->getFormAccountAuth($strIdFormAccountConfig, $arrFieldsValue); $boolNowValidated = $objTNTContextAccountModel->getAuthValidatedDateTime(); // If submit and auth change to validated, do not POST empty field for the displayed section. if (Tools::isSubmit($strIdFormAccountConfig) && $boolWasValidated === null && $boolNowValidated !== null ) { Tools::redirectAdmin($this->context->link->getAdminLink('AdminAccountSetting')); exit; } $arrFormInputAccountConfig = array_merge($arrFormInputAccountConfig, $arrFormAuth['input']); $arrAllMessageList[] = $arrFormAuth['message']; if ($boolNowValidated !== null) { // Form sender. $arrFormSender = $this->getFormAccountSender($strIdFormAccountConfig, $arrFieldsValue); // Form Pickup. $arrFormPickup = $this->getFormAccountPickup($strIdFormAccountConfig, $arrFieldsValue); // Form Zone. $arrFormZone = $this->getFormAccountZone($strIdFormAccountConfig, $arrFieldsValue); $arrFormInputAccountConfig = array_merge( $arrFormInputAccountConfig, $arrFormHR, $arrFormSender['input'], $arrFormHR, $arrFormPickup['input'], $arrFormHR, $arrFormZone['input'] ); $arrAllMessageList[] = $arrFormSender['message']; $arrAllMessageList[] = $arrFormPickup['message']; $arrAllMessageList[] = $arrFormZone['message']; } $arrFormRequiredAccountConfig = array(); $arrFormRequiredAccountConfigLabel = array(); if (Tools::isSubmit($strIdFormAccountConfig)) { foreach ($arrFormInputAccountConfig as $arrField) { if (array_key_exists('required', $arrField) && $arrField['required'] === true) { if (array_key_exists($arrField['name'], $arrFieldsValue) && $arrFieldsValue[$arrField['name']] === '' ) { // Red highlight if error on field. $arrFormRequiredAccountConfig[] = $arrField['name']; // List required fields names for error message. $arrFormRequiredAccountConfigLabel[] = $arrField['label']; } } } foreach ($arrAllMessageList as $arrErrorCopy) { foreach ($arrErrorCopy['error'] as $mxdFieldName => $strErrorMsg) { if (is_string($mxdFieldName)) { // Red highlight if error on field. $arrFormRequiredAccountConfig[] = $mxdFieldName; } } } } $objHelperForm->tpl_vars['tntofficiel'] += array( 'errorFields' => $arrFormRequiredAccountConfig, ); /* * Merge messages. */ $arrFormMessageAccountConfig = array( 'error' => array(), 'warning' => array(), 'success' => array() ); if (Tools::isSubmit($strIdFormAccountConfig)) { foreach ($arrFormMessageAccountConfig as $strType => $arrValue) { foreach ($arrAllMessageList as $arrAlertCopy) { if (array_key_exists($strType, $arrAlertCopy)) { foreach ($arrAlertCopy[$strType] as $mxdFieldName => $strValueCopy) { if (is_string($mxdFieldName)) { $arrFormMessageAccountConfig[$strType][$mxdFieldName] = $strValueCopy; } else { $arrFormMessageAccountConfig[$strType][] = $strValueCopy; } } } } } // Add required message. if (count($arrFormRequiredAccountConfigLabel) === 1) { $arrFormMessageAccountConfig['error'][ $arrFormRequiredAccountConfig[0] ] = sprintf( $this->l('The field "%s" is mandatory, please check the information entered.'), implode(', ', $arrFormRequiredAccountConfigLabel) ); } elseif (count($arrFormRequiredAccountConfigLabel) > 1) { $arrFormMessageAccountConfig['error'][] = sprintf( $this->l('The fields "%s" are obligatory, please check the entered information.'), implode(', ', $arrFormRequiredAccountConfigLabel) ); } } if (count($arrFormMessageAccountConfig['error']) > 0) { // If error, do not display success. unset($arrFormMessageAccountConfig['success']); } elseif (count($arrFormMessageAccountConfig['success']) > 0) { // Use only one common success message. $arrFormMessageAccountConfig['success'] = array( $this->l('Settings updated.') ); } $arrFormMessageAccountConfig['info'][] = $this->l('Before entering the configuration data for your module, be sure to have selected the context and the stores on which you want to apply this configuration.'); // HTML Formatting. $arrFormAccountConfigMessageInput = array(); $arrFormAccountConfigMessageHTML = TNTOfficiel_Tools::getAlertHTML($arrFormMessageAccountConfig); if (count($arrFormAccountConfigMessageHTML) > 0) { $arrFormAccountConfigMessageInput = array( array( 'type' => 'html', 'name' => implode('', $arrFormAccountConfigMessageHTML) ) ); } // Add form. $arrFormStruct[$strIdFormAccountConfig] = array('form' => array( 'legend' => array( 'title' => $this->l('MERCHANT ACCOUNT SETTING'), ), 'input' => array_merge($arrFormAccountConfigMessageInput, $arrFormInputAccountConfig), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right', 'name' => $strIdFormAccountConfig ), )); // Set all form fields values. $objHelperForm->fields_value = $arrFieldsValue; // Global Submit ID. //$objHelperForm->submit_action = 'submit'.TNTOfficiel::MODULE_NAME; // Get generated forms. $strDisplayForms = $objHelperForm->generateForm($arrFormStruct); $this->content = $strDisplayForms; /* * HRA (Footer) */ return ''; } /** * Get the Account Auth form data for Helper. * * @return array */ private function getFormAccountAuth($strArgIdForm, &$arrRefFieldsValue) { TNTOfficiel_Logstack::log(); $arrFormMessagesAuth = array( 'error' => array(), 'warning' => array(), 'success' => array() ); $objTNTContextAccountModel = TNTOfficielAccount::loadContextShop(); // Input values. // ObjectModel self escape data with formatValue(). Do not double escape using pSQL. $strArgAccountNumber = (string)Tools::getValue('TNTOFFICIEL_ACCOUNT_NUMBER'); $strArgAccountLogin = (string)Tools::getValue('TNTOFFICIEL_ACCOUNT_LOGIN'); $strArgAccountPassword = (string)Tools::getValue('TNTOFFICIEL_ACCOUNT_PASSWORD'); // Displayed values. $arrRefFieldsValue['TNTOFFICIEL_ACCOUNT_NUMBER'] = $objTNTContextAccountModel->account_number; $arrRefFieldsValue['TNTOFFICIEL_ACCOUNT_LOGIN'] = $objTNTContextAccountModel->account_login; $arrRefFieldsValue['TNTOFFICIEL_ACCOUNT_PASSWORD'] = TNTOfficielAccount::PASSWORD_REPLACE; if (Tools::isSubmit($strArgIdForm)) { $arrRefFieldsValue['TNTOFFICIEL_ACCOUNT_NUMBER'] = $strArgAccountNumber; $arrRefFieldsValue['TNTOFFICIEL_ACCOUNT_LOGIN'] = $strArgAccountLogin; } // If store request (else simple check). if (Tools::isSubmit($strArgIdForm) // and account invalid or change are made in form. && ($objTNTContextAccountModel->getAuthValidatedDateTime() === null || ($objTNTContextAccountModel->account_number !== $strArgAccountNumber || $objTNTContextAccountModel->account_login !== $strArgAccountLogin || ($objTNTContextAccountModel->getAccountPassword() !== sha1($strArgAccountPassword) && $strArgAccountPassword !== TNTOfficielAccount::PASSWORD_REPLACE ) ) ) ) { /* * Save */ // If not empty, save account for validation request. if ($strArgAccountNumber && $strArgAccountLogin && $strArgAccountPassword) { $objTNTContextAccountModel->setAccountLogin($strArgAccountLogin); $objTNTContextAccountModel->setAccountNumber($strArgAccountNumber); if ($strArgAccountPassword !== TNTOfficielAccount::PASSWORD_REPLACE) { $objTNTContextAccountModel->setAccountPassword($strArgAccountPassword); } // Validate the TNT credentials. $mxdStateValidation = $objTNTContextAccountModel->updateAuthValidation(); if ($mxdStateValidation === null) { $arrFormMessagesAuth['warning'][] = $this->l('A connection error occurred.'); } elseif (!$mxdStateValidation) { $arrFormMessagesAuth['error'][] = $this->l('The "Login myTNT", "MyTNT password" and "TNT account number" identifiers are not recognized by TNT, please check the information entered.'); } else { // Save and also for each shop in account context. $objTNTContextAccountModel->saveContextShop(); $arrFormMessagesAuth['success'][] = $this->l('Account Settings updated.'); } } } else { $mxdStateValidation = $objTNTContextAccountModel->updateAuthValidation(); if ($mxdStateValidation === null) { $arrFormMessagesAuth['warning'][] = $this->l('A connection error occurred.'); } elseif (!$mxdStateValidation) { $arrFormMessagesAuth['error'][] = $this->l('The "Login myTNT", "MyTNT password" and "TNT account number" identifiers are not recognized by TNT, please check the information entered.'); } } return array( 'input' => array( array( 'type' => 'text', 'label' => $this->l('TNT account number'), 'name' => 'TNTOFFICIEL_ACCOUNT_NUMBER', 'maxlength' => 8, 'size' => 6, 'required' => true, ), array( 'type' => 'text', 'label' => $this->l('MyTNT Login'), 'name' => 'TNTOFFICIEL_ACCOUNT_LOGIN', 'maxlength' => 128, 'size' => 6, 'required' => true, ), array( 'type' => 'password', 'label' => $this->l('MyTNT password'), 'name' => 'TNTOFFICIEL_ACCOUNT_PASSWORD', 'size' => 6, 'required' => true, ) ), 'message' => $arrFormMessagesAuth ); } /** * Get the Account Sender form data for Helper. * * @return array */ private function getFormAccountSender($strArgIdForm, &$arrRefFieldsValue) { TNTOfficiel_Logstack::log(); $arrFormMessagesSender = array( 'error' => array(), 'warning' => array(), 'success' => array() ); $objTNTContextAccountModel = TNTOfficielAccount::loadContextShop(); // Input values. // ObjectModel self escape data with formatValue(). Do not double escape using pSQL. $strSenderCompany = TNTOfficiel_Tools::translitASCII((string)Tools::getValue('TNTOFFICIEL_SOCIETE'), 32); $strSenderAddress1 = TNTOfficiel_Tools::translitASCII((string)Tools::getValue('TNTOFFICIEL_ADRESSE_1'), 32); $strSenderAddress2 = TNTOfficiel_Tools::translitASCII((string)Tools::getValue('TNTOFFICIEL_ADRESSE_2'), 32); $strSenderZipCode = (string)Tools::getValue('TNTOFFICIEL_CODE_POSTAL'); $strSenderCity = (string)Tools::getValue('TNTOFFICIEL_VILLE'); $strSenderFirstName = TNTOfficiel_Tools::translitASCII((string)Tools::getValue('TNTOFFICIEL_PRENOM'), 32); $strSenderLastName = TNTOfficiel_Tools::translitASCII((string)Tools::getValue('TNTOFFICIEL_NOM'), 32); $strSenderEmail = (string)Tools::getValue('TNTOFFICIEL_MAIL'); $strSenderPhone = (string)Tools::getValue('TNTOFFICIEL_TELEPHONE'); // Displayed values. $arrRefFieldsValue['TNTOFFICIEL_SOCIETE'] = $objTNTContextAccountModel->sender_company; $arrRefFieldsValue['TNTOFFICIEL_ADRESSE_1'] = $objTNTContextAccountModel->sender_address1; $arrRefFieldsValue['TNTOFFICIEL_ADRESSE_2'] = $objTNTContextAccountModel->sender_address2; $arrRefFieldsValue['TNTOFFICIEL_CODE_POSTAL'] = $objTNTContextAccountModel->sender_zipcode; $arrRefFieldsValue['TNTOFFICIEL_VILLE'] = $objTNTContextAccountModel->sender_city; $arrRefFieldsValue['TNTOFFICIEL_PRENOM'] = $objTNTContextAccountModel->sender_firstname; $arrRefFieldsValue['TNTOFFICIEL_NOM'] = $objTNTContextAccountModel->sender_lastname; $arrRefFieldsValue['TNTOFFICIEL_MAIL'] = $objTNTContextAccountModel->sender_email; $arrRefFieldsValue['TNTOFFICIEL_TELEPHONE'] = $objTNTContextAccountModel->sender_phone; if (Tools::isSubmit($strArgIdForm)) { $arrRefFieldsValue['TNTOFFICIEL_SOCIETE'] = $strSenderCompany; $arrRefFieldsValue['TNTOFFICIEL_ADRESSE_1'] = $strSenderAddress1; $arrRefFieldsValue['TNTOFFICIEL_ADRESSE_2'] = $strSenderAddress2; $arrRefFieldsValue['TNTOFFICIEL_CODE_POSTAL'] = $strSenderZipCode; $arrRefFieldsValue['TNTOFFICIEL_VILLE'] = $strSenderCity; $arrRefFieldsValue['TNTOFFICIEL_PRENOM'] = $strSenderFirstName; $arrRefFieldsValue['TNTOFFICIEL_NOM'] = $strSenderLastName; $arrRefFieldsValue['TNTOFFICIEL_MAIL'] = $strSenderEmail; $arrRefFieldsValue['TNTOFFICIEL_TELEPHONE'] = $strSenderPhone; } /* * Validate the Sender and return error messages. */ $arrResultCitiesGuide = $objTNTContextAccountModel->citiesGuide( 'FR', $arrRefFieldsValue['TNTOFFICIEL_CODE_POSTAL'], $arrRefFieldsValue['TNTOFFICIEL_VILLE'] ); // If store request (else simple check). if (Tools::isSubmit($strArgIdForm)) { $arrResultCitiesGuide = $objTNTContextAccountModel->citiesGuide('FR', $strSenderZipCode, $strSenderCity); // Unsupported country or communication error is considered true to prevent // always invalid address form and show error "unknow postcode" on Front-Office checkout. $boolPostCodeIsValid = (!$arrResultCitiesGuide['boolIsCountrySupported'] || $arrResultCitiesGuide['boolIsRequestComError'] || count($arrResultCitiesGuide['arrCitiesNameList']) > 0 ); $boolCityIsValid = (!$arrResultCitiesGuide['boolIsCountrySupported'] || $arrResultCitiesGuide['boolIsRequestComError'] || $arrResultCitiesGuide['boolIsCityNameValid'] ); if ($strSenderZipCode && !$boolPostCodeIsValid) { $arrFormMessagesSender['error']['TNTOFFICIEL_CODE_POSTAL'] = $this->l('The postal code indicated is not valid, please check the information entered.'); } if ($strSenderCity && !$boolCityIsValid) { $arrFormMessagesSender['error']['TNTOFFICIEL_VILLE'] = $this->l('The city shown is not valid, please check the information entered.'); } if ($strSenderZipCode && $boolPostCodeIsValid) { $arrRefFieldsValue['TNTOFFICIEL_CODE_POSTAL'] = $arrResultCitiesGuide['strZipCode']; } if ($strSenderCity && $boolCityIsValid) { $arrRefFieldsValue['TNTOFFICIEL_VILLE'] = $arrResultCitiesGuide['strCity']; } // Auto formatting. $strSenderZipCode = $arrResultCitiesGuide['strZipCode']; $strSenderCity = $arrResultCitiesGuide['strCity']; if (!Validate::isEmail($strSenderEmail)) { $arrFormMessagesSender['error']['TNTOFFICIEL_MAIL'] = $this->l('The format of the email is invalid, please check the information entered.'); } $strSenderMobilePhone = TNTOfficiel_Tools::validateMobilePhone('FR', $strSenderPhone); $strSenderFixedPhone = TNTOfficiel_Tools::validateFixedPhone('FR', $strSenderPhone); // Cleaned Phone. $strSenderPhone = ($strSenderMobilePhone !== false ? $strSenderMobilePhone : $strSenderFixedPhone); if ($strSenderPhone === false) { $arrFormMessagesSender['error']['TNTOFFICIEL_TELEPHONE'] = $this->l('The phone format is not valid, please check the information entered.'); } else { $arrRefFieldsValue['TNTOFFICIEL_TELEPHONE'] = $strSenderPhone; } /* * Save */ // If no errors. if (count($arrFormMessagesSender['error']) === 0) { $objTNTContextAccountModel->setSenderCompany($strSenderCompany); $objTNTContextAccountModel->setSenderAddress1($strSenderAddress1); $objTNTContextAccountModel->setSenderAddress2($strSenderAddress2); $objTNTContextAccountModel->setSenderZipCode($strSenderZipCode); $objTNTContextAccountModel->setSenderCity($strSenderCity); $objTNTContextAccountModel->setSenderFirstName($strSenderFirstName); $objTNTContextAccountModel->setSenderLastName($strSenderLastName); $objTNTContextAccountModel->setSenderEMail($strSenderEmail); $objTNTContextAccountModel->setSenderPhone($strSenderPhone); // Save and also for each shop in account context. $objTNTContextAccountModel->saveContextShop(); $arrFormMessagesSender['success'][] = $this->l('Sender Settings updated.'); } } $objAllZipCodeCities = array(); foreach ($arrResultCitiesGuide['arrCitiesNameList'] as $strCities) { $objAllZipCodeCities[] = (object)array( 'name' => $strCities, 'id' => $strCities ); } return array( 'input' => array( array( 'type' => 'text', 'label' => $this->l('Company'), 'name' => 'TNTOFFICIEL_SOCIETE', 'maxlength' => 32, 'size' => 6, 'required' => true, ), array( 'type' => 'text', 'label' => $this->l('Address'), 'name' => 'TNTOFFICIEL_ADRESSE_1', 'maxlength' => 32, 'size' => 6, 'required' => true, ), array( 'type' => 'text', 'label' => $this->l('Address supplement'), 'name' => 'TNTOFFICIEL_ADRESSE_2', 'maxlength' => 32, 'size' => 6, 'required' => false, ), array( 'type' => 'text', 'label' => $this->l('Zip Code'), 'name' => 'TNTOFFICIEL_CODE_POSTAL', 'maxlength' => 10, 'size' => 6, 'required' => true, ), array( 'type' => 'select', 'label' => $this->l('City'), 'name' => 'TNTOFFICIEL_VILLE', 'maxlength' => 32, 'required' => true, //'class' => 'col-md-6', 'options' => array( 'query' => $objAllZipCodeCities, 'id' => 'id', 'name' => 'name' ), ), array( 'type' => 'text', 'label' => $this->l('First name'), 'name' => 'TNTOFFICIEL_PRENOM', 'maxlength' => 32, 'size' => 6, 'required' => false, ), array( 'type' => 'text', 'label' => $this->l('Last name'), 'name' => 'TNTOFFICIEL_NOM', 'maxlength' => 32, 'size' => 6, 'required' => false, ), array( 'type' => 'text', 'label' => $this->l('Email'), 'name' => 'TNTOFFICIEL_MAIL', 'maxlength' => 80, 'size' => 6, 'required' => true, ), array( 'type' => 'text', 'label' => $this->l('Phone'), 'name' => 'TNTOFFICIEL_TELEPHONE', 'maxlength' => 32, 'size' => 6, 'required' => true, ) ), 'message' => $arrFormMessagesSender ); } /** * Get the Account Pickup form data for Helper. * * @return array */ private function getFormAccountPickup($strArgIdForm, &$arrRefFieldsValue) { TNTOfficiel_Logstack::log(); $arrFormMessagesPickup = array( 'error' => array(), 'warning' => array(), 'success' => array() ); $objTNTContextAccountModel = TNTOfficielAccount::loadContextShop(); $arrHeureDriver = array(); $arrMinuteDriver = array(); $arrHeureClosing = array(); $arrMinuteClosing = array(); for ($i=8; $i < 23; $i++) { $value = Tools::strlen($i) < 2 ? '0' . $i : $i; array_push($arrHeureDriver, array( 'idheure' => $i, 'name' => $value )); } for ($j=0; $j < 60; $j++) { $valueMinute = Tools::strlen($j) < 2 ? '0' . $j : $j; array_push($arrMinuteDriver, array( 'idminute' => $j, 'name' => $valueMinute )); } for ($i=0; $i < 24; $i++) { $value = Tools::strlen($i) < 2 ? '0' . $i : $i; array_push($arrHeureClosing, array( 'idheure' => $i, 'name' => $value )); } for ($j=0; $j < 60; $j++) { $valueMinute = Tools::strlen($j) < 2 ? '0' . $j : $j; array_push($arrMinuteClosing, array( 'idminute' => $j, 'name' => $valueMinute )); } // Input values. // ObjectModel self escape data with formatValue(). Do not double escape using pSQL. $strPickupLabelType = (string)Tools::getValue('TNTOFFICIEL_ETIQUETTE'); $strPreparationDays = (string)Tools::getValue('TNTOFFICIEL_DELAI_PREPARATION'); $strDeliveryNotification = (string)Tools::getValue('TNTOFFICIEL_NOTIFICATION'); $strDisplayEDD = (string)Tools::getValue('TNTOFFICIEL_DATE_PREVISIONNELLE'); $strPickupType = (string)Tools::getValue('TNTOFFICIEL_TYPE_RAMASSAGE'); $strPickupHourDriver = (string)Tools::getValue('TNTOFFICIEL_HEURE_RAMASSAGE_DRIVER'); $strPickupMinuteDriver = sprintf("%02s", (string)Tools::getValue('TNTOFFICIEL_MINUTE_RAMASSAGE_DRIVER')); $strPickupHourClosing = (string)Tools::getValue('TNTOFFICIEL_HEURE_RAMASSAGE_CLOSING'); $strPickupMinuteClosing = sprintf("%02s", (string)Tools::getValue('TNTOFFICIEL_MINUTE_RAMASSAGE_CLOSING')); $strPickupDisplayNumber = (string)Tools::getValue('TNTOFFICIEL_AFFICHAGE_RAMASSAGE'); $strAPIGoogleMapKey = (string)Tools::getValue('TNTOFFICIEL_GMAP_API_KEY'); // Displayed values. $arrRefFieldsValue['TNTOFFICIEL_ETIQUETTE'] = $objTNTContextAccountModel->pickup_label_type; $arrRefFieldsValue['TNTOFFICIEL_DELAI_PREPARATION'] = ($objTNTContextAccountModel->pickup_preparation_days ? $objTNTContextAccountModel->pickup_preparation_days : '0' ); $arrRefFieldsValue['TNTOFFICIEL_NOTIFICATION'] = $objTNTContextAccountModel->delivery_notification; $arrRefFieldsValue['TNTOFFICIEL_DATE_PREVISIONNELLE'] = $objTNTContextAccountModel->delivery_display_edd; $arrRefFieldsValue['TNTOFFICIEL_TYPE_RAMASSAGE'] = $objTNTContextAccountModel->pickup_type; $arrRefFieldsValue['TNTOFFICIEL_HEURE_RAMASSAGE_DRIVER'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_HEURE_RAMASSAGE_DRIVER') : $objTNTContextAccountModel->getPickupDriverTime()->format('H') ); $arrRefFieldsValue['TNTOFFICIEL_MINUTE_RAMASSAGE_DRIVER'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_MINUTE_RAMASSAGE_DRIVER') : $objTNTContextAccountModel->getPickupDriverTime()->format('i') ); $arrRefFieldsValue['TNTOFFICIEL_HEURE_RAMASSAGE_CLOSING'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_HEURE_RAMASSAGE_CLOSING') : $objTNTContextAccountModel->getPickupClosingTime()->format('H') ); $arrRefFieldsValue['TNTOFFICIEL_MINUTE_RAMASSAGE_CLOSING'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_MINUTE_RAMASSAGE_CLOSING') : $objTNTContextAccountModel->getPickupClosingTime()->format('i') ); $arrRefFieldsValue['TNTOFFICIEL_AFFICHAGE_RAMASSAGE'] = $objTNTContextAccountModel->pickup_display_number; $arrRefFieldsValue['TNTOFFICIEL_GMAP_API_KEY'] = $objTNTContextAccountModel->api_google_map_key; if (Tools::isSubmit($strArgIdForm)) { $arrRefFieldsValue['TNTOFFICIEL_ETIQUETTE'] = $strPickupLabelType; $arrRefFieldsValue['TNTOFFICIEL_DELAI_PREPARATION'] = $strPreparationDays; $arrRefFieldsValue['TNTOFFICIEL_NOTIFICATION'] = $strDeliveryNotification; $arrRefFieldsValue['TNTOFFICIEL_DATE_PREVISIONNELLE'] = $strDisplayEDD; $arrRefFieldsValue['TNTOFFICIEL_TYPE_RAMASSAGE'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_TYPE_RAMASSAGE') : $objTNTContextAccountModel->pickup_type ); $arrRefFieldsValue['TNTOFFICIEL_HEURE_RAMASSAGE_DRIVER'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_HEURE_RAMASSAGE_DRIVER') : $objTNTContextAccountModel->getPickupDriverTime()->format('H') ); $arrRefFieldsValue['TNTOFFICIEL_MINUTE_RAMASSAGE_DRIVER'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_MINUTE_RAMASSAGE_DRIVER') : $objTNTContextAccountModel->getPickupDriverTime()->format('i') ); $arrRefFieldsValue['TNTOFFICIEL_HEURE_RAMASSAGE_CLOSING'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_HEURE_RAMASSAGE_CLOSING') : $objTNTContextAccountModel->getPickupClosingTime()->format('H') ); $arrRefFieldsValue['TNTOFFICIEL_MINUTE_RAMASSAGE_CLOSING'] = (Tools::isSubmit($strArgIdForm) ? Tools::getValue('TNTOFFICIEL_MINUTE_RAMASSAGE_CLOSING') : $objTNTContextAccountModel->getPickupClosingTime()->format('i') ); $arrRefFieldsValue['TNTOFFICIEL_AFFICHAGE_RAMASSAGE'] = $strPickupDisplayNumber; $arrRefFieldsValue['TNTOFFICIEL_GMAP_API_KEY'] = $strAPIGoogleMapKey; } /* * Validate the Pickup and return error messages. */ // If store request (else simple check). if (Tools::isSubmit($strArgIdForm)) { // Check. if (!ctype_digit($strPreparationDays) || (int) $strPreparationDays > 30) { $arrFormMessagesPickup['error']['TNTOFFICIEL_DELAI_PREPARATION'] = $this->l('The "Preparation time" must be a positive integer less than or equal to 30 days, please check the information entered.'); } /* * Save */ // If no errors. if (count($arrFormMessagesPickup['error']) === 0) { $objTNTContextAccountModel->setPickupLabelType($strPickupLabelType); $objTNTContextAccountModel->pickup_preparation_days = $strPreparationDays; $objTNTContextAccountModel->delivery_notification = $strDeliveryNotification; $objTNTContextAccountModel->delivery_display_edd = $strDisplayEDD; $objTNTContextAccountModel->setPickupType($strPickupType); $objTNTContextAccountModel->pickup_driver_time = DateTime::createFromFormat('H:i', $strPickupHourDriver.':'.$strPickupMinuteDriver)->format('H:i'); $objTNTContextAccountModel->pickup_closing_time = DateTime::createFromFormat('H:i', $strPickupHourClosing.':'.$strPickupMinuteClosing)->format('H:i'); $objTNTContextAccountModel->pickup_display_number = $strPickupDisplayNumber; $objTNTContextAccountModel->api_google_map_key = $strAPIGoogleMapKey; // Save and also for each shop in account context. $objTNTContextAccountModel->saveContextShop(); $arrFormMessagesPickup['success'][] = $this->l('Settings updated.'); } } $strAPIKGMDesc = $this->l('This is the API key to use the mapping service of Google Maps.').' ' .$this->l('From your own Google account, you need to generate a key containing the "Maps JavaScript API and Geocoding API" APIs.').'
' .sprintf( $this->l('To generate or obtain more information about this key, %sclick here%s.'), '', '' ); return array( 'input' => array( array( 'type' => 'select', 'label' => $this->l('Print format of labels'), 'name' => 'TNTOFFICIEL_ETIQUETTE', 'required' => true, 'options' => array( 'query' => array( array( 'id' => 'STDA4', 'name' => $this->l('Standard A4 printer') ), array( 'id' => 'THERMAL', 'name' => $this->l('Thermal printer on your labels 4"x6"') ), array( 'id' => 'THERMAL,NO_LOGO', 'name' => $this->l('Thermal printer on labels with TNT logo') ), ), 'id' => 'id', 'name' => 'name' ) ), array( 'type' => 'text', 'label' => $this->l('Order preparation time (in days)'), 'name' => 'TNTOFFICIEL_DELAI_PREPARATION', 'required' => true, ), array( 'type' => 'switch', 'label' => $this->l('Send delivery notifications to your recipients (mails and sms)'), 'name' => 'TNTOFFICIEL_NOTIFICATION', 'required' => false, 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'switch', 'label' => $this->l('View the estimated delivery date to customers'), 'name' => 'TNTOFFICIEL_DATE_PREVISIONNELLE', 'required' => false, 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'select', 'label' => $this->l('Pickup type'), 'name' => 'TNTOFFICIEL_TYPE_RAMASSAGE', 'required' => false, 'options' => array( 'query' => array( array( 'id' => 'REGULAR', 'name' => $this->l('Regular') ), array( 'id' => 'OCCASIONAL', 'name' => $this->l('Occasional') ), ), 'id' => 'id', 'name' => 'name' ) ), array( 'type' => 'select', 'label' => $this->l('Driving time of the driver'), 'class' => 'ramassage col-md-2', 'name' => 'TNTOFFICIEL_HEURE_RAMASSAGE_DRIVER', 'required' => false, 'options' => array( 'query' => $arrHeureDriver, 'id' => 'idheure', 'name' => 'name' ), ), array( 'type' => 'select', 'class' => 'ramassage col-md-1', 'name' => 'TNTOFFICIEL_MINUTE_RAMASSAGE_DRIVER', 'required' => false, 'options' => array( 'query' => $arrMinuteDriver, 'id' => 'idminute', 'name' => 'name' ), ), array( 'type' => 'select', 'label' => $this->l('Closure hour'), 'class' => 'ramassage col-md-2', 'name' => 'TNTOFFICIEL_HEURE_RAMASSAGE_CLOSING', 'required' => false, 'options' => array( 'query' => $arrHeureClosing, 'id' => 'idheure', 'name' => 'name' ), ), array( 'type' => 'select', 'class' => 'ramassage col-md-1', 'name' => 'TNTOFFICIEL_MINUTE_RAMASSAGE_CLOSING', 'required' => false, 'options' => array( 'query' => $arrMinuteClosing, 'id' => 'idminute', 'name' => 'name' ), ), array( 'type' => 'switch', 'label' => $this->l('Display the pickup number in the list of transportation vouchers'), 'name' => 'TNTOFFICIEL_AFFICHAGE_RAMASSAGE', 'required' => false, 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'text', 'label' => $this->l('Google Maps API Key'), 'name' => 'TNTOFFICIEL_GMAP_API_KEY', 'size' => 6, 'desc' => $strAPIKGMDesc, 'required' => false, ) ), 'message' => $arrFormMessagesPickup ); } private function getFormAccountZone($strArgIdForm, &$arrRefFieldsValue) { TNTOfficiel_Logstack::log(); $arrFormMessagesZone = array( 'error' => array(), 'warning' => array(), 'success' => array() ); $objTNTContextAccountModel = TNTOfficielAccount::loadContextShop(); // Input values. $arrZone1IDList = Tools::getValue('TNTOFFICIEL_ZONE_1'); $arrZone2IDList = Tools::getValue('TNTOFFICIEL_ZONE_2'); // Displayed values. $arrRefFieldsValue['TNTOFFICIEL_ZONE_1[]'] = $objTNTContextAccountModel->getZone1Departments(); $arrRefFieldsValue['TNTOFFICIEL_ZONE_2[]'] = $objTNTContextAccountModel->getZone2Departments(); if (Tools::isSubmit($strArgIdForm)) { $arrRefFieldsValue['TNTOFFICIEL_ZONE_1[]'] = $arrZone1IDList; $arrRefFieldsValue['TNTOFFICIEL_ZONE_2[]'] = $arrZone2IDList; } /* * Validate the Zone and return error messages. */ // If form submitted. if (Tools::isSubmit($strArgIdForm)) { // Check if zones have the same department. $boolValid = $objTNTContextAccountModel->setZoneDepartments($arrZone1IDList, $arrZone2IDList); // Save and also for each shop in account context. $objTNTContextAccountModel->saveContextShop(); // If no errors. if (!$boolValid) { $arrFormMessagesZone['error'][] = $this->l('All departments in the fields "Regional fees zone 1" and "Regional fees zone 2" must be separate, please check the information entered.'); } } // Department List. $arrZoneAllDepartments = $objTNTContextAccountModel->getZoneAllDepartments(); $objAllDefaultDepartments = array(); foreach ($arrZoneAllDepartments as $strDepartmentName => $strDepartmentNumber) { $objAllDefaultDepartments[] = (object)array( 'name' => $strDepartmentNumber.' - '.$strDepartmentName, 'id' => $strDepartmentNumber ); } $strZone2Desc = $this->l('Enter the department numbers for which you want to apply a specific pricing (ex: 01,18,75,95). You can set the rates in the "Setting TNT Services" tab.'); return array( 'input' => array( array( 'type' => 'select', 'label' => sprintf($this->l('Regional fees zone %s'), 1), 'name' => 'TNTOFFICIEL_ZONE_1', 'size' => 6, 'required' => false, 'class' => 'chosen col-md-6', 'multiple' => true, 'options' => array( 'query' => $objAllDefaultDepartments, 'id' => 'id', 'name' => 'name' ), ), array( 'type' => 'select', 'label' => sprintf($this->l('Regional fees zone %s'), 2), 'name' => 'TNTOFFICIEL_ZONE_2', 'size' => 6, 'required' => false, 'class' => 'chosen col-md-6', 'multiple' => true, 'options' => array( 'query' => $objAllDefaultDepartments, 'id' => 'id', 'name' => 'name' ), 'desc' => $strZone2Desc, ) ), 'message' => $arrFormMessagesZone ); } }