-
Maïeul a rédigé
formidable Plutot qu'avoir `'[traitements' => ['type_traitement' => ['champ' => ['erreur']]]]` avoir `'[traitements][type_traitement][champ]' => 'erreur'` (autrement dit le nom du champ). Simplifie considérablement le code de saisies.
Maïeul a rédigéformidable Plutot qu'avoir `'[traitements' => ['type_traitement' => ['champ' => ['erreur']]]]` avoir `'[traitements][type_traitement][champ]' => 'erreur'` (autrement dit le nom du champ). Simplifie considérablement le code de saisies.
editer_formulaire_traitements.php 5,98 Kio
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/formidable');
include_spip('inc/formidable_fichiers');
function formulaires_editer_formulaire_traitements_charger($id_formulaire) {
$contexte = array();
$id_formulaire = intval($id_formulaire);
include_spip('formidable_fonctions');
// On teste si le formulaire existe
if ($id_formulaire
and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
and autoriser('editer', 'formulaire', $id_formulaire)
) {
$traitements = formidable_deserialize($formulaire['traitements']);
if ($id_version = _request('id_version')) {
include_spip('inc/revisions');
$old = recuperer_version($id_formulaire, 'formulaire', $id_version);
$traitements = formidable_deserialize($old['traitements']);
}
$saisies = formidable_deserialize($formulaire['saisies']);
if (!is_array($traitements)) {
$traitements = array();
}
if (!is_array($saisies)) {
$saisies = array();
}
$contexte['traitements'] = $traitements;
$contexte['traitements_choisis'] = array_keys($traitements);
$contexte['formulaire'] = _T_ou_typo($saisies, 'multi');
$contexte['id_formulaire'] = $id_formulaire;
$traitements_disponibles = traitements_lister_disponibles();
$saisie_traitements_choisis = [
'saisie' => 'checkbox',
'options' => [
'nom' => 'traitements_choisis',
'label' => '<:formidable:traitements_choisis:>',
'data' => [],
]
];
// Calcul des traitements avec option pour le afficher_si du fieldset `options_des_traitements`
$traitements_disponibles_avec_options = array_keys(array_filter(
$traitements_disponibles,
function ($t) {
return isset($t['options']);
}
));
$afficher_si_fieldset_options = implode(
' || ',
array_map(
function ($t) {
return "@traitements_choisis@ IN '$t'";
},
$traitements_disponibles_avec_options
)
);
$saisie_options_traitements = [
'saisie' => 'fieldset',
'options' => [
'nom' => 'options_traitements',
'label' => '<:formidable:options_traitements:>',
'afficher_si' => $afficher_si_fieldset_options
],
'saisies' => [],
];
$configurer_traitements = [&$saisie_traitements_choisis, &$saisie_options_traitements];
foreach ($traitements_disponibles as $type_traitement => $traitement) {
$saisie_traitements_choisis['options']['data'][$type_traitement] = $traitement['description'];
if (isset($traitement['options'])) {
$saisie_options_traitements['saisies'][] = [
'saisie' => 'fieldset',
'options' => [
'nom' => "options_$type_traitement",
'label' => $traitement['titre'],
'class' => "$type_traitement options_traiter",
'afficher_si' => "@traitements_choisis@ IN '$type_traitement'",
'onglet' => 'on',
'onglet_vertical' => 'on',
],
'saisies' => saisies_transformer_noms($traitement['options'], '/^.*$/', "traitements[$type_traitement][\\0]")
];
}
}
$configurer_traitements = saisies_transformer_option($configurer_traitements, 'conteneur_class', '#(.*)#', '\1 pleine_largeur');
$contexte['_configurer_traitements'] = $configurer_traitements;
// Si on demande un avertissement et qu'il y a déjà des traitements de configurés
if (_request('avertissement') == 'oui') {
$contexte['message_ok'] = $traitements ? _T('formidable:traitements_avertissement_modification') : _T('formidable:traitements_avertissement_creation');
}
} else {
$contexte['editable'] = false;
}
// On enlève l'éventuel avertissement pour le prochain envoi
$contexte['action'] = parametre_url(self(), 'avertissement', '');
return $contexte;
}
function formulaires_editer_formulaire_traitements_verifier($id_formulaire) {
include_spip('inc/saisies');
$erreurs = array();
$traitements_disponibles = traitements_lister_disponibles();
// On regarde quels traitements sont demandés
$traitements_choisis = _request('traitements_choisis');
if (is_array($traitements_choisis)) {
foreach ($traitements_choisis as $type_traitement) {
if (!isset($traitements_disponibles[$type_traitement]['options'])) {
continue;
}
$erreurs_traitement_brut = saisies_verifier(
saisies_transformer_noms(
$traitements_disponibles[$type_traitement]['options'],
'/^.*$/',
"traitements[$type_traitement][\\0]")
);
$erreurs = array_merge($erreurs, $erreurs_traitement_brut);
}
}
return $erreurs;
}
function formulaires_editer_formulaire_traitements_traiter($id_formulaire) {
$retours = array();
$id_formulaire = intval($id_formulaire);
include_spip('inc/formidable');
// On récupère tout le tableau des options de traitement
$traitements = _request('traitements');
// Et tout les traitemenrs choisis
$traitements_choisis = _request('traitements_choisis');
if (!$traitements_choisis) {
$traitements_choisis = array();
}
$traitements_choisis = array_flip($traitements_choisis);
// Parmis toutes les options passées, ne prendre que celle des traitements choisis
$traitements = array_intersect_key($traitements, $traitements_choisis);
// On gère le cas des traitements sans options
$traitements_sans_option = array_map(function($i) {return [];}, array_diff_key($traitements_choisis, $traitements));//Même si pas d'option, on fait un pseudo tableau d'option
$traitements = array_merge($traitements, $traitements_sans_option);
// Si besoin, on crée un dossier pour stocker les fichiers
$erreur_creation_dossier = formidable_creer_dossier_formulaire($id_formulaire);
if ($erreur_creation_dossier) {
$retours['message_erreur'] = $erreur_creation_dossier;
}
// Et on l'enregistre tel quel
include_spip('action/editer_objet');
$err = objet_modifier('formulaire', $id_formulaire, array('traitements' => formidable_serialize($traitements)));
// On va sur la page de visualisation quand c'est fini
if (!$err) {
$retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire);
} else {
$retours['editable'] = true;
$retours['message_erreur'] = _T('formidable:erreur_base');
}
return $retours;
}