396 lines
9.3 KiB
PHP
Executable File
396 lines
9.3 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* @package Plumrocket_Base
|
|
* @copyright Copyright (c) 2020 Plumrocket Inc. (https://plumrocket.com)
|
|
* @license https://plumrocket.com/license/ End-user License Agreement
|
|
*/
|
|
|
|
namespace Plumrocket\Base\Controller\Adminhtml;
|
|
|
|
use Magento\Framework\Registry;
|
|
use Magento\Framework\Stdlib\DateTime\DateTime;
|
|
|
|
/**
|
|
* @deprecated - its better to avoid extending actions
|
|
*/
|
|
abstract class Actions extends \Magento\Backend\App\Action
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_formSessionKey;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_modelClass;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_activeMenu;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_objectTitle;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_objectTitles;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_idKey = 'id';
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_statusField;
|
|
|
|
/**
|
|
* @var \Magento\Rule\Model\AbstractModel
|
|
*/
|
|
protected $_model;
|
|
|
|
/**
|
|
* @var \Magento\Framework\Registry
|
|
*/
|
|
protected $_coreRegistry = null;
|
|
|
|
/**
|
|
* Execute action
|
|
*
|
|
* @return void
|
|
*/
|
|
public function execute()
|
|
{
|
|
$_preparedActions = ['index', 'grid', 'new', 'edit', 'save', 'delete', 'massStatus'];
|
|
$_action = $this->getRequest()->getActionName();
|
|
if (in_array($_action, $_preparedActions)) {
|
|
$method = '_'.$_action.'Action';
|
|
|
|
$this->_beforeAction();
|
|
$this->$method();
|
|
$this->_afterAction();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Index action
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _indexAction()
|
|
{
|
|
if ($this->getRequest()->getParam('ajax')) {
|
|
$this->_forward('grid');
|
|
return;
|
|
}
|
|
|
|
$this->_view->loadLayout();
|
|
$this->_setActiveMenu($this->_activeMenu);
|
|
$title = __('Manage '.$this->_objectTitles);
|
|
$this->_view->getPage()->getConfig()->getTitle()->prepend($title);
|
|
$this->_addBreadcrumb($title, $title);
|
|
$this->_view->renderLayout();
|
|
}
|
|
|
|
/**
|
|
* Grid action
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _gridAction()
|
|
{
|
|
$this->_view->loadLayout(false);
|
|
$this->_view->renderLayout();
|
|
}
|
|
|
|
/**
|
|
* New action
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _newAction()
|
|
{
|
|
$this->_forward('edit');
|
|
}
|
|
|
|
/**
|
|
* Edit action
|
|
*
|
|
* @return void
|
|
*/
|
|
public function _editAction()
|
|
{
|
|
$model = $this->_getModel();
|
|
|
|
$this->_getRegistry()->register('current_model', $model);
|
|
|
|
$this->_view->loadLayout();
|
|
$this->_setActiveMenu($this->_activeMenu);
|
|
|
|
if ($model->getId()) {
|
|
$breadcrumbTitle = __('Edit '.$this->_objectTitle);
|
|
$breadcrumbLabel = $breadcrumbTitle;
|
|
} else {
|
|
$breadcrumbTitle = __('New '.$this->_objectTitle);
|
|
$breadcrumbLabel = __('Create '.$this->_objectTitle);
|
|
}
|
|
$this->_view->getPage()->getConfig()->getTitle()->prepend(__($this->_objectTitle));
|
|
$this->_view->getPage()->getConfig()->getTitle()->prepend(
|
|
$model->getId() ? $model->getName() : __('New '.$this->_objectTitle)
|
|
);
|
|
|
|
$this->_addBreadcrumb($breadcrumbLabel, $breadcrumbTitle);
|
|
|
|
// restore data
|
|
$values = $this->_getSession()->getData($this->_formSessionKey, true);
|
|
if ($values) {
|
|
$model->addData($values);
|
|
}
|
|
|
|
$this->_view->renderLayout();
|
|
}
|
|
|
|
/**
|
|
* Save action
|
|
*
|
|
* @return void
|
|
*/
|
|
public function _saveAction()
|
|
{
|
|
$request = $this->getRequest();
|
|
if (!$request->isPost()) {
|
|
$this->getResponse()->setRedirect($this->getUrl('*/*'));
|
|
}
|
|
$model = $this->_getModel();
|
|
|
|
try {
|
|
$date = $this->_objectManager->get(DateTime::class)->gmtDate();
|
|
|
|
$model->addData($request->getParams())
|
|
->setUpdatedAt($date);
|
|
|
|
if (!$model->getId()) {
|
|
$model->setCreatedAt($date);
|
|
}
|
|
|
|
$this->_beforeSave($model, $request);
|
|
|
|
$model->save();
|
|
|
|
$this->_afterSave($model, $request);
|
|
|
|
$this->messageManager->addSuccess(__($this->_objectTitle.' has been saved.'));
|
|
$this->_setFormData(false);
|
|
|
|
if ($request->getParam('back')) {
|
|
$this->_redirect('*/*/edit', [$this->_idKey => $model->getId()]);
|
|
} else {
|
|
$this->_redirect('*/*');
|
|
}
|
|
return;
|
|
} catch (\Magento\Framework\Exception\LocalizedException $e) {
|
|
$this->messageManager->addError(nl2br($e->getMessage()));
|
|
$this->_setFormData();
|
|
} catch (\Exception $e) {
|
|
$this->messageManager->addException(
|
|
$e,
|
|
__('Something went wrong while saving this '.strtolower($this->_objectTitle).'.')
|
|
);
|
|
$this->_setFormData();
|
|
}
|
|
|
|
$this->_forward('new');
|
|
}
|
|
|
|
/**
|
|
* Before save logic
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _beforeSave($model, $request)
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* After save logic
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _afterSave($model, $request)
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* Before action execute
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _beforeAction()
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* After action execute
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _afterAction()
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* Delete action execute
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _deleteAction()
|
|
{
|
|
$ids = $this->getRequest()->getParam($this->_idKey);
|
|
|
|
if (!is_array($ids)) {
|
|
$ids = [$ids];
|
|
}
|
|
|
|
$error = false;
|
|
try {
|
|
foreach ($ids as $id) {
|
|
$this->_objectManager->create($this->_modelClass)->setId($id)->delete();
|
|
}
|
|
} catch (\Magento\Framework\Exception\LocalizedException $e) {
|
|
$error = true;
|
|
$this->messageManager->addErrorMessage($e->getMessage());
|
|
} catch (\Exception $e) {
|
|
$error = true;
|
|
$this->messageManager->addExceptionMessage(
|
|
$e,
|
|
__('We can\'t delete '.strtolower($this->_objectTitle).' right now. '.$e->getMessage())
|
|
);
|
|
}
|
|
|
|
if (!$error) {
|
|
$this->messageManager->addSuccessMessage(
|
|
(count($ids) > 1)
|
|
? __($this->_objectTitles.' have been deleted.')
|
|
: __($this->_objectTitle.' has been deleted.')
|
|
);
|
|
}
|
|
|
|
$this->_redirect('*/*');
|
|
}
|
|
|
|
/**
|
|
* Mass status change action
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _massStatusAction()
|
|
{
|
|
$ids = $this->getRequest()->getParam($this->_idKey);
|
|
|
|
if (!is_array($ids)) {
|
|
$ids = [$ids];
|
|
}
|
|
|
|
$error = false;
|
|
|
|
try {
|
|
|
|
$status = $this->getRequest()->getParam('status');
|
|
|
|
if ($status === null) {
|
|
throw new \Exception(__('Parameter "Status" missing in request data.'));
|
|
}
|
|
|
|
foreach ($ids as $id) {
|
|
$this->_objectManager->create($this->_modelClass)
|
|
->load($id)
|
|
->setData($this->_statusField, $status)
|
|
->save();
|
|
}
|
|
} catch (\Magento\Framework\Exception\LocalizedException $e) {
|
|
$error = true;
|
|
$this->messageManager->addErrorMessage($e->getMessage());
|
|
} catch (\Exception $e) {
|
|
$error = true;
|
|
$this->messageManager->addExceptionMessage(
|
|
$e,
|
|
__('We can\'t change status of '.strtolower($this->_objectTitle).' right now. '.$e->getMessage())
|
|
);
|
|
}
|
|
|
|
if (!$error) {
|
|
$this->messageManager->addSuccessMessage(
|
|
(count($ids) > 1)
|
|
? __($this->_objectTitles.' status have been changed.')
|
|
: __($this->_objectTitle.' status have been changed.')
|
|
);
|
|
}
|
|
|
|
$this->_redirect('*/*');
|
|
}
|
|
|
|
/**
|
|
* Set for mada
|
|
*
|
|
* @param array|null $data
|
|
*/
|
|
protected function _setFormData($data = null)
|
|
{
|
|
$this->_getSession()->setData(
|
|
$this->_formSessionKey,
|
|
$data ?? $this->getRequest()->getParams()
|
|
);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Receive registry object
|
|
*
|
|
* @return \Magento\Framework\Registry
|
|
*/
|
|
protected function _getRegistry()
|
|
{
|
|
if ($this->_coreRegistry === null) {
|
|
$this->_coreRegistry = $this->_objectManager->get(Registry::class);
|
|
}
|
|
return $this->_coreRegistry;
|
|
}
|
|
|
|
/**
|
|
* Receive model object
|
|
*
|
|
* @return \Magento\Rule\Model\AbstractModel
|
|
*/
|
|
protected function _getModel($load = true)
|
|
{
|
|
if ($this->_model === null) {
|
|
$this->_model = $this->_objectManager->create($this->_modelClass);
|
|
|
|
$id = (int)$this->getRequest()->getParam($this->_idKey);
|
|
if ($id && $load) {
|
|
$this->_model->load($id);
|
|
}
|
|
}
|
|
return $this->_model;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
protected function _isAllowed()
|
|
{
|
|
return $this->_authorization->isAllowed(static::ADMIN_RESOURCE);
|
|
}
|
|
}
|