139 lines
3.8 KiB
PHP
139 lines
3.8 KiB
PHP
<?php
|
||
|
||
namespace goodboyalex\php_components_pack\tests\data;
|
||
|
||
use Exception;
|
||
use goodboyalex\php_components_pack\classes\ClassMapper;
|
||
use goodboyalex\php_components_pack\extensions\GUIDExtension;
|
||
use goodboyalex\php_components_pack\interfaces\IDuplicated;
|
||
use goodboyalex\php_components_pack\interfaces\IStoredAtSQL;
|
||
|
||
/**
|
||
* Модель меню.
|
||
*
|
||
* @author Александр Бабаев
|
||
* @package freecms
|
||
* @version 0.1
|
||
* @since 0.1
|
||
*/
|
||
final class MenuModel implements IDuplicated, IStoredAtSQL
|
||
{
|
||
/**
|
||
* @var string $Id Идентификатор меню.
|
||
*/
|
||
public string $Id {
|
||
get {
|
||
return $this->Id ?? GUIDExtension::GUIDEmpty;
|
||
}
|
||
set {
|
||
// Проверка идентификатора
|
||
if (!GUIDExtension::Validate($value))
|
||
// - исключение
|
||
throw new Exception("Неверный идентификатор (GUID)");
|
||
|
||
// Установка идентификатора
|
||
$this->Id = $value;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @var string $Name Имя меню.
|
||
*/
|
||
public string $Name = "";
|
||
|
||
/**
|
||
* @var string $Description Описание меню.
|
||
*/
|
||
public string $Description = "";
|
||
|
||
/**
|
||
* @var MenuItems Элементы меню.
|
||
*/
|
||
public MenuItems $Items;
|
||
|
||
/**
|
||
* @var bool $AllowSubMenu Допустимо ли вложенное меню.
|
||
*/
|
||
public bool $AllowSubMenu = true;
|
||
|
||
/**
|
||
* @var MenuCssClassModel $Css Модель стилей оформления меню.
|
||
*/
|
||
public MenuCssClassModel $Css;
|
||
|
||
/**
|
||
* Конструктор.
|
||
*/
|
||
public function __construct ()
|
||
{
|
||
$this->Items = new MenuItems([]);
|
||
$this->Css = new MenuCssClassModel();
|
||
}
|
||
|
||
/**
|
||
* @inheritdoc
|
||
*/
|
||
public function Duplicate (): MenuModel
|
||
{
|
||
// Создаю новый класс
|
||
$model = new MenuModel();
|
||
|
||
// Копирую свойства класса
|
||
ClassMapper::MapClass($this, $model);
|
||
|
||
// Возвращаю класс
|
||
return $model;
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
public function ToSQL (bool $withId = true): array
|
||
{
|
||
// Создаем результат
|
||
$result = [];
|
||
|
||
// Добавляем значения
|
||
$result['Name'] = $this->Name;
|
||
$result['Description'] = $this->Description;
|
||
$result['Items'] = $this->Items->Serialize();
|
||
$result['AllowSubMenu'] = $this->AllowSubMenu ? 1 : 0;
|
||
$result['Css'] = serialize($this->Css);
|
||
|
||
// Если требуется идентификатор
|
||
if ($withId)
|
||
// - то добавляем его
|
||
$result['Id'] = $this->Id;
|
||
|
||
// Возвращаем результат
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
public function FromSQL (array $sqlData): MenuModel
|
||
{
|
||
// Создаем результат
|
||
$result = new MenuModel();
|
||
|
||
// Устанавливаем значения
|
||
if (isset($sqlData['Id']))
|
||
$result->Id = $sqlData['Id'];
|
||
if (isset($sqlData['Name']))
|
||
$result->Name = $sqlData['Name'];
|
||
if (isset($sqlData['Description']))
|
||
$result->Description = $sqlData['Description'];
|
||
$this->Items = new MenuItems([]);
|
||
if (isset($sqlData['Items']))
|
||
$result->Items->UnSerialize($sqlData['Items']);
|
||
if (isset($sqlData['AllowSubMenu']))
|
||
$result->AllowSubMenu = $sqlData['AllowSubMenu'] == 1;
|
||
$this->Css = new MenuCssClassModel();
|
||
if (isset($sqlData['Css']))
|
||
$result->Css = unserialize($sqlData['Css']);
|
||
|
||
// Возвращаем массив
|
||
return $result;
|
||
}
|
||
} |