mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 17:27:36 +00:00
316 lines
7.2 KiB
PHP
316 lines
7.2 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Cms\Model;
|
|
|
|
use Magento\Cms\Api\Data\BlockInterface;
|
|
use Magento\Framework\App\ObjectManager;
|
|
use Magento\Framework\DataObject\IdentityInterface;
|
|
use Magento\Framework\Model\AbstractModel;
|
|
use Magento\Framework\Validation\ValidationException;
|
|
use Magento\Framework\Validator\HTML\WYSIWYGValidatorInterface;
|
|
use Magento\Framework\Model\Context;
|
|
use Magento\Framework\Registry;
|
|
use Magento\Framework\Model\ResourceModel\AbstractResource;
|
|
use Magento\Framework\Data\Collection\AbstractDb;
|
|
use Magento\Backend\Model\Validator\UrlKey\CompositeUrlKey;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
|
|
/**
|
|
* CMS block model
|
|
*
|
|
* @method Block setStoreId(int $storeId)
|
|
* @method int getStoreId()
|
|
*/
|
|
class Block extends AbstractModel implements BlockInterface, IdentityInterface
|
|
{
|
|
/**
|
|
* CMS block cache tag
|
|
*/
|
|
public const CACHE_TAG = 'cms_b';
|
|
|
|
/**#@+
|
|
* Block's statuses
|
|
*/
|
|
public const STATUS_ENABLED = 1;
|
|
public const STATUS_DISABLED = 0;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_cacheTag = self::CACHE_TAG;
|
|
|
|
/**
|
|
* Prefix of model events names
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_eventPrefix = 'cms_block';
|
|
|
|
/**
|
|
* @var WYSIWYGValidatorInterface
|
|
*/
|
|
private $wysiwygValidator;
|
|
|
|
/**
|
|
* @var CompositeUrlKey
|
|
*/
|
|
private $compositeUrlValidator;
|
|
|
|
/**
|
|
* @param Context $context
|
|
* @param Registry $registry
|
|
* @param AbstractResource|null $resource
|
|
* @param AbstractDb|null $resourceCollection
|
|
* @param array $data
|
|
* @param WYSIWYGValidatorInterface|null $wysiwygValidator
|
|
* @param CompositeUrlKey|null $compositeUrlValidator
|
|
*/
|
|
public function __construct(
|
|
Context $context,
|
|
Registry $registry,
|
|
AbstractResource $resource = null,
|
|
AbstractDb $resourceCollection = null,
|
|
array $data = [],
|
|
?WYSIWYGValidatorInterface $wysiwygValidator = null,
|
|
CompositeUrlKey $compositeUrlValidator = null
|
|
) {
|
|
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
|
|
$this->wysiwygValidator = $wysiwygValidator
|
|
?? ObjectManager::getInstance()->get(WYSIWYGValidatorInterface::class);
|
|
$this->compositeUrlValidator = $compositeUrlValidator
|
|
?? ObjectManager::getInstance()->get(CompositeUrlKey::class);
|
|
}
|
|
|
|
/**
|
|
* Construct.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _construct()
|
|
{
|
|
$this->_init(\Magento\Cms\Model\ResourceModel\Block::class);
|
|
}
|
|
|
|
/**
|
|
* Prevent blocks recursion
|
|
*
|
|
* @return AbstractModel
|
|
* @throws \Magento\Framework\Exception\LocalizedException
|
|
*/
|
|
public function beforeSave()
|
|
{
|
|
if ($this->hasDataChanges()) {
|
|
$this->setUpdateTime(null);
|
|
}
|
|
|
|
$needle = 'block_id="' . $this->getId() . '"';
|
|
$content = ($this->getContent() !== null) ? $this->getContent() : '';
|
|
if (strpos($content, $needle) !== false) {
|
|
throw new \Magento\Framework\Exception\LocalizedException(
|
|
__('Make sure that static block content does not reference the block itself.')
|
|
);
|
|
}
|
|
|
|
$errors = $this->compositeUrlValidator->validate($this->getIdentifier());
|
|
if (!empty($errors)) {
|
|
throw new LocalizedException($errors[0]);
|
|
}
|
|
|
|
parent::beforeSave();
|
|
|
|
//Validating HTML content.
|
|
if ($content && $content !== $this->getOrigData(self::CONTENT)) {
|
|
try {
|
|
$this->wysiwygValidator->validate($content);
|
|
} catch (ValidationException $exception) {
|
|
throw new ValidationException(
|
|
__('Content field contains restricted HTML elements. %1', $exception->getMessage()),
|
|
$exception
|
|
);
|
|
}
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get identities
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getIdentities()
|
|
{
|
|
return [self::CACHE_TAG . '_' . $this->getId(), self::CACHE_TAG . '_' . $this->getIdentifier()];
|
|
}
|
|
|
|
/**
|
|
* Retrieve block id
|
|
*
|
|
* @return int
|
|
*/
|
|
public function getId()
|
|
{
|
|
return $this->getData(self::BLOCK_ID);
|
|
}
|
|
|
|
/**
|
|
* Retrieve block identifier
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getIdentifier()
|
|
{
|
|
return (string)$this->getData(self::IDENTIFIER);
|
|
}
|
|
|
|
/**
|
|
* Retrieve block title
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getTitle()
|
|
{
|
|
return $this->getData(self::TITLE);
|
|
}
|
|
|
|
/**
|
|
* Retrieve block content
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getContent()
|
|
{
|
|
return $this->getData(self::CONTENT);
|
|
}
|
|
|
|
/**
|
|
* Retrieve block creation time
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getCreationTime()
|
|
{
|
|
return $this->getData(self::CREATION_TIME);
|
|
}
|
|
|
|
/**
|
|
* Retrieve block update time
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getUpdateTime()
|
|
{
|
|
return $this->getData(self::UPDATE_TIME);
|
|
}
|
|
|
|
/**
|
|
* Is active
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isActive()
|
|
{
|
|
return (bool)$this->getData(self::IS_ACTIVE);
|
|
}
|
|
|
|
/**
|
|
* Set ID
|
|
*
|
|
* @param int $id
|
|
* @return BlockInterface
|
|
*/
|
|
public function setId($id)
|
|
{
|
|
return $this->setData(self::BLOCK_ID, $id);
|
|
}
|
|
|
|
/**
|
|
* Set identifier
|
|
*
|
|
* @param string $identifier
|
|
* @return BlockInterface
|
|
*/
|
|
public function setIdentifier($identifier)
|
|
{
|
|
return $this->setData(self::IDENTIFIER, $identifier);
|
|
}
|
|
|
|
/**
|
|
* Set title
|
|
*
|
|
* @param string $title
|
|
* @return BlockInterface
|
|
*/
|
|
public function setTitle($title)
|
|
{
|
|
return $this->setData(self::TITLE, $title);
|
|
}
|
|
|
|
/**
|
|
* Set content
|
|
*
|
|
* @param string $content
|
|
* @return BlockInterface
|
|
*/
|
|
public function setContent($content)
|
|
{
|
|
return $this->setData(self::CONTENT, $content);
|
|
}
|
|
|
|
/**
|
|
* Set creation time
|
|
*
|
|
* @param string $creationTime
|
|
* @return BlockInterface
|
|
*/
|
|
public function setCreationTime($creationTime)
|
|
{
|
|
return $this->setData(self::CREATION_TIME, $creationTime);
|
|
}
|
|
|
|
/**
|
|
* Set update time
|
|
*
|
|
* @param string $updateTime
|
|
* @return BlockInterface
|
|
*/
|
|
public function setUpdateTime($updateTime)
|
|
{
|
|
return $this->setData(self::UPDATE_TIME, $updateTime);
|
|
}
|
|
|
|
/**
|
|
* Set is active
|
|
*
|
|
* @param bool|int $isActive
|
|
* @return BlockInterface
|
|
*/
|
|
public function setIsActive($isActive)
|
|
{
|
|
return $this->setData(self::IS_ACTIVE, $isActive);
|
|
}
|
|
|
|
/**
|
|
* Receive page store ids
|
|
*
|
|
* @return int[]
|
|
*/
|
|
public function getStores()
|
|
{
|
|
return $this->hasData('stores') ? $this->getData('stores') : $this->getData('store_id');
|
|
}
|
|
|
|
/**
|
|
* Prepare block's statuses.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getAvailableStatuses()
|
|
{
|
|
return [self::STATUS_ENABLED => __('Enabled'), self::STATUS_DISABLED => __('Disabled')];
|
|
}
|
|
}
|