/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/widgets/BasePanelWidget.php
287 строк
7 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\widgets; use common\traits\FactoryTrait; use Yii; use yii\bootstrap\Widget; /** * Базовый виджет для отображения данных * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2020 */ abstract class BasePanelWidget extends Widget { use FactoryTrait; /** * Переменная, хранящая иконку, которая будет отображаться на панели * * @var string */ public $icon = 'icon-gear'; /** * Переменная для заголовка * * @var string */ public $title = 'System information'; /** * Второй заголовок * * @inheritdoc */ public $sub_title = ''; /** * Переменная для типа панели * * @var string */ public $panel_type = 'success'; /** * Тип отображения панельки * * @var string (panel|hidden|quote|alert) */ public $panel_view_type = 'panel'; /** * Список ассетов, необходимых для работы этого widget-а * * @var array */ public $dependsAsset = []; /** * Информация о возможных элементах меню управления в виджете * @var array */ public $menu = []; /** * Произвольные тексты для отображения информации в заголовке * * @var array */ public $label = []; /** * Имя используемого шаблона виджета * * @var string */ public $viewName = ''; /** * текст ошибки после сохранения * @var array */ private $_errors; /** * Получить набор кнопок для управления * @return array */ public function getAction() { return []; } /** * Данный метод необходимо перегрузить в дочернем классе, метод должен возвращать параметры для представления * @return mixed */ abstract protected function doRun(); /** * @inheritdoc */ final public function run() { if ($this->isAccessible()) { if ($params = $this->doRun()) { if (Yii::$app->request->isAjax) { return $this->getView()->renderAjax($this->viewName, $params, $this); } else { return $this->render($this->viewName, $params); } } } else { return $this->render('@common/views/widget/access_error.twig'); } } /** * Непосредственное сохранение данных * @return mixed */ protected function doSave() { return false; } /** * Сохранение введённых данных * * @return bool|mixed */ final public function save() { $result = Yii::$app->db->saveTransaction(function () { return $this->doSave(); }); return $result; } /** * Проверка доступа на просмотр данных данного виджета * @return bool */ protected function isAccessible() { return true; } /** * @inheritdoc */ public function afterRun($result) { $result = parent::afterRun($result); $view = $this->getView(); // Регистриурем все необходимые Asset foreach ($this->dependsAsset as $asset) { $view->registerAssetBundle($asset); } return $result; } /** * @inheritdoc */ public function render($view, $params = []) { $params['icon'] = $this->icon; $params['title'] = $this->title; $params['sub_title'] = $this->sub_title; $params['type'] = $this->panel_type; $params['panel_view_type'] = $this->panel_view_type; $params['menu'] = $this->menu; $params['label'] = $this->label; $params['action'] = $this->getAction(); return parent::render($view, $params); } /** * Получить данные поле сохранения данных * @return array */ public function getData() { return []; } /** * Добавить текст ошибки * * @param $attribute * @param string $error */ public function addError($attribute, $error = '') { $this->_errors[$attribute][] = $error; } /** * Добавить массив ошибок * @param $errors */ public function addErrors($errors) { foreach ($errors as $attribute => $errors) { if (is_array($errors)) { foreach ($errors as $error) { $this->addError($attribute, $error); } } else { $this->addError($attribute, $errors); } } } /** * Получить текст ошибки * @return array */ public function getErrors($attribute = null) { if ($attribute === null) { return $this->_errors === null ? [] : $this->_errors; } return isset($this->_errors[$attribute]) ? $this->_errors[$attribute] : []; } /** * Получить первую ошибку * @return array */ public function getFirstErrors() { if (empty($this->_errors)) { return []; } $errors = []; foreach ($this->_errors as $name => $es) { if (!empty($es)) { $errors[$name] = reset($es); } } return $errors; } /** * Получить все ошибки * * @param $showAllErrors * @return array */ public function getErrorSummary($showAllErrors) { $lines = []; $errors = $showAllErrors ? $this->getErrors() : $this->getFirstErrors(); foreach ($errors as $es) { $lines = array_merge($lines, (array)$es); } return $lines; } /** * Очищаем ошибки для всех атрибутов или только для одного * * @param string $attribute Название атрибута */ public function clearErrors($attribute = null) { if ($attribute === null) { $this->_errors = []; } else { unset($this->_errors[$attribute]); } } }