wqest Posted January 15, 2012 Share Posted January 15, 2012 Hello! How to make address and other required information not required? I don't want to remove those fields, just not obligatory. Thanks for any help! Link to comment Share on other sites More sharing options...
wqest Posted January 16, 2012 Author Share Posted January 16, 2012 up! problem still exist Link to comment Share on other sites More sharing options...
Mike Kranzler Posted January 16, 2012 Share Posted January 16, 2012 Hi wqest, In your theme's authentication.tpl file, locate the lines for Address and anything else you would like to change and replace class="required text" with class="text" I hope this helps. -Mike 1 Link to comment Share on other sites More sharing options...
wqest Posted January 17, 2012 Author Share Posted January 17, 2012 Hi, Mike! Thanks, but it does not work for me... http://amanita.planet.ee Link to comment Share on other sites More sharing options...
Mike Kranzler Posted January 17, 2012 Share Posted January 17, 2012 Hi, Mike! Thanks, but it does not work for me... http://amanita.planet.ee Have you already cleared your smarty cache and enabled force compile? -Mike Link to comment Share on other sites More sharing options...
wqest Posted January 17, 2012 Author Share Posted January 17, 2012 Well, yes.. Exactly like this: http://www.prestashopdocumentation.info/how-to-delete-smarty-cache-in-prestashop/ Right? Link to comment Share on other sites More sharing options...
Mike Kranzler Posted January 17, 2012 Share Posted January 17, 2012 In that case, go ahead and try the suggestions here, and let me know if that resolves your issue. -Mike Link to comment Share on other sites More sharing options...
wqest Posted January 17, 2012 Author Share Posted January 17, 2012 Yes, i've already read this thread, but no luck yet... Link to comment Share on other sites More sharing options...
Mike Kranzler Posted January 17, 2012 Share Posted January 17, 2012 Yes, i've already read this thread, but no luck yet... And you made all the adjustments suggested by Snade in the post I linked you to directly? -Mike Link to comment Share on other sites More sharing options...
Snade Posted January 17, 2012 Share Posted January 17, 2012 Hi to remove the address from required you must edit classes/address.php (remove the adress from that line like this) protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'city'); Tbh, I never tried to remove telephone as required field, and as you see, the code for this is not there. Now I dont have time, but if no one else suggest a solution, I'll spare some time and will try to find how to do this. 3 Link to comment Share on other sites More sharing options...
Mike Kranzler Posted January 17, 2012 Share Posted January 17, 2012 As always, thank you Snade. wqest, I hope this helps! -Mike Link to comment Share on other sites More sharing options...
Snade Posted January 17, 2012 Share Posted January 17, 2012 Hello again Good news, that was easy. Just made a quick search in the prestashop files and found how to disable the phone. Go to controllers/AuthControler.php and remove this if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) $this->errors[] = Tools::displayError('You must register at least one phone number'); let me know if this works for you 2 Link to comment Share on other sites More sharing options...
wqest Posted January 26, 2012 Author Share Posted January 26, 2012 Hello! Sorry for not replying a while, but... Just tried this solution and this works just great!! Thank You so much Mike and Snade!! Link to comment Share on other sites More sharing options...
Mike Kranzler Posted January 26, 2012 Share Posted January 26, 2012 I'm glad this worked for you! Happy selling! -Mike Link to comment Share on other sites More sharing options...
MYFRENCHNEIGHBOR Posted February 4, 2012 Share Posted February 4, 2012 Thanks Snade !!!!!!!!!! The solution I was looking for !!!!!!!!! Link to comment Share on other sites More sharing options...
MYFRENCHNEIGHBOR Posted February 5, 2012 Share Posted February 5, 2012 Now, the phone number is not mandatory but after hours .... i don't suceed to delete the red asterisk. I tried to modify athentication.tpl and adress.tpl by deleting some *. Thanks to Firebug, I found that i must delete a <sup>*</sup> but I'm unable to find out where ???? HELP !!!!! Link to comment Share on other sites More sharing options...
Bru Posted February 20, 2012 Share Posted February 20, 2012 Hello again Good news, that was easy. Just made a quick search in the prestashop files and found how to disable the phone. Go to controllers/AuthControler.php and remove this if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) $this->errors[] = Tools::displayError('You must register at least one phone number'); let me know if this works for you Thanks Snade for Your solution! This help me, and working fine (PS 1.4.6.2). But I try to use overriding to modify code without actually modifying the original files. see: http://doc.prestasho...roller+Override I made copy of AuthController.php and saved it to /override/controllers/AuthController.php Then I modify new AuthController.php. It contain "class AuthController extends AuthControllerCore" with only one method "public function preProcess()" class AuthController extends AuthControllerCore { public function preProcess() { parent::preProcess(); /* ... orignal code ... */ $_POST['firstname'] = $_POST['customer_firstname']; /* dissabled by Your suggestion if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) { $this->errors[] = Tools::displayError('You must register at least one phone number'); } */ /* ... rest of original code */ } } But this not work! Probably I made some mistake. I used overriding for e.g. class Validate extends ValidateCore and it work. Where is problem? thanks Bru. Link to comment Share on other sites More sharing options...
chows Posted April 15, 2012 Share Posted April 15, 2012 Hello again Good news, that was easy. Just made a quick search in the prestashop files and found how to disable the phone. Go to controllers/AuthControler.php and remove this if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) $this->errors[] = Tools::displayError('You must register at least one phone number'); let me know if this works for you Hi, I tried doing this, but upon clicking submit, I get a blank page saying "Fatal Error". Any clues? Link to comment Share on other sites More sharing options...
Bru Posted April 15, 2012 Share Posted April 15, 2012 (PS 1.4.7.3) Hi, here in an example for overriding from PHP manual cite from PHP manual about "extends" It is not possible to subtract from a class, that is, to undefine any existing functions or variables. If you have a class that extends an other and both classes have a function with the same name then visibility to both classes should be the same, else you will have a fatal error. create new php page with folowing code <?php class test { public function __construct() { echo '__construct() from class test was run<br />'; } public function name() { $this->showName('Hello Bru'); } public function showName($name) { echo 'my name in private "test" is ' . $name; } } class extendTest extends test { public function __construct() { parent::__construct(); echo '__construct() from clas extendTest was run<br /><br />'; } public function showName($name) { echo 'my name in "extendTest" is ' . $name; } } $test = new extendTest(); $test->name(); when you run code above in some internet browser you will see: __construct() from class test was run __construct() from clas extendTest was run my name in "extendTest" is Hello Bru but this analogy not work for class AuthController. Why? bru Link to comment Share on other sites More sharing options...
daverr Posted June 30, 2012 Share Posted June 30, 2012 Hello again Good news, that was easy. Just made a quick search in the prestashop files and found how to disable the phone. Go to controllers/AuthControler.php and remove this if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) $this->errors[] = Tools::displayError('You must register at least one phone number'); let me know if this works for you Hi, using OPC and have removed the telephone and mobile fields and this works great for delivery address, but if i try and enter a different invoice address, it comes up with the error... There is 2 error(s): phone is invalid. mobile phone is invalid. i can't find where it does the validation for the invoice telephone and mobile in order to disable it as you did in the authcontroller for delivery address. thanks Link to comment Share on other sites More sharing options...
daverr Posted June 30, 2012 Share Posted June 30, 2012 {SOLVED} have fixed this problem. I don't need any telephone numbers stored, so have removed the validation by editing /classes/address.php around line 107 in the protected $fieldsValidate = array section, i commented out the following 'phone' => 'isPhoneNumber', 'phone_mobile' => 'isPhoneNumber', and now works a treat. Link to comment Share on other sites More sharing options...
uintatherium Posted July 4, 2012 Share Posted July 4, 2012 @daverr: controllers/AddressController.php Link to comment Share on other sites More sharing options...
daverr Posted July 5, 2012 Share Posted July 5, 2012 @uintatherium that file only seems to fix validation for shipping address, not billing address for some reason d Link to comment Share on other sites More sharing options...
rubenorus Posted September 23, 2012 Share Posted September 23, 2012 Hi to remove the address from required you must edit classes/address.php (remove the adress from that line like this) protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'city'); Tbh, I never tried to remove telephone as required field, and as you see, the code for this is not there. Now I dont have time, but if no one else suggest a solution, I'll spare some time and will try to find how to do this. Hi folks just comment I have followed your tutorial. I have modified /*protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'city');*/ in Address.php but then Prestashop still ask me about State and shows an error This country needs a state or something like that But I was able to register only with email,name,lastname,password, country, state. I am really close to the goal, how can I avoid now State an Country ???? Thanks! Link to comment Share on other sites More sharing options...
rubenorus Posted September 23, 2012 Share Posted September 23, 2012 PS: the error is This country requires a state selection Any idea of how to avoid country/state are mandatory??? Link to comment Share on other sites More sharing options...
gabryel80 Posted November 23, 2012 Share Posted November 23, 2012 Edit the selected country and save it, like it dose not had any state. After this you will not have that error. Link to comment Share on other sites More sharing options...
idoityourself Posted February 9, 2013 Share Posted February 9, 2013 Id also like to know where to take out the red * and the "You must register at least one phone number" I also have zip code as required but it wasn't in the list : protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'city'); thanks Link to comment Share on other sites More sharing options...
Bill Dalton Posted February 9, 2013 Share Posted February 9, 2013 (edited) You'll find that in your theme authentication.tpl Look for, <label for="firstname">{l s='First name'} <sup>*</sup></label> Remove the * also in the same file, instead of editing the php files you can change, p class="required text"> to <p class="text"> to remove required field. Edited February 9, 2013 by Bill Dalton (see edit history) Link to comment Share on other sites More sharing options...
Bill Dalton Posted February 9, 2013 Share Posted February 9, 2013 In my case I just took out the phone and left mobile phone. The reason I did it that way is because "Phone" isn't a required field as long as "Mobile" is filled in. And Mobile can appear twice if they need to add a billing address. But the problem with "Mobile is, what if the customer doesn't have a mobile phone? I solved that problem in Translations, I put the English translation for Mobile to Telephone. The Translation system in PS lets you change most text and fields all without coding. Link to comment Share on other sites More sharing options...
idoityourself Posted February 10, 2013 Share Posted February 10, 2013 (edited) Thanks Bill is it somewhere else as well as authentication.tpl because I tried that already. I managed to get the "You must register at least one phone number" to go but the * are still there For the postcode where it says <p class="required postcode text"> do you change that to <p class="postcode text"> or <p class="text"> ? thanks Edited February 10, 2013 by idoityourself (see edit history) Link to comment Share on other sites More sharing options...
Bill Dalton Posted February 10, 2013 Share Posted February 10, 2013 (edited) If editing the authentication.tpl didn't work are you using a third party module for checkout? If so they may have a custom auth.tpl. Change <p class="required postcode text"> to <p class="text"> Edited February 10, 2013 by Bill Dalton (see edit history) Link to comment Share on other sites More sharing options...
Guest cornelm Posted July 24, 2013 Share Posted July 24, 2013 Hi guys, I need some help. What should i do to make DNI field optional and not required? I'm very confused - i don't know which files must be modified. I read so many solutions... PrestaShop™ 1.5.4.1 - default theme Thanks! Link to comment Share on other sites More sharing options...
vekia Posted July 24, 2013 Share Posted July 24, 2013 you've got b2b mode on? Link to comment Share on other sites More sharing options...
Guest cornelm Posted July 24, 2013 Share Posted July 24, 2013 (edited) b2b mode is disable. PS: it's a subliminal message (answer)? Edited July 24, 2013 by cornelm (see edit history) Link to comment Share on other sites More sharing options...
vekia Posted July 24, 2013 Share Posted July 24, 2013 can you please open the /classes/Address.php file and check the object definition? you've got there something like: 'dni' => array('type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16), you've got the same? @cornelm i think that the problem is somewhere else, but im waiting for your answer related to the object definition everything depends on it Link to comment Share on other sites More sharing options...
Guest cornelm Posted July 24, 2013 Share Posted July 24, 2013 (edited) 'dni' => array('type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16), Also, please see enclosed entire content of address.php Thank you vekia for your help - I just know what to do.... PS: my shop in my signature. address.php.txt Edited July 24, 2013 by cornelm (see edit history) Link to comment Share on other sites More sharing options...
vekia Posted July 24, 2013 Share Posted July 24, 2013 please go to the localization > countries click "edit" button near the country that you've got active scroll page down switch that option: enjoy Link to comment Share on other sites More sharing options...
Guest cornelm Posted July 25, 2013 Share Posted July 25, 2013 If i switch to "no", dni field disappear - i wanna be optional (but not required). Thank you for your help i guess i will get some help from a programmer because this basic features (registration form) of prestashop is not that simple to customize. Now i have this settings Link to comment Share on other sites More sharing options...
vekia Posted July 25, 2013 Share Posted July 25, 2013 that's correct, now move it exactly as i show: it mean that you have to define own address format Link to comment Share on other sites More sharing options...
Guest cornelm Posted July 26, 2013 Share Posted July 26, 2013 I still have the problem: DNI field is REQUIRED cannot make it optional. Maybe i will find a paid module for this sh**t. Maybe after PrestaShop 3.5 you could say: :P #What do you consider to be PrestaShop’s main assets? - A particular advantage of the shop is that it is very easy to use & configure. From a person who is has coding experience, it is not so important. However, for those who do not have programming skills etc., the fact that the store is very easy to use is very important. In this way, everyone is able to run their own online shop without any advanced knowledge. Link to comment Share on other sites More sharing options...
thedom Posted September 19, 2013 Share Posted September 19, 2013 If editing the authentication.tpl didn't work are you using a third party module for checkout? If so they may have a custom auth.tpl. Change : <p class="required postcode text"> to <p class="text"> Prestashop 1.5.5 - Default theme Did anybody found the solution ? I only sell digital goods. I want only the email to appear (mandatory field) and the option to subscribe to the newsletter, and that's it. I made the changes in authentication.tpl : I removed (deleted lines) for non requiered fields, it's ok. But I still have error messages about mandatory fields (first name, lastname, etc...) when the customers wants to continue with next step. I guess there are controls in a php file... ? Please help. Thanks. Link to comment Share on other sites More sharing options...
active66 Posted October 22, 2013 Share Posted October 22, 2013 http://www.prestashop.com/forums/topic/147927-remove-required-fields-from-customer-signup/ 1 Link to comment Share on other sites More sharing options...
vekia Posted October 23, 2013 Share Posted October 23, 2013 http://www.prestashop.com/forums/topic/147927-remove-required-fields-from-customer-signup/ thank you for sharing url to this valuable topic, im convinced that it will be helpful for other merchants here with regards, MIlos Link to comment Share on other sites More sharing options...
mtcommunication Posted December 8, 2015 Share Posted December 8, 2015 In prestashop v 1.6.0.5 thema default-bootstrap in file prestashop-> controllers-> front-> AuthController.php which I do modify the code below to not make compulsory one of two phones? Thank you in advance! <?php /* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class AuthControllerCore extends FrontController { public $ssl = true; public $php_self = 'authentication'; /** * @var bool create_account */ protected $create_account; /** * Initialize auth controller * @see FrontController::init() */ public function init() { parent::init(); if (!Tools::getIsset('step') && $this->context->customer->isLogged() && !$this->ajax) Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); if (Tools::getValue('create_account')) $this->create_account = true; } /** * Set default medias for this controller * @see FrontController::setMedia() */ public function setMedia() { parent::setMedia(); if (!$this->useMobileTheme()) $this->addCSS(_THEME_CSS_DIR_.'authentication.css'); $this->addJqueryPlugin('typewatch'); $this->addJS(array( _THEME_JS_DIR_.'tools/vatManagement.js', _THEME_JS_DIR_.'tools/statesManagement.js', _THEME_JS_DIR_.'authentication.js', _PS_JS_DIR_.'validate.js' )); } /** * Run ajax process * @see FrontController::displayAjax() */ public function displayAjax() { $this->display(); } /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); $this->context->smarty->assign('genders', Gender::getGenders()); $this->assignDate(); $this->assignCountries(); $this->context->smarty->assign('newsletter', 1); $back = Tools::getValue('back'); $key = Tools::safeOutput(Tools::getValue('key')); if (!empty($key)) $back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key; if ($back == Tools::secureReferrer(Tools::getValue('back'))) $this->context->smarty->assign('back', html_entity_decode($back)); else $this->context->smarty->assign('back', Tools::safeOutput($back)); if (Tools::getValue('display_guest_checkout')) { if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) $countries = Carrier::getDeliveredCountries($this->context->language->id, true, true); else $countries = Country::getCountries($this->context->language->id, true); if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { // get all countries as language (xy) or language-country (wz-XY) $array = array(); preg_match("#(?<=-)\w\w|\w\w(?!-)#",$_SERVER['HTTP_ACCEPT_LANGUAGE'],$array); if (!Validate::isLanguageIsoCode($array[0]) || !($sl_country = Country::getByIso($array[0]))) $sl_country = (int)Configuration::get('PS_COUNTRY_DEFAULT'); } else $sl_country = (int)Tools::getValue('id_country', Configuration::get('PS_COUNTRY_DEFAULT')); $this->context->smarty->assign(array( 'inOrderProcess' => true, 'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'), 'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'), 'sl_country' => (int)$sl_country, 'countries' => $countries )); } if (Tools::getValue('create_account')) $this->context->smarty->assign('email_create', 1); if (Tools::getValue('multi-shipping') == 1) $this->context->smarty->assign('multi_shipping', true); else $this->context->smarty->assign('multi_shipping', false); $this->assignAddressFormat(); // Call a hook to display more information on form $this->context->smarty->assign(array( 'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'), 'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop') )); // Just set $this->template value here in case it's used by Ajax $this->setTemplate(_PS_THEME_DIR_.'authentication.tpl'); if ($this->ajax) { // Call a hook to display more information on form $this->context->smarty->assign(array( 'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'), 'genders' => Gender::getGenders() )); $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'page' => $this->context->smarty->fetch($this->template), 'token' => Tools::getToken(false) ); die(Tools::jsonEncode($return)); } } /** * Assign date var to smarty */ protected function assignDate() { // Generate years, months and days if (isset($_POST['years']) && is_numeric($_POST['years'])) $selectedYears = (int)($_POST['years']); $years = Tools::dateYears(); if (isset($_POST['months']) && is_numeric($_POST['months'])) $selectedMonths = (int)($_POST['months']); $months = Tools::dateMonths(); if (isset($_POST['days']) && is_numeric($_POST['days'])) $selectedDays = (int)($_POST['days']); $days = Tools::dateDays(); $this->context->smarty->assign(array( 'one_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'), 'onr_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'), //retro compat 'years' => $years, 'sl_year' => (isset($selectedYears) ? $selectedYears : 0), 'months' => $months, 'sl_month' => (isset($selectedMonths) ? $selectedMonths : 0), 'days' => $days, 'sl_day' => (isset($selectedDays) ? $selectedDays : 0) )); } /** * Assign countries var to smarty */ protected function assignCountries() { // Select the most appropriate country if (isset($_POST['id_country']) && is_numeric($_POST['id_country'])) $selectedCountry = (int)($_POST['id_country']); if (!isset($selectedCountry)) $selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT')); if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) $countries = Carrier::getDeliveredCountries($this->context->language->id, true, true); else $countries = Country::getCountries($this->context->language->id, true); $this->context->smarty->assign(array( 'countries' => $countries, 'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'), 'sl_country' => (isset($selectedCountry) ? $selectedCountry : 0), 'vat_management' => Configuration::get('VATNUMBER_MANAGEMENT') )); } /** * Assign address var to smarty */ protected function assignAddressFormat() { $addressItems = array(); $addressFormat = AddressFormat::getOrderedAddressFields(Configuration::get('PS_COUNTRY_DEFAULT'), false, true); $requireFormFieldsList = AddressFormat::$requireFormFieldsList; foreach ($addressFormat as $addressline) foreach (explode(' ', $addressline) as $addressItem) $addressItems[] = trim($addressItem); // Add missing require fields for a new user susbscription form foreach ($requireFormFieldsList as $fieldName) if (!in_array($fieldName, $addressItems)) $addressItems[] = trim($fieldName); foreach (array('inv', 'dlv') as $addressType) $this->context->smarty->assign(array($addressType.'_adr_fields' => $addressFormat, $addressType.'_all_fields' => $addressItems)); } /** * Start forms process * @see FrontController::postProcess() */ public function postProcess() { if (Tools::isSubmit('SubmitCreate')) $this->processSubmitCreate(); if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) $this->processSubmitAccount(); if (Tools::isSubmit('SubmitLogin')) $this->processSubmitLogin(); } /** * Process login */ protected function processSubmitLogin() { Hook::exec('actionBeforeAuthentication'); $passwd = trim(Tools::getValue('passwd')); $email = trim(Tools::getValue('email')); if (empty($email)) $this->errors[] = Tools::displayError('An email address required.'); elseif (!Validate::isEmail($email)) $this->errors[] = Tools::displayError('Invalid email address.'); elseif (empty($passwd)) $this->errors[] = Tools::displayError('Password is required.'); elseif (!Validate::isPasswd($passwd)) $this->errors[] = Tools::displayError('Invalid password.'); else { $customer = new Customer(); $authentication = $customer->getByEmail(trim($email), trim($passwd)); if (!$authentication || !$customer->id) $this->errors[] = Tools::displayError('Authentication failed.'); else { $this->context->cookie->id_compare = isset($this->context->cookie->id_compare) ? $this->context->cookie->id_compare: CompareProduct::getIdCompareByIdCustomer($customer->id); $this->context->cookie->id_customer = (int)($customer->id); $this->context->cookie->customer_lastname = $customer->lastname; $this->context->cookie->customer_firstname = $customer->firstname; $this->context->cookie->logged = 1; $customer->logged = 1; $this->context->cookie->is_guest = $customer->isGuest(); $this->context->cookie->passwd = $customer->passwd; $this->context->cookie->email = $customer->email; // Add customer to the context $this->context->customer = $customer; if (Configuration::get('PS_CART_FOLLOWING') && (empty($this->context->cookie->id_cart) || Cart::getNbProducts($this->context->cookie->id_cart) == 0) && $id_cart = (int)Cart::lastNoneOrderedCart($this->context->customer->id)) $this->context->cart = new Cart($id_cart); else { $this->context->cart->id_carrier = 0; $this->context->cart->setDeliveryOption(null); $this->context->cart->id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id)); $this->context->cart->id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id)); } $this->context->cart->id_customer = (int)$customer->id; $this->context->cart->secure_key = $customer->secure_key; $this->context->cart->save(); $this->context->cookie->id_cart = (int)$this->context->cart->id; $this->context->cookie->write(); $this->context->cart->autosetProductAddress(); Hook::exec('actionAuthentication'); // Login information have changed, so we check if the cart rules still apply CartRule::autoRemoveFromCart($this->context); CartRule::autoAddToCart($this->context); if (!$this->ajax) { if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back)) Tools::redirect(html_entity_decode($back)); Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); } } } if ($this->ajax) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'token' => Tools::getToken(false) ); die(Tools::jsonEncode($return)); } else $this->context->smarty->assign('authentification_error', $this->errors); } /** * Process the newsletter settings and set the customer infos. * * @param Customer $customer Reference on the customer Object. * * @note At this point, the email has been validated. */ protected function processCustomerNewsletter(&$customer) { if (Tools::getValue('newsletter')) { $customer->ip_registration_newsletter = pSQL(Tools::getRemoteAddr()); $customer->newsletter_date_add = pSQL(date('Y-m-d H:i:s')); if ($module_newsletter = Module::getInstanceByName('blocknewsletter')) if ($module_newsletter->active) $module_newsletter->confirmSubscription(Tools::getValue('email')); } } /** * Process submit on an account */ protected function processSubmitAccount() { Hook::exec('actionBeforeSubmitAccount'); $this->create_account = true; if (Tools::isSubmit('submitAccount')) $this->context->smarty->assign('email_create', 1); // New Guest customer if (!Tools::getValue('is_new_customer', 1) && !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) $this->errors[] = Tools::displayError('You cannot create a guest account..'); if (!Tools::getValue('is_new_customer', 1)) $_POST['passwd'] = md5(time()._COOKIE_KEY_); if (isset($_POST['guest_email']) && $_POST['guest_email']) $_POST['email'] = $_POST['guest_email']; // Checked the user address in case he changed his email address if (Validate::isEmail($email = Tools::getValue('email')) && !empty($email)) if (Customer::customerExists($email)) $this->errors[] = Tools::displayError('An account using this email address has already been registered.', false); // Preparing customer $customer = new Customer(); $lastnameAddress = Tools::getValue('lastname'); $firstnameAddress = Tools::getValue('firstname'); $_POST['lastname'] = Tools::getValue('customer_lastname'); $_POST['firstname'] = Tools::getValue('customer_firstname'); $addresses_types = array('address'); if (!Configuration::get('PS_ORDER_PROCESS_TYPE') && Configuration::get('PS_GUEST_CHECKOUT_ENABLED') && Tools::getValue('invoice_address')) $addresses_types[] = 'address_invoice'; $error_phone = false; if (Configuration::get('PS_ONE_PHONE_AT_LEAST')) { if (Tools::isSubmit('submitGuestAccount') || !Tools::getValue('is_new_customer')) { if (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')) $error_phone = true; } elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_PROCESS_TYPE')) || (Configuration::get('PS_ORDER_PROCESS_TYPE') && !Tools::getValue('email_create')) || (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Tools::getValue('email_create'))) && (!Tools::getValue('phone') && !Tools::getValue('phone_mobile'))) $error_phone = true; } if ($error_phone) $this->errors[] = Tools::displayError('You must register at least one phone number.'); $this->errors = array_unique(array_merge($this->errors, $customer->validateController())); // Check the requires fields which are settings in the BO $this->errors = $this->errors + $customer->validateFieldsRequiredDatabase(); if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount')) { if (!count($this->errors)) { if (Tools::isSubmit('newsletter')) $this->processCustomerNewsletter($customer); $customer->firstname = Tools::ucwords($customer->firstname); $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if (!Validate::isBirthDate($customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth.'); // New Guest customer $customer->is_guest = (Tools::isSubmit('is_new_customer') ? !Tools::getValue('is_new_customer', 1) : 0); $customer->active = 1; if (!count($this->errors)) { if ($customer->add()) { if (!$customer->is_guest) if (!$this->sendConfirmationMail($customer)) $this->errors[] = Tools::displayError('The email cannot be sent.'); $this->updateContext($customer); $this->context->cart->update(); Hook::exec('actionCustomerAccountAdd', array( '_POST' => $_POST, 'newCustomer' => $customer )); if ($this->ajax) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'isSaved' => true, 'id_customer' => (int)$this->context->cookie->id_customer, 'id_address_delivery' => $this->context->cart->id_address_delivery, 'id_address_invoice' => $this->context->cart->id_address_invoice, 'token' => Tools::getToken(false) ); die(Tools::jsonEncode($return)); } if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back)) Tools::redirect(html_entity_decode($back)); // redirection: if cart is not empty : redirection to the cart if (count($this->context->cart->getProducts(true)) > 0) Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping')); // else : redirection to the account else Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); } else $this->errors[] = Tools::displayError('An error occurred while creating your account.'); } } } else // if registration type is in one step, we save the address { $_POST['lastname'] = $lastnameAddress; $_POST['firstname'] = $firstnameAddress; $post_back = $_POST; // Preparing addresses foreach($addresses_types as $addresses_type) { $$addresses_type = new Address(); $$addresses_type->id_customer = 1; if ($addresses_type == 'address_invoice') foreach($_POST as $key => &$post) if (isset($_POST[$key.'_invoice'])) $post = $_POST[$key.'_invoice']; $this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController())); if ($addresses_type == 'address_invoice') $_POST = $post_back; if (!($country = new Country($$addresses_type->id_country)) || !Validate::isLoadedObject($country)) $this->errors[] = Tools::displayError('Country cannot be loaded with address->id_country'); $postcode = Tools::getValue('postcode'); /* Check zip code format */ if ($country->zip_code_format && !$country->checkZipCode($postcode)) $this->errors[] = sprintf(Tools::displayError('The Zip/Postal code you\'ve entered is invalid. It must follow this format: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format)))); elseif(empty($postcode) && $country->need_zip_code) $this->errors[] = Tools::displayError('A Zip / Postal code is required.'); elseif ($postcode && !Validate::isPostCode($postcode)) $this->errors[] = Tools::displayError('The Zip / Postal code is invalid.'); if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni')))) $this->errors[] = Tools::displayError('The identification number is incorrect or has already been used.'); elseif (!$country->need_identification_number) $$addresses_type->dni = null; if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) if (!($country = new Country($$addresses_type->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country)) $this->errors[] = Tools::displayError('Country is invalid'); $contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0; $id_state = isset($$addresses_type) && is_object($$addresses_type) ? (int)$$addresses_type->id_state: 0; if ((Tools::isSubmit('submitAccount')|| Tools::isSubmit('submitGuestAccount')) && $contains_state && !$id_state) $this->errors[] = Tools::displayError('This country requires you to choose a State.'); } } if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) && !(Tools::getValue('months') == '' && Tools::getValue('days') == '' && Tools::getValue('years') == '')) $this->errors[] = Tools::displayError('Invalid date of birth'); if (!count($this->errors)) { if (Customer::customerExists(Tools::getValue('email'))) $this->errors[] = Tools::displayError('An account using this email address has already been registered. Please enter a valid password or request a new one. ', false); if (Tools::isSubmit('newsletter')) $this->processCustomerNewsletter($customer); $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if (!Validate::isBirthDate($customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth'); if (!count($this->errors)) { $customer->active = 1; // New Guest customer if (Tools::isSubmit('is_new_customer')) $customer->is_guest = !Tools::getValue('is_new_customer', 1); else $customer->is_guest = 0; if (!$customer->add()) $this->errors[] = Tools::displayError('An error occurred while creating your account.'); else { foreach($addresses_types as $addresses_type) { $$addresses_type->id_customer = (int)$customer->id; if ($addresses_type == 'address_invoice') foreach($_POST as $key => &$post) if (isset($_POST[$key.'_invoice'])) $post = $_POST[$key.'_invoice']; $this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController())); if ($addresses_type == 'address_invoice') $_POST = $post_back; if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$$addresses_type->add()) $this->errors[] = Tools::displayError('An error occurred while creating your address.'); } if (!count($this->errors)) { if (!$customer->is_guest) { $this->context->customer = $customer; $customer->cleanGroups(); // we add the guest customer in the default customer group $customer->addGroups(array((int)Configuration::get('PS_CUSTOMER_GROUP'))); if (!$this->sendConfirmationMail($customer)) $this->errors[] = Tools::displayError('The email cannot be sent.'); } else { $customer->cleanGroups(); // we add the guest customer in the guest customer group $customer->addGroups(array((int)Configuration::get('PS_GUEST_GROUP'))); } $this->updateContext($customer); $this->context->cart->id_address_delivery = (int)Address::getFirstCustomerAddressId((int)$customer->id); $this->context->cart->id_address_invoice = (int)Address::getFirstCustomerAddressId((int)$customer->id); if (isset($address_invoice) && Validate::isLoadedObject($address_invoice)) $this->context->cart->id_address_invoice = (int)$address_invoice->id; // If a logged guest logs in as a customer, the cart secure key was already set and needs to be updated $this->context->cart->update(); // Avoid articles without delivery address on the cart $this->context->cart->autosetProductAddress(); Hook::exec('actionCustomerAccountAdd', array( '_POST' => $_POST, 'newCustomer' => $customer )); if ($this->ajax) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'isSaved' => true, 'id_customer' => (int)$this->context->cookie->id_customer, 'id_address_delivery' => $this->context->cart->id_address_delivery, 'id_address_invoice' => $this->context->cart->id_address_invoice, 'token' => Tools::getToken(false) ); die(Tools::jsonEncode($return)); } // if registration type is in two steps, we redirect to register address if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount')) Tools::redirect('index.php?controller=address'); if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back)) Tools::redirect(html_entity_decode($back)); // redirection: if cart is not empty : redirection to the cart if (count($this->context->cart->getProducts(true)) > 0) Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping')); // else : redirection to the account else Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); } } } } if (count($this->errors)) { //for retro compatibility to display guest account creation form on authentication page if (Tools::getValue('submitGuestAccount')) $_GET['display_guest_checkout'] = 1; if (!Tools::getValue('is_new_customer')) unset($_POST['passwd']); if ($this->ajax) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'isSaved' => false, 'id_customer' => 0 ); die(Tools::jsonEncode($return)); } $this->context->smarty->assign('account_error', $this->errors); } } /** * Process submit on a creation */ protected function processSubmitCreate() { if (!Validate::isEmail($email = Tools::getValue('email_create')) || empty($email)) $this->errors[] = Tools::displayError('Invalid email address.'); elseif (Customer::customerExists($email)) { $this->errors[] = Tools::displayError('An account using this email address has already been registered. Please enter a valid password or request a new one. ', false); $_POST['email'] = $_POST['email_create']; unset($_POST['email_create']); } else { $this->create_account = true; $this->context->smarty->assign('email_create', Tools::safeOutput($email)); $_POST['email'] = $email; } } /** * Update context after customer creation * @param Customer $customer Created customer */ protected function updateContext(Customer $customer) { $this->context->customer = $customer; $this->context->smarty->assign('confirmation', 1); $this->context->cookie->id_customer = (int)$customer->id; $this->context->cookie->customer_lastname = $customer->lastname; $this->context->cookie->customer_firstname = $customer->firstname; $this->context->cookie->passwd = $customer->passwd; $this->context->cookie->logged = 1; // if register process is in two steps, we display a message to confirm account creation if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE')) $this->context->cookie->account_created = 1; $customer->logged = 1; $this->context->cookie->email = $customer->email; $this->context->cookie->is_guest = !Tools::getValue('is_new_customer', 1); // Update cart address $this->context->cart->secure_key = $customer->secure_key; } /** * sendConfirmationMail * @param Customer $customer * @return bool */ protected function sendConfirmationMail(Customer $customer) { if (!Configuration::get('PS_CUSTOMER_CREATION_EMAIL')) return true; return Mail::Send( $this->context->language->id, 'account', Mail::l('Welcome!'), array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue('passwd')), $customer->email, $customer->firstname.' '.$customer->lastname ); } } Link to comment Share on other sites More sharing options...
SaLiC Posted December 28, 2015 Share Posted December 28, 2015 Hi is there a way to only have 1 phone no? I have prestashop 1.6.0.14. Link to comment Share on other sites More sharing options...
LloydRey Posted February 4, 2017 Share Posted February 4, 2017 I need to know this as well, not everyone has a landline is South Africa, But everyone has a Mobile, how do we Disable Landline Link to comment Share on other sites More sharing options...
Recommended Posts