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

Formulaire d'édition d'un bloc en multi-étapes

parent 23aef3c5
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
<div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_bloc,nouveau}'>
<div id="formulaire_#FORM" class='formulaire_spip formulaire_editer formulaire_#FORM'>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable})
<form method="post" action="#ENV{action}"><div>
#ACTION_FORMULAIRE
<input type="hidden" name="id_bloc" value="#ENV{id_bloc}" />
<div class="editer-groupe">
<BOUCLE_editable(CONDITION){si #ENV{editable}}>
#GENERER_SAISIES{#ENV*{_saisies}}
<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}}
]
</div>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer|attribut_html:/>" /></p>
<INCLURE{fond=formulaires/inc-saisies-cvt-boutons,saisies_texte_submit=<:bouton_valider:>,env} />
</div></form>
]
</BOUCLE_editable>
</div>
......@@ -13,53 +13,78 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
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 int $id_blocs_type
* Identifiant de l'objet parent (si connu)
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un bloc source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du bloc, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array[]
* Saisies du formulaire
* @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', $id_blocs_type = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
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' => 'input',
'saisie' => 'fieldset',
'options' => [
'nom' => 'titre',
'obligatoire' => 'oui',
'label' => _T('bloc:champ_titre_label'),
'nom' => 'bloc_config',
'label' => _T('bloc:champ_bloc_config_label'),
],
'saisies' => [
[
'saisie' => 'input',
'options' => [
'nom' => 'titre',
'obligatoire' => 'oui',
'label' => _T('bloc:champ_titre_label'),
],
],
[
'saisie' => ($id_blocs_type ? 'hidden' : 'blocs_types'),
'options' => [
'nom' => 'id_blocs_type',
'obligatoire' => 'oui',
'label' => _T('bloc:champ_id_blocs_type_label'),
],
],
],
],
];
// on ne peut choisir le type qu'à la création
if (!(int)$id_bloc) {
$saisies[] = [
'saisie' => 'blocs_types',
[
'saisie' => 'fieldset',
'options' => [
'nom' => 'id_blocs_type',
'obligatoire' => 'oui',
'label' => _T('blocs_type:titre_blocs_type'),
'nom' => 'bloc_contenu',
'label' => _T('bloc:champ_bloc_contenu_label'),
],
];
}
'saisies' => $saisies_bloc_type,
],
];
return $saisies;
}
......@@ -67,25 +92,14 @@ function formulaires_editer_bloc_saisies_dist($id_bloc = 'new', $id_blocs_type =
/**
* Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
*
* @param int|string $id_bloc
* Identifiant du bloc. 'new' pour un nouveau bloc.
* @param int $id_blocs_type
* Identifiant de l'objet parent (si connu)
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un bloc source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du bloc, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return string
* Hash du formulaire
* @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 string Hash du formulaire
*/
function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $id_blocs_type = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
return serialize([intval($id_bloc)]);
function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) {
return serialize([intval($id_bloc), $objet, $id_objet]);
}
/**
......@@ -93,33 +107,39 @@ function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $id_blocs_typ
*
* Déclarer les champs postés et y intégrer les valeurs par défaut
*
* @param int|string $id_bloc
* Identifiant du bloc. 'new' pour un nouveau bloc.
* @param int $id_blocs_type
* Identifiant de l'objet parent (si connu)
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un bloc source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du bloc, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
* Environnement du formulaire
* @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 Environnement du formulaire
* @uses formulaires_editer_objet_charger()
*
*/
function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $id_blocs_type = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$valeurs = formulaires_editer_objet_charger('bloc', $id_bloc, $id_blocs_type, $lier_trad, $retour, $config_fonc, $row, $hidden);
function formulaires_editer_bloc_charger_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');
}
$valeurs = formulaires_editer_objet_charger('bloc', $id_bloc, $id_blocs_type, 0, $retour, '');
if (!$valeurs['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
$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'])) {
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];
}
}
return $valeurs;
}
......@@ -128,60 +148,69 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $id_blocs_type =
*
* Vérifier les champs postés et signaler d'éventuelles erreurs
*
* @param int|string $id_bloc
* Identifiant du bloc. 'new' pour un nouveau bloc.
* @param int $id_blocs_type
* Identifiant de l'objet parent (si connu)
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un bloc source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du bloc, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
* Tableau des erreurs
* @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 Tableau des erreurs
* @uses formulaires_editer_objet_verifier()
*
*/
function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $id_blocs_type = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$obligatoires = ['titre'];
// le type est obligatoire à la création
if (!(int)$id_bloc) {
$obligatoires[] = 'id_blocs_type';
}
return formulaires_editer_objet_verifier('bloc', $id_bloc, $obligatoires);
}
//function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) {
// $erreurs = formulaires_editer_objet_verifier('bloc', $id_bloc, ['titre', 'id_blocs_type']);
// 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 int $id_blocs_type
* Identifiant de l'objet parent (si connu)
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un bloc source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du bloc, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
* Retours des traitements
* @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
* @uses formulaires_editer_objet_traiter()
*
*/
function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $id_blocs_type = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
return formulaires_editer_objet_traiter('bloc', $id_bloc, $id_blocs_type, $lier_trad, $retour, $config_fonc, $row, $hidden);
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');
}
$retours = formulaires_editer_objet_traiter('bloc', $id_bloc, $id_blocs_type, 0, $retour, '');
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 ($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, '&');
}
}
}
return $retours;
}
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