diff --git a/backend/bootstrap/SetUp.php b/backend/bootstrap/SetUp.php index 8b211aa..0efe8a8 100644 --- a/backend/bootstrap/SetUp.php +++ b/backend/bootstrap/SetUp.php @@ -2,8 +2,8 @@ namespace backend\bootstrap; +use backend\widgets\dashboard\helpers\UsersLastInfo; use core\entities\Settings; - use zertex\elfinder\ElFinder; use zertex\ckeditor\CKEditor; use yii\base\BootstrapInterface; @@ -70,5 +70,20 @@ class SetUp implements BootstrapInterface '<_c:[\w\-]+>/<_a:[\w-]+>' => '<_c>/<_a>', '<_c:[\w\-]+>//<_a:[\w\-]+>' => '<_c>/<_a>', ]); + + // Add dashboard widgets + $app->params['dashboard_widgets'][] = [ + 'name' => \Yii::t('user', 'Users'), + 'title' => \Yii::t('user', 'Users'), + 'method' => 'widgetLastUsers', + 'resizable' => 1, + 'size' => [ + 'width' => 4, + 'height' => 12, + ], + 'icon' => 'fa fa-user', + 'widget' => UsersLastInfo::class, + 'category' => 'info', + ]; } } diff --git a/backend/controllers/SiteController.php b/backend/controllers/SiteController.php index 9e0f61e..8b3d1bb 100644 --- a/backend/controllers/SiteController.php +++ b/backend/controllers/SiteController.php @@ -10,6 +10,7 @@ use yii\data\ActiveDataProvider; use yii\web\Controller; use yii\filters\VerbFilter; use yii\filters\AccessControl; +use core\helpers\UserHelper; /** * Site controller @@ -38,7 +39,6 @@ class SiteController extends Controller 'allow' => true, ], [ - 'actions' => ['index', 'search', 'language'], 'allow' => true, 'roles' => ['Dashboard'], ], @@ -131,4 +131,61 @@ class SiteController extends Controller return parent::beforeAction($action); } + + public function actionGetWidgetsList() + { + return $this->renderAjax('widgets-list'); + } + + public function actionAddWidget($itemIdx, $color = '') + { + if (!Yii::$app->request->isAjax) { + throw new \RuntimeException(Yii::t('main', 'The requested page does not exist.')); + } + + $widgets = UserHelper::getSetting('widgetsLayout', []); + $item = Yii::$app->params['dashboard_widgets'][$itemIdx]; //require($itemFile); + $resizable = isset($item['resizable']) ? $item['resizable'] : 0; + $newWidget = [ + 'w' => $item['size']['width'] ?: 0, + 'h' => $item['size']['height'] ?: 0, + 'x' => 0, + 'y' => 0, + 'c' => $color, + 'resize' => $resizable, + 'auto' => 1, + 'method' => $item['method'], + 'title' => $item['title'], + 'name' => $item['name'], + 'icon' => $item['icon'], + 'widget' => $item['widget'], + ]; + array_push($widgets, $newWidget); + UserHelper::setSetting('widgetsLayout', $widgets); + return 'ok'; + } + + public function actionRemoveWidget($idx) + { + if (!Yii::$app->request->isAjax) { + throw new \RuntimeException(Yii::t('main', 'The requested page does not exist.')); + } + $widgets = UserHelper::getSetting('widgetsLayout', []); + array_splice($widgets, $idx, 1); + UserHelper::setSetting('widgetsLayout', $widgets); + } + + public function actionSaveWidgets() + { + $widgetsJson = Yii::$app->request->post('widgets'); + $widgets = json_decode($widgetsJson, true); + if ($widgets) { + UserHelper::setSetting('widgetsLayout', $widgets); + } + } + + public function actionGetSelectedWidgetsList() + { + return $this->renderAjax( 'widgets-selected-list'); + } } diff --git a/backend/helpers/DashboardHelper.php b/backend/helpers/DashboardHelper.php new file mode 100644 index 0000000..3f6205c --- /dev/null +++ b/backend/helpers/DashboardHelper.php @@ -0,0 +1,87 @@ +params['dashboard_widgets'] as $idx => $item) { + //if (!is_file($path . '/' . $file)) { + // continue; + //} + + //$itemFile = $path . '/' . $file; + //$item = require($itemFile); + + if (isset($item['rule']) && (Yii::$app->user->can($item['rule']) || Yii::$app->user->can('admin'))) { + } elseif (!isset($item['rule'])) { + } else { + continue; + } + + if ($item['category'] == 'counter') { + $line = Html::a($item['name'], '#', [ + 'onclick' => 'addWidget(' . $idx . ", 'colorCounter')", + ]) . '
'; + $widgetsCounter .= $line; + } else { + $line = Html::a($item['name'], '#', [ + 'onclick' => 'addWidget(' . $idx . ", 'colorInfo')", + ]) . '
'; + $widgetsInfo .= $line; + } + } + + return [$widgetsCounter, $widgetsInfo]; + } + + public static function getExtColors() + { + return [ + 'gray' => Yii::t('main', 'Gray'), + 'gray-light' => Yii::t('main', 'Light gray'), + 'black' => Yii::t('main', 'Black'), + 'red' => Yii::t('main', 'Red'), + 'yellow' => Yii::t('main', 'Yellow'), + 'aqua' => Yii::t('main', 'Aqua'), + 'navy' => Yii::t('main', 'Navy'), + 'blue' => Yii::t('main', 'Blue'), + 'light-blue' => Yii::t('main', 'Light Blue'), + 'green' => Yii::t('main', 'Green'), + 'teal' => Yii::t('main', 'Teal'), + 'olive' => Yii::t('main', 'Olive'), + 'lime' => Yii::t('main', 'Lime'), + 'orange' => Yii::t('main', 'Orange'), + 'fuchsia' => Yii::t('main', 'Fuchsia'), + 'purple' => Yii::t('main', 'Purple'), + 'maroon' => Yii::t('main', 'Maroon'), + ]; + } + + public static function getColors() + { + return [ + 'default' => Yii::t('main', 'Gray'), + 'danger' => Yii::t('main', 'Red'), + 'primary' => Yii::t('main', 'Blue'), + 'success' => Yii::t('main', 'Green'), + 'warning' => Yii::t('main', 'Orange'), + ]; + } +} diff --git a/backend/messages/ru/main.php b/backend/messages/ru/main.php index f64d699..c2b1b3b 100644 --- a/backend/messages/ru/main.php +++ b/backend/messages/ru/main.php @@ -1,50 +1,73 @@ 'Меню', - 'Title' => 'Заголовок', - 'Description' => 'Описание', - 'Keywords' => 'Ключевые слова', - 'Sign out' => 'Выход', - 'Sign in' => 'Вход', - 'Profile' => 'Профиль', - 'Error' => 'Ошибка', - 'Return to back or login page please.' => 'Вернитесь назад или авторизуйтесь снова.', - '{attribute} "{value}" already exists for this section.' => '{attribute} "{value}" уже есть в этом разделе.', - '"{attribute}" must be a valid JSON object' => '"{attribute}" должен быть в формате Json', - 'Please select correct type' => 'Укажите правильный тип', - 'Settings' => 'Настройки', - 'Type' => 'Тип', - 'Section' => 'Раздел', - 'Key' => 'Ключ', - 'Value' => 'Значение', - 'Active' => 'Активная', - 'Created At' => 'Создано', - 'Updated At' => 'Обновлено', - 'On' => 'Включить', - 'Off' => 'Выключить', - 'Updating Setting' => 'Редактирование параметра', - 'Editing' => 'Редактирование', - 'Change at your own risk' => 'Редактируйте на свой страх и риск', - 'Online' => 'В сети', - 'Search results' => 'Поиск', - 'Search...' => 'Поиск...', - 'Name' => 'Название', - 'Title attribute' => 'Атрибут тега Title', - 'Url' => 'Ссылка', - 'Sign in to start your session' => 'Вход в панель управления', - 'You have {count} notifications' => 'Новых уведомлений: {count}', - 'Modules' => 'Модули', - 'Find modules' => 'Поиск модулей', - 'Enable' => 'Включить', - 'Disable' => 'Отключить', - 'Settings List' => 'Все настройки', - 'Create Setting' => 'Новый параметр', - 'Interface Language' => 'Язык интерфейса', - 'design' => 'Оформление', - 'site' => 'Сайт', - 'Change Favicon' => 'Изменить иконку сайта', - 'Set Favicon' => 'Новая иконка сайта', - 'Image' => 'Изображение', + 'Menu' => 'Меню', + 'Title' => 'Заголовок', + 'Description' => 'Описание', + 'Keywords' => 'Ключевые слова', + 'Sign out' => 'Выход', + 'Sign in' => 'Вход', + 'Profile' => 'Профиль', + 'Error' => 'Ошибка', + 'Return to back or login page please.' => 'Вернитесь назад или авторизуйтесь снова.', + '{attribute} "{value}" already exists for this section.' => '{attribute} "{value}" уже есть в этом разделе.', + '"{attribute}" must be a valid JSON object' => '"{attribute}" должен быть в формате Json', + 'Please select correct type' => 'Укажите правильный тип', + 'Settings' => 'Настройки', + 'Type' => 'Тип', + 'Section' => 'Раздел', + 'Key' => 'Ключ', + 'Value' => 'Значение', + 'Active' => 'Активная', + 'Created At' => 'Создано', + 'Updated At' => 'Обновлено', + 'On' => 'Включить', + 'Off' => 'Выключить', + 'Updating Setting' => 'Редактирование параметра', + 'Editing' => 'Редактирование', + 'Change at your own risk' => 'Редактируйте на свой страх и риск', + 'Online' => 'В сети', + 'Search results' => 'Поиск', + 'Search...' => 'Поиск...', + 'Name' => 'Название', + 'Title attribute' => 'Атрибут тега Title', + 'Url' => 'Ссылка', + 'Sign in to start your session' => 'Вход в панель управления', + 'You have {count} notifications' => 'Новых уведомлений: {count}', + 'Modules' => 'Модули', + 'Find modules' => 'Поиск модулей', + 'Enable' => 'Включить', + 'Disable' => 'Отключить', + 'Settings List' => 'Все настройки', + 'Create Setting' => 'Новый параметр', + 'Interface Language' => 'Язык интерфейса', + 'design' => 'Оформление', + 'site' => 'Сайт', + 'Change Favicon' => 'Изменить иконку сайта', + 'Set Favicon' => 'Новая иконка сайта', + 'Image' => 'Изображение', 'Only png files allowed. Minimum size: 200x200. Form: square' => 'Разрешены только png файлы минимального размера 200х200. Форма: квадрат', - 'Favicon generation complete' => 'Иконка для сайта обновлена', + 'Favicon generation complete' => 'Иконка для сайта обновлена', + 'Counters widgets' => 'Счетчики', + 'Info widgets' => 'Информационные', + 'Cancel' => 'Отмена', + 'Ok' => 'Готово', + 'Add widget' => 'Добавление виджета', + 'Remove widget' => 'Удаление виджета', + 'Gray' => 'Серый', + 'Light gray' => 'Серый светлый', + 'Black' => 'Чёрный', + 'Red' => 'Красный', + 'Yellow' => 'Жёлтый', + 'Aqua' => 'Аква', + 'Navy' => 'Синий тёмный', + 'Blue' => 'Синий', + 'Light Blue' => 'Голубой', + 'Green' => 'Зелёный', + 'Teal' => 'Изумрудный', + 'Olive' => 'Оливковый', + 'Lime' => 'Лаймовый', + 'Orange' => 'Оранжевый', + 'Fuchsia' => 'Фуксия', + 'Purple' => 'Пурпурный', + 'Maroon' => 'Вишнёвый', ]; diff --git a/backend/views/layouts/header.php b/backend/views/layouts/header.php index 1b02af1..6010103 100644 --- a/backend/views/layouts/header.php +++ b/backend/views/layouts/header.php @@ -10,7 +10,8 @@ use yii\helpers\Html;
- ' . (isset(Yii::$app->params['settings']['site']['short_name']) ? Yii::$app->params['settings']['site']['short_name'] : 'APP') . '' . (isset(Yii::$app->params['settings']['site']['name']) ? Yii::$app->params['settings']['site']['name'] : Yii::$app->name) . '', Yii::$app->homeUrl, ['class' => 'logo']) ?> + ' . (isset(Yii::$app->params['settings']['site']['short_name']) ? Yii::$app->params['settings']['site']['short_name'] : 'APP') . '' . (isset(Yii::$app->params['settings']['site']['name']) ? Yii::$app->params['settings']['site']['name'] : Yii::$app->name) . '', + Yii::$app->homeUrl, ['class' => 'logo']) ?>