Jump to content

[SOLVED] Configuring Pop Up Login Module & Redirect to previous page


Recommended Posts

I purchased the popup login module. I was able to split the two link from singin/register to two separate links which are now, sign in and sign up. When clicking on the sign in, the popup login comes up, after entering my credentials I'm redirected to the authentication page, where I need to re-sign in again. Even if the wrong pw is entered and selecting "let me in" it will still go to the authentication page.

 

 

 

Does anyone know what would be causing that? 

Edited by generalexperts (see edit history)
Link to comment
Share on other sites

  On 9/12/2014 at 5:52 PM, generalexperts said:

Okay i made some modification to the link i was editing. I put https://mydomain.com/authentication

 

Now it re-directs to the "My-account" page. is there a way to have it redirect to the page the user was on prior to logging in OR the homepage?

if($login_true)

{

ob_start();

header("Location: https://sitename.com/index.php");

exit();

 

}else{

 

ob_start();

header("Location: https://sitename.com/login.php");

exit();

 

}

 

or 

for go back to Previous page write down in php file withing php tag..

 

ob_start();

header('Location: ' . $_SERVER['HTTP_REFERER']);

exit();

 

or by another way

 

header();

exit();

Edited by Sandip Chandela (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
Thanks for the see in the cotroller file.

 

Your popup login form will send data over here..

 

Search for the method named processSubmitLogin() in controller file.

 

protected function processSubmitLogin()

{

Hook::exec('actionBeforeAuthentication');

$passwd = trim(Tools::getValue('passwd'));

$email = trim(Tools::getValue('email'));

.

.

.

.

.

.

}

 

At the end of the function you will see two condition.

 

1 is for ajax request - if ($this->ajax)

and 2 is for non-ajax request - if (!$this->ajax) 

 

Tools::redirect() can use for non-ajax request.

 

Take backup for controller file.

Edited by Sandip Chandela (see edit history)
  • Like 1
Link to comment
Share on other sites

Okay, I see what line you are referring to in order for this to work, but don't know exactly what will work. I've also looked in other forums and there are solutions for this, but they didn't work. 'my-account' should say something else, but not sure what. Is there anything else that needs to be edited in addition? authentication.tpl?

 

thanks again!

Link to comment
Share on other sites

Do following. This works for me as well.

I hope this will also help you out.

 

Authcontroller.php

 

Make a search for following lines in authcontroller.php file.

If you can see "my-account" that is the thing why it is redirecting to my-account page after login. 

You can set any controller name by replacing it like home, .

 

Commented on first two lines 

------------------------------------------------------------------------------------------------------------------

// if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back))

// Tools::redirect(html_entity_decode($back));

 

if(isset($_SERVER['HTTP_REFERER']))

{

        $backurl = $_SERVER['HTTP_REFERER'];

}

 

Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : $backurl));

------------------------------------------------------------------------------------------------------------------

 

Your popup file... or Authentication.tpl whichever file being calling.

 

Remove just my-account text from href tag..

<a href="https://domain.com/my-account" title="Login to your Account" class="login" rel="nofollow">Sign in</a>

Edited by Sandip Chandela (see edit history)
  • Like 1
Link to comment
Share on other sites

Would you be able to tell me where each thing goes. I tried implementing this and it still redirects to my-account. Maybe I'm confused what you mean by "Commented on first two lines" and what files to edit. AuthController.php for the first step, and authentication.tpl for the removing the "my-account," correct?

 

Thanks!

Link to comment
Share on other sites


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) ? url_encode($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 (Context::getContext()->getMobileDevice() === false)

$this->addCSS(_THEME_CSS_DIR_.'authentication.css');

$this->addJqueryPlugin('typewatch');

$this->addJS(_THEME_JS_DIR_.'tools/statesManagement.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();

 

$active_module_newsletter = false;

if ($module_newsletter = Module::getInstanceByName('blocknewsletter'))

$active_module_newsletter = $module_newsletter->active;

 

$this->context->smarty->assign('newsletter', (int)$active_module_newsletter);

 

$back = Tools::getValue('back');

$key = Tools::safeOutput(Tools::getValue('key'));

if (!empty($key))

$back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key;

if (!empty($back))

$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']))

{

$array = preg_split('/,|-/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

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')

));

 

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(_PS_THEME_DIR_.'authentication.tpl'),

'token' => Tools::getToken(false)

);

die(Tools::jsonEncode($return));

}

