fray...@users.adullact.net
unread,May 1, 2024, 6:36:03 AMMay 1Sign 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: 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" > </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,'\"',' '),'}',''),'{',''),',','<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",
);