100 lines
2.6 KiB
PHP
100 lines
2.6 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;
|
|
|
|
/**
|
|
* Модель элемента меню.
|
|
*
|
|
* @author Александр Бабаев
|
|
* @package freecms
|
|
* @version 0.1
|
|
* @since 0.1
|
|
*/
|
|
final class MenuItemModel implements IDuplicated
|
|
{
|
|
/**
|
|
* @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|null $Description Описание элемента.
|
|
*/
|
|
public ?string $Description;
|
|
|
|
/**
|
|
* @var string $URL Адрес URL элемента.
|
|
*/
|
|
public string $URL;
|
|
|
|
/**
|
|
* @var bool $OpenInNewWindow Открывать ли в новом окне (добавлять к ссылке target="_blank").
|
|
*/
|
|
public bool $OpenInNewWindow;
|
|
|
|
/**
|
|
* @var string|null $IconClass Класс иконки.
|
|
*/
|
|
public ?string $IconClass;
|
|
|
|
/**
|
|
* @var string $ParentId Идентификатор родительского элемента.
|
|
*/
|
|
public string $ParentId {
|
|
get {
|
|
return $this->ParentId ?? GUIDExtension::GUIDEmpty;
|
|
}
|
|
set {
|
|
// Проверка идентификатора
|
|
if (!GUIDExtension::Validate($value))
|
|
// - исключение
|
|
throw new Exception("Неверный идентификатор (GUID)");
|
|
|
|
// Установка идентификатора
|
|
$this->ParentId = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @var int $Order Порядок.
|
|
*/
|
|
public int $Order;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function Duplicate (): MenuItemModel
|
|
{
|
|
// Создание дубликата модели
|
|
$model = new MenuItemModel();
|
|
|
|
// Копирование свойств
|
|
ClassMapper::MapClass($this, $model);
|
|
|
|
// Возврат дубликата
|
|
return $model;
|
|
}
|
|
} |