125 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| /**
 | ||
|  * Отключаем ненужные проверки.
 | ||
|  *
 | ||
|  * @noinspection PhpUnusedParameterInspection, PhpUnused
 | ||
|  */
 | ||
| 
 | ||
| namespace goodboyalex\php_components_pack\classes;
 | ||
| 
 | ||
| use goodboyalex\php_components_pack\interfaces\ISerializable;
 | ||
| use goodboyalex\php_components_pack\models\ActionStateMessage;
 | ||
| use goodboyalex\php_components_pack\traits\ActionState\ActionStateAddTrait;
 | ||
| use goodboyalex\php_components_pack\traits\ActionState\ActionStateGetTrait;
 | ||
| use goodboyalex\php_components_pack\traits\ActionState\ActionStateHasTrait;
 | ||
| use goodboyalex\php_components_pack\traits\ActionState\ActionStateStaticTrait;
 | ||
| 
 | ||
| /**
 | ||
|  * Состояние действия.
 | ||
|  *
 | ||
|  * @author Александр Бабаев
 | ||
|  * @package php_components_pack
 | ||
|  * @version 1.0
 | ||
|  * @since 1.0
 | ||
|  */
 | ||
| final class ActionState implements ISerializable
 | ||
| {
 | ||
|     /**
 | ||
|      * @var mixed|null $Value Значение
 | ||
|      */
 | ||
|     public mixed $Value;
 | ||
| 
 | ||
|     /**
 | ||
|      * @var ObjectArray $Messages Список информации
 | ||
|      */
 | ||
|     private ObjectArray $Messages;
 | ||
| 
 | ||
|     /**
 | ||
|      * Конструктор
 | ||
|      *
 | ||
|      * @param mixed|null $defValue Значение по умолчанию
 | ||
|      */
 | ||
|     public function __construct (mixed $defValue = null)
 | ||
|     {
 | ||
|         // Присваиваю значение по умолчанию
 | ||
|         $this->Value = $defValue;
 | ||
| 
 | ||
|         // Создаю список сообщений
 | ||
|         $this->Messages = new ObjectArray([]);
 | ||
|     }
 | ||
| 
 | ||
|     // Статичные методы и константы
 | ||
|     use ActionStateStaticTrait;
 | ||
| 
 | ||
|     // Методы добавления сообщений
 | ||
|     use ActionStateAddTrait;
 | ||
| 
 | ||
|     // Методы проверки на наличие сообщений
 | ||
|     use ActionStateHasTrait;
 | ||
| 
 | ||
|     // Методы получения сообщений
 | ||
|     use ActionStateGetTrait;
 | ||
| 
 | ||
|     /**
 | ||
|      * Количество сообщений, удовлетворяющих условию.
 | ||
|      *
 | ||
|      * @param callable $predicate Условие выборки
 | ||
|      *
 | ||
|      * @return int Число сообщений
 | ||
|      */
 | ||
|     public function Count (callable $predicate): int
 | ||
|     {
 | ||
|         return $this->Messages->Count($predicate);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function Serialize (): string
 | ||
|     {
 | ||
|         // Создаю список сообщений
 | ||
|         $list = [];
 | ||
| 
 | ||
|         // Для каждого сообщения
 | ||
|         foreach ($this->Messages as $message)
 | ||
|             // - сериализую его и добавляю в список
 | ||
|             $list[] = $message->Serialize();
 | ||
| 
 | ||
|         // Возвращаю результат
 | ||
|         return json_encode($list);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function UnSerialize (string $serialized): void
 | ||
|     {
 | ||
|         // Очищаю список сообщений
 | ||
|         $this->Clear(self::GET_STRING_ALL());
 | ||
| 
 | ||
|         // Десериализую список сообщений
 | ||
|         $list = json_decode($serialized, true);
 | ||
| 
 | ||
|         // Для каждого сообщения
 | ||
|         foreach ($list as $messageSerialized) {
 | ||
|             // - создаю новое сообщение
 | ||
|             $message = new ActionStateMessage();
 | ||
|             // - десериализую его
 | ||
|             $message->UnSerialize($messageSerialized);
 | ||
|             // - добавляю в список
 | ||
|             $this->Add($message);
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Очищает список сообщений, согласно условию.
 | ||
|      *
 | ||
|      * @param callable $predicate Условие выборки
 | ||
|      *
 | ||
|      * @return void
 | ||
|      */
 | ||
|     public function Clear (callable $predicate): void
 | ||
|     {
 | ||
|         $this->Messages->Delete($predicate);
 | ||
|     }
 | ||
| } |