[openmairie-framework-Commits] r4948 - in openmairie_exemple/branches/om5_rad: . obj sql/pgsql

0 views
Skip to first unread message

fray...@users.adullact.net

unread,
May 1, 2024, 6:36:03 AMMay 1
to openmairie...@googlegroups.com
Author: fraynaud
Date: 2024-05-01 12:36:00 +0200 (Wed, 01 May 2024)
New Revision: 4948

Modified:
openmairie_exemple/branches/om5_rad/HISTORY.txt
openmairie_exemple/branches/om5_rad/obj/om_forms.class.php
openmairie_exemple/branches/om5_rad/sql/pgsql/om_forms.inc.php
Log:
action 5 et 6 om_forms + controle position et position_liste vide



Modified: openmairie_exemple/branches/om5_rad/HISTORY.txt
===================================================================
--- openmairie_exemple/branches/om5_rad/HISTORY.txt 2024-04-30 21:34:31 UTC (rev 4947)
+++ openmairie_exemple/branches/om5_rad/HISTORY.txt 2024-05-01 10:36:00 UTC (rev 4948)
@@ -137,17 +137,14 @@
* bug : composition om_forms : correction view_composer_widget_ctl : update 27/04/2024 et 28/04/2024
* Evolution : composition om_forms : le champs hidden reste affichable et déplacable, il n est plus en mode texte
(le champs hidden est static en consultation et hidden en mise à jour) 30/04/2024
-* Evolution : om_forms ajout d un libelle court et d'un ordre dans la liste 30/04/2024
* Evolution : ajout des vues om_triggers et om_proc (init_gen.sql) + génération (init_temp.sql) 30/04/2024
* Evolution : framework_openmairie.class : ajout option om_proc 30/04/2024
+* Evolution : om_forms : prise en compte des champs position_liste et libelle_court (pour colonne de liste) 01/05/2024
+* Evolution : composition om_forms méthode 6 et 7 pour affichage ordre dans la liste - controle position et position_liste vide 01/05/2024


-*****
-* Evolution : composition om_forms méthode 6 et 7 pour affichage ordre de liste



-
-
4.10.0 (29/11/2022
-------------------

Modified: openmairie_exemple/branches/om5_rad/obj/om_forms.class.php
===================================================================
--- openmairie_exemple/branches/om5_rad/obj/om_forms.class.php 2024-04-30 21:34:31 UTC (rev 4947)
+++ openmairie_exemple/branches/om5_rad/obj/om_forms.class.php 2024-05-01 10:36:00 UTC (rev 4948)
@@ -16,7 +16,7 @@
function init_class_actions() {
parent::init_class_actions();

- // ACTION - 004 - composer
+ // ACTION - 004 - composer form
//
$this->class_actions[4] = array(
"identifier" => "composer",
@@ -24,7 +24,7 @@
"permission_suffix" => "ajouter",
);

- // ACTION - 005 - composer
+ // ACTION - 005 - composer form
//
$this->class_actions[5] = array(
"identifier" => "composer-widget-ctl",
@@ -31,6 +31,25 @@
"view" => "view_composer_widget_ctl",
"permission_suffix" => "ajouter",
);
+
+ // ACTION - 006 - composer liste
+ //
+ $this->class_actions[6] = array(
+ "identifier" => "composer_liste",
+ "view" => "view_composer_liste",
+ "permission_suffix" => "ajouter",
+ );
+
+ // ACTION - 007 - composer liste
+ //
+ $this->class_actions[7] = array(
+ "identifier" => "composer-widget-ctl_liste",
+ "view" => "view_composer_widget_ctl_liste",
+ "permission_suffix" => "ajouter",
+ );
+
+
+
}

// =======================
@@ -63,7 +82,6 @@
"parametres->>'bloc' as bloc",
"parametres->>'position' as position",
"parametres->>'liste' as liste",
- "parametres->>'liste' as liste",
"parametres->>'position_liste' as position_liste",
"parametres->>'calcul' as calcul",
);
@@ -193,6 +211,8 @@
$form->setLib('position',_("Position dans le bloc"));
$form->setLib('tables',_("Clé secondaire de la table"));
$form->setLib('liste',_("Affichage en liste"));
+ $form->setLib('position_liste',_("position dans la liste"));
+ $form->setLib('libelle_court',_("Affichage libellé liste"));
}

