From 672d7471f905663c8ae01e7fc90ad84d77b867ed Mon Sep 17 00:00:00 2001 From: Albin Kester <83301974+stakovicz@users.noreply.github.com> Date: Sun, 9 Feb 2025 21:36:32 +0100 Subject: [PATCH] Ajout de la timezone pour MySQL (#1612) --- app/config/config.php | 30 ------------------- app/config/config.yml | 6 +++- .../Afup/Corporate/_Site_Base_De_Donnees.php | 3 +- sources/Afup/Utils/Base_De_Donnees.php | 9 ++++-- sources/AppBundle/AppBundle.php | 30 +++++++++++++++++++ 5 files changed, 44 insertions(+), 34 deletions(-) delete mode 100644 app/config/config.php diff --git a/app/config/config.php b/app/config/config.php deleted file mode 100644 index 2a198b164..000000000 --- a/app/config/config.php +++ /dev/null @@ -1,30 +0,0 @@ -setParameter($name, $value); -} diff --git a/app/config/config.yml b/app/config/config.yml index 566d27698..3e87ecd7c 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -1,5 +1,4 @@ imports: - - { resource: config.php } - { resource: security.yml } - { resource: services.yml } @@ -357,6 +356,11 @@ ting: port: "%database_port%" user: "%database_user%" password: "%database_password%" + + databases_options: + main: + timezone: "%database_timezone%" + repositories: event: namespace : AppBundle\Event\Model\Repository diff --git a/sources/Afup/Corporate/_Site_Base_De_Donnees.php b/sources/Afup/Corporate/_Site_Base_De_Donnees.php index ea4f985f4..92f68ad71 100644 --- a/sources/Afup/Corporate/_Site_Base_De_Donnees.php +++ b/sources/Afup/Corporate/_Site_Base_De_Donnees.php @@ -18,7 +18,8 @@ public function __construct() $conf->obtenir('database_name'), $conf->obtenir('database_user'), $conf->obtenir('database_password'), - $conf->obtenir('database_port') + $conf->obtenir('database_port'), + $conf->obtenir('database_timezone'), ); } } diff --git a/sources/Afup/Utils/Base_De_Donnees.php b/sources/Afup/Utils/Base_De_Donnees.php index 5abbefe8f..2be13d5b6 100644 --- a/sources/Afup/Utils/Base_De_Donnees.php +++ b/sources/Afup/Utils/Base_De_Donnees.php @@ -24,9 +24,10 @@ class Base_De_Donnees * @param string $database Nom de la base * @param string $user Nom de l'utilisateur * @param string $password Mot de passe + * @param string $timezone Timezone de la base de données * @return void */ - public function __construct($host, $database, $user, $password, $port = null) + public function __construct($host, $database, $user, $password, $port = null, $timezone = null) { $this->config = [ 'host' => $host, @@ -34,13 +35,17 @@ public function __construct($host, $database, $user, $password, $port = null) 'user' => $user, 'password' => $password, 'port' => $port, + 'timezone' => $timezone, ]; } public function getDbLink() { if ($this->link === null) { - $this->link = mysqli_connect($this->config['host'], $this->config['user'], $this->config['password'], null, (int) $this->config['port']) or die('Connexion à la base de données impossible'); + $this->link = mysqli_connect($this->config['host'], $this->config['user'], $this->config['password'], null, $this->config['port']) or die('Connexion à la base de données impossible'); + if ($this->config['timezone']) { + mysqli_query($this->link, "SET time_zone = '" . $this->config['timezone'] . "'"); + } mysqli_set_charset($this->link, "utf8mb4"); $this->selectionnerBase($this->config['database']); } diff --git a/sources/AppBundle/AppBundle.php b/sources/AppBundle/AppBundle.php index 931ea9720..0076ec93b 100644 --- a/sources/AppBundle/AppBundle.php +++ b/sources/AppBundle/AppBundle.php @@ -4,8 +4,38 @@ namespace AppBundle; +use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; class AppBundle extends Bundle { + public function build(ContainerBuilder $container): void + { + $path = dirname(__FILE__, 3); + $envFile = is_file($path . '/.env') ? $path . '/.env' : $path . '/.env.dist'; + $lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach ($lines as $line) { + if (strpos(trim($line), '#') === 0) { + continue; + } + + [$name, $default] = explode('=', $line, 2); + // On va chercher dans les variables d'env en premier + if (!$value = getenv($name)) { + $value = $default; + } + $name = strtolower(trim($name)); + $value = trim($value); + if (is_numeric($value)) { + $value = (int) $value; + } + + $container->setParameter($name, $value); + } + // On calcul l'offset de la timezone pour MySQL + // car la base de données est en UTC et la base n'accepte que les offset. + $container->setParameter('database_timezone', date('P')); + + parent::build($container); + } }