[openmairie-framework-Commits] r5501 - openmairie_exemple/branches/4.11.0-compatibilite-php8.1_WIP3/core

0 views
Skip to first unread message

ldo...@users.adullact.net

unread,
Mar 3, 2026, 4:09:08 AM (3 days ago) Mar 3
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]

Reply all
Reply to author
Forward
0 new messages