function setMax(&$form, $maj) {
@@ -337,7 +357,7 @@
$this->f->addToLog("obj/om_champs_class.php: db->getOne(\"".$calcul."\");", DEBUG_MODE);
}
// verification que les champs existent dans la table en cours
- if($this->valF['data_type'] == "double precision" or $this->valF['data_type'] == "integer"){
+ if($this->valF['data_type'] == "numeric" or $this->valF['data_type'] == "integer"){
$tp=str_replace("*", "|*|",$calcul);
$tp=str_replace("+", "|+|",$tp);
$tp=str_replace("-", "|-|",$tp);
@@ -430,6 +450,7 @@
// en effet la clé primaire doit exister pour satisfaire la condition exist()
$this->valF['column_name'] = $val['table_name'].".".$temp;
$this->tab->libelle=$val['column_name'];
+ $this->tab->libelle_court=$val['column_name'];
// recherche du max position pour bloc = C1 en ajout
$sql = " SELECT ";
$sql .= " max(parametres->>'position') ";
@@ -442,16 +463,66 @@
$position=intval($res);
$position++;
$this->tab->bloc = 'C1';
- $this->tab->position = $position;
+ $this->tab->position = $position;
+ // recherche position max pour liste
+ $sql = " SELECT ";
+ $sql .= " max(parametres->>'position') ";
+ $sql .= " FROM ".DB_PREFIXE."om_forms ";
+ $sql .= " where SPLIT_PART(om_forms.column_name, '.', 1) = '".$this->valF["table_name"]."' "; // table_name ***
+ $res = $this->f->db->getOne($sql);
+ $this->f->addToLog("obj/om_forms_class.php - setvalF: db->getOne(\"".$sql."\");", DEBUG_MODE);
+ $this->f->isDatabaseError($res);
+ $position_liste=intval($res);
+ $position_liste++;
+ $this->tab->position_liste = $position_liste;
}
// update
// data_type : cle_secondaire -> integer
+ // position et position_liste vide
if($this->getParameter('maj')==1){
if ($this->cle_secondaire == 'oui'){
- echo "************************";
+ //echo "************************";
$val['data_type'] = "integer";
$this->addToMessage("data_type = integer");
- }
+ }
+ if($val["liste"]==1 and $val['position_liste']==""){
+ $position_liste=0;
+ // recherche position max pour liste si affichage liste remis à 1
+ $sql = " SELECT ";
+ $sql .= " max(parametres->>'position_liste') ";
+ $sql .= " FROM ".DB_PREFIXE."om_forms ";
+ $sql .= " where SPLIT_PART(om_forms.column_name, '.', 1) = '".$this->valF["table_name"]."' "; // table_name ***
+ $sql .= " and column_name != '".$this->valF["column_name"]."' ";
+ $res = $this->f->db->getOne($sql);
+ $this->f->addToLog("obj/om_forms_class.php - setvalF: db->getOne(\"".$sql."\");", DEBUG_MODE);
+ $this->f->isDatabaseError($res);
+ $position_liste=intval($res);
+ $position_liste++;
+ $this->tab->position_liste = $position_liste;
+ $this->addToMessage(_("affichage en liste position")." ".$this->tab->position_liste." ".$position_liste);
+ }else
+ $this->tab->position_liste = $val['position_liste'];
+ if($val['position']==""){
+ // recherche du max position pour bloc = C1 en ajout
+ $position=0;
+ $sql = " SELECT ";
+ $sql .= " max(parametres->>'position') ";
+ $sql .= " FROM ".DB_PREFIXE."om_forms ";
+ $sql .= " where SPLIT_PART(om_forms.column_name, '.', 1) = '".$this->valF["table_name"]."' "; // table_name ***
+ $sql .= " and parametres->>'bloc' = 'C1'";
+ $sql .= " and column_name != '".$this->valF["column_name"]."' ";
+ $res1 = $this->f->db->getOne($sql);
+ $this->f->addToLog("obj/om_forms_class.php - setvalF: db->getOne(\"".$sql."\");", DEBUG_MODE);
+ $this->f->isDatabaseError($res1);
+ $position=intval($res1);
+ $position++;
+ $this->tab->bloc = 'C1';
+ $this->tab->position = $position;
+ $this->addToMessage(_("affichage en bloc C1 position")." ".$this->tab->position);
+ }else{
+ $this->tab->bloc = $val['bloc'];
+ $this->tab->position = $val['position'];
+ }
}
}

