Skip to content

Commit

Permalink
refactoring controllers
Browse files Browse the repository at this point in the history
  • Loading branch information
oxlen committed Nov 14, 2021
1 parent 3d799a1 commit f1fb777
Show file tree
Hide file tree
Showing 10 changed files with 359 additions and 304 deletions.
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"magento/module-config": "101.2.*",
"magento/module-ui": "101.2.*",
"magento/module-backend": "102.0.*",
"eriocnemis/core-exception": "2.4.*",
"eriocnemis/module-region": "2.4.2",
"eriocnemis/module-region-api": "2.4.2",
"eriocnemis/module-region-admin-ui": "2.4.2",
Expand Down
29 changes: 29 additions & 0 deletions src/Api/SaveRuleDataInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php
/**
* Copyright © Eriocnemis, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Eriocnemis\RegionShippingRuleAdminUi\Api;

use Magento\Framework\App\RequestInterface;
use Magento\Framework\Exception\LocalizedException;
use Eriocnemis\RegionShippingRuleApi\Api\Data\RuleInterface;

/**
* Save data
*
* @api
*/
interface SaveRuleDataInterface
{
/**
* Save data
*
* @param RequestInterface $request
* @return RuleInterface
* @throws LocalizedException
*/
public function execute(RequestInterface $request): RuleInterface;
}
105 changes: 105 additions & 0 deletions src/Controller/Adminhtml/Shipping/Rule/AbstractMassAction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<?php
/**
* Copyright © Eriocnemis, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Eriocnemis\RegionShippingRuleAdminUi\Controller\Adminhtml\Shipping\Rule;

use Psr\Log\LoggerInterface;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Ui\Component\MassAction\Filter;
use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\Exception\LocalizedException;
use Eriocnemis\RegionShippingRule\Model\ResourceModel\Rule\CollectionFactory;

/**
* Abstract mass action controller
*/
abstract class AbstractMassAction extends Action
{
/**
* @var Filter
*/
protected $filter;

/**
* @var CollectionFactory
*/
protected $collectionFactory;

/**
* @var string
*/
protected $errorMessage;

/**
* @var LoggerInterface
*/
protected $logger;

/**
* Initialize controller
*
* @param Context $context
* @param CollectionFactory $collectionFactory
* @param Filter $filter
* @param LoggerInterface $logger
*/
public function __construct(
Context $context,
CollectionFactory $collectionFactory,
Filter $filter,
LoggerInterface $logger
) {
$this->collectionFactory = $collectionFactory;
$this->filter = $filter;
$this->logger = $logger;

parent::__construct(
$context
);
}

/**
* Execute action
*
* @return ResultInterface
*/
public function execute(): ResultInterface
{
try {
$collection = $this->filter->getCollection(
$this->collectionFactory->create()
);

if ($collection->getSize()) {
return $this->massAction($collection);
}
$this->messageManager->addErrorMessage(
(string)__('Please correct the rules you requested.')
);
} catch (LocalizedException $e) {
$this->messageManager->addErrorMessage(
$e->getMessage()
);
} catch (\Exception $e) {
$this->logger->critical($e->getMessage());
$this->messageManager->addErrorMessage(
(string)__($this->errorMessage)
);
}
return $this->resultRedirectFactory->create()->setPath('*/*/index');
}

/**
* Process to collection items
*
* @param AbstractDb $collection
* @return ResultInterface
*/
abstract protected function massAction(AbstractDb $collection);
}
75 changes: 37 additions & 38 deletions src/Controller/Adminhtml/Shipping/Rule/Delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@

namespace Eriocnemis\RegionShippingRuleAdminUi\Controller\Adminhtml\Shipping\Rule;

use Psr\Log\LoggerInterface;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\App\Action\HttpPostActionInterface;
use Eriocnemis\Core\Exception\ResolveExceptionInterface;
use Eriocnemis\RegionShippingRuleApi\Api\Data\RuleInterface;
use Eriocnemis\RegionShippingRuleApi\Api\DeleteRuleByIdInterface;

Expand All @@ -26,30 +25,35 @@ class Delete extends Action implements HttpPostActionInterface
*/
const ADMIN_RESOURCE = 'Eriocnemis_Region::shipping_rule_delete';

/**
* Action name constant
*/
const ACTION_NAME = 'delete';

/**
* @var DeleteRuleByIdInterface
*/
private $deleteRuleById;

/**
* @var LoggerInterface
* @var ResolveExceptionInterface
*/
private $logger;
private $resolveException;

