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);
 | 
						||
    }
 | 
						||
}
 |