JEMBOT MAWOT Bypass Shell

Current Path : /home/cinepatreb/billetterie/src/Adapter/Customer/CommandHandler/
Upload File :
Current File : /home/cinepatreb/billetterie/src/Adapter/Customer/CommandHandler/EditCustomerHandler.php

<?php
/**
 * Copyright since 2007 PrestaShop SA and Contributors
 * PrestaShop is an International Registered Trademark & Property of PrestaShop SA
 *
 * 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.md.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/OSL-3.0
 * 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 license@prestashop.com 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 https://devdocs.prestashop.com/ for more information.
 *
 * @author    PrestaShop SA and Contributors <contact@prestashop.com>
 * @copyright Since 2007 PrestaShop SA and Contributors
 * @license   https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
 */

namespace PrestaShop\PrestaShop\Adapter\Customer\CommandHandler;

use Customer;
use PrestaShop\PrestaShop\Core\Crypto\Hashing;
use PrestaShop\PrestaShop\Core\Domain\Customer\Command\EditCustomerCommand;
use PrestaShop\PrestaShop\Core\Domain\Customer\CommandHandler\EditCustomerHandlerInterface;
use PrestaShop\PrestaShop\Core\Domain\Customer\Exception\CustomerDefaultGroupAccessException;
use PrestaShop\PrestaShop\Core\Domain\Customer\Exception\CustomerException;
use PrestaShop\PrestaShop\Core\Domain\Customer\Exception\DuplicateCustomerEmailException;
use PrestaShop\PrestaShop\Core\Domain\Customer\ValueObject\RequiredField;
use PrestaShop\PrestaShop\Core\Domain\ValueObject\Email;

/**
 * Handles commands which edits given customer with provided data.
 *
 * @internal
 */
final class EditCustomerHandler extends AbstractCustomerHandler implements EditCustomerHandlerInterface
{
    /**
     * @var Hashing
     */
    private $hashing;

    /**
     * @var string Value of legacy _COOKIE_KEY_
     */
    private $legacyCookieKey;

    /**
     * @param Hashing $hashing
     * @param string $legacyCookieKey
     */
    public function __construct(Hashing $hashing, $legacyCookieKey)
    {
        $this->hashing = $hashing;
        $this->legacyCookieKey = $legacyCookieKey;
    }

    /**
     * {@inheritdoc}
     */
    public function handle(EditCustomerCommand $command)
    {
        $customerId = $command->getCustomerId();
        $customer = new Customer($customerId->getValue());

        $this->assertCustomerWasFound($customerId, $customer);

        $this->assertCustomerWithUpdatedEmailDoesNotExist($customer, $command);
        $this->assertCustomerCanAccessDefaultGroup($customer, $command);

        $this->updateCustomerWithCommandData($customer, $command);

        // validateFieldsRequiredDatabase() below is using $_POST
        // to check if required fields are set
        if ($command->isPartnerOffersSubscribed() !== null) {
            $_POST[RequiredField::PARTNER_OFFERS] = $command->isPartnerOffersSubscribed();
        } elseif ($command->isNewsletterSubscribed() !== null) {
            $_POST[RequiredField::NEWSLETTER] = $command->isNewsletterSubscribed();
        }

        // before validation, we need to get the list of customer mandatory fields from the database
        // and set their current values (only if it is not being modified: if it is not in $_POST)
        $requiredFields = $customer->getFieldsRequiredDatabase();
        foreach ($requiredFields as $field) {
            if (!array_key_exists($field['field_name'], $_POST)) {
                $_POST[$field['field_name']] = $customer->{$field['field_name']};
            }
        }

        $this->assertRequiredFieldsAreNotMissing($customer);

        if (false === $customer->validateFields(false)) {
            throw new CustomerException('Customer contains invalid field values');
        }

        if (false === $customer->update()) {
            throw new CustomerException('Failed to update customer');
        }
    }

