| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-vault/Controller/Cards/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-vault/Controller/Cards/DeleteAction.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Vault\Controller\Cards;
use Magento\Customer\Model\Session;
use Magento\Framework\App\Action\Context;
use Magento\Framework\App\Request\Http;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\Data\Form\FormKey\Validator;
use Magento\Framework\Exception\NotFoundException;
use Magento\Vault\Api\Data\PaymentTokenInterface;
use Magento\Vault\Api\PaymentTokenRepositoryInterface;
use Magento\Vault\Controller\CardsManagement;
use Magento\Vault\Model\PaymentTokenManagement;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class DeleteAction extends CardsManagement
{
const WRONG_REQUEST = 1;
const WRONG_TOKEN = 2;
const ACTION_EXCEPTION = 3;
/**
* @var array
*/
private $errorsMap = [];
/**
* @var JsonFactory
*/
private $jsonFactory;
/**
* @var Validator
*/
private $fkValidator;
/**
* @var PaymentTokenRepositoryInterface
*/
private $tokenRepository;
/**
* @var PaymentTokenManagement
*/
private $paymentTokenManagement;
/**
* @param Context $context
* @param Session $customerSession
* @param JsonFactory $jsonFactory
* @param Validator $fkValidator
* @param PaymentTokenRepositoryInterface $tokenRepository
* @param PaymentTokenManagement $paymentTokenManagement
*/
public function __construct(
Context $context,
Session $customerSession,
JsonFactory $jsonFactory,
Validator $fkValidator,
PaymentTokenRepositoryInterface $tokenRepository,
PaymentTokenManagement $paymentTokenManagement
) {
parent::__construct($context, $customerSession);
$this->jsonFactory = $jsonFactory;
$this->fkValidator = $fkValidator;
$this->tokenRepository = $tokenRepository;
$this->paymentTokenManagement = $paymentTokenManagement;
$this->errorsMap = [
self::WRONG_TOKEN => __('No token found.'),
self::WRONG_REQUEST => __('Wrong request.'),
self::ACTION_EXCEPTION => __('Deletion failure. Please try again.')
];
}
/**
* Dispatch request
*
* @return ResultInterface|ResponseInterface
* @throws NotFoundException
*/
public function execute()
{
$request = $this->_request;
if (!$request instanceof Http) {
return $this->createErrorResponse(self::WRONG_REQUEST);
}
if (!$this->fkValidator->validate($request)) {
return $this->createErrorResponse(self::WRONG_REQUEST);
}
$paymentToken = $this->getPaymentToken($request);
if ($paymentToken === null) {
return $this->createErrorResponse(self::WRONG_TOKEN);
}
try {
$this->tokenRepository->delete($paymentToken);
} catch (\Exception $e) {
return $this->createErrorResponse(self::ACTION_EXCEPTION);
}
return $this->createSuccessMessage();
}
/**
* @param int $errorCode
* @return ResponseInterface
*/
private function createErrorResponse($errorCode)
{
$this->messageManager->addErrorMessage(
$this->errorsMap[$errorCode]
);
return $this->_redirect('vault/cards/listaction');
}
/**
* @return ResponseInterface
*/
private function createSuccessMessage()
{
$this->messageManager->addSuccessMessage(
__('Stored Payment Method was successfully removed')
);
return $this->_redirect('vault/cards/listaction');
}
/**
* @param Http $request
* @return PaymentTokenInterface|null
*/
private function getPaymentToken(Http $request)
{
$publicHash = $request->getPostValue(PaymentTokenInterface::PUBLIC_HASH);
if ($publicHash === null) {
return null;
}
return $this->paymentTokenManagement->getByPublicHash(
$publicHash,
$this->customerSession->getCustomerId()
);
}
}