@@ -502,13 +573,11 @@
$this->addToMessage("création du champ ".$this->valF['column_name']);
// comment
//$sql = "comment on COLUMN ".DB_PREFIXE.$this->valF['table_name'].".".$temp[1]." IS ";
- }
-
-
+ }
// om_forms/json
$this->tab->type = $val['type'];
$this->tab->calcul = $val['calcul'];
- $this->tab->liste = $val['liste']; //***
+ $this->tab->liste = $val['liste'];
$insert=json_encode($this->tab);
$sql = "insert into ".DB_PREFIXE."om_forms ";
$sql .= " VALUES ( '".$this->valF['column_name']."',";
@@ -664,11 +733,11 @@
}
// om_forms
$this->tab->libelle = $val['libelle'];
+ $this->tab->libelle_court = $val['libelle_court'];
$this->tab->type = $val['type'];
- $this->tab->bloc = $val['bloc'];
- $this->tab->position = $val['position'];
$this->tab->calcul = $val['calcul'];
- $this->tab->liste = $val['liste'];
+ $this->tab->liste = $val['liste'];
+ //
$insert=json_encode($this->tab);
//$sql = "comment on COLUMN ".DB_PREFIXE.$this->valF['table_name'].".".$temp[1]." IS ";
$sql = "update ".DB_PREFIXE."om_forms set parametres = ";
@@ -912,7 +981,7 @@
$sql .= " FROM ".DB_PREFIXE."om_forms ";
$sql .= " left join ".DB_PREFIXE."om_champs on om_forms.column_name=om_champs.column_name";
$sql .= " where SPLIT_PART(om_forms.column_name, '.', 1) = '".$_POST["table_name"]."'";
- $sql .= " and parametres->>'type' != 'sql'";
+ $sql .= " and parametres->>'type' != 'sql'"; // seul les sql ne sont pas dans le formulaire
$sql .= " order by parametres->>'bloc',parametres->>'position' ";
//echo $sql;
$res = $this->f->db->query($sql);
@@ -1069,20 +1138,18 @@
$this->f->isDatabaseError($res);
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
$temp1=explode(".", $row['column_name']);
- //$this->f->addToLog(__METHOD__."(): mode update type (".$temp->type.");", DEBUG_MODE);
- /*
- if($row['type']=='hidden'){ // cas des champs cachés non affichés sql et hidden
+ //$this->f->addToLog(__METHOD__."(): mode update type (".$temp->type.");", DEBUG_MODE);
+ if($row['type']=='hidden'){ // cas des champs cachés non affichés -> hidden
$nb['C1']++;
$bloc= 'C1';
$position=$nb['C1'];
$this->f->addToLog(__METHOD__."(): mode update *** (".$row['column_name']." | ".$row['type']." | ".$row['position']." [ ".$row['bloc']."*);", DEBUG_MODE);
}else{
- */
$bloc=$c[$row['column_name']]["bloc"];
$position=$c[$row['column_name']]["position"];
$this->f->addToLog(__METHOD__."(): mode update -> (".$row['column_name']." | ".$row['type']." | ".$row['position']." [ ".$row['bloc']."*);", DEBUG_MODE);

