mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
78 lines
3.2 KiB
PHP
78 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* ASPIC — db.php
|
|
* Connexions PDO de l'application.
|
|
*
|
|
* ⚠️ Mise en place de MIRADOR (30 août 2026, voir journal de développement) :
|
|
* deux connexions distinctes désormais.
|
|
*
|
|
* - getRouterConnection() : connexion fixe vers MIRADOR (base d'authentification
|
|
* centralisée, table MIR_Users), sur l'instance de routage dédiée
|
|
* (ROUTER_DB_HOST). N'est appelée que par aspic.php, à l'identification.
|
|
*
|
|
* - getDbConnection() : connexion vers la base de travail réelle. Si la
|
|
* session en cours porte des coordonnées de routage (posées par aspic.php
|
|
* juste après vérification contre MIRADOR — host/port/base propres à
|
|
* l'utilisateur connecté, voir $_SESSION['ASPIC_DB_HOST'] et consorts),
|
|
* c'est cette base précise qui est ouverte : deux utilisateurs connectés
|
|
* en même temps peuvent donc parfaitement travailler sur deux bases
|
|
* différentes (MS-DEV, MS-TST, ou une base de bêta testeur plus tard).
|
|
* À défaut de session exploitable (scripts publics sans authentification,
|
|
* ex. prospects_core.php — voir journal, section 18), on retombe sur la
|
|
* base par défaut du conteneur (DB_HOST/DB_NAME), exactement comme avant
|
|
* MIRADOR.
|
|
*
|
|
* Le compte technique MySQL (DB_USER/DB_PASS) est le même sur toutes les
|
|
* instances (mysql/mysql2/mysql3 — droits complets sur toutes les bases que
|
|
* chacune héberge, voir journal). Une seule paire d'identifiants suffit donc
|
|
* pour ouvrir n'importe laquelle des connexions ci-dessus, MIRADOR compris
|
|
* (ROUTER_DB_USER/ROUTER_DB_PASS — valeurs dupliquées à l'identique de
|
|
* DB_USER/DB_PASS côté docker-compose, mais des variables distinctes pour
|
|
* ne jamais mélanger accidentellement les deux usages).
|
|
*/
|
|
|
|
function ouvrirConnexionPdo(string $host, string $db, string $user, string $pass, int $port = 3306): PDO
|
|
{
|
|
$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=utf8mb4";
|
|
$options = [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
];
|
|
|
|
return new PDO($dsn, $user, $pass, $options);
|
|
}
|
|
|
|
function getDbConnection(): PDO
|
|
{
|
|
// Routage dynamique posé par aspic.php à l'identification (MIRADOR) :
|
|
// prioritaire dès qu'une session valide le porte.
|
|
if (session_status() === PHP_SESSION_ACTIVE && !empty($_SESSION['ASPIC_DB_HOST'])) {
|
|
return ouvrirConnexionPdo(
|
|
$_SESSION['ASPIC_DB_HOST'],
|
|
$_SESSION['ASPIC_DB_NAME'],
|
|
getenv('DB_USER') ?: 'crm_user',
|
|
getenv('DB_PASS') ?: '',
|
|
(int) ($_SESSION['ASPIC_DB_PORT'] ?? 3306)
|
|
);
|
|
}
|
|
|
|
// Repli : base par défaut du conteneur, inchangé depuis avant MIRADOR —
|
|
// utilisé par les scripts publics sans session (prospection).
|
|
$host = getenv('DB_HOST') ?: 'mysql';
|
|
$db = getenv('DB_NAME') ?: 'crm';
|
|
$user = getenv('DB_USER') ?: 'crm_user';
|
|
$pass = getenv('DB_PASS') ?: '';
|
|
|
|
return ouvrirConnexionPdo($host, $db, $user, $pass);
|
|
}
|
|
|
|
function getRouterConnection(): PDO
|
|
{
|
|
$host = getenv('ROUTER_DB_HOST') ?: 'mysql2';
|
|
$db = getenv('ROUTER_DB_NAME') ?: 'MIRADOR';
|
|
$user = getenv('ROUTER_DB_USER') ?: 'crm_user';
|
|
$pass = getenv('ROUTER_DB_PASS') ?: '';
|
|
|
|
return ouvrirConnexionPdo($host, $db, $user, $pass);
|
|
}
|