portal.mkgtu.ru/backend/controllers/SiteController.php

243 lines
11 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace backend\controllers;
use backend\models\MainPageInstructionFile;
use backend\models\MainPageSetting;
use common\components\filesystem\FilterFilename;
use common\components\keyStorage\FormModel;
use common\models\AttachmentTypeTemplate;
use Yii;
use yii\base\UserException;
use yii\web\Controller;
use yii\web\ErrorAction;
use yii\web\Response;
class SiteController extends Controller
{
public function actions()
{
return ['error' => ['class' => ErrorAction::class]];
}
public function beforeAction($action)
{
$this->layout = Yii::$app->user->isGuest || !Yii::$app->user->can('loginToBackend') ? 'base' : 'common';
return parent::beforeAction($action);
}
public function actionSettings()
{
$model = new FormModel([
'keys' => [
'frontend.maintenance' => [
'label' => Yii::t('backend', 'Сервисный режим фронтенд части'),
'type' => FormModel::TYPE_DROPDOWN,
'items' => [
'disabled' => Yii::t('backend', 'Неактивно'),
'enabled' => Yii::t('backend', 'Активно')
]
],
'backend.theme-skin' => [
'label' => Yii::t('backend', 'Тема панели управления'),
'type' => FormModel::TYPE_DROPDOWN,
'items' => [
'navbar-dark bg-gray' => Yii::t('backend', 'Серый'),
'navbar-dark bg-dark' => Yii::t('backend', 'Темный'),
'navbar-light bg-white' => Yii::t('backend', 'Белый'),
'navbar-light bg-pink' => Yii::t('backend', 'Розовый'),
'navbar-dark bg-indigo' => Yii::t('backend', 'Индиго'),
'navbar-light bg-light' => Yii::t('backend', 'Светлый'),
'navbar-dark bg-primary' => Yii::t('backend', 'Синий'),
'navbar-dark bg-danger' => Yii::t('backend', 'Красный'),
'navbar-light bg-info' => Yii::t('backend', 'Берёзовый'),
'navbar-light bg-warning' => Yii::t('backend', 'Жёлтый'),
'navbar-light bg-success' => Yii::t('backend', 'Зелёный'),
'navbar-dark bg-navy' => Yii::t('backend', 'Тёмно-синий'),
'navbar-light bg-orange' => Yii::t('backend', 'Оранжевый'),
'navbar-dark bg-purple' => Yii::t('backend', 'Пурпурный'),
'navbar-dark bg-lightblue' => Yii::t('backend', 'Светло-синий'),
'navbar-light bg-teal' => Yii::t('backend', 'Цвет морской волны'),
],
],
'backend.logo-skin' => [
'label' => Yii::t('backend', 'Тема логотипа'),
'type' => FormModel::TYPE_DROPDOWN,
'items' => [
'bg-gray' => Yii::t('backend', 'Серый'),
'bg-dark' => Yii::t('backend', 'Темный'),
'bg-white' => Yii::t('backend', 'Белый'),
'bg-pink' => Yii::t('backend', 'Розовый'),
'bg-indigo' => Yii::t('backend', 'Индиго'),
'bg-light' => Yii::t('backend', 'Светлый'),
'bg-primary' => Yii::t('backend', 'Синий'),
'bg-danger' => Yii::t('backend', 'Красный'),
'bg-info' => Yii::t('backend', 'Берёзовый'),
'bg-warning' => Yii::t('backend', 'Жёлтый'),
'bg-success' => Yii::t('backend', 'Зелёный'),
'bg-navy' => Yii::t('backend', 'Тёмно-синий'),
'bg-orange' => Yii::t('backend', 'Оранжевый'),
'bg-purple' => Yii::t('backend', 'Пурпурный'),
'bg-lightblue' => Yii::t('backend', 'Светло-синий'),
'bg-teal' => Yii::t('backend', 'Цвет морской волны'),
],
],
'backend.nav-style' => [
'label' => Yii::t('backend', 'Стиль панели управления'),
'type' => FormModel::TYPE_DROPDOWN,
'items' => [
'' => Yii::t('backend', 'По умолчанию'),
'nav-flat' => Yii::t('backend', 'Flat'),
'nav-legacy' => Yii::t('backend', 'Legacy'),
],
],
'backend.layout-fixed' => [
'label' => Yii::t('backend', 'Фиксированная панель управления'),
'type' => FormModel::TYPE_CHECKBOX
],
'backend.nav-compact' => [
'label' => Yii::t('backend', 'Компактное представление панели управления'),
'type' => FormModel::TYPE_CHECKBOX
],
'backend.small-body-text' => [
'label' => Yii::t('backend', 'Использовать маленький текст'),
'type' => FormModel::TYPE_CHECKBOX
],
'backend.nav-child-indent' => [
'label' => Yii::t('backend', 'Добавить отступ в сворачиваемые списки боковой панели'),
'type' => FormModel::TYPE_CHECKBOX
],
'backend.dark-mode' => [
'label' => Yii::t('backend', 'Темный режим'),
'type' => FormModel::TYPE_CHECKBOX
],
'backend.layout-collapsed-sidebar' => [
'label' => Yii::t('backend', 'Скрыть боковую панель'),
'type' => FormModel::TYPE_CHECKBOX
]
]
]);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
Yii::$app->session->setFlash('alert', [
'body' => Yii::t('backend', 'Настройки были успешно сохранены'),
'options' => ['class' => 'alert alert-success']
]);
return $this->refresh();
}
return $this->render('settings', ['model' => $model]);
}
public function actionError()
{
$error = Yii::$app->errorHandler->error;
if ($error) {
return $this->render('error', ['error' => $error]);
}
}
public function actionDownloadInstructionAttachment(int $id)
{
if (is_null($id)) {
throw new UserException('Невозможно скачать файл, так как не передан уникальный идентификатор файла.');
}
$setting = MainPageSetting::findOne($id);
Yii::$app->response->format = Response::FORMAT_JSON;
if (
$setting &&
$instruction = MainPageSetting::getRelatedInstruction($setting)
) {
if (!$instruction instanceof MainPageInstructionFile) {
return Yii::t(
'abiturient/download-instruction-attachment',
'Текст сообщения об отсутствии файла для инструкции поступающего: `Невозможно получить информацию о файле.`'
);
}
$path = $instruction->getAbsPath();
if (!$path || !file_exists($path)) {
return Yii::t(
'abiturient/download-instruction-attachment',
'Текст сообщения об отсутствии файла для инструкции поступающего: `Невозможно получить файл.`'
);
}
return Yii::$app->response->sendFile(
$path,
FilterFilename::sanitize($instruction->filename)
);
}
return Yii::t(
'abiturient/download-instruction-attachment',
'Текст сообщения об отсутствии записи о таком файле для инструкции поступающего: `Файл не найден.`'
);
}
public function actionDownloadAttachmentTypeTemplate(int $id)
{
if (is_null($id)) {
throw new UserException('Невозможно скачать файл, так как не передан уникальный идентификатор файла.');
}
$attachmentTypeTemplate = AttachmentTypeTemplate::findOne($id);
Yii::$app->response->format = Response::FORMAT_JSON;
if ($attachmentTypeTemplate) {
$path = $attachmentTypeTemplate->getAbsPath();
if (!$path || !file_exists($path)) {
return Yii::t(
'abiturient/download-attachment-type-template',
'Текст сообщения об отсутствии файла для инструкции поступающего: `Невозможно получить файл.`'
);
}
$mimeType = 'application/image';
if (strpos($path, '.pdf') !== false) {
$mimeType = 'application/pdf';
}
return Yii::$app->response->sendFile(
$path,
FilterFilename::sanitize($attachmentTypeTemplate->filename),
['inline' => true, 'mimeType' => $mimeType]
);
}
return Yii::t(
'abiturient/download-attachment-type-template',
'Текст сообщения об отсутствии записи о таком файле для инструкции поступающего: `Файл не найден.`'
);
}
public function actionDeleteAttachmentTypeTemplate(int $id)
{
if (is_null($id)) {
throw new UserException('Невозможно скачать файл, так как не передан уникальный идентификатор файла.');
}
$attachmentTypeTemplate = AttachmentTypeTemplate::findOne($id);
Yii::$app->response->format = Response::FORMAT_JSON;
if ($attachmentTypeTemplate && $attachmentTypeTemplate->delete() !== false) {
return Yii::t(
'abiturient/download-attachment-type-template',
'Текст сообщения об отсутствии записи о таком файле для инструкции поступающего: `Файл успешно удалён.`'
);
}
return Yii::t(
'abiturient/download-attachment-type-template',
'Текст сообщения об отсутствии записи о таком файле для инструкции поступающего: `Файл возникла ошибка удаления файла.`'
);
}
}