ldo...@users.adullact.net
unread,Mar 3, 2026, 4:09:08 AM (3 days ago) Mar 3Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to openmairie...@googlegroups.com
Author: ldorner
Date: 2026-03-03 10:09:05 +0100 (Tue, 03 Mar 2026)
New Revision: 5501
Modified:
openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_application.class.php
openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_dbform.class.php
openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_gen.class.php
Log:
fix: nettoyage code inutile + commentaires
Modified: openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_application.class.php
===================================================================
--- openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_application.class.php 2026-03-01 19:48:27 UTC (rev 5500)
+++ openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_application.class.php 2026-03-03 09:09:05 UTC (rev 5501)
@@ -102,19 +102,6 @@
*/
protected $table_metadata_cache;
- /**
- * Métadonnées de toutes les tables chargées depuis le fichier généré all_tables.inc.php.
- * Format: ['table_name' => ['column_name' => ['name' => ..., 'type' => ..., 'len' => ..., 'flags' => ...], ...], ...]
- * @var array|null
- */
- protected $all_tables_columns_metadata = null;
-
- /**
- * Indicateur pour savoir si le chargement du fichier all_tables.inc.php a déjà été tenté.
- * @var bool
- */
- protected $all_tables_metadata_loaded = false;
-
// }}}
// {{{ DIRECTORY
@@ -1018,89 +1005,7 @@
return $result_pear;
}
- /**LDO
- * Charge les métadonnées de toutes les tables depuis le fichier généré all_tables.inc.php.
- *
- * Cette méthode tente de charger le fichier gen/dyn/all_tables.inc.php qui contient
- * les métadonnées de toutes les colonnes de toutes les tables. Ce fichier est généré
- * par le module générateur (genfull).
- *
- * @return bool True si le chargement a réussi, false sinon
- *
- public function load_all_tables_columns_metadata() {
- // Si déjà chargé, retourner le résultat précédent
- if ($this->all_tables_metadata_loaded === true) {
- return $this->all_tables_columns_metadata !== null;
- }
-
- // Marquer comme tenté pour éviter les chargements répétés
- $this->all_tables_metadata_loaded = true;
-
- // Essayer de charger le fichier généré (version applicative prioritaire)
- $paths_to_try = array(
- "../gen/dyn/all_tables.inc.php",
- PATH_OPENMAIRIE."gen/dyn/all_tables.inc.php",
- );
-
- foreach ($paths_to_try as $path) {
- if (file_exists($path)) {
- // Le fichier définit $all_tables_columns_metadata
- include $path;
- if (isset($all_tables_columns_metadata) && is_array($all_tables_columns_metadata)) {
- $this->all_tables_columns_metadata = $all_tables_columns_metadata;
- $this->addToLog(
- __METHOD__."(): Métadonnées des tables chargées depuis ".$path,
- VERBOSE_MODE
- );
- return true;
- }
- }
- }
-
- $this->addToLog(
- __METHOD__."(): Fichier all_tables.inc.php non trouvé ou invalide",
- VERBOSE_MODE
- );
- return false;
- }*/
- /**LDO
- * Récupère les métadonnées des colonnes d'une table depuis le fichier généré.
- *
- * Cette méthode retourne les métadonnées si elles sont disponibles dans le fichier
- * all_tables.inc.php, sinon retourne null pour que l'appelant puisse faire une
- * requête à la base de données.
- *
- * @param string $table Nom de la table (sans préfixe de schéma)
- * @return array|null Tableau des métadonnées ou null si non trouvé
- *
- public function get_table_columns_metadata_from_generated_file($table) {
- // Charger le fichier si pas encore fait
- if ($this->all_tables_metadata_loaded === false) {
- $this->load_all_tables_columns_metadata();
- }
-
- // Si le fichier n'a pas pu être chargé, retourner null
- if ($this->all_tables_columns_metadata === null) {
- return null;
- }
-
- // Extraire le nom de la table sans le préfixe de schéma si présent
- // Ex: "openexemple.om_collectivite" => "om_collectivite"
- $table_name = $table;
- if (strpos($table, '.') !== false) {
- $parts = explode('.', $table);
- $table_name = end($parts);
- }
-
- // Retourner les métadonnées si la table existe dans le fichier
- if (isset($this->all_tables_columns_metadata[$table_name])) {
- return $this->all_tables_columns_metadata[$table_name];
- }
-
- return null;
- }*/
-
/**
* Méthode temporaire pour récupérer la référence à la base de données.
*
@@ -1125,7 +1030,7 @@
public function quote_float_for_db_query($float) {
if ($this->db_interface != "dbpear" && $this->db_interface !== "") {
$method = __FUNCTION__."_".$this->db_interface;
- return $this->$method($in);
+ return $this->$method($float);
}
return "'".$this->escape_string_for_db_query(str_replace(',', '.', strval(floatval($float))))."'";
}
@@ -1140,7 +1045,7 @@
public function quote_boolean_for_db_query($boolean) {
if ($this->db_interface != "dbpear" && $this->db_interface !== "") {
$method = __FUNCTION__."_".$this->db_interface;
- return $this->$method($in);
+ return $this->$method($boolean);
}
return $boolean ? '1' : '0';
}
@@ -3965,6 +3870,30 @@
* Méthode de prévention des failles de sécurités en nettoyant les variables
* passées en paramètre.
*
+ * @param string $input valeur à netoyer
+ *
+ * @return string valeur nettoyée
+ */
+ function sanitize_string_php8_legacy(string $input): string {
+ // 1. Supprimer les balises HTML
+ $input = strip_tags($input);
+
+ // 2. Encoder uniquement les guillemets (comportement FILTER_SANITIZE_STRING)
+ // - ne pas toucher à &
+ // - ne pas toucher aux entités existantes
+ $input = str_replace(
+ ["'", '"'],
+ [''', '"'],
+ $input
+ );
+
+ return $input;
+ }
+
+ /**
+ * Méthode de prévention des failles de sécurités en nettoyant les variables
+ * passées en paramètre.
+ *
* @param mixed $input valeurs à netoyer
*
* @return mixed valeurs nétoyées
@@ -3984,7 +3913,7 @@
}
}
//prevent xss...
- $input = filter_var($input, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
+ $input = $this->sanitize_string_php8_legacy($input);
}
return $input;
}
Modified: openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_dbform.class.php
===================================================================
--- openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_dbform.class.php 2026-03-01 19:48:27 UTC (rev 5500)
+++ openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_dbform.class.php 2026-03-03 09:09:05 UTC (rev 5501)
@@ -546,16 +546,6 @@
foreach ($qres['result'] as $row) {
$i = 0;
foreach ($row as $elem) {
- /*// Normalisation des booléens PostgreSQL
- // PDO renvoie 0/1/true/false, on les convertit en "t"/"f" pour compatibilité avec PEAR DB
- if (isset($this->type[$i]) &&
- ($this->type[$i] === 'bool' || $this->type[$i] === 'boolean')) {
- if ($elem === 1 || $elem === "1" || $elem === true || $elem === "t") {
- $elem = "t";
- } elseif ($elem === 0 || $elem === "0" || $elem === false || $elem === "f") {
- $elem = "f";
- }
- }*/
$this->val[$i++] = $elem;
}
}
Modified: openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_gen.class.php
===================================================================
--- openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_gen.class.php 2026-03-01 19:48:27 UTC (rev 5500)
+++ openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core/om_gen.class.php 2026-03-03 09:09:05 UTC (rev 5501)
@@ -1529,65 +1529,8 @@
return $output;
}
-
/**
- * Second passage : injecte QUERY_COLUMNS_METADATA dans chaque fichier gen
- * déjà généré.
- *
- * Cette méthode doit être appelée APRÈS la génération normale de tous les
- * fichiers gen (table_obj_class_gen). En effet, la requête
- * build_init_record_data_sql() dépend de get_var_sql_forminc__champs()
- * qui est définie dans le fichier gen. Si le fichier gen n'existe pas encore,
- * l'objet instancié ne connaît pas toutes les colonnes.
- *
- * Pour chaque table :
- * 1. Instancie l'objet via get_inst__om_dbform (le fichier gen existe déjà)
- * 2. Appelle build_init_record_data_sql(0) pour obtenir la requête complète
- * 3. Exécute la requête (WHERE false) et capture getColumnMeta()
- * 4. Injecte la constante QUERY_COLUMNS_METADATA et l'accesseur dans le fichier gen
- *
- * @param array $tables Liste des noms de tables
- * @return void
- */
- /*function inject_query_columns_metadata_for_all_tables($tables) {
- foreach ($tables as $table) {
- $this->table = $table;
-
- // Déterminer le chemin du fichier gen
- $gen_file_path = "../gen/obj/".$table.".class.php";
- if (!file_exists($gen_file_path)) {
- continue;
- }
-
- // Générer le code QUERY_COLUMNS_METADATA
- $query_metadata_code = $this->def_obj_attr_query_columns_metadata();
- if (empty($query_metadata_code)) {
- continue;
- }
-
- // Lire le contenu actuel du fichier gen
- $content = file_get_contents($gen_file_path);
- if ($content === false) {
- continue;
- }
-
- // Trouver la dernière accolade fermante (fin de la classe)
- // et injecter le code juste avant
- $last_brace_pos = strrpos($content, '}');
- if ($last_brace_pos === false) {
- continue;
- }
-
- $new_content = substr($content, 0, $last_brace_pos)
- . $query_metadata_code . "\n"
- . substr($content, $last_brace_pos);
-
- file_put_contents($gen_file_path, $new_content);
- }
- }*/
-
- /**
* Récupère les métadonnées des colonnes de la table pour la génération.
*
* Cette méthode récupère les informations des colonnes avec :
@@ -1700,53 +1643,6 @@
}
/**
- * Récupère les métadonnées des colonnes de la requête SQL de
- * build_init_record_data_sql() pour la génération.
- *
- * Cette méthode construit la même requête SQL que build_init_record_data_sql(0)
- * produirait pour la classe gen (colonnes de $this->info, table DB_PREFIXE.$this->table,
- * WHERE false), l'exécute via PDO, et capture getColumnMeta() pour chaque colonne.
- *
- * @return array Tableau indexé des métadonnées des colonnes
- */
- /*function get_query_columns_metadata_for_generation() {
- $result = array();
-
- if (empty($this->table)) {
- return $result;
- }
-
- // Construction de la requête SQL identique à build_init_record_data_sql(0)
- // avec WHERE false pour ne retourner aucune ligne
- $obj = $this->f->get_inst__om_dbform(array('obj' => $this->table, 'idx' => 0));
- $sql = $obj->build_init_record_data_sql(0, true)["sql"];
-
- try {
- $stmt = $this->f->pdo->prepare($sql);
- $stmt->execute();
-
- $column_count = $stmt->columnCount();
- for ($i = 0; $i < $column_count; $i++) {
- $meta = $stmt->getColumnMeta($i);
- $result[] = array(
- 'name' => strtolower($meta['name']),
- 'type' => isset($meta['native_type']) ? $meta['native_type'] : '',
- 'len' => isset($meta['len']) ? $meta['len'] : 0,
- 'flags' => isset($meta['flags']) ? $meta['flags'] : array(),
- );
- }
- } catch (Exception $e) {
- $this->addToLog(
- __METHOD__."(): Erreur lors de la récupération des métadonnées de la requête : ".$e->getMessage(),
- DEBUG_MODE
- );
- return array();
- }
-
- return $result;
- }*/
-
- /**
* Échappe une chaîne pour inclusion dans du code PHP généré.
*
* @param string $str Chaîne à échapper
@@ -1759,117 +1655,7 @@
return str_replace(array('\\', '"'), array('\\\\', '\\"'), $str);
}
- /**
- * Récupère les métadonnées des colonnes d'une table spécifique pour la génération
- * du fichier all_tables.inc.php.
- *
- * Cette méthode est similaire à get_columns_metadata_for_generation mais accepte
- * le nom de la table en paramètre au lieu d'utiliser $this->table.
- *
- * @param string $table_name Nom de la table
- * @return array Tableau des métadonnées des colonnes
- */
- /*function get_columns_metadata_for_table($table_name) {
- $result = array();
-
- // Extraction du schéma
- $schema = OM_DB_SCHEMA;
- if (empty($schema)) {
- $schema = 'public';
- }
-
- // Requête pour obtenir les informations complètes des colonnes
- // Utilise pg_attribute pour atttypmod (vraie longueur) et pg_type pour le type natif
- $sql = "
- SELECT
- a.attname as name,
- t.typname as type,
- CASE
- WHEN t.typname IN ('varchar', 'bpchar', 'char') AND a.atttypmod > 0
- THEN a.atttypmod - 4
- WHEN t.typname = 'numeric' AND a.atttypmod > 0
- THEN ((a.atttypmod - 4) >> 16) & 65535
- WHEN t.typname IN ('int2') THEN 2
- WHEN t.typname IN ('int4') THEN 4
- WHEN t.typname IN ('int8') THEN 8
- WHEN t.typname IN ('float4') THEN 4
- WHEN t.typname IN ('float8') THEN 8
- WHEN t.typname IN ('bool') THEN 1
- WHEN t.typname IN ('date') THEN 4
- WHEN t.typname IN ('timestamp', 'timestamptz') THEN 8
- WHEN t.typname IN ('time', 'timetz') THEN 8
- ELSE -1
- END as len,
- CASE WHEN a.attnotnull THEN 'not_null' ELSE '' END as flags,
- a.attnum as ordinal
- FROM pg_attribute a
- JOIN pg_class c ON c.oid = a.attrelid
- JOIN pg_namespace n ON n.oid = c.relnamespace
- JOIN pg_type t ON t.oid = a.atttypid
- WHERE n.nspname = '".$this->f->escape_string_for_db_query($schema)."'
- AND c.relname = '".$this->f->escape_string_for_db_query($table_name)."'
- AND a.attnum > 0
- AND NOT a.attisdropped
- ORDER BY a.attnum
- ";
-
- $qres = $this->f->get_all_results_from_db_query(
- $sql,
- array(
- 'origin' => __METHOD__,
- 'force_return' => true
- )
- );
-
- if ($qres['code'] !== 'OK') {
- return array();
- }
-
- // Récupérer les colonnes de la clé primaire
- $sql_pk = "
- SELECT a.attname as column_name
- FROM pg_index i
- JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
- JOIN pg_class c ON c.oid = i.indrelid
- JOIN pg_namespace n ON n.oid = c.relnamespace
- WHERE i.indisprimary = true
- AND n.nspname = '".$this->f->escape_string_for_db_query($schema)."'
- AND c.relname = '".$this->f->escape_string_for_db_query($table_name)."'
- ";
- $qres_pk = $this->f->get_all_results_from_db_query(
- $sql_pk,
- array('origin' => __METHOD__, 'force_return' => true)
- );
- $primary_keys = array();
- if ($qres_pk['code'] === 'OK') {
- foreach ($qres_pk['result'] as $row) {
- $primary_keys[] = $row['column_name'];
- }
- }
-
- // Construire le tableau de résultats avec les flags enrichis
- foreach ($qres['result'] as $row) {
- $flags_parts = array();
- if (!empty($row['flags'])) {
- $flags_parts[] = $row['flags'];
- }
- if (in_array($row['name'], $primary_keys)) {
- $flags_parts[] = 'primary_key';
- }
-
- $result[$row['name']] = array(
- 'name' => $row['name'],
- 'type' => $row['type'],
- 'len' => intval($row['len']),
- 'flags' => implode(' ', $flags_parts),
- );
- }
-
- return $result;
- }*/
-
-
/**
* Construit des mots-clefs Robot Framework dans le fichier :
* [tests/resources/app/gen/<TABLE>.robot]