View file app/settings.php

File size: 6.33Kb
<?php

declare(strict_types=1);

use App\Models\User;
use App\Repositories\SettingRepository;
use App\Services\Setting;
use DI\ContainerBuilder;
use Monolog\Logger;

return static function (ContainerBuilder $containerBuilder)
{
    // Global Settings Object
    $containerBuilder->addDefinitions([
        Setting::class => function () {
            $settings = (new SettingRepository())->getSettings();

            return new Setting([
                'app' => [
                    'name' => $settings['app.name'], // Название сайта
                    'url'  => $settings['app.url'],  // Адрес сайта
                ],

                'main' => [
                    'title'          => $settings['main.title'],          // Заголовок сайта
                    'allow_register' => $settings['main.allow_register'], // Разрешить регистрацию
                    'confirm_email'  => $settings['main.confirm_email'],  // Подтверждать email
                    'guest_name'     => $settings['main.guest_name'],     // Имя гостя
                    'delete_name'    => $settings['main.delete_name'],    // Имя удаленного пользователя
                ],

                'mailer' => [
                    'dsn'        => $settings['mailer.dsn'],        // Параметры smtp (smtp://localhost:1025)
                    'from_email' => $settings['mailer.from_email'], // Email отправителя
                    'from_name'  => $settings['mailer.from_name'],  // Имя отправителя
                ],

                'story' => [
                    'active'           => $settings['story.active'],           // Публиковать посты без модерации
                    'allow_posting'    => $settings['story.allow_posting'],    // Разрешать пользователям публиковать статьи
                    'per_page'         => $settings['story.per_page'],         // Количество статей на страницу
                    'title_min_length' => $settings['story.title_min_length'], // Минимальная длина заголовка
                    'title_max_length' => $settings['story.title_max_length'], // Максимальная длина заголовка
                    'text_min_length'  => $settings['story.text_min_length'],  // Минимальная длина статьи
                    'text_max_length'  => $settings['story.text_max_length'],  // Максимальная длина статьи
                    'short_words'      => $settings['story.short_words'],      // Количество слов в сокращенной статье
                    'tags_max'         => $settings['story.tags_max'],         // Максимальное количество тегов
                    'tags_min_length'  => $settings['story.tags_min_length'],  // Минимальное количество символов в теге
                    'tags_max_length'  => $settings['story.tags_max_length'],  // Максимальное количество символов в теге
                ],

                'comment' => [
                    'text_min_length'  => $settings['comment.text_min_length'],
                    'text_max_length'  => $settings['comment.text_max_length'],
                ],

                'guestbook' => [
                    'allow_guests'     => $settings['guestbook.allow_guests'],   // Разрешить гостям писать сообщения
                    'per_page'         => $settings['guestbook.per_page'],
                    'text_min_length'  => $settings['guestbook.text_min_length'],
                    'text_max_length'  => $settings['guestbook.text_max_length'],
                    'name_min_length'  => $settings['guestbook.name_min_length'],
                    'name_max_length'  => $settings['guestbook.name_max_length'],
                ],

                'session' => [
                    'cookie_name'     => 'motor_session',
                    'cookie_domain'   => false,
                    'cookie_secure'   => isset($_SERVER['HTTPS']),
                    'cookie_httponly' => true,
                    'cookie_samesite' => 'Lax',
                ],

                'file' => [
                    'size_max'   => $settings['file.size_max'],  // Максимальный вес
                    'total_max'  => $settings['file.total_max'], // Максимальное количество загружаемых файлов
                    'extensions' => explode(',', $settings['file.extensions']),
                ],

                'image' => [
                    'resize'     => $settings['image.resize'],     // Обрезать изображения px
                    'weight_max' => $settings['image.weight_max'], // Максимальный размер px
                    'weight_min' => $settings['image.weight_min'], // Минимальный размер px
                ],

                'roles' => [
                    User::BOSS   => 'Босс',
                    User::ADMIN  => 'Админ',
                    User::MODER  => 'Модератор',
                    User::EDITOR => 'Редактор',
                    User::USER   => 'Пользователь',
                    User::PENDED => 'Ожидающий',
                    User::BANNED => 'Забаненный',
                ],

                'user' => [
                    'per_page' => $settings['user.per_page'],
                ],

                'captcha' => [
                    'length'  => $settings['captcha.length'], // Количество символов
                    'symbols' => $settings['captcha.symbols'], // Список допустимых символов
                ],

                'displayErrorDetails' => false, // Should be set to false in production
                'logError'            => true,
                'logErrorDetails'     => true,
                'logger' => [
                    'name'     => 'motor',
                    'path'     => isset($_ENV['docker']) ? 'php://stdout' : __DIR__ . '/../storage/logs/motor.log',
                    'level'    => Logger::DEBUG,
                    'maxFiles' => 7,
                ],
            ]);
        }
    ]);
};