- //}
+ }
// update bloc
$sql = " update ".DB_PREFIXE."om_forms set parametres = jsonb_set(parametres, '{bloc}', '\"".$bloc."\"')";
$sql .= " WHERE column_name = '".$row['column_name']."'" ;
@@ -1114,4 +1181,242 @@
return;
}
}
+
+// =======================================
+// action 5 et 6 pour présenter les listes
+// =======================================
+
+ // affichage en select des om_tables
+ // recherche des champs dans les colonnes
+ function view_composer_liste() {
+ // Verification de l'accessibilité sur l'élément
+ $this->checkAccessibility();
+
+ // Affichage du formulaire de sélection de tables
+
+ // Ouverture du formulaire
+ $this->f->layout->display__form_container__begin(array(
+ "action" => $this->getDataSubmit(),
+ "id" => "dashboard_composer_form",
+ ));
+ // ===============================================
+ // Paramétrage des champs du formulaire table_name
+ // ===============================================
+ $champs = array("table_name");
+ // Création d'un nouvel objet de type formulaire
+ $form = $this->f->get_inst__om_formulaire(array(
+ "validation" => 0,
+ "maj" => 0,
+ "champs" => $champs,
+ ));
+ // Paramétrage du champs table_name
+ $form->setLib("table_name", __("Formulaire pour la table"));
+ $form->setType("table_name", "select");
+ $form->setTaille("table_name", 25);
+ $form->setOnChange("table_name", "submit()");
+ $form->setMax("table_name", 25);
+ $form->setVal("table_name", (isset($_POST["table_name"]) ? $_POST["table_name"] : ""));
+ $sql = " SELECT om_tables.table_name, om_tables.table_name as lib ";
+ $sql .= " FROM ".DB_PREFIXE."om_tables ";
+ $sql .= " where substring(table_name,1,3) not like 'om_' ORDER BY om_tables.table_name ";
+ $res = $this->f->db->query($sql);
+ $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
+ $this->f->isDatabaseError($res);
+ //
+ $contenu = array(array(""), array(__("choisir une table")));
+ while ($row =& $res->fetchrow()) {
+ $contenu[0][] = $row[0];
+ $contenu[1][] = $row[1];
+ }
+ $form->setSelect("table_name", $contenu);
+ // Affichage du formulaire
+ $form->entete();
+ $form->afficher($champs, 0, false, false);
+ $form->enpied();
+ // Fermeture du fomulaire
+ $this->f->layout->display__form_container__end();
+ // *** fin formulaire table
+ // retour du nom de table choisi
+ if (!isset($_POST["table_name"]) || $_POST["table_name"] == "") {
+ return;
+ }
+ // Initialisation des paramètres
+ $params = array(
+ "edition" => array(
+ "default_value" => 1,
+ ),
+ );
+ foreach ($this->f->get_initialized_parameters($params) as $key => $value) {
+ ${$key} = $value;
+ }
+ // affichage des widgets-champs
+ echo "<div id=\"dashboard-composer\">\n";
+ // Ouverture du conteneur #dashboard
+ echo "<div id=\"dashboard\">\n";
+ // Conteneur permettant de recevoir d'eventuels messages d'erreur des requetes
+ // Ajax
+ echo "<div id=\"info\">";
+ echo "</div>\n";
+ // Si le mode edition est active alors on affiche l'action pour ajouter un
+ // nouveau widget
+ // pas d affichage des champs
+ // Si le mode edition est activé alors on affiche un lien contenant
+ // le lien vers les actions de contrôle des widgets
+ // le mode edition est toujours actif
+ if ($edition == 1) {
+ // creer un lien -> *** enleve display:none sinon pas d'affichage
+ // lancement action 5 : view_composer_widget_ctl qui met à jour bloc et position en modification
+ // et type=hidden en suppression
+ printf(
+ '<a id="widgetctl-href-base" href="%s" >&nbsp;</a>',
+ OM_ROUTE_FORM."&obj=om_forms&idx=0&action=7"
+ );
+ }
+ // Ouverture du conteneur de colonnes
+ // 1 colonne à afficher pour ordre de liste
+ echo "<div class=\"col1\">\n";
+ // ajout des champs par colonne
+ // requête globale
+ $sql = " SELECT om_forms.column_name, SPLIT_PART(om_forms.column_name, '.', 1) as table_name,";
+ $sql .= " data_type, parametres->>'type' as type, parametres->>'bloc' as bloc, parametres->>'position_liste' as position ";
+ $sql .= " FROM ".DB_PREFIXE."om_forms ";
+ $sql .= " left join ".DB_PREFIXE."om_champs on om_forms.column_name=om_champs.column_name";
+ $sql .= " where SPLIT_PART(om_forms.column_name, '.', 1) = '".$_POST["table_name"]."'";
+ $sql .= " and parametres->>'liste' = '1' ";
+ $sql .= " order by parametres->>'position_liste' ";
+ //echo $sql;
+ $res = $this->f->db->query($sql);
+ $this->f->addToLog("app/om_champs_class.php: db->query(\"".$sql."\");", VERBOSE_MODE);
+ $this->f->isDatabaseError($res);
+ while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
+ //$temp=json_decode($row["comment"]);
+ $c[$row["column_name"]]["position"]=$row['position_liste'];
+ $c[$row["column_name"]]["bloc"]=$row['bloc'];
+ $c[$row["column_name"]]["type"]=$row['type'];
+ $c[$row["column_name"]]["table_name"]=$row["table_name"];
+ $c[$row["column_name"]]["column_name"]=$row["column_name"];
+ $c[$row["column_name"]]["data_type"]=$row["data_type"];
+ }
+ // On boucle sur une colonnes
+ // Ouverture du conteneur .column
+ echo "<div class=\"column\" id=\"column_1\">\n";
+ foreach($c as $key => $elem){
+ $this->display_dashboard_widget(
+ $elem['column_name'], // pour update et delete
+ $elem['column_name'], // titre fenetre champ
+ $elem['data_type']." - ". $elem['type'], // contenu
+ $elem['data_type'],
+ $elem['position'],
+ $edition
+ );
+ }
+ // Fermeture du conteneur .column
+ echo "</div>\n";
+ // On affiche un conteneur vide pour avec la propriete clear a both pour
+ // reinitialiser le positionnement des blocs
+ echo "<div class=\"both\"><!-- --></div>\n";
+ // Fermeture du conteneur de colonnes
+ echo "</div>\n";
+ // Fermeture du conteneur #dashboard
+ echo "</div>\n";
+ // Fermeture du conteneur #dashboard-composer
+ echo "</div>\n";
+ }
+
+ // mise à jour de comment de om_champs: bloc, position, type
+ function view_composer_widget_ctl_liste() {
+ // Initialisation des paramètres
+ $params = array(
+ "mode" => array(
+ "default_value" => null,
+ ),
+ "widget" => array(
+ "default_value" => null,
+ ),
+ "profil" => array(
+ "default_value" => 0,
+ ),
+ );
+ foreach ($this->f->get_initialized_parameters($params) as $key => $value) {
+ ${$key} = $value;
+ }
+ //UPDATE
+ //index.php?module=form&obj=om_champs&idx=0&action=5
+ //&mode=update
+ //&column_1=widget_livre.auteurxwidget_livre.titre
+ //&column_2=widget_livre.fichier
+ //&column_3=widget_livre.resume&
+ if ($mode == "update") {
+ $c=array();
+ $nb=array();
+ foreach($this->f->get_submitted_get_value() as $key => $values) {
+ // On souhaite récupérer uniquement les paramètres column_*
+ if (!$this->f->starts_with($key, "column_")) {
+ continue;
+ }
+ //$this->f->addToLog(__METHOD__."(): mode update (".$key.");", DEBUG_MODE);
+ $bloc = "C".str_replace("column_", "", $key);
+ $widgets = explode("xwidget_", $this->f->get_submitted_get_value($key));
+ foreach($widgets as $i => $widget_id) {
+ $position = $i+1;
+ $widget_id = str_replace("widget_", "", $widget_id);
+ // Lorsqu'une colonne est vide, il y a une valeur vide dans le
+ // tableau widget, donc si c'est le cas on passe a l'iteration
+ // suivante
+ if ($widget_id == "") {
+ //$this->f->addToLog(__METHOD__."(): mode update vide(".$table.");", DEBUG_MODE);
+ continue;
+ }else{
+ // initialisation du nom de la table pour requête sql
+ $temp1=explode(".", $widget_id);
+ $table=$temp1[0];
+ //$this->f->addToLog(__METHOD__."(): mode update existant(".$table.");", DEBUG_MODE);
+ }
+ $c[$widget_id]["position"]=$position;
+ }
+ // max par colonne pour position des champs hidden
+ $nb[$bloc]=$position;
+ }
+ //$this->f->addToLog(__METHOD__."(): mode update(".print_r($c, true).");", DEBUG_MODE);
+ //$this->f->addToLog(__METHOD__."(): mode update(".$table.");", DEBUG_MODE);
+ $sql = " select om_forms.column_name, om_forms.table_name, data_type, ";
+ $sql .= " parametres->>'bloc' as bloc, parametres->>'position_liste' as position, ";
+ $sql .= " parametres->>'type' as type, parametres->>'liste' as liste ";
+ $sql .= " FROM ".DB_PREFIXE."om_forms left join ".DB_PREFIXE."om_champs ";
+ $sql .= " on om_champs.column_name=om_forms.column_name ";
+ $sql .= " where om_forms.table_name = '".$table."' ";
+ $res = $this->f->db->query($sql);
+ $this->f->addToLog("app/om_champs_class.php: db->query(\"".$sql." / ".$widget_id."\");", DEBUG_MODE);
+ $this->f->isDatabaseError($res);
+ while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
+ $temp1=explode(".", $row['column_name']);
+ $position=$c[$row['column_name']]["position"];
+ $this->f->addToLog(__METHOD__."(): mode update -> (".$row['column_name']." | ".$row['type']." | ".$row['position']." [ ".$row['bloc']."*);", DEBUG_MODE);
+ // update position
+ $sql = " update ".DB_PREFIXE."om_forms set parametres = jsonb_set(parametres, '{position_liste}', '\"".$position."\"')";
+ $sql .= " WHERE column_name = '".$row['column_name']."'" ;
+ $res2 = $this->f->db->query($sql);
+ $this->f->addToLog(__METHOD__."(): mode update(\"".$sql."\", ".print_r($temp, true).");", DEBUG_MODE);
+ $this->f->isDatabaseError($res2);
+
+ }
+ return;
+ }
+ // DELETE
+ // module=form&obj=om_forms&idx=0&action=5&mode=delete&widget=widget_livre.auteur
+ if ($mode == "delete") {
+ // widget est le column_name concerné
+ $widget = str_replace("widget_", "", $widget);
+ // en mode delete le champs est mis en hidden
+ $sql = " update ".DB_PREFIXE."om_forms set parametres = jsonb_set(parametres, '{liste}', '\"0\"')";
+ $sql .= " WHERE column_name = '".$widget."'" ;
+ $res = $this->f->db->query($sql);
+ $this->f->addToLog(__METHOD__."(): mode delete ".$sql." ;", DEBUG_MODE);
+ $this->f->isDatabaseError($res);
+ return;
+ }
+ }
+
+
+
}

