Globinours/app/Services/AppSettings.php

95 lines
3.8 KiB
PHP
Raw Permalink 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);
final class AppSettings
{
private const DEFAULTS = [
'association_name' => 'Association',
'association_address' => '',
'association_postal_code' => '',
'association_city' => '',
'association_phone' => '',
'association_email' => '',
'association_siret' => '',
'association_rna' => '',
'association_latitude' => '',
'association_longitude' => '',
'adoption_fee_sterilized' => '220',
'adoption_fee_unsterilized' => '200',
'quarantine_days' => '15',
'backup_retention' => '10',
'app_language' => 'fr',
'public_site_enabled' => '0',
'public_site_theme' => 'warm',
'public_site_routing' => 'integrated',
'public_site_home_title' => 'Ils attendent une famille',
'public_site_home_text' => 'Découvrez les animaux actuellement proposés à ladoption par notre association.',
'public_site_about_enabled' => '1',
'public_site_about_title' => 'Notre association',
'public_site_about_text' => 'Présentez ici votre association, son histoire et ses missions.',
'public_site_donation_title' => 'Nous soutenir',
'public_site_donation_text' =>
'Chaque don contribue directement aux soins, à lalimentation et à la protection des animaux.',
'public_site_donation_url' => '',
'public_site_contact_text' => 'Une question sur une adoption ou sur lassociation ? Contactez-nous.',
'public_site_facebook_url' => '',
'public_site_instagram_url' => '',
'notification_email_enabled' => '0',
'notification_email_frequency' => 'weekly',
'notification_email_recipient' => '',
'notification_last_sent_at' => '',
'privacy_retention_years' => '5',
'privacy_retention_adopter_years' => '5',
'privacy_retention_foster_years' => '5',
'privacy_retention_volunteer_years' => '5',
'privacy_access_log_months' => '24',
'backup_schedule_enabled' => '0',
'backup_schedule_frequency' => 'daily',
'backup_last_run_at' => '',
'backup_last_verified_at' => '',
'public_site_legal_text' => '',
'public_site_privacy_text' => '',
];
private static ?array $cache = null;
public static function all(): array
{
if (self::$cache !== null) {
return self::$cache;
}
$values = self::DEFAULTS;
try {
foreach (
DB::pdo()->query('SELECT setting_key,setting_value FROM app_settings')->fetchAll(PDO::FETCH_ASSOC)
as $row
) {
if (array_key_exists($row['setting_key'], $values)) {
$values[$row['setting_key']] = (string) $row['setting_value'];
}
}
} catch (Throwable) {
}
return self::$cache = $values;
}
public static function get(string $key): string
{
return (string) (self::all()[$key] ?? '');
}
public static function int(string $key, int $min = 0, int $max = PHP_INT_MAX): int
{
return max($min, min($max, (int) self::get($key)));
}
public static function save(array $values, ?int $userId): void
{
$allowed = array_keys(self::DEFAULTS);
$stmt = DB::pdo()->prepare(
"INSERT INTO app_settings(setting_key,setting_value,updated_by,updated_at) VALUES(:key,:value,:user,datetime('now')) ON CONFLICT(setting_key) DO UPDATE SET setting_value=excluded.setting_value,updated_by=excluded.updated_by,updated_at=datetime('now')",
);
foreach ($allowed as $key) {
if (array_key_exists($key, $values)) {
$stmt->execute([':key' => $key, ':value' => (string) $values[$key], ':user' => $userId]);
}
}
self::$cache = null;
}
}