diff --git a/controleurs/formulaires_reponses_champ.html b/controleurs/formulaires_reponses_champ.html new file mode 100644 index 0000000000000000000000000000000000000000..994f4d7b9554287a5eaf234a7d2f061bbfb203e0 --- /dev/null +++ b/controleurs/formulaires_reponses_champ.html @@ -0,0 +1,5 @@ +<div style="width:#ENV{largeur}px;#ENV{style};background-color:inherit;"> + <[(#DIV|sinon{ul})] class="editer-groupe"> + #GENERER_SAISIES{#ENV{_saisies}} + </[(#DIV|sinon{ul})]> +</div> diff --git a/controleurs/formulaires_reponses_champ.php b/controleurs/formulaires_reponses_champ.php new file mode 100644 index 0000000000000000000000000000000000000000..d8210882665adfec1df9f58196f3eae7f45120f9 --- /dev/null +++ b/controleurs/formulaires_reponses_champ.php @@ -0,0 +1,56 @@ +<?php + +/** + * Controleur de Crayons pour les champs d'une réponse + * + * @param array $regs + * @param array|null $c + * @return array Liste html, erreur + */ +function controleurs_formulaires_reponses_champ_dist($regs, $c = null) { + include_spip('inc/saisies'); + list(,$crayon, $type, $champ, $id) = $regs; + $id_formulaires_reponses_champ = $regs[4]; + + // Recuperer id_formulaires_reponse et id_formulaire + // Note, sans doute pourrait-on passer directement cela en classe + // Mais + // 1. Cela ferait une exception + // 2. Des gens utilisent peut être pas #VOIR_REPONSE{xxx,edit} + $data = sql_fetsel('*', 'spip_formulaires_reponses_champs JOIN spip_formulaires_reponses JOIN spip_formulaires', "id_formulaires_reponses_champ=$id_formulaires_reponses_champ AND spip_formulaires_reponses.id_formulaires_reponse = spip_formulaires_reponses_champs.id_formulaires_reponse AND spip_formulaires.id_formulaire = spip_formulaires_reponses.id_formulaire"); + $id_formulaires_reponse = $data['id_formulaires_reponse']; + + + $nom = $data['nom']; + $valeur = $data['valeur']; + $saisie = saisies_chercher(unserialize($data['saisies']), $nom); + $valeur = $data['valeur']; + + $n = new Crayon( + $type . '-valeur-' . $id_formulaires_reponses_champ, + $valeur, + array('controleur' => 'controleurs/formulaires_reponses_champ') + ); + $key = $n->key; + + unset($saisie['options']['label']); + unset($saisie['options']['explication']); + unset($saisie['options']['class']); + unset($saisie['options']['li_class']); + // Crayons utilise son propre formalisme pour le 'name' des saisies. + $nom_crayons = 'content_' . $key . '_valeur'; + $saisie['options']['nom'] = $nom_crayons; + + $contexte = array('_saisies' => array($saisie), $nom_crayons => $valeur); + $html = $n->formulaire($contexte); + + $status = $scripts = null; + + // probablement pas la meilleure idée du siècle… + // mais tenter d'afficher correctement le picker de date du plugin saisies dans l'espace public + if (!test_espace_prive() and $saisie['saisie'] == 'date') { + $scripts = '<link rel="stylesheet" type="text/css" href="' . find_in_path('css/ui/jquery-ui.css') . '" />'; + } + + return array($html . $scripts, $status); +} diff --git a/formidable_fonctions.php b/formidable_fonctions.php index 61ef535bd4e2fe5cd4e775b97b14beb251f342af..c0c317a521e0854844b434bcbf1ece1eded334ae 100644 --- a/formidable_fonctions.php +++ b/formidable_fonctions.php @@ -99,7 +99,12 @@ function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $s // Si on demande edit > mode crayon > on génère le crayon correspond if ($type_retour == 'edit') { - return 'crayon '.'formulaires_reponses_champ-valeur-'. $reponses_valeurs[$id_formulaires_reponse][$nom]['id']; + if (isset($reponses_valeurs[$id_formulaires_reponse][$nom]['id'])) { + $valeur = $reponses_valeurs[$id_formulaires_reponse][$nom]['id']; + } else { + $valeur = sql_insertq('spip_formulaires_reponses_champs', array('id_formulaires_reponse' => $id_formulaires_reponse, 'nom' => $nom)); + } + return 'crayon '.'formulaires_reponses_champ-valeur-'. $valeur; } // Si on trouve bien la saisie demandée if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) { diff --git a/formidable_pipelines.php b/formidable_pipelines.php index b7e98c96851930281e35869f532b955c0a215e28..b2dd20ef2bcdcab9e9b1f0435655c40ee8c16e59 100644 --- a/formidable_pipelines.php +++ b/formidable_pipelines.php @@ -297,3 +297,31 @@ function formidable_corbeille_table_infos($flux) { ); return $flux; } + + +/** + * Définir une fonction de contrôleur pour Crayons si on tente d'éditer un champ d'une réponse de formulaire. + * + * Si on édite un champ d'une réponse de formulaires avec Crayons, sans avoir créé manuellement de contrôleur spécifique + * pour le champ en question, Crayons propose soit un textarea, soit un input. + * + * Vu que l'on connaît les déclarations de nos champ , on va les utiliser pour créer + * un formulaire d'édition plus adapté à notre champ. + * + * @pipeline crayons_controleur + * @param array $flux + * @return array + */ +function formidable_crayons_controleur($flux) { + // si Crayons a déjà trouvé de contrôleur PHP, on ne fait rien + if ($flux['data'] != 'controleur_dist') { + return $flux; + } + $type = $flux['args']['type']; + + if ($type === 'formulaires_reponses_champ') { + $flux['data'] = charger_fonction('formulaires_reponses_champ', 'controleurs'); + } + + return $flux; +} diff --git a/formulaires/editer_formulaires_reponse.html b/formulaires/editer_formulaires_reponse.html new file mode 100644 index 0000000000000000000000000000000000000000..fcce58f2198079aea600130e26d6e96930e0cffb --- /dev/null +++ b/formulaires/editer_formulaires_reponse.html @@ -0,0 +1,12 @@ + <div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_formulaires_reponse}'> + [<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}"> + #ACTION_FORMULAIRE + <input type="hidden" name="formulaires_reponses" value="#ENV{id_formulaires_reponse}" /> + <!--extra--> + <p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p> + </form> + ] + </div> diff --git a/formulaires/editer_formulaires_reponse.php b/formulaires/editer_formulaires_reponse.php new file mode 100644 index 0000000000000000000000000000000000000000..8543cd3e0a483b6838c4b6414b5d6b4db5b22f72 --- /dev/null +++ b/formulaires/editer_formulaires_reponse.php @@ -0,0 +1,30 @@ +<?php + +// Sécurité +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + + +function formulaires_editer_formulaires_reponse_charger($id_formulaires_reponse, $retour) { + include_spip('inc/editer'); + // Est-ce qu'on a le droit ? + if (!autoriser('modifier', 'formulaires_reponse', $id_formulaires_reponse)) { + $contexte = array(); + $contexte['editable'] = false; + $contexte['message_erreur'] = _T('formidable:erreur_autorisation'); + } else { + $contexte = formulaires_editer_objet_charger('formulaires_reponse', $id_formulaires_reponse, 0, 0, $retour, ''); + } + return $contexte; +} + +function formulaires_editer_formulaires_reponse_verifier($id_formulaires_reponse, $retour) { + include_spip('inc/editer'); + return formulaires_editer_objet_verifier('formulaires_reponse', $id_formulaires_reponse, 0, 0, $retour, ''); +} + +function formulaires_editer_formulaires_reponse_traiter($id_formulaires_reponse, $retour) { + include_spip('inc/editer'); + return formulaires_editer_objet_traiter('formulaires_reponse', $id_formulaires_reponse, 0, 0, $retour, ''); +} diff --git a/lang/formidable_fr.php b/lang/formidable_fr.php index 8177870dc953cf22a6396a9b957863b1c116816b..2ee7c687f010d7085d225ffd54204d2d5da35b73 100644 --- a/lang/formidable_fr.php +++ b/lang/formidable_fr.php @@ -120,12 +120,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'formulaires_supprimer' => 'Supprimer le formulaire', 'formulaires_supprimer_confirmation' => 'Attention, cela supprimera aussi tous les résultats. Êtes-vous sûr de vouloir supprimer ce formulaire ?', 'formulaires_tous' => 'Tous les formulaires', + 'formulaires_reponse_cextras' => 'Champs extras associés à la réponse', // H 'heures_minutes_secondes' => '@h@h @m@min @s@s', // I 'icone_modifier_formulaires_reponse' => 'Modifier la réponse', + 'icone_modifier_formulaires_reponse_cextras' => 'Modifier les champs extra associés à la réponse', 'icone_retour_formulaires_reponse' => 'Retour à la réponse', 'id_formulaires_reponse' => 'Identifiant de la réponse', 'identification_par_cookie' => 'Par cookie (identifiant aléatoire, ne stocke aucune information personnelle)', diff --git a/paquet.xml b/paquet.xml index b28175e9774f49031842746082d99da8e7ede20d..c5ac5b7730ed12ddad980b9d5463b88e10f3be98 100644 --- a/paquet.xml +++ b/paquet.xml @@ -36,6 +36,7 @@ <pipeline nom="post_edition" inclure="formidable_pipelines.php" /> <pipeline nom="optimiser_base_disparus" inclure="formidable_pipelines.php" /> <pipeline nom="taches_generales_cron" inclure="formidable_pipelines.php" /> + <pipeline nom="crayons_controleur" inclure="formidable_pipelines.php" /> <pipeline nom="corbeille_table_infos" inclure="formidable_pipelines.php" /> <necessite nom="spip_bonux" compatibilite="[3.3.8;[" /> diff --git a/prive/squelettes/contenu/formulaires_reponse.html b/prive/squelettes/contenu/formulaires_reponse.html index 4c1a8c60370bd3d32a751cd1de25d36d9eacc1da..4be2b049f7db695d5251a17d9eb7fe5db34a87ab 100644 --- a/prive/squelettes/contenu/formulaires_reponse.html +++ b/prive/squelettes/contenu/formulaires_reponse.html @@ -3,7 +3,10 @@ [(#BOITE_OUVRIR{ [(#AUTORISER{modifier,formulairesreponse,#ID_FORMULAIRES_REPONSE}) [(#URL_ECRIRE{formulaires_reponse_edit,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}|icone_verticale{<:formidable:icone_modifier_formulaires_reponse:>,formulaires_reponse,edit,right})] - ] + [(#VAL{spip_formulaires_reponses}|appliquer_filtre{champs_extras_objet}|oui) + [(#URL_ECRIRE{formulaires_reponse_edit_cextras,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}|icone_verticale{<:formidable:icone_modifier_formulaires_reponse_cextras:>,formulaires_reponse,edit,right})] + ] + ] <h1><:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:></h1> ,simple fiche_objet})] <!--affiche_milieu--> diff --git a/prive/squelettes/contenu/formulaires_reponse_edit_cextras.html b/prive/squelettes/contenu/formulaires_reponse_edit_cextras.html new file mode 100644 index 0000000000000000000000000000000000000000..545b068b7fee5d40de02ef28f65bc8f210e284bf --- /dev/null +++ b/prive/squelettes/contenu/formulaires_reponse_edit_cextras.html @@ -0,0 +1,10 @@ +<BOUCLE_formulaires_reponses(FORMULAIRES_REPONSES){id_formulaires_reponse} {si #AUTORISER{modifier,formulairesreponse,#ID_FORMULAIRES_REPONSE}}> + #SET{redirect,#URL_ECRIRE{formulaires_reponse,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE,true}} + <div class='cadre-formulaire-editer'> + <div class='entete-formulaire'> + [(#URL_ECRIRE{formulaires_reponse,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}|icone_verticale{<:formidable:icone_retour_formulaires_reponse:>,formulaires_reponse,edit,left})] + <h1><:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:> — <:formidable:formulaires_reponse_cextras:></h1> + </div> + #FORMULAIRE_EDITER_FORMULAIRES_REPONSE{#ID_FORMULAIRES_REPONSE,#URL_ECRIRE{formulaires_reponse}|parametre_url{id_formulaires_reponse,#ENV{id_formulaires_reponse}}} + </div> +</BOUCLE_formulaires_reponses> diff --git a/vues/formulaires_reponses_champ.php b/vues/formulaires_reponses_champ.php new file mode 100644 index 0000000000000000000000000000000000000000..aea002d812bbe564a761d92c7a5f4ed324264c57 --- /dev/null +++ b/vues/formulaires_reponses_champ.php @@ -0,0 +1,20 @@ +<?php + +/** + * Retourner le code HTML de la vue d'un champ d'une réponse formidable pour Crayons + * + * @param string $type + * Type d'objet + * @param string $modele + * Nom du modèle donné par le contrôleur + * @param int $id + * Identifiant de l'objet + * @param array $content + * Couples champs / valeurs postés. + * @param $wid + * Identifiant du formulaire + */ +function vues_formulaires_reponses_champ_dist($type, $modele, $id, $content, $wid) { + $data = sql_fetsel('spip_formulaires.id_formulaire, spip_formulaires_reponses.id_formulaires_reponse, nom', 'spip_formulaires_reponses_champs JOIN spip_formulaires_reponses JOIN spip_formulaires', "id_formulaires_reponses_champ=$id AND spip_formulaires_reponses.id_formulaires_reponse = spip_formulaires_reponses_champs.id_formulaires_reponse AND spip_formulaires.id_formulaire = spip_formulaires_reponses.id_formulaire"); + return calculer_voir_reponse($data['id_formulaires_reponse'], $data['id_formulaire'], $data['nom']); +}