/** * Start forms process * @see FrontController::postProcess() */ public function postProcess() { $origin_newsletter = (bool) $this->customer->newsletter; if (isset($_POST['years']) && isset($_POST['months']) && isset($_POST['days'])) { $this->customer->birthday = (int) $_POST['years'] . '-' . (int) $_POST['months'] . '-' . (int) $_POST['days']; } if (Tools::isSubmit('submitIdentity')) { if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) && !(Tools::getValue('months') == '' && Tools::getValue('days') == '' && Tools::getValue('years') == '')) { $this->errors[] = Tools::displayError('Invalid date of birth.'); } else { $email = trim(Tools::getValue('email')); $this->customer->birthday = empty($_POST['years']) ? '' : (int) $_POST['years'] . '-' . (int) $_POST['months'] . '-' . (int) $_POST['days']; if (isset($_POST['old_passwd'])) { $_POST['old_passwd'] = trim($_POST['old_passwd']); } if (!Validate::isEmail($email)) { $this->errors[] = Tools::displayError('This email address is not valid'); } elseif ($this->customer->email != $email && Customer::customerExists($email, true)) { $this->errors[] = Tools::displayError('An account using this email address has already been registered.'); } elseif (!isset($_POST['old_passwd']) || empty($_POST['old_passwd']) || Tools::encrypt($_POST['old_passwd']) != $this->context->cookie->passwd) { $this->errors[] = Tools::displayError('The password you entered is incorrect.'); } elseif ($_POST['passwd'] != $_POST['confirmation']) { $this->errors[] = Tools::displayError('The password and confirmation do not match.'); } else { $prev_id_default_group = $this->customer->id_default_group; // Merge all errors of this file and of the Object Model $this->errors = array_merge($this->errors, $this->customer->validateController()); } if (!count($this->errors)) { $this->customer->id_default_group = (int) $prev_id_default_group; $this->customer->firstname = Tools::ucwords($this->customer->firstname); if (!isset($_POST['newsletter'])) { $this->customer->newsletter = 0; } elseif (!$origin_newsletter && isset($_POST['newsletter'])) { if ($module_newsletter = Module::getInstanceByName('blocknewsletter')) { if ($module_newsletter->active) { $module_newsletter->confirmSubscription($this->customer->email); } } } if (!isset($_POST['optin'])) { $this->customer->optin = 0; } if (Tools::getValue('passwd')) { $this->context->cookie->passwd = $this->customer->passwd; } if ($this->customer->update()) { $this->context->cookie->customer_lastname = $this->customer->lastname; $this->context->cookie->customer_firstname = $this->customer->firstname; $this->context->smarty->assign('confirmation', 1); } else { $this->errors[] = Tools::displayError('The information cannot be updated.'); } } } } else { $_POST = array_map('stripslashes', $this->customer->getFields()); } return $this->customer; }
public function registration() { $mode = $this->getParam('mode'); $email = strtolower($this->getParam('email')); $name = Tools::ucwords($this->getParam('name', 'NoName')); $familyName = Tools::ucwords($this->getParam('family_name')); $password = $this->getParam('password'); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { exit(json_encode(['result' => 'fail', 'message' => 'Некорректный Email-адрес'])); } if ($mode == 'check-email') { $email = DB::run()->query("select email from users where email = '" . $email . "'")->fetch(); if ($email) { exit(json_encode(['result' => 'fail', 'message' => 'Такой Email уже зарегистрирован в системе!'])); } else { exit(json_encode(['result' => 'done', 'message' => 'Email свободен для регистрации'])); } } if (!$email || !$password) { exit(json_encode(['result' => 'fail', 'message' => 'Все поля формы обязательны для заполнения'])); } $family = DB::run()->prepare('insert into families (name) values (?)'); $user = DB::run()->prepare('insert into users (family, name, email, password, role, registered_date, updated_at, remember_token) values (?, ?, ?, ?, ?, ?, ?, ?)'); $rememberToken = Tools::hash($email, time()); try { DB::run()->beginTransaction(); $family->execute([$familyName]); $familyId = DB::run()->lastInsertId('id'); $registeredDate = date('Y-m-d H:i:s'); $user->execute([$familyId, $name, $email, Tools::hash($password, Registry::get('hash_salt')), 'manager', $registeredDate, $registeredDate, $rememberToken]); $userId = DB::run()->lastInsertId('id'); DB::run()->commit(); } catch (PDOException $e) { DB::run()->rollBack(); exit(json_encode(['result' => 'fail', 'message' => $e->getMessage()])); } if ($userId) { setcookie('auth', $rememberToken, time() + 3600 * 24 * 2, '/'); Tools::setUserAuth((object) ['id' => $userId, 'family' => $familyId, 'name' => $name, 'email' => $email, 'role' => 'manager', 'registered_date' => $registeredDate]); } exit(json_encode(['result' => 'done', 'message' => 'Успешная регистрация!<br>Сейчас Вы будете перенаправлены!'])); }
public function add() { $email = strtolower($this->getParam('email')); $name = Tools::ucwords($this->getParam('name')); $password = $this->getParam('password'); if (!empty($email) && !empty($name) && !empty($password)) { $registeredEmail = DB::run()->query('select email from users where email = ' . DB::run()->quote($email))->fetch(); if ($registeredEmail) { exit(json_encode(['result' => 'fail', 'message' => 'Такой Email/Логин уже зарегистрирован в системе!'])); } $stmt = DB::run()->prepare('insert into users (family, name, email, password, role, registered_date, updated_at) values (?, ?, ?, ?, ?, ?, ?)'); $user = [Registry::get('user')->family, $name, $email, Tools::hash($password, Registry::get('hash_salt')), 'user', date('Y-m-d H:i:s'), date('Y-m-d H:i:s')]; try { DB::run()->beginTransaction(); $stmt->execute($user); DB::run()->commit(); exit(json_encode(['result' => 'done', 'message' => 'Новый пользователь успешно добавлен в систему!', 'user' => $user])); } catch (PDOException $e) { DB::run()->rollBack(); exit(json_encode(['result' => 'fail', 'message' => $e->getMessage()])); } } exit(json_encode(['result' => 'fail', 'message' => 'Все поля должны быть заполнены!'])); }
/** * 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 ($guest_email = Tools::getValue('guest_email')) { $_POST['email'] = $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', $lastnameAddress); $_POST['firstname'] = Tools::getValue('customer_firstname', $firstnameAddress); $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)) { $this->processCustomerNewsletter($customer); $customer->firstname = Tools::ucwords($customer->firstname); $customer->birthday = empty($_POST['years']) ? '' : (int) Tools::getValue('years') . '-' . (int) Tools::getValue('months') . '-' . (int) Tools::getValue('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)); $this->ajaxDie(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) { $multi = (int) Tools::getValue('multi-shipping'); Tools::redirect('index.php?controller=order' . ($multi ? '&multi-shipping=' . $multi : '')); } 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 ($tmp = Tools::getValue($key . '_invoice')) { $post = $tmp; } } } $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'); } if (!$country->active) { $this->errors[] = Tools::displayError('This country is not active.'); } $postcode = ${$addresses_type}->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); } $this->processCustomerNewsletter($customer); $customer->birthday = empty($_POST['years']) ? '' : (int) Tools::getValue('years') . '-' . (int) Tools::getValue('months') . '-' . (int) Tools::getValue('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 ($tmp = Tools::getValue($key . '_invoice')) { $post = $tmp; } } } $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 ($this->ajax && Configuration::get('PS_ORDER_PROCESS_TYPE')) { $delivery_option = array((int) $this->context->cart->id_address_delivery => (int) $this->context->cart->id_carrier . ','); $this->context->cart->setDeliveryOption($delivery_option); } // 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)); $this->ajaxDie(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 = (int) Tools::getValue('multi-shipping') ? '&multi-shipping=' . $multi : '')); } 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); $this->ajaxDie(Tools::jsonEncode($return)); } $this->context->smarty->assign('account_error', $this->errors); } }
/** * Start forms process * @see FrontController::postProcess() */ public function postProcess() { $origin_newsletter = (bool) $this->customer->newsletter; if (Tools::isSubmit('submitIdentity')) { $email = trim(Tools::getValue('email')); if (Tools::getValue('months') != '' && Tools::getValue('days') != '' && Tools::getValue('years') != '') { $this->customer->birthday = (int) Tools::getValue('years') . '-' . (int) Tools::getValue('months') . '-' . (int) Tools::getValue('days'); } elseif (Tools::getValue('months') == '' && Tools::getValue('days') == '' && Tools::getValue('years') == '') { $this->customer->birthday = null; } else { $this->errors[] = Tools::displayError('Invalid date of birth.'); } if (Tools::getIsset('old_passwd')) { $old_passwd = trim(Tools::getValue('old_passwd')); } if (!Validate::isEmail($email)) { $this->errors[] = Tools::displayError('This email address is not valid'); } elseif ($this->customer->email != $email && Customer::customerExists($email, true)) { $this->errors[] = Tools::displayError('An account using this email address has already been registered.'); } elseif (!Tools::getIsset('old_passwd') || Tools::encrypt($old_passwd) != $this->context->cookie->passwd) { $this->errors[] = Tools::displayError('The password you entered is incorrect.'); } elseif (Tools::getValue('passwd') != Tools::getValue('confirmation')) { $this->errors[] = Tools::displayError('The password and confirmation do not match.'); } else { $prev_id_default_group = $this->customer->id_default_group; // Merge all errors of this file and of the Object Model $this->errors = array_merge($this->errors, $this->customer->validateController()); } if (!count($this->errors)) { $this->customer->id_default_group = (int) $prev_id_default_group; $this->customer->firstname = Tools::ucwords($this->customer->firstname); if (Configuration::get('PS_B2B_ENABLE')) { $this->customer->website = Tools::getValue('website'); // force update of website, even if box is empty, this allows user to remove the website $this->customer->company = Tools::getValue('company'); } if (!Tools::getIsset('newsletter')) { $this->customer->newsletter = 0; } elseif (!$origin_newsletter && Tools::getIsset('newsletter')) { if ($module_newsletter = Module::getInstanceByName('blocknewsletter')) { /** @var Blocknewsletter $module_newsletter */ if ($module_newsletter->active) { $module_newsletter->confirmSubscription($this->customer->email); } } } if (!Tools::getIsset('optin')) { $this->customer->optin = 0; } if (Tools::getValue('passwd')) { $this->context->cookie->passwd = $this->customer->passwd; } if ($this->customer->update()) { $this->context->cookie->customer_lastname = $this->customer->lastname; $this->context->cookie->customer_firstname = $this->customer->firstname; $this->context->smarty->assign('confirmation', 1); } else { $this->errors[] = Tools::displayError('The information cannot be updated.'); } } } else { $_POST = array_map('stripslashes', $this->customer->getFields()); } return $this->customer; }
public function init() { self::$amz_payments = new AmzPayments(); $this->isLogged = (bool) $this->context->customer->id && Customer::customerIdExistsStatic((int) $this->context->cookie->id_customer); parent::init(); /* Disable some cache related bugs on the cart/order */ header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); $this->display_column_left = false; $this->display_column_right = false; // Service initialisieren $this->service = self::$amz_payments->getService(); if (Tools::isSubmit('ajax')) { if (Tools::isSubmit('method')) { switch (Tools::getValue('method')) { case 'redirectAuthentication': case 'setusertoshop': if (Tools::getValue('access_token')) { $this->context->cookie->amz_access_token = AmzPayments::prepareCookieValueForPrestaShopUse(Tools::getValue('access_token')); $this->context->cookie->amz_access_token_set_time = time(); } else { if (Tools::getValue('method') == 'redirectAuthentication') { Tools::redirect('index'); } else { error_log('Error, method not submitted and no token'); die('error'); } } if (Tools::getValue('action') == 'fromCheckout') { $accessTokenValue = AmzPayments::prepareCookieValueForAmazonPaymentsUse(Tools::getValue('access_token')); } else { $accessTokenValue = Tools::getValue('access_token'); } $d = self::$amz_payments->requestTokenInfo($accessTokenValue); if ($d->aud != self::$amz_payments->client_id) { if (Tools::getValue('method') == 'redirectAuthentication') { Tools::redirect('index'); } else { error_log('auth error LPA'); die('error'); } } $d = self::$amz_payments->requestProfile($accessTokenValue); $customer_userid = $d->user_id; $customer_name = $d->name; $customer_email = $d->email; // $postcode = $d->postal_code; if ($customers_local_id = AmazonPaymentsCustomerHelper::findByAmazonCustomerId($customer_userid)) { // Customer already exists - login Hook::exec('actionBeforeAuthentication'); $customer = new Customer(); $authentication = AmazonPaymentsCustomerHelper::getByCustomerID($customers_local_id, true, $customer); if (isset($authentication->active) && !$authentication->active) { $this->errors[] = Tools::displayError('Your account isn\'t available at this time, please contact us'); } elseif (!$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 { $id_carrier = (int) $this->context->cart->id_carrier; $this->context->cart->id_carrier = 0; $this->context->cart->setDeliveryOption(null); $this->context->cart->id_address_delivery = (int) Address::getFirstCustomerAddressId((int) $customer->id); $this->context->cart->id_address_invoice = (int) Address::getFirstCustomerAddressId((int) $customer->id); } $this->context->cart->id_customer = (int) $customer->id; $this->context->cart->secure_key = $customer->secure_key; if ($this->ajax && isset($id_carrier) && $id_carrier && Configuration::get('PS_ORDER_PROCESS_TYPE')) { $delivery_option = array($this->context->cart->id_address_delivery => $id_carrier . ','); $this->context->cart->setDeliveryOption($delivery_option); } $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 (Tools::getValue('action') == 'fromCheckout' && isset($this->context->cookie->amz_connect_order)) { AmzPayments::switchOrderToCustomer($this->context->customer->id, $this->context->cookie->amz_connect_order, true); } if (Tools::getValue('action') == 'checkout') { $goto = $this->context->link->getModuleLink('amzpayments', 'amzpayments'); } elseif (Tools::getValue('action') == 'fromCheckout') { $goto = 'index.php?controller=history'; } elseif ($this->context->cart->nbProducts()) { $goto = 'index.php?controller=order'; } else { if (Configuration::get('PS_SSL_ENABLED')) { $goto = _PS_BASE_URL_SSL_ . __PS_BASE_URI__; } else { $goto = _PS_BASE_URL_ . __PS_BASE_URI__; } } if (Tools::getValue('method') == 'redirectAuthentication') { Tools::redirect($goto); } else { echo $goto; } } } else { if (AmazonPaymentsCustomerHelper::findByEmailAddress($customer_email)) { $this->context->cookie->amzConnectEmail = $customer_email; $this->context->cookie->amzConnectCustomerId = $customer_userid; $goto = $this->context->link->getModuleLink('amzpayments', 'connect_accounts'); if (Tools::getValue('action') && Tools::getValue('action') == 'checkout') { if (strpos($goto, '?') > 0) { $goto .= '&checkout=1'; } else { $goto .= '?checkout=1'; } } if (Tools::getValue('method') == 'redirectAuthentication') { Tools::redirect($goto); } else { echo $goto; } } else { // Customer does not exist - Create account Hook::exec('actionBeforeSubmitAccount'); $this->create_account = true; $_POST['passwd'] = md5(time() . _COOKIE_KEY_); $firstname = ''; $lastname = ''; $customer_name = preg_replace("/[0-9]/", "", $customer_name); if (strpos(trim($customer_name), ' ') !== false) { list($firstname, $lastname) = explode(' ', trim($customer_name)); } elseif (strpos(trim($customer_name), '-') !== false) { list($firstname, $lastname) = explode('-', trim($customer_name)); } else { $firstname = trim($customer_name); $lastname = 'Placeholder'; } $customer = new Customer(); $customer->email = $customer_email; $lastname_address = $lastname; $firstname_address = $firstname; $_POST['lastname'] = Tools::getValue('customer_lastname', $lastname_address); $_POST['firstname'] = Tools::getValue('customer_firstname', $firstname_address); // $addresses_types = array('address'); $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 (!count($this->errors)) { $customer->firstname = Tools::ucwords($customer->firstname); $customer->is_guest = 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.'); } } AmazonPaymentsCustomerHelper::saveCustomersAmazonReference($customer, $customer_userid); $this->updateContext($customer); $this->context->cart->update(); Hook::exec('actionCustomerAccountAdd', array('_POST' => $_POST, 'newCustomer' => $customer)); if (Tools::getValue('action') == 'fromCheckout' && isset($this->context->cookie->amz_connect_order)) { AmzPayments::switchOrderToCustomer($customer->id, $this->context->cookie->amz_connect_order, true); } if (Tools::getValue('action') == 'checkout') { $goto = $this->context->link->getModuleLink('amzpayments', 'amzpayments'); } elseif (Tools::getValue('action') == 'fromCheckout') { $goto = 'index.php?controller=history'; } elseif ($this->context->cart->nbProducts()) { $goto = 'index.php?controller=order'; } else { if (Configuration::get('PS_SSL_ENABLED')) { $goto = _PS_BASE_URL_SSL_ . __PS_BASE_URI__; } else { $goto = _PS_BASE_URL_ . __PS_BASE_URI__; } } if (Tools::getValue('method') == 'redirectAuthentication') { Tools::redirect($goto); } else { echo $goto; } } else { $this->errors[] = Tools::displayError('An error occurred while creating your account.'); } } } else { error_log('Error validating customers informations'); die('error'); } } } die; } } } }