site-zkmr-calculator/mirzaev/calculator/system/controllers/settings_controller.php

111 lines
3.7 KiB
PHP
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
declare(strict_types=1);
namespace mirzaev\calculator\controllers;
use mirzaev\calculator\controllers\core;
use mirzaev\calculator\models\accounts_model as accounts;
use mirzaev\calculator\models\settings_model as settings;
/**
* Контроллер настроек
*
* @package mirzaev\calculator\controllers
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/
final class settings_controller extends core
{
/**
* Настройки (страница)
*
* HTML-документ со списком настроек
*
* @param array $vars Параметры
*
* @return string HTML-докумкент или журнал ошибок
*/
public function index(array $vars = []): string
{
// Инициализация журнала ошибок
$vars['errors'] = ['settings' => []];
// Инициализация аккаунта
$vars['account'] = accounts::account($vars['errors']['settings']);
if (accounts::access('settings')) {
// Разрешён доступ к изменению настроек
// Инициализация настроек
$vars['settings'] = settings::translate(settings::filter(settings::read(errors: $vars['errors']['settings']), $vars['errors']['settings']), $vars['errors']['settings']);
// Генерация представления
return $this->view->render(DIRECTORY_SEPARATOR . 'settings' . DIRECTORY_SEPARATOR . 'index.html', $vars);
}
if (empty($vars['errors']['settings'])) return '';
return json_encode($vars['errors']);
}
/**
* Записать
*
* @param array $vars Параметры
*
* @return string Журнал ошибок
*/
public function write(array $vars = []): ?string
{
// Инициализация журнала ошибок
$vars['errors'] = ['settings' => []];
// Инициализация аккаунта
$vars['account'] = accounts::account($vars['errors']['settings']);
if ($vars['account'] && $vars['account']['permissions']['settings'] ?? 0 === 1) {
// Удалось аутентифицироваться и пройдена проверка авторизации
// Инициализация калькуляторов из тела запроса (подразумевается, что там массивы с параметрами)
$vars['settings'] = json_decode(file_get_contents('php://input'), true);
foreach ($vars['settings'] ?? [] as $name => $value) {
// Перебор настроек
// Запись в базу данных
settings::write($name, $value, $vars['errors']['settings']);
}
return json_encode($vars['errors']);
}
http_response_code(500);
return json_encode($vars['errors']);
}
/**
* Прочитать
*
* @param array $vars Параметры
*/
public function read(array $vars = []): ?string
{
// Инициализация журнала ошибок
$vars['errors'] = ['settings' => []];
// Инициализация аккаунта
$vars['account'] = accounts::account($vars['errors']['settings']);
// Инициализация буфера вывода
$settings = [];
foreach ($vars['settings'] ?? [] as $name) {
// Перебор настроек
$settings[] = settings::read($name, $vars['errors']['settings']);
}
return json_encode($settings);
}
}