forked from mirzaev/site-tordv-calculator
111 lines
3.7 KiB
PHP
111 lines
3.7 KiB
PHP
<?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);
|
||
}
|
||
}
|