CHANGEMENTS MAJEURS: - Fusion des 3 bases de données (uof_frontal, uof_linet, logs) en une seule base 'cleo' - Migration vers PDO avec pattern Singleton et requêtes préparées - Configuration externalisée via variables d'environnement (.env) - Séparation application (dva-front) et base de données (maria3) SÉCURITÉ: - Suppression des credentials en dur dans le code - Implémentation de la classe Database avec gestion d'erreurs sécurisée - Protection contre les injections SQL via requêtes préparées INFRASTRUCTURE: - Container dva-front : MariaDB supprimé, application PHP uniquement - Container maria3 : Base de données centralisée MariaDB 11.4 - Script de déploiement optimisé (deploy-cleo-fast.sh) CORRECTIONS: - Ajout des tables manquantes (z_sessions, z_stats, marches_listes) - Compatibilité PDO (fetch_assoc → fetch(PDO::FETCH_ASSOC)) - Suppression des commentaires debug dans les réponses AJAX - Permissions fichiers (.env 644, logs 777 avec owner nobody) DOCUMENTATION: - Mise à jour README.md avec architecture actuelle - Migration README.md marqué comme complété - TODO.md avec état d'avancement et prochaines étapes (PROD IN4) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
149 lines
6.0 KiB
PHP
149 lines
6.0 KiB
PHP
<?php
|
|
|
|
class Conf
|
|
{
|
|
const admin = 1; // TRUE ou FALSE pour indiquer si l'application est admin ou non
|
|
const intra = 1; // Est-ce un intranet privé TRUE 1, ou un site public FALSE 0
|
|
const erp = 1; //! Est-ce un ERP ? Utile pour la gestion documentaire avec les paths spéciaux pour l'ERP
|
|
const magazine = 0; //! Est-ce qu'on veut transformer les PDF en JPG pour la lecture Magazine dans le d6tools.upload ?
|
|
|
|
public $_appname;
|
|
public $_appscript;
|
|
public $_appversion;
|
|
public $_appenv;
|
|
public $_apptitle;
|
|
|
|
public $_brandname;
|
|
public $_brandadresse1;
|
|
public $_brandadresse2;
|
|
public $_brandcp;
|
|
public $_brandville;
|
|
public $_brandtel;
|
|
public $_brandemail;
|
|
public $_brandlogo;
|
|
public $_brandgroupe;
|
|
public $_brandmulti;
|
|
|
|
public $_piwikid;
|
|
public $_googlid;
|
|
|
|
public $_excludeIp = "82.67.142.214"; //! IP à exclure pour le comptage des visites et pour le debug
|
|
public $_clientIp;
|
|
public $_devIp = false;
|
|
|
|
//! Configuration du debug
|
|
public $_debug_level = 0; //! 0=off, 1=errors, 2=warnings, 3=info, 4=debug
|
|
public $_log_sql = false; //! Logger les requêtes SQL
|
|
public $_log_performance = false; //! Logger les temps d'exécution
|
|
public $_log_file_path = ''; //! Chemin du fichier de log
|
|
|
|
public $_pathupload = "/pub/files/upload/"; //! le path de base pour les uploads
|
|
|
|
//! les infos de connexion de la base de données
|
|
public $_dbhost = 'localhost';
|
|
public $_dbname = 'uof_frontal';
|
|
public $_dbuser = 'uof_front_user';
|
|
public $_dbpass = 'd66,UnikOffice.User';
|
|
|
|
public $_dbghost = 'localhost';
|
|
public $_dbgname = '';
|
|
public $_dbguser = 'uof_linet_user';
|
|
public $_dbgpass = 'd66,UOF-LinetRH.User';
|
|
|
|
public $_dbuhost = 'localhost';
|
|
public $_dbuname = '';
|
|
public $_dbuuser = 'uof_linet_user';
|
|
public $_dbupass = 'd66,UOF-LinetRH.User';
|
|
|
|
public $_tbusers = ""; // Spécifie la table des users de cette application, par défaut uof_frontal.users, mais sur Linet c'est dans uof_linet.commerciaux
|
|
|
|
//! les infos de l'entité de l'utilisateur
|
|
public $_entite = '';
|
|
|
|
//! indique si c'est une nouvelle version pour les tests de nouveaux modules et librairies
|
|
public $_new_version = false;
|
|
|
|
public function __construct()
|
|
{
|
|
//! on va chercher la configuration de l'application dans la table ce_frontal.y_conf
|
|
$mysqli = new mysqli($this->_dbhost, $this->_dbuser, $this->_dbpass, $this->_dbname);
|
|
$sql = 'SELECT * FROM y_conf WHERE admin=' . self::admin . ' AND active=1 LIMIT 1;';
|
|
$mysqli->set_charset("utf8");
|
|
$res = $mysqli->query($sql);
|
|
$resconf = $res->fetch_assoc();
|
|
$this->_appenv = $resconf["appenv"];
|
|
$this->_appversion = "2.0.1";
|
|
$this->_appscript = $resconf["appscript"]; //! le script à appeler par défaut si l'utilisateur n'est pas reconnu
|
|
|
|
$this->_brandgroupe = $resconf["brandgroupe"];
|
|
$this->_brandmulti = $resconf["brandmulti"];
|
|
|
|
//! On va chercher les infos de base de cette appname dans ce_frontal.users_entites en fonction du http_host
|
|
$http_host = $_SERVER['HTTP_HOST'];
|
|
error_log("http_host : ".$http_host);
|
|
$sql = 'SELECT * FROM users_entites WHERE http_host LIKE "%' . $http_host . '%" AND active=1 LIMIT 1;';
|
|
$res = $mysqli->query($sql);
|
|
$mysqli->close();
|
|
$resentite = $res->fetch_assoc();
|
|
if (empty($resentite)) {
|
|
//! on ne trouve pas ce http_host, on part sur la demo
|
|
$this->_appname = "udo_demo";
|
|
$mysqli = new mysqli($this->_dbhost, $this->_dbuser, $this->_dbpass, $this->_dbname);
|
|
$sql = 'SELECT * FROM users_entites WHERE rowid=1;'; // appname="' . $this->_appname . '" AND active=1 LIMIT 1;';
|
|
$res = $mysqli->query($sql);
|
|
$mysqli->close();
|
|
$resentite = $res->fetch_assoc();
|
|
}
|
|
$this->_entite = $resentite;
|
|
$this->_appname = $resentite["appname"];
|
|
$this->_apptitle = $resentite["libelle"];
|
|
$this->_brandname = $resentite["libelle"];
|
|
$this->_brandadresse1 = $resentite["adresse1"];
|
|
$this->_brandadresse2 = $resentite["adresse2"];
|
|
$this->_brandcp = $resentite["cp"];
|
|
$this->_brandville = $resentite["ville"];
|
|
$this->_brandtel = $resentite["tel1"];
|
|
$this->_brandemail = $resentite["email"];
|
|
$this->_brandlogo = $resentite["appname"];
|
|
|
|
$this->_dbgname = $resentite["groupebase"];
|
|
$this->_dbuname = $resentite["genbase"];
|
|
$this->_tbusers = $resentite["table_users_gen"]; //! Spécifie la table des users de cette application, par défaut dans uof_frontal.users
|
|
|
|
if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
|
|
$this->_clientIp = $_SERVER["HTTP_CLIENT_IP"];
|
|
} elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
|
|
$this->_clientIp = $_SERVER["HTTP_X_FORWARDED_FOR"];
|
|
} else {
|
|
$this->_clientIp = $_SERVER["REMOTE_ADDR"];
|
|
}
|
|
// Active le debug uniquement pour dev et recette
|
|
if (strpos($http_host, 'dcleo.unikoffice.com') !== false || strpos($http_host, 'rcleo.unikoffice.com') !== false) {
|
|
ini_set('error_reporting', -1);
|
|
ini_set('display_errors', '1');
|
|
$this->_devIp = true;
|
|
|
|
// Configuration avancée du debug pour dev/recette
|
|
$this->_debug_level = 4; // Niveau debug complet
|
|
$this->_log_sql = true; // Logger les requêtes SQL
|
|
$this->_log_performance = true; // Mesurer les performances
|
|
$this->_log_file_path = dirname(__DIR__) . '/log/' . $this->_appname . '_debug_' . date('Y-m-d') . '.log';
|
|
|
|
// Options PHP supplémentaires pour le debug
|
|
ini_set('log_errors', '1');
|
|
ini_set('error_log', $this->_log_file_path);
|
|
ini_set('display_startup_errors', '1');
|
|
ini_set('track_errors', '1');
|
|
ini_set('html_errors', '1');
|
|
ini_set('xmlrpc_errors', '0');
|
|
} else {
|
|
ini_set('error_reporting', 0);
|
|
ini_set('display_errors', '0');
|
|
ini_set('log_errors', '0');
|
|
$this->_debug_level = 0;
|
|
$this->_log_sql = false;
|
|
$this->_log_performance = false;
|
|
}
|
|
}
|
|
}
|