| Current Path : /home/rtorresani/www/vendor/magento/module-eav/Model/Entity/Attribute/Backend/ |
| Current File : //home/rtorresani/www/vendor/magento/module-eav/Model/Entity/Attribute/Backend/JsonEncoded.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Eav\Model\Entity\Attribute\Backend;
use Magento\Framework\Serialize\Serializer\Json;
/**
* Backend model for attribute that stores structures in json format
*
* @api
* @since 101.0.0
*/
class JsonEncoded extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
{
/**
* @var Json
*/
private $jsonSerializer;
/**
* ArrayBackend constructor.
*
* @param Json $jsonSerializer
*/
public function __construct(Json $jsonSerializer)
{
$this->jsonSerializer = $jsonSerializer;
}
/**
* Encode before saving
*
* @param \Magento\Framework\DataObject $object
* @return $this
* @since 101.0.0
*/
public function beforeSave($object)
{
// parent::beforeSave() is not called intentionally
$attrCode = $this->getAttribute()->getAttributeCode();
if ($object->hasData($attrCode) && !$this->isJsonEncoded($object->getData($attrCode))) {
$object->setData($attrCode, $this->jsonSerializer->serialize($object->getData($attrCode)));
}
return $this;
}
/**
* Decode after loading
*
* @param \Magento\Framework\DataObject $object
* @return $this
* @since 101.0.0
*/
public function afterLoad($object)
{
parent::afterLoad($object);
$attrCode = $this->getAttribute()->getAttributeCode();
$object->setData($attrCode, $this->jsonSerializer->unserialize($object->getData($attrCode) ?: '{}'));
return $this;
}
/**
* Returns true if given value is a valid json value, and false otherwise.
*
* @param string|int|float|bool|array|null $value
* @return bool
*/
private function isJsonEncoded($value): bool
{
$result = is_string($value);
if ($result) {
try {
$this->jsonSerializer->unserialize($value);
} catch (\InvalidArgumentException $e) {
$result = false;
}
}
return $result;
}
}