$this->setTemplate(_PS_THEME_DIR_.'authentication.tpl');

}

 

/**

* 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()

{

if (isset($this->create_account))

{

// Select the most appropriate country

if (isset($_POST['id_country']) && is_numeric($_POST['id_country']))

$selectedCountry = (int)($_POST['id_country']);

/* FIXME : language iso and country iso are not similar,

* maybe an associative table with country an language can resolve it,

* But for now it's a bug !

* @see : bug #6968

* @link:http://www.prestashop.com/bug_tracker/view/6968/

elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))

{

$array = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

if (Validate::isLanguageIsoCode($array[0]))

{

$selectedCountry = Country::getByIso($array[0]);

if (!$selectedCountry)

$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));

}

}*/

if (!isset($selectedCountry))

$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));

 

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'))

Tools::redirect(html_entity_decode($back));

Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? url_encode($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');

 

$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')))

&& (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')))

$error_phone = true;

elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_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 = array_merge($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->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'))

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) ? url_encode($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

{

// Preparing address

$address = new Address();

$_POST['lastname'] = $lastnameAddress;

$_POST['firstname'] = $firstnameAddress;

$address->id_customer = 1;

$this->errors = array_unique(array_merge($this->errors, $address->validateController()));

 

// US customer: normalize the address

if ($address->id_country == Country::getByIso('US'))

{

include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');

$normalize = new AddressStandardizationSolution;

$address->address1 = $normalize->AddressLineStandardization($address->address1);

$address->address2 = $normalize->AddressLineStandardization($address->address2);

}

 

if (!($country = new Country($address->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)

$address->dni = null;

}

 

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))

{

// if registration type is in one step, we save the address

if (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || Tools::isSubmit('submitGuestAccount'))

if (!($country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country))

die(Tools::displayError());

$contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0;

$id_state = isset($address) && is_object($address) ? (int)$address->id_state: 0;

if (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && $contains_state && !$id_state)

$this->errors[] = Tools::displayError('This country requires you to chose a State.');

else

{

$customer->active = 1;

// New Guest customer

if (Tools::isSubmit('is_new_customer'))

$customer->is_guest = !Tools::getValue('is_new_customer', 1);

else

$customer->is_guest = 0;

if (!$customer->add())

$this->errors[] = Tools::displayError('An error occurred while creating your account..');

else

{

$address->id_customer = (int)$customer->id;

$this->errors = array_unique(array_merge($this->errors, $address->validateController()));

if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$address->add())

$this->errors[] = Tools::displayError('An error occurred while creating your address.');

else

{

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 = Address::getFirstCustomerAddressId((int)$customer->id);

$this->context->cart->id_address_invoice = Address::getFirstCustomerAddressId((int)$customer->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'))

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) ? url_encode($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)

{

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

);

}

}

 

  • Like 1
Link to comment
Share on other sites


 

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) ? url_encode($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 (Context::getContext()->getMobileDevice() === false)

$this->addCSS(_THEME_CSS_DIR_.'authentication.css');

$this->addJqueryPlugin('typewatch');

$this->addJS(_THEME_JS_DIR_.'tools/statesManagement.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();

 

 

$active_module_newsletter = false;

if ($module_newsletter = Module::getInstanceByName('blocknewsletter'))

$active_module_newsletter = $module_newsletter->active;

 

 

$this->context->smarty->assign('newsletter', (int)$active_module_newsletter);

 

 

$back = Tools::getValue('back');

$key = Tools::safeOutput(Tools::getValue('key'));

if (!empty($key))

$back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key;

if (!empty($back))

$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']))

{

$array = preg_split('/,|-/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

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')

));

 

 

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(_PS_THEME_DIR_.'authentication.tpl'),

'token' => Tools::getToken(false)

);

die(Tools::jsonEncode($return));

}

$this->setTemplate(_PS_THEME_DIR_.'authentication.tpl');

}

 

 

/**

* 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()

{

if (isset($this->create_account))

{

// Select the most appropriate country

if (isset($_POST['id_country']) && is_numeric($_POST['id_country']))

$selectedCountry = (int)($_POST['id_country']);

/* FIXME : language iso and country iso are not similar,

* maybe an associative table with country an language can resolve it,

* But for now it's a bug !

* @see : bug #6968

* @link:http://www.prestashop.com/bug_tracker/view/6968/

elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))

{

$array = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

if (Validate::isLanguageIsoCode($array[0]))

{

$selectedCountry = Country::getByIso($array[0]);

if (!$selectedCountry)

$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));

}

}*/

if (!isset($selectedCountry))

$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));

 

 

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'))