Modified: openmairie_exemple/branches/om5_rad/sql/pgsql/om_forms.inc.php
===================================================================
--- openmairie_exemple/branches/om5_rad/sql/pgsql/om_forms.inc.php 2024-04-30 21:34:31 UTC (rev 4947)
+++ openmairie_exemple/branches/om5_rad/sql/pgsql/om_forms.inc.php 2024-05-01 10:36:00 UTC (rev 4948)
@@ -25,10 +25,10 @@
'om_forms.table_name as "'.__("table").'"',
//'om_champs.table_schema as "'.__("schema").'"',
'om_champs.data_type as "'.__("type").'"',
- 'om_champs.character_maximum_length as "'.__("max").'"',
+ //'om_champs.character_maximum_length as "'.__("max").'"',
'om_contraintes.constraint_name as "'.__("clé secondaire").'"',
"case om_champs.is_nullable when 'YES' then 'Non' else 'Oui' end as \"".__("obligatoire")."\"",
- 'om_champs.column_default as "'.__("défaut").'"',
+ //'om_champs.column_default as "'.__("défaut").'"',
//'om_champs.is_nullable as "'.__("accepte null").'"',
//"replace(replace(replace(replace(om_champs.comment,'\"','&nbsp'),'}',''),'{',''),',','<br>') as ".'"'.__("parametres").'"',
//"om_champs.comment as comment",
@@ -35,8 +35,10 @@
"om_forms.parametres->>'libelle' as libelle",
"om_forms.parametres->>'type' as type",
"om_forms.parametres->>'bloc' as bloc",
- "om_forms.parametres->>'position' as position",
+ "om_forms.parametres->>'position' as no",
"om_forms.parametres->>'calcul' as calcul",
"om_forms.parametres->>'liste' as liste",
+ "om_forms.parametres->>'position_liste' as no_l",
+ "om_forms.parametres->>'libelle_court' as lib_l",
);


Reply all
Reply to author
Forward
0 new messages