<?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; }