Skip to content
Extraits de code Groupes Projets
Valider 7f9ae22f rédigé par nicod's avatar nicod
Parcourir les fichiers

Un formulaire d'édition de bloc en deux temps : choix du type, puis saisie

parent c518e91b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -2,31 +2,23 @@ ...@@ -2,31 +2,23 @@
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</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> <form method='post' action='[(#ENV{action}|ancre_url{[formulaire_#ENV{form}-(#ENV{id,nouveau})]})]' enctype='multipart/form-data'><div>
#ACTION_FORMULAIRE{#ENV{action}} #ACTION_FORMULAIRE{#ENV{action}}
<input type="hidden" name="id_bloc" value="#ID_BLOC">
<div class="editer-groupe"> <div class="editer-groupe">
#SET{saisies, #ENV{_saisies}} #GENERER_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}}
]
</div> </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> </div></form>
</BOUCLE_editable>
</div> </div>
...@@ -17,70 +17,6 @@ include_spip('blocks_fonctions'); ...@@ -17,70 +17,6 @@ include_spip('blocks_fonctions');
include_spip('inc/actions'); include_spip('inc/actions');
include_spip('inc/editer'); 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é * 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 ...@@ -107,31 +43,62 @@ function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null
* @uses formulaires_editer_objet_charger() * @uses formulaires_editer_objet_charger()
*/ */
function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { 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) { if ((int)$id_bloc) {
$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $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 { } 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 ($id_blocs_type) {
if (!$valeurs['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['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 // charger les valeurs déjà saisies
$saisies_bloc_type = []; $valeurs_saisies = blocks_deserialize($valeurs['valeurs'] ?? null);
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'])) {
include_spip('inc/saisies_lister'); include_spip('inc/saisies_lister');
$saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type); $saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type);
foreach ($saisies_par_nom as $nom => $saisie) { 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; return $valeurs;
} }
...@@ -144,64 +111,89 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $ ...@@ -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 string $retour URL de redirection après le traitement
* @param null $objet Type d'objet à associer (article, rubrique,...) * @param null $objet Type d'objet à associer (article, rubrique,...)
* @param null $id_objet Id de l'objet à associer * @param null $id_objet Id de l'objet à associer
* @return array Tableau des erreurs * @return array Tableau des erreurs
* @uses formulaires_editer_objet_verifier() * @uses formulaires_editer_objet_verifier()
*/ */
//function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { 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']); if ((int)$id_bloc) {
// return $erreurs; $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 * Traitement du formulaire d'édition de bloc
* *
* Traiter les champs postés * Traiter les champs postés
* *
* @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc. * @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc.
* @param string $retour URL de redirection après le traitement * @param int|string $id_blocs_type Type de bloc
* @param null $objet Type d'objet à associer (article, rubrique,...) * @param string $retour URL de redirection après le traitement
* @param null $id_objet Id de l'objet à associer * @param null $objet Type d'objet à associer (article, rubrique,...)
* @return array Retours des traitements * @param null $id_objet Id de l'objet à associer
* @return array Retours des traitements
* @uses formulaires_editer_objet_traiter() * @uses formulaires_editer_objet_traiter()
*/ */
function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) { function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) {
if ((int)$id_bloc) { if ((int)$id_bloc) {
$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc); $id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc);
} else { } 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 if ($id_bloc = $retours['id_bloc']) {
$saisies_bloc_type = [];
if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) { // mettre à jour le bloc avec les valeurs saisies
$saisies_bloc_type = blocks_deserialize($saisies_json); $saisies_bloc_type = [];
} if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) {
include_spip('inc/saisies_lister'); $saisies_bloc_type = blocks_deserialize($saisies_json);
$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, '&');
} }
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; return $retours;
......
...@@ -10,6 +10,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ ...@@ -10,6 +10,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = [
// A // A
'ajouter_lien_bloc' => 'Ajouter ce bloc', 'ajouter_lien_bloc' => 'Ajouter ce bloc',
// B
'bouton_ajouter' => 'Ajouter ce bloc',
'bouton_choisir' => 'Choisir',
// C // C
'champ_bloc_config_label' => 'Configuration du bloc', 'champ_bloc_config_label' => 'Configuration du bloc',
'champ_bloc_contenu_label' => 'Contenu du bloc', 'champ_bloc_contenu_label' => 'Contenu du bloc',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter