mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
197 lines
5.2 KiB
PHP
197 lines
5.2 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Variable\Model;
|
|
|
|
use Magento\Framework\Model\AbstractModel;
|
|
use Magento\Framework\Validator\HTML\WYSIWYGValidatorInterface;
|
|
use Magento\Framework\App\ObjectManager;
|
|
|
|
/**
|
|
* Custom variable model
|
|
*
|
|
* @method string getCode()
|
|
* @method \Magento\Variable\Model\Variable setCode(string $value)
|
|
* @method string getName()
|
|
* @method \Magento\Variable\Model\Variable setName(string $value)
|
|
*
|
|
* @api
|
|
* @since 100.0.2
|
|
*/
|
|
class Variable extends AbstractModel
|
|
{
|
|
/**
|
|
* Variable value types.
|
|
*/
|
|
public const TYPE_TEXT = 'text';
|
|
public const TYPE_HTML = 'html';
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
protected $_storeId = 0;
|
|
|
|
/**
|
|
* @var \Magento\Framework\Escaper
|
|
*/
|
|
protected $_escaper = null;
|
|
|
|
/**
|
|
* @var WYSIWYGValidatorInterface
|
|
*/
|
|
private $wysiwygValidator;
|
|
|
|
/**
|
|
* @param \Magento\Framework\Model\Context $context
|
|
* @param \Magento\Framework\Registry $registry
|
|
* @param \Magento\Framework\Escaper $escaper
|
|
* @param \Magento\Variable\Model\ResourceModel\Variable $resource
|
|
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
|
|
* @param array $data
|
|
* @param WYSIWYGValidatorInterface|null $wysiwygValidator
|
|
*/
|
|
public function __construct(
|
|
\Magento\Framework\Model\Context $context,
|
|
\Magento\Framework\Registry $registry,
|
|
\Magento\Framework\Escaper $escaper,
|
|
\Magento\Variable\Model\ResourceModel\Variable $resource,
|
|
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
|
|
array $data = [],
|
|
?WYSIWYGValidatorInterface $wysiwygValidator = null
|
|
) {
|
|
$this->_escaper = $escaper;
|
|
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
|
|
|
|
$this->wysiwygValidator = $wysiwygValidator
|
|
?? ObjectManager::getInstance()->get(WYSIWYGValidatorInterface::class);
|
|
}
|
|
|
|
/**
|
|
* Internal Constructor
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _construct()
|
|
{
|
|
parent::_construct();
|
|
$this->_init(\Magento\Variable\Model\ResourceModel\Variable::class);
|
|
}
|
|
|
|
/**
|
|
* Setter
|
|
*
|
|
* @param integer $storeId
|
|
* @return $this
|
|
* @codeCoverageIgnore
|
|
*/
|
|
public function setStoreId($storeId)
|
|
{
|
|
$this->_storeId = $storeId;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Getter
|
|
*
|
|
* @return integer
|
|
* @codeCoverageIgnore
|
|
*/
|
|
public function getStoreId()
|
|
{
|
|
return $this->_storeId;
|
|
}
|
|
|
|
/**
|
|
* Load variable by code
|
|
*
|
|
* @param string $code
|
|
* @return $this
|
|
* @codeCoverageIgnore
|
|
*/
|
|
public function loadByCode($code)
|
|
{
|
|
$this->getResource()->loadByCode($this, $code);
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Return variable value depend on given type
|
|
*
|
|
* @param string $type
|
|
* @return string
|
|
*/
|
|
public function getValue($type = null)
|
|
{
|
|
if ($type === null) {
|
|
$type = self::TYPE_HTML;
|
|
}
|
|
if ($type == self::TYPE_TEXT || !strlen((string)$this->getData('html_value'))) {
|
|
$value = $this->getData('plain_value');
|
|
//escape html if type is html, but html value is not defined
|
|
if ($type == self::TYPE_HTML) {
|
|
$value = nl2br((string)$this->_escaper->escapeHtml($value));
|
|
}
|
|
return $value;
|
|
}
|
|
return $this->getData('html_value');
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function beforeSave()
|
|
{
|
|
$html_field = $this->getValue(self::TYPE_HTML);
|
|
parent::beforeSave();
|
|
|
|
//Validating HTML content.
|
|
if ($html_field && $html_field !== $this->getOrigData('html_value')) {
|
|
$this->wysiwygValidator->validate($html_field);
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Validation of object data. Checking for unique variable code
|
|
*
|
|
* @return \Magento\Framework\Phrase|bool
|
|
*/
|
|
public function validate()
|
|
{
|
|
if ($this->getCode() && $this->getName()) {
|
|
$variable = $this->getResource()->getVariableByCode($this->getCode());
|
|
if (!empty($variable) && $variable['variable_id'] != $this->getId()) {
|
|
return __('Variable Code must be unique.');
|
|
}
|
|
return true;
|
|
}
|
|
return __('Validation has failed.');
|
|
}
|
|
|
|
/**
|
|
* Retrieve variables option array.
|
|
*
|
|
* @todo: extract method as separate class
|
|
* @param bool $withGroup
|
|
* @return array
|
|
*/
|
|
public function getVariablesOptionArray($withGroup = false)
|
|
{
|
|
/* @var $collection \Magento\Variable\Model\ResourceModel\Variable\Collection */
|
|
$collection = $this->getCollection();
|
|
$variables = [];
|
|
foreach ($collection->toOptionArray() as $variable) {
|
|
$variables[] = [
|
|
'value' => '{{customVar code=' . $variable['value'] . '}}',
|
|
'label' => __('%1', $this->_escaper->escapeHtml($variable['label'])),
|
|
];
|
|
}
|
|
if ($withGroup && $variables) {
|
|
$variables = [['label' => __('Custom Variables'), 'value' => $variables]];
|
|
}
|
|
return $variables;
|
|
}
|
|
}
|