    /**
     * @param Customer $customer
     * @param EditCustomerCommand $command
     */
    private function updateCustomerWithCommandData(Customer $customer, EditCustomerCommand $command)
    {
        if (null !== $command->getGenderId()) {
            $customer->id_gender = $command->getGenderId();
        }

        if (null !== $command->getFirstName()) {
            $customer->firstname = $command->getFirstName()->getValue();
        }

        if (null !== $command->getLastName()) {
            $customer->lastname = $command->getLastName()->getValue();
        }

        if (null !== $command->getEmail()) {
            $customer->email = $command->getEmail()->getValue();
        }

        if (null !== $command->getPassword()) {
            $hashedPassword = $this->hashing->hash(
                $command->getPassword()->getValue(),
                $this->legacyCookieKey
            );

            $customer->passwd = $hashedPassword;
        }

        if (null !== $command->getBirthday()) {
            $customer->birthday = $command->getBirthday()->getValue();
        }

        if (null !== $command->isEnabled()) {
            $customer->active = $command->isEnabled();
        }

        if (null !== $command->isPartnerOffersSubscribed()) {
            $customer->optin = $command->isPartnerOffersSubscribed();
        }

        if (null !== $command->getGroupIds()) {
            $customer->groupBox = $command->getGroupIds();
        }

        if (null !== $command->getDefaultGroupId()) {
            $customer->id_default_group = $command->getDefaultGroupId();
        }

        if (null !== $command->isNewsletterSubscribed()) {
            $customer->newsletter = $command->isNewsletterSubscribed();
        }

        $this->updateCustomerB2bData($customer, $command);
    }

    /**
     * @param Customer $customer
     * @param EditCustomerCommand $command
     */
    private function updateCustomerB2bData(Customer $customer, EditCustomerCommand $command)
    {
        if (null !== $command->getCompanyName()) {
            $customer->company = $command->getCompanyName();
        }

        if (null !== $command->getSiretCode()) {
            $customer->siret = $command->getSiretCode();
        }

        if (null !== $command->getApeCode()) {
            $customer->ape = $command->getApeCode()->getValue();
        }

        if (null !== $command->getWebsite()) {
            $customer->website = $command->getWebsite();
        }

        if (null !== $command->getAllowedOutstandingAmount()) {
            $customer->outstanding_allow_amount = $command->getAllowedOutstandingAmount();
        }

        if (null !== $command->getMaxPaymentDays()) {
            $customer->max_payment_days = $command->getMaxPaymentDays();
        }

        if (null !== $command->getRiskId()) {
            $customer->id_risk = $command->getRiskId();
        }
    }

    /**
     * @param Customer $customer
     * @param EditCustomerCommand $command
     */
    private function assertCustomerWithUpdatedEmailDoesNotExist(Customer $customer, EditCustomerCommand $command)
    {
        // if email is not being updated
        // then assertion is not needed
        if (null === $command->getEmail()) {
            return;
        }

        if ($command->getEmail()->isEqualTo(new Email($customer->email))) {
            return;
        }

        $customerByEmail = new Customer();
        $customerByEmail->getByEmail($command->getEmail()->getValue());

        if ($customerByEmail->id) {
            throw new DuplicateCustomerEmailException($command->getEmail(), sprintf('Customer with email "%s" already exists', $command->getEmail()->getValue()));
        }
    }

    /**
     * @param Customer $customer
     * @param EditCustomerCommand $command
     */
    private function assertCustomerCanAccessDefaultGroup(Customer $customer, EditCustomerCommand $command)
    {
        // if neither default group
        // nor group ids are being edited
        // then no need to assert
        if (null === $command->getDefaultGroupId()
            || null === $command->getGroupIds()
        ) {
            return;
        }

        if (!in_array($command->getDefaultGroupId(), $command->getGroupIds())) {
            throw new CustomerDefaultGroupAccessException(sprintf('Customer default group with id "%s" must be in access groups', $command->getDefaultGroupId()));
        }
    }
}

xxxxx1.0, XXX xxxx