//Tools::redirect(html_entity_decode($back));

if(isset($_SERVER['HTTP_REFERER'])) {

$backurl = $_SERVER['HTTP_REFERER'];

Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : $backurl));

}else{

Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'index'));

}

 

 

}

}

}

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');

 

 

$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')))

&& (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')))

$error_phone = true;

elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_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 = array_merge($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->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'))

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) ? url_encode($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

{

// Preparing address

$address = new Address();

$_POST['lastname'] = $lastnameAddress;

$_POST['firstname'] = $firstnameAddress;

$address->id_customer = 1;

$this->errors = array_unique(array_merge($this->errors, $address->validateController()));

 

 

// US customer: normalize the address

if ($address->id_country == Country::getByIso('US'))

{

include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');

$normalize = new AddressStandardizationSolution;

$address->address1 = $normalize->AddressLineStandardization($address->address1);

$address->address2 = $normalize->AddressLineStandardization($address->address2);

}

 

 

if (!($country = new Country($address->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)

$address->dni = null;

}

 

 

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))

{

// if registration type is in one step, we save the address

if (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || Tools::isSubmit('submitGuestAccount'))

if (!($country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country))

die(Tools::displayError());

$contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0;

$id_state = isset($address) && is_object($address) ? (int)$address->id_state: 0;

if (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && $contains_state && !$id_state)

$this->errors[] = Tools::displayError('This country requires you to chose a State.');

else

{

$customer->active = 1;

// New Guest customer

if (Tools::isSubmit('is_new_customer'))

$customer->is_guest = !Tools::getValue('is_new_customer', 1);

else

$customer->is_guest = 0;

if (!$customer->add())

$this->errors[] = Tools::displayError('An error occurred while creating your account..');

else

{

$address->id_customer = (int)$customer->id;

$this->errors = array_unique(array_merge($this->errors, $address->validateController()));

if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$address->add())

$this->errors[] = Tools::displayError('An error occurred while creating your address.');

else

{

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 = Address::getFirstCustomerAddressId((int)$customer->id);

$this->context->cart->id_address_invoice = Address::getFirstCustomerAddressId((int)$customer->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'))

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) ? url_encode($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)

{

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

);

}

}

Edited by Sandip Chandela (see edit history)
  • Like 2
Link to comment
Share on other sites

I appreciate the help! There is an error when I put that into the Authcontroller.php. After logging in it redirects to this link below:

 

https://mydomain.com/index.php?controller=https://mydomain.com/modules/popuplogin/loginbox.php

 

I also didn't remove the href tag, not able to locate that specific part...

Edited by generalexperts (see edit history)
Link to comment
Share on other sites

Hi I'm interesting in this post.

Could I do a question?

Is it possible to do login in prestashop from external website?

I've read something about this in old post http://tinyurl.com/q6r2nlh but this is a old version of prestashop.

I've tried it but it doesn't work.

One of my probles is that when I add 

define("DS", '/');
require(".." . DS . "prestashop" . DS . "config" . DS . "config.inc.php");

the web reditect automatically to prestashop index.php, and all of my code is ignored.

Thank you

Link to comment
Share on other sites

  On 10/2/2014 at 6:22 PM, generalexperts said:

I appreciate the help! There is an error when I put that into the Authcontroller.php. After logging in it redirects to this link below:

 

https://mydomain.com/index.php?controller=https://mydomain.com/modules/popuplogin/loginbox.php

 

I also didn't remove the href tag, not able to locate that specific part...

 

i think form request is sent to loginbox.php.

Checkout loginbox.php coding or you can contact support team of popuplogin module.

With out seeing in the coding file can't reach to the solution.

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...