13 use Magento\Cms\Model\BlockFactory;
28 private $blockFactory;
33 private $blockRepository;
46 BlockFactory $blockFactory =
null,
50 $this->blockFactory = $blockFactory
52 $this->blockRepository = $blockRepository
54 parent::__construct($context, $coreRegistry);
66 $resultRedirect = $this->resultRedirectFactory->create();
69 if (isset(
$data[
'is_active']) &&
$data[
'is_active'] ===
'true') {
70 $data[
'is_active'] = Block::STATUS_ENABLED;
72 if (empty(
$data[
'block_id'])) {
73 $data[
'block_id'] =
null;
77 $model = $this->blockFactory->create();
82 $model = $this->blockRepository->getById(
$id);
83 }
catch (LocalizedException $e) {
84 $this->messageManager->addErrorMessage(
__(
'This block no longer exists.'));
85 return $resultRedirect->setPath(
'*/*/');
92 $this->blockRepository->save(
$model);
93 $this->messageManager->addSuccessMessage(
__(
'You saved the block.'));
94 $this->dataPersistor->clear(
'cms_block');
95 return $this->processBlockReturn(
$model,
$data, $resultRedirect);
96 }
catch (LocalizedException $e) {
97 $this->messageManager->addErrorMessage($e->getMessage());
98 }
catch (\Exception $e) {
99 $this->messageManager->addExceptionMessage($e,
__(
'Something went wrong while saving the block.'));
102 $this->dataPersistor->set(
'cms_block',
$data);
103 return $resultRedirect->setPath(
'*/*/edit', [
'block_id' =>
$id]);
105 return $resultRedirect->setPath(
'*/*/');
116 private function processBlockReturn(
$model,
$data, $resultRedirect)
118 $redirect =
$data[
'back'] ??
'close';
120 if ($redirect ===
'continue') {
121 $resultRedirect->setPath(
'*/*/edit', [
'block_id' =>
$model->getId()]);
122 }
else if ($redirect ===
'close') {
123 $resultRedirect->setPath(
'*/*/');
124 }
else if ($redirect ===
'duplicate') {
125 $duplicateModel = $this->blockFactory->create([
'data' =>
$data]);
126 $duplicateModel->setId(
null);
127 $duplicateModel->setIdentifier(
$data[
'identifier'] .
'-' . uniqid());
128 $duplicateModel->setIsActive(Block::STATUS_DISABLED);
129 $this->blockRepository->save($duplicateModel);
130 $id = $duplicateModel->getId();
131 $this->messageManager->addSuccessMessage(
__(
'You duplicated the block.'));
132 $this->dataPersistor->set(
'cms_block',
$data);
133 $resultRedirect->setPath(
'*/*/edit', [
'block_id' =>
$id]);
135 return $resultRedirect;
__construct(Context $context, Registry $coreRegistry, DataPersistorInterface $dataPersistor, BlockFactory $blockFactory=null, BlockRepositoryInterface $blockRepository=null)