131 lines
5.9 KiB
PHP
131 lines
5.9 KiB
PHP
<?php
|
|
|
|
use MintyPHP\Buffer;
|
|
use MintyPHP\Support\Flash;
|
|
use MintyPHP\Support\Guard;
|
|
use MintyPHP\Router;
|
|
use MintyPHP\Service\SettingService;
|
|
use MintyPHP\Service\TenantService;
|
|
use MintyPHP\Service\RoleService;
|
|
use MintyPHP\Service\DepartmentService;
|
|
use MintyPHP\Service\PermissionService;
|
|
|
|
Guard::requireLogin();
|
|
Guard::requirePermission(PermissionService::SETTINGS_VIEW);
|
|
|
|
$tenants = TenantService::list();
|
|
$roles = RoleService::list();
|
|
$departments = DepartmentService::list();
|
|
|
|
$sortByDescription = static function ($a, $b) {
|
|
return strcmp((string) ($a['description'] ?? ''), (string) ($b['description'] ?? ''));
|
|
};
|
|
usort($tenants, $sortByDescription);
|
|
usort($roles, $sortByDescription);
|
|
usort($departments, $sortByDescription);
|
|
|
|
$values = [
|
|
'default_tenant_id' => SettingService::getDefaultTenantId(),
|
|
'default_role_id' => SettingService::getDefaultRoleId(),
|
|
'default_department_id' => SettingService::getDefaultDepartmentId(),
|
|
'app_title' => SettingService::getAppTitle(),
|
|
'app_locale' => SettingService::getAppLocale(),
|
|
'app_theme' => SettingService::getAppTheme(),
|
|
'app_theme_user' => SettingService::isUserThemeAllowed(),
|
|
'app_primary_color' => SettingService::getAppPrimaryColor(),
|
|
'smtp_host' => SettingService::getSmtpHost(),
|
|
'smtp_port' => SettingService::getSmtpPort(),
|
|
'smtp_user' => SettingService::getSmtpUser(),
|
|
'smtp_secure' => SettingService::getSmtpSecure(),
|
|
'smtp_from' => SettingService::getSmtpFrom(),
|
|
'smtp_from_name' => SettingService::getSmtpFromName(),
|
|
];
|
|
$settings = [
|
|
'default_tenant' => SettingService::get(SettingService::DEFAULT_TENANT_KEY),
|
|
'default_role' => SettingService::get(SettingService::DEFAULT_ROLE_KEY),
|
|
'default_department' => SettingService::get(SettingService::DEFAULT_DEPARTMENT_KEY),
|
|
'app_title' => SettingService::get(SettingService::APP_TITLE_KEY),
|
|
'app_locale' => SettingService::get(SettingService::APP_LOCALE_KEY),
|
|
'app_theme' => SettingService::get(SettingService::APP_THEME_KEY),
|
|
'app_theme_user' => SettingService::get(SettingService::APP_THEME_USER_KEY),
|
|
'app_primary_color' => SettingService::get(SettingService::APP_PRIMARY_COLOR_KEY),
|
|
'smtp_host' => SettingService::get(SettingService::SMTP_HOST_KEY),
|
|
'smtp_port' => SettingService::get(SettingService::SMTP_PORT_KEY),
|
|
'smtp_user' => SettingService::get(SettingService::SMTP_USER_KEY),
|
|
'smtp_password' => SettingService::get(SettingService::SMTP_PASSWORD_KEY),
|
|
'smtp_secure' => SettingService::get(SettingService::SMTP_SECURE_KEY),
|
|
'smtp_from' => SettingService::get(SettingService::SMTP_FROM_KEY),
|
|
'smtp_from_name' => SettingService::get(SettingService::SMTP_FROM_NAME_KEY),
|
|
];
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
if (!isset($_POST['settings_submit'])) {
|
|
Router::redirect('admin/settings');
|
|
}
|
|
Guard::requirePermission(PermissionService::SETTINGS_UPDATE);
|
|
$defaultTenantId = (int) ($_POST['default_tenant_id'] ?? 0);
|
|
$defaultRoleId = (int) ($_POST['default_role_id'] ?? 0);
|
|
$defaultDepartmentId = (int) ($_POST['default_department_id'] ?? 0);
|
|
$appTitle = trim((string) ($_POST['app_title'] ?? ''));
|
|
$appLocale = trim((string) ($_POST['app_locale'] ?? ''));
|
|
$appTheme = trim((string) ($_POST['app_theme'] ?? ''));
|
|
$appThemeUser = isset($_POST['app_theme_user']);
|
|
$rawPrimaryColor = $_POST['app_primary_color'] ?? '';
|
|
if (is_array($rawPrimaryColor)) {
|
|
$rawPrimaryColor = '';
|
|
}
|
|
$appPrimaryColor = trim((string) $rawPrimaryColor);
|
|
if (in_array(strtolower($appPrimaryColor), ['null', 'undefined'], true)) {
|
|
$appPrimaryColor = '';
|
|
}
|
|
$smtpHost = trim((string) ($_POST['smtp_host'] ?? ''));
|
|
$smtpPort = (int) ($_POST['smtp_port'] ?? 0);
|
|
$smtpUser = trim((string) ($_POST['smtp_user'] ?? ''));
|
|
$smtpPassword = (string) ($_POST['smtp_password'] ?? '');
|
|
$smtpSecure = trim((string) ($_POST['smtp_secure'] ?? ''));
|
|
$smtpFrom = trim((string) ($_POST['smtp_from'] ?? ''));
|
|
$smtpFromName = trim((string) ($_POST['smtp_from_name'] ?? ''));
|
|
|
|
SettingService::setDefaultTenantId($defaultTenantId > 0 ? $defaultTenantId : null);
|
|
SettingService::setDefaultRoleId($defaultRoleId > 0 ? $defaultRoleId : null);
|
|
SettingService::setDefaultDepartmentId($defaultDepartmentId > 0 ? $defaultDepartmentId : null);
|
|
SettingService::setAppTitle($appTitle);
|
|
SettingService::setAppLocale($appLocale);
|
|
SettingService::setAppTheme($appTheme);
|
|
SettingService::setUserThemeAllowed($appThemeUser);
|
|
$primaryOk = SettingService::setAppPrimaryColor($appPrimaryColor);
|
|
if (!$primaryOk) {
|
|
$appPrimaryColor = '';
|
|
Flash::error('Primary color is invalid', 'admin/settings', 'app_primary_invalid');
|
|
}
|
|
SettingService::setSmtpHost($smtpHost);
|
|
SettingService::setSmtpPort($smtpPort > 0 ? $smtpPort : null);
|
|
SettingService::setSmtpUser($smtpUser);
|
|
if (trim($smtpPassword) !== '') {
|
|
SettingService::setSmtpPassword($smtpPassword);
|
|
}
|
|
SettingService::setSmtpSecure($smtpSecure);
|
|
SettingService::setSmtpFrom($smtpFrom);
|
|
SettingService::setSmtpFromName($smtpFromName);
|
|
|
|
$cacheFile = __DIR__ . '/../../../config/settings.php';
|
|
$cacheData = [];
|
|
if (is_file($cacheFile)) {
|
|
$existing = include $cacheFile;
|
|
if (is_array($existing)) {
|
|
$cacheData = $existing;
|
|
}
|
|
}
|
|
$cacheData['app_title'] = $appTitle !== '' ? $appTitle : null;
|
|
$cacheData['app_locale'] = $appLocale !== '' ? $appLocale : null;
|
|
$cacheData['app_theme'] = $appTheme !== '' ? $appTheme : null;
|
|
$cacheData['app_theme_user'] = $appThemeUser ? '1' : '0';
|
|
$cacheData['app_primary_color'] = $appPrimaryColor !== '' ? $appPrimaryColor : null;
|
|
file_put_contents($cacheFile, "<?php\nreturn " . var_export($cacheData, true) . ";\n");
|
|
|
|
Flash::success('Settings updated', 'admin/settings', 'settings_updated');
|
|
Router::redirect('admin/settings');
|
|
}
|
|
|
|
Buffer::set('title', t('Settings'));
|