Skip to content

Commit f1fb777

Browse files
committed
refactoring controllers
1 parent 3d799a1 commit f1fb777

File tree

10 files changed

+359
-304
lines changed

10 files changed

+359
-304
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"magento/module-config": "101.2.*",
1919
"magento/module-ui": "101.2.*",
2020
"magento/module-backend": "102.0.*",
21+
"eriocnemis/core-exception": "2.4.*",
2122
"eriocnemis/module-region": "2.4.2",
2223
"eriocnemis/module-region-api": "2.4.2",
2324
"eriocnemis/module-region-admin-ui": "2.4.2",

src/Api/SaveRuleDataInterface.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
/**
3+
* Copyright © Eriocnemis, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Eriocnemis\RegionShippingRuleAdminUi\Api;
9+
10+
use Magento\Framework\App\RequestInterface;
11+
use Magento\Framework\Exception\LocalizedException;
12+
use Eriocnemis\RegionShippingRuleApi\Api\Data\RuleInterface;
13+
14+
/**
15+
* Save data
16+
*
17+
* @api
18+
*/
19+
interface SaveRuleDataInterface
20+
{
21+
/**
22+
* Save data
23+
*
24+
* @param RequestInterface $request
25+
* @return RuleInterface
26+
* @throws LocalizedException
27+
*/
28+
public function execute(RequestInterface $request): RuleInterface;
29+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?php
2+
/**
3+
* Copyright © Eriocnemis, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Eriocnemis\RegionShippingRuleAdminUi\Controller\Adminhtml\Shipping\Rule;
9+
10+
use Psr\Log\LoggerInterface;
11+
use Magento\Backend\App\Action;
12+
use Magento\Backend\App\Action\Context;
13+
use Magento\Ui\Component\MassAction\Filter;
14+
use Magento\Framework\Data\Collection\AbstractDb;
15+
use Magento\Framework\Controller\ResultInterface;
16+
use Magento\Framework\Exception\LocalizedException;
17+
use Eriocnemis\RegionShippingRule\Model\ResourceModel\Rule\CollectionFactory;
18+
19+
/**
20+
* Abstract mass action controller
21+
*/
22+
abstract class AbstractMassAction extends Action
23+
{
24+
/**
25+
* @var Filter
26+
*/
27+
protected $filter;
28+
29+
/**
30+
* @var CollectionFactory
31+
*/
32+
protected $collectionFactory;
33+
34+
/**
35+
* @var string
36+
*/
37+
protected $errorMessage;
38+
39+
/**
40+
* @var LoggerInterface
41+
*/
42+
protected $logger;
43+
44+
/**
45+
* Initialize controller
46+
*
47+
* @param Context $context
48+
* @param CollectionFactory $collectionFactory
49+
* @param Filter $filter
50+
* @param LoggerInterface $logger
51+
*/
52+
public function __construct(
53+
Context $context,
54+
CollectionFactory $collectionFactory,
55+
Filter $filter,
56+
LoggerInterface $logger
57+
) {
58+
$this->collectionFactory = $collectionFactory;
59+
$this->filter = $filter;
60+
$this->logger = $logger;
61+
62+
parent::__construct(
63+
$context
64+
);
65+
}
66+
67+
/**
68+
* Execute action
69+
*
70+
* @return ResultInterface
71+
*/
72+
public function execute(): ResultInterface
73+
{
74+
try {
75+
$collection = $this->filter->getCollection(
76+
$this->collectionFactory->create()
77+
);
78+
79+
if ($collection->getSize()) {
80+
return $this->massAction($collection);
81+
}
82+
$this->messageManager->addErrorMessage(
83+
(string)__('Please correct the rules you requested.')
84+
);
85+
} catch (LocalizedException $e) {
86+
$this->messageManager->addErrorMessage(
87+
$e->getMessage()
88+
);
89+
} catch (\Exception $e) {
90+
$this->logger->critical($e->getMessage());
91+
$this->messageManager->addErrorMessage(
92+
(string)__($this->errorMessage)
93+
);
94+
}
95+
return $this->resultRedirectFactory->create()->setPath('*/*/index');
96+
}
97+
98+
/**
99+
* Process to collection items
100+
*
101+
* @param AbstractDb $collection
102+
* @return ResultInterface
103+
*/
104+
abstract protected function massAction(AbstractDb $collection);
105+
}

src/Controller/Adminhtml/Shipping/Rule/Delete.php

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77

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

10-
use Psr\Log\LoggerInterface;
1110
use Magento\Backend\App\Action;
1211
use Magento\Backend\App\Action\Context;
1312
use Magento\Framework\Controller\ResultInterface;
14-
use Magento\Framework\Exception\LocalizedException;
1513
use Magento\Framework\App\Action\HttpPostActionInterface;
14+
use Eriocnemis\Core\Exception\ResolveExceptionInterface;
1615
use Eriocnemis\RegionShippingRuleApi\Api\Data\RuleInterface;
1716
use Eriocnemis\RegionShippingRuleApi\Api\DeleteRuleByIdInterface;
1817

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

28+
/**
29+
* Action name constant
30+
*/
31+
const ACTION_NAME = 'delete';
32+
2933
/**
3034
* @var DeleteRuleByIdInterface
3135
*/
3236
private $deleteRuleById;
3337

3438
/**
35-
* @var LoggerInterface
39+
* @var ResolveExceptionInterface
3640
*/
37-
private $logger;
41+
private $resolveException;
3842

3943
/**
4044
* Initialize controller
4145
*
4246
* @param Context $context
4347
* @param DeleteRuleByIdInterface $deleteRuleById
44-
* @param LoggerInterface $logger
48+
* @param ResolveExceptionInterface $resolveException
4549
*/
4650
public function __construct(
4751
Context $context,
4852
DeleteRuleByIdInterface $deleteRuleById,
49-
LoggerInterface $logger
53+
ResolveExceptionInterface $resolveException
5054
) {
5155
$this->deleteRuleById = $deleteRuleById;
52-
$this->logger = $logger;
56+
$this->resolveException = $resolveException;
5357

5458
parent::__construct(
5559
$context
@@ -63,41 +67,36 @@ public function __construct(
6367
*/
6468
public function execute(): ResultInterface
6569
{
70+
$ruleId = (int)$this->getRequest()->getPost(RuleInterface::RULE_ID);
6671
/** @var \Magento\Framework\Controller\Result\Redirect $result */
6772
$result = $this->resultRedirectFactory->create();
6873

69-
$ruleId = (int)$this->getRequest()->getPost(RuleInterface::RULE_ID);
70-
if (!$ruleId) {
71-
$this->messageManager->addErrorMessage(
72-
(string)__('Wrong request.')
73-
);
74-
return $result->setPath('*/*');
74+
if ($ruleId) {
75+
try {
76+
$this->deleteRuleById->execute($ruleId);
77+
$this->messageManager->addSuccessMessage(
78+
(string)__('The Rule has been deleted.')
79+
);
80+
return $result->setPath('*/*/index');
81+
} catch (\Exception $e) {
82+
$this->resolveException->execute($e, self::ACTION_NAME);
83+
}
84+
return $result->setPath('*/*/edit', $this->getParams($ruleId));
7585
}
86+
return $result->setPath('*/*');
87+
}
7688

77-
try {
78-
$this->deleteRuleById->execute($ruleId);
79-
$this->messageManager->addSuccessMessage(
80-
(string)__('The Rule has been deleted.')
81-
);
82-
$result->setPath('*/*/index');
83-
} catch (LocalizedException $e) {
84-
$this->messageManager->addErrorMessage(
85-
$e->getMessage()
86-
);
87-
$result->setPath('*/*/edit', [
88-
RuleInterface::RULE_ID => $ruleId,
89-
'_current' => true,
90-
]);
91-
} catch (\Exception $e) {
92-
$this->logger->critical($e->getMessage());
93-
$this->messageManager->addErrorMessage(
94-
(string)__('We can\'t delete the rule right now. Please review the log and try again.')
95-
);
96-
$result->setPath('*/*/edit', [
97-
RuleInterface::RULE_ID => $ruleId,
98-
'_current' => true,
99-
]);
100-
}
101-
return $result;
89+
/**
90+
* Retrieve params
91+
*
92+
* @param int $ruleId
93+
* @return mixed[]
94+
*/
95+
private function getParams(int $ruleId): array
96+
{
97+
return [
98+
RuleInterface::RULE_ID => $ruleId,
99+
'_current' => true
100+
];
102101
}
103102
}

src/Controller/Adminhtml/Shipping/Rule/MassDelete.php

Lines changed: 13 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -7,103 +7,38 @@
77

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

10-
use Psr\Log\LoggerInterface;
11-
use Magento\Backend\App\Action;
12-
use Magento\Backend\App\Action\Context;
13-
use Magento\Framework\App\Action\HttpPostActionInterface;
1410
use Magento\Framework\Controller\ResultInterface;
15-
use Magento\Framework\Exception\LocalizedException;
16-
use Magento\Ui\Component\MassAction\Filter;
17-
use Eriocnemis\RegionShippingRule\Model\ResourceModel\Rule\CollectionFactory;
11+
use Magento\Framework\App\Action\HttpPostActionInterface;
12+
use Magento\Framework\Data\Collection\AbstractDb;
1813

1914
/**
2015
* Mass delete controller
2116
*/
22-
class MassDelete extends Action implements HttpPostActionInterface
17+
class MassDelete extends AbstractMassAction implements HttpPostActionInterface
2318
{
2419
/**
2520
* Authorization level of a basic admin session
2621
*/
2722
const ADMIN_RESOURCE = 'Eriocnemis_Region::shipping_rule_delete';
2823

2924
/**
30-
* @var Filter
31-
*/
32-
private $filter;
33-
34-
/**
35-
* @var CollectionFactory
25+
* @var string
3626
*/
37-
private $collectionFactory;
27+
protected $errorMessage = 'We can\'t delete these rules right now. Please review the log and try again.';
3828

3929
/**
40-
* @var LoggerInterface
41-
*/
42-
private $logger;
43-
44-
/**
45-
* Initialize controller
46-
*
47-
* @param Context $context
48-
* @param CollectionFactory $collectionFactory
49-
* @param Filter $filter
50-
* @param LoggerInterface $logger
51-
*/
52-
public function __construct(
53-
Context $context,
54-
CollectionFactory $collectionFactory,
55-
Filter $filter,
56-
LoggerInterface $logger
57-
) {
58-
$this->collectionFactory = $collectionFactory;
59-
$this->filter = $filter;
60-
$this->logger = $logger;
61-
62-
parent::__construct(
63-
$context
64-
);
65-
}
66-
67-
/**
68-
* Delete specified rules
30+
* Process to collection items
6931
*
32+
* @param AbstractDb $collection
7033
* @return ResultInterface
7134
*/
72-
public function execute(): ResultInterface
35+
protected function massAction(AbstractDb $collection)
7336
{
74-
if (true !== $this->getRequest()->isPost()) {
75-
$this->messageManager->addErrorMessage(
76-
(string)__('Wrong request.')
77-
);
78-
return $this->resultRedirectFactory->create()->setPath('*/*');
79-
}
37+
$collection->walk('delete');
8038

81-
try {
82-
$collection = $this->filter->getCollection(
83-
$this->collectionFactory->create()
84-
);
85-
86-
$size = $collection->getSize();
87-
if (!$size) {
88-
$this->messageManager->addError(
89-
(string)__('Please correct the rules you requested.')
90-
);
91-
return $this->resultRedirectFactory->create()->setPath('*/*');
92-
}
93-
94-
$collection->walk('delete');
95-
96-
$this->messageManager->addSuccess(
97-
(string)__('You deleted a total of %1 records.', $size)
98-
);
99-
} catch (LocalizedException $e) {
100-
$this->messageManager->addError($e->getMessage());
101-
} catch (\Exception $e) {
102-
$this->messageManager->addError(
103-
(string)__('We can\'t delete these rules right now. Please review the log and try again.')
104-
);
105-
$this->logger->critical($e->getMessage());
106-
}
107-
return $this->resultRedirectFactory->create()->setPath('*/*');
39+
$this->messageManager->addSuccessMessage(
40+
(string)__('You deleted a total of %1 records.', $collection->getSize())
41+
);
42+
return $this->resultRedirectFactory->create()->setPath('*/*/index');
10843
}
10944
}

0 commit comments

Comments
 (0)