From 7f9ae22f26f8637affcc70f84e88b1e101b549f6 Mon Sep 17 00:00:00 2001 From: nicod_ <nicod@lerebooteux.fr> Date: Sun, 16 Apr 2023 19:54:01 +0200 Subject: [PATCH] =?UTF-8?q?Un=20formulaire=20d'=C3=A9dition=20de=20bloc=20?= =?UTF-8?q?en=20deux=20temps=20:=20choix=20du=20type,=20puis=20saisie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formulaires/editer_bloc.html | 28 ++--- formulaires/editer_bloc.php | 220 +++++++++++++++++------------------ lang/bloc_fr.php | 4 + 3 files changed, 120 insertions(+), 132 deletions(-) diff --git a/formulaires/editer_bloc.html b/formulaires/editer_bloc.html index 41a8c53..991d6ff 100644 --- a/formulaires/editer_bloc.html +++ b/formulaires/editer_bloc.html @@ -2,31 +2,23 @@ [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] - <BOUCLE_editable(CONDITION){si #ENV{editable}}> - <form method='post' action='[(#ENV{action}|ancre_url{[formulaire_#ENV{form}-(#ENV{id,nouveau})]})]' enctype='multipart/form-data'><div> #ACTION_FORMULAIRE{#ENV{action}} - <input type="hidden" name="id_bloc" value="#ID_BLOC"> <div class="editer-groupe"> - #SET{saisies, #ENV{_saisies}} - [(#ENV{_etape}|oui) - [(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|oui) - <INCLURE{fond=formulaires/inc-saisies-cvt-etapes-recapitulatif,env} /> - ] - [(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|non) - #SET{saisies, #GET{etapes}|table_valeur{etape_#ENV{_etape}/saisies}} - #GENERER_SAISIES{#GET{saisies},saisies_par_etapes=#ENV{_saisies_par_etapes}} - ] - ] - [(#ENV{_etape}|non) - #GENERER_SAISIES{#GET{saisies}} - ] + #GENERER_SAISIES{#ENV{_saisies}} </div> - <INCLURE{fond=formulaires/inc-saisies-cvt-boutons,saisies_texte_submit=<:bouton_valider:>,env} /> + <p class="boutons"> + [(#ENV{id_blocs_type}|non) + <button type="submit" class="submit" name="choisir" value="1"><:bloc:bouton_choisir:/></button> + ] + [(#ENV{id_blocs_type}|oui) + <button type="submit" class="submit" name="ajouter" value="1"><:bloc:bouton_ajouter:></button> + <button type="submit" class="submit btn_secondaire" name="annuler" value="1" formnovalidate><:bouton_annuler:></button> + ] + </p> </div></form> - </BOUCLE_editable> </div> diff --git a/formulaires/editer_bloc.php b/formulaires/editer_bloc.php index a9346ac..b6e9f94 100644 --- a/formulaires/editer_bloc.php +++ b/formulaires/editer_bloc.php @@ -17,70 +17,6 @@ include_spip('blocks_fonctions'); include_spip('inc/actions'); include_spip('inc/editer'); -/** - * Déclaration des saisies de bloc - * - * @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc. - * @param null $objet Type d'objet à associer (article, rubrique,...) - * @param null $id_objet Id de l'objet à associer - * @param null $retour URL de redirection après le traitement - * @return array Saisies du formulaire - */ -function formulaires_editer_bloc_saisies_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { - if ((int)$id_bloc) { - $id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc); - } else { - $id_blocs_type = (int)_request('id_blocs_type'); - } - - $saisies_bloc_type = []; - if ($id_blocs_type && ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type))) { - $saisies_bloc_type = blocks_deserialize($saisies_json); - } - - $saisies = [ - 'options' => - [ - 'texte_submit' => '', - 'afficher_si_submit' => '', - 'etapes_activer' => 'on', - 'etapes_presentation' => 'courante', - 'etapes_suivant' => '', - 'etapes_precedent' => '', - 'etapes_precedent_suivant_titrer' => '', - 'etapes_ignorer_recapitulatif' => 'on', - 'verifier_valeurs_acceptables' => '', - ], - [ - 'saisie' => 'fieldset', - 'options' => [ - 'nom' => 'bloc_config', - 'label' => _T('bloc:champ_bloc_config_label'), - ], - 'saisies' => [ - [ - 'saisie' => ($id_blocs_type ? 'hidden' : 'blocs_types'), - 'options' => [ - 'nom' => 'id_blocs_type', - 'obligatoire' => 'oui', - 'label' => _T('bloc:champ_id_blocs_type_label'), - ], - ], - ], - ], - [ - 'saisie' => 'fieldset', - 'options' => [ - 'nom' => 'bloc_contenu', - 'label' => _T('bloc:champ_bloc_contenu_label'), - ], - 'saisies' => $saisies_bloc_type, - ], - ]; - - return $saisies; -} - /** * Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité * @@ -107,31 +43,62 @@ function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null * @uses formulaires_editer_objet_charger() */ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { + if (!$objet || !(int)$id_objet) { + return null; + } + if ((int)$id_bloc) { $id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc); + $valeurs = formulaires_editer_objet_charger('bloc', $id_bloc, $id_blocs_type, 0, $retour, ''); } else { - $id_blocs_type = (int)_request('id_blocs_type'); + $id_blocs_type = _request('id_blocs_type'); } - $valeurs = formulaires_editer_objet_charger('bloc', $id_bloc, $id_blocs_type, 0, $retour, ''); - if (!$valeurs['id_blocs_type']) { + if ($id_blocs_type) { + // charger les saisies du type de bloc + $saisies_bloc_type = []; + if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) { + $saisies_bloc_type = blocks_deserialize($saisies_json); + } + $valeurs['_saisies'] = saisies_inserer( + $saisies_bloc_type, + [ + 'saisie' => 'hidden', + 'options' => [ + 'nom' => 'id_blocs_type', + 'obligatoire' => 'oui', + ], + ], + 0 + ); $valeurs['id_blocs_type'] = $id_blocs_type; - } - $valeurs['saisies'] = call_user_func_array('formulaires_editer_bloc_saisies_dist', func_get_args()); - // mettre à jour le bloc avec les valeurs saisies - $saisies_bloc_type = []; - if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) { - $saisies_bloc_type = blocks_deserialize($saisies_json); - } - if ($valeurs_saisies = blocks_deserialize($valeurs['valeurs'])) { + // charger les valeurs déjà saisies + $valeurs_saisies = blocks_deserialize($valeurs['valeurs'] ?? null); include_spip('inc/saisies_lister'); $saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type); foreach ($saisies_par_nom as $nom => $saisie) { - $valeurs[$nom] = $valeurs_saisies[$nom]; + if ((int)$id_bloc) { + $valeurs[$nom] = (_request($nom) ? _request($nom) : $valeurs_saisies[$nom]); + } else { + $valeurs[$nom] = ''; + } } - } + } else { + + $valeurs['_saisies'] = [ + [ + 'saisie' => 'blocs_types', + 'options' => [ + 'nom' => 'id_blocs_type', + 'obligatoire' => 'oui', + 'label' => _T('bloc:champ_id_blocs_type_label'), + ], + ], + ]; + + } return $valeurs; } @@ -144,64 +111,89 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $ * @param string $retour URL de redirection après le traitement * @param null $objet Type d'objet à associer (article, rubrique,...) * @param null $id_objet Id de l'objet à associer - * @return array Tableau des erreurs + * @return array Tableau des erreurs * @uses formulaires_editer_objet_verifier() */ -//function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { -// $erreurs = formulaires_editer_objet_verifier('bloc', $id_bloc, ['id_blocs_type']); -// return $erreurs; -//} +function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { + if ((int)$id_bloc) { + $id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc); + } else { + $id_blocs_type = _request('id_blocs_type'); + } + $erreurs = []; + + if (_request('choisir') && !$id_blocs_type) { + $erreurs['id_blocs_type'] = _T('info_obligatoire'); + } + + if (_request('ajouter')) { + if ($id_blocs_type) { + // charger les saisies du type de bloc + $saisies_bloc_type = []; + if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) { + $saisies_bloc_type = blocks_deserialize($saisies_json); + } + $erreurs = saisies_verifier($saisies_bloc_type); + } else { + $erreurs['id_blocs_type'] = _T('info_obligatoire'); + } + } + + return $erreurs; +} /** * Traitement du formulaire d'édition de bloc * * Traiter les champs postés * - * @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc. - * @param string $retour URL de redirection après le traitement - * @param null $objet Type d'objet à associer (article, rubrique,...) - * @param null $id_objet Id de l'objet à associer - * @return array Retours des traitements + * @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc. + * @param int|string $id_blocs_type Type de bloc + * @param string $retour URL de redirection après le traitement + * @param null $objet Type d'objet à associer (article, rubrique,...) + * @param null $id_objet Id de l'objet à associer + * @return array Retours des traitements * @uses formulaires_editer_objet_traiter() */ function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { if ((int)$id_bloc) { $id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc); } else { - $id_blocs_type = (int)_request('id_blocs_type'); + $id_blocs_type = _request('id_blocs_type'); } + $retours = []; - $retours = formulaires_editer_objet_traiter('bloc', $id_bloc, $id_blocs_type, 0, $retour, ''); + if ($id_blocs_type && $objet && (int)$id_objet && _request('ajouter')) { - if ($id_bloc = $retours['id_bloc']) { + $retours = formulaires_editer_objet_traiter('bloc', $id_bloc, $id_blocs_type, 0, $retour, ''); - // mettre à jour le bloc avec les valeurs saisies - $saisies_bloc_type = []; - if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) { - $saisies_bloc_type = blocks_deserialize($saisies_json); - } - include_spip('inc/saisies_lister'); - $valeurs = []; - $saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type); - foreach ($saisies_par_nom as $nom => $saisie) { - $valeurs[$nom] = _request($nom); - } - sql_updateq('spip_blocs', ['valeurs' => blocks_serialize($valeurs)], 'id_bloc = ' . $id_bloc); - - // associer à l'objet - if ($objet - && ($id_objet = (int)$id_objet) - && autoriser('modifier', $objet, $id_objet) - ) { - include_spip('action/editer_liens'); - objet_associer(['bloc' => $id_bloc], [$objet => $id_objet]); - - if (isset($retours['redirect'])) { - $retours['redirect'] = parametre_url($retours['redirect'], 'id_lien_ajoute', $id_bloc, '&'); + if ($id_bloc = $retours['id_bloc']) { + + // mettre à jour le bloc avec les valeurs saisies + $saisies_bloc_type = []; + if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) { + $saisies_bloc_type = blocks_deserialize($saisies_json); } + include_spip('inc/saisies_lister'); + $valeurs = []; + $saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type); + foreach ($saisies_par_nom as $nom => $saisie) { + $valeurs[$nom] = _request($nom); + } + sql_updateq('spip_blocs', ['valeurs' => blocks_serialize($valeurs)], 'id_bloc = ' . $id_bloc); - } + // associer à l'objet + if (autoriser('modifier', $objet, $id_objet)) { + include_spip('action/editer_liens'); + objet_associer(['bloc' => $id_bloc], [$objet => $id_objet]); + if (isset($retours['redirect'])) { + $retours['redirect'] = parametre_url($retours['redirect'], 'id_lien_ajoute', $id_bloc, '&'); + } + + } + + } } return $retours; diff --git a/lang/bloc_fr.php b/lang/bloc_fr.php index 925ed59..6ce20a0 100644 --- a/lang/bloc_fr.php +++ b/lang/bloc_fr.php @@ -10,6 +10,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ // A 'ajouter_lien_bloc' => 'Ajouter ce bloc', + // B + 'bouton_ajouter' => 'Ajouter ce bloc', + 'bouton_choisir' => 'Choisir', + // C 'champ_bloc_config_label' => 'Configuration du bloc', 'champ_bloc_contenu_label' => 'Contenu du bloc', -- GitLab