Files
prestashop/classes/checkout/CheckoutPersonalInformationStep.php
2026-04-09 18:31:51 +02:00

115 lines
3.6 KiB
PHP

<?php
/**
* For the full copyright and license information, please view the
* docs/licenses/LICENSE.txt file that was distributed with this source code.
*/
use Symfony\Contracts\Translation\TranslatorInterface;
class CheckoutPersonalInformationStepCore extends AbstractCheckoutStep
{
protected $template = 'checkout/_partials/steps/personal-information.tpl';
private $loginForm;
private $registerForm;
private $show_login_form = false;
/**
* @var bool
*/
public $logged_in;
/**
* @param Context $context
* @param TranslatorInterface $translator
* @param CustomerLoginForm $loginForm
* @param CustomerForm $registerForm
*/
public function __construct(
Context $context,
TranslatorInterface $translator,
CustomerLoginForm $loginForm,
CustomerForm $registerForm
) {
parent::__construct($context, $translator);
$this->loginForm = $loginForm;
$this->registerForm = $registerForm;
}
public function handleRequest(array $requestParameters = [])
{
// personal info step is always reachable
$this->setReachable(true);
$this->registerForm
->fillFromCustomer(
$this
->getCheckoutProcess()
->getCheckoutSession()
->getCustomer()
);
if (isset($requestParameters['submitCreate'])) {
$this->registerForm->fillWith($requestParameters);
$hookResult = array_reduce(
Hook::exec('actionSubmitAccountBefore', [], null, true),
function ($carry, $item) {
return $carry && $item;
},
true
);
if ($hookResult && $this->registerForm->submit()) {
$this->setNextStepAsCurrent();
$this->setComplete(true);
} else {
$this->setComplete(false);
$this->setCurrent(true);
$this->getCheckoutProcess()->setHasErrors(true)->setNextStepReachable();
}
} elseif (isset($requestParameters['submitLogin'])) {
$this->loginForm->fillWith($requestParameters);
if ($this->loginForm->submit()) {
$this->setNextStepAsCurrent();
$this->setComplete(true);
} else {
$this->getCheckoutProcess()->setHasErrors(true);
$this->show_login_form = true;
}
} elseif (array_key_exists('login', $requestParameters)) {
$this->show_login_form = true;
$this->setCurrent(true);
}
$this->logged_in = $this
->getCheckoutProcess()
->getCheckoutSession()
->customerHasLoggedIn();
if ($this->logged_in && !$this->getCheckoutSession()->getCustomer()->is_guest) {
$this->setComplete(true);
}
$this->setTitle(
$this->getTranslator()->trans(
'Personal Information',
[],
'Shop.Theme.Checkout'
)
);
}
public function render(array $extraParams = [])
{
return $this->renderTemplate(
$this->getTemplate(),
$extraParams,
[
'show_login_form' => $this->show_login_form,
'login_form' => $this->loginForm->getProxy(),
'register_form' => $this->registerForm->getProxy(),
'guest_allowed' => $this->getCheckoutSession()->isGuestAllowed(),
'empty_cart_on_logout' => !Configuration::get('PS_CART_FOLLOWING'),
]
);
}
}