/**
* Initialize controller
*
* @param Context $context
* @param DeleteRuleByIdInterface $deleteRuleById
* @param LoggerInterface $logger
* @param ResolveExceptionInterface $resolveException
*/
public function __construct(
Context $context,
DeleteRuleByIdInterface $deleteRuleById,
LoggerInterface $logger
ResolveExceptionInterface $resolveException
) {
$this->deleteRuleById = $deleteRuleById;
$this->logger = $logger;
$this->resolveException = $resolveException;

parent::__construct(
$context
Expand All @@ -63,41 +67,36 @@ public function __construct(
*/
public function execute(): ResultInterface
{
$ruleId = (int)$this->getRequest()->getPost(RuleInterface::RULE_ID);
/** @var \Magento\Framework\Controller\Result\Redirect $result */
$result = $this->resultRedirectFactory->create();

$ruleId = (int)$this->getRequest()->getPost(RuleInterface::RULE_ID);
if (!$ruleId) {
$this->messageManager->addErrorMessage(
(string)__('Wrong request.')
);
return $result->setPath('*/*');
if ($ruleId) {
try {
$this->deleteRuleById->execute($ruleId);
$this->messageManager->addSuccessMessage(
(string)__('The Rule has been deleted.')
);
return $result->setPath('*/*/index');
} catch (\Exception $e) {
$this->resolveException->execute($e, self::ACTION_NAME);
}
return $result->setPath('*/*/edit', $this->getParams($ruleId));
}
return $result->setPath('*/*');
}

try {
$this->deleteRuleById->execute($ruleId);
$this->messageManager->addSuccessMessage(
(string)__('The Rule has been deleted.')
);
$result->setPath('*/*/index');
} catch (LocalizedException $e) {
$this->messageManager->addErrorMessage(
$e->getMessage()
);
$result->setPath('*/*/edit', [
RuleInterface::RULE_ID => $ruleId,
'_current' => true,
]);
} catch (\Exception $e) {
$this->logger->critical($e->getMessage());
$this->messageManager->addErrorMessage(
(string)__('We can\'t delete the rule right now. Please review the log and try again.')
);
$result->setPath('*/*/edit', [
RuleInterface::RULE_ID => $ruleId,
'_current' => true,
]);
}
return $result;
/**
* Retrieve params
*
* @param int $ruleId
* @return mixed[]
*/
private function getParams(int $ruleId): array
{
return [
RuleInterface::RULE_ID => $ruleId,
'_current' => true
];
}
}
91 changes: 13 additions & 78 deletions src/Controller/Adminhtml/Shipping/Rule/MassDelete.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,103 +7,38 @@

namespace Eriocnemis\RegionShippingRuleAdminUi\Controller\Adminhtml\Shipping\Rule;

use Psr\Log\LoggerInterface;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Action\HttpPostActionInterface;
use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Ui\Component\MassAction\Filter;
use Eriocnemis\RegionShippingRule\Model\ResourceModel\Rule\CollectionFactory;
use Magento\Framework\App\Action\HttpPostActionInterface;
use Magento\Framework\Data\Collection\AbstractDb;

/**
* Mass delete controller
*/
class MassDelete extends Action implements HttpPostActionInterface
class MassDelete extends AbstractMassAction implements HttpPostActionInterface
{
/**
* Authorization level of a basic admin session
*/
const ADMIN_RESOURCE = 'Eriocnemis_Region::shipping_rule_delete';

/**
* @var Filter
*/
private $filter;

/**
* @var CollectionFactory
* @var string
*/
private $collectionFactory;
protected $errorMessage = 'We can\'t delete these rules right now. Please review the log and try again.';

/**
* @var LoggerInterface
*/
private $logger;

/**
* Initialize controller
*
* @param Context $context
* @param CollectionFactory $collectionFactory
* @param Filter $filter
* @param LoggerInterface $logger
*/
public function __construct(
Context $context,
CollectionFactory $collectionFactory,
Filter $filter,
LoggerInterface $logger
) {
$this->collectionFactory = $collectionFactory;
$this->filter = $filter;
$this->logger = $logger;

parent::__construct(
$context
);
}

/**
* Delete specified rules
* Process to collection items
*
* @param AbstractDb $collection
* @return ResultInterface
*/
public function execute(): ResultInterface
protected function massAction(AbstractDb $collection)
{
if (true !== $this->getRequest()->isPost()) {
$this->messageManager->addErrorMessage(
(string)__('Wrong request.')
);
return $this->resultRedirectFactory->create()->setPath('*/*');
}
$collection->walk('delete');

try {
$collection = $this->filter->getCollection(
$this->collectionFactory->create()
);

$size = $collection->getSize();
if (!$size) {
$this->messageManager->addError(
(string)__('Please correct the rules you requested.')
);
return $this->resultRedirectFactory->create()->setPath('*/*');
}

$collection->walk('delete');

$this->messageManager->addSuccess(
(string)__('You deleted a total of %1 records.', $size)
);
} catch (LocalizedException $e) {
$this->messageManager->addError($e->getMessage());
} catch (\Exception $e) {
$this->messageManager->addError(
(string)__('We can\'t delete these rules right now. Please review the log and try again.')
);
$this->logger->critical($e->getMessage());
}
return $this->resultRedirectFactory->create()->setPath('*/*');
$this->messageManager->addSuccessMessage(
(string)__('You deleted a total of %1 records.', $collection->getSize())
);
return $this->resultRedirectFactory->create()->setPath('*/*/index');
}
}
Loading

0 comments on commit f1fb777

Please sign in to comment.