Changeset 114460 in spip-zone


Ignore:
Timestamp:
Mar 13, 2019, 5:24:49 PM (13 days ago)
Author:
rastapopoulos@…
Message:

Nouvelle fonctionnalité : on utilise toutes les modifs faites en amont sur Saisies. On peut donc maintenant configurer certaines options globales dans l'interface du constructeur. Pour cela on déclare au constructeur quelles options on accepte (c'est propre au contexte de Formidable).

Dans le lot, il y a donc la personnalisation du bouton final, et… le multi-étapes !

Pour cela, il a fallu faire un refactoring de la fonction verifier() de Formidable où tout était en dur… On l'a donc vidé de son contenu, afin que Formidable utilise enfin l'API CVT de Saisies avec la fonction saisies().

Au passsage, il y avait une vérification propre à un traitement (enregistrement) sur l'unicité : on en profite pour mettre en place un fonctionnement générique et extensible. Tout type de traitement peut désormais déclarer une fonction de vérification qui lui est propre avec traiter/montraitement_verifier(). Et si ça existe, ça sera utilisé.

Il reste un problème avec ce dernier point : pour le cas habituel ça continue de marcher pareil MAIS quand on active les étapes… Pour le moment j'ai fait le choix lorsqu'il y a étapes, de lancer ces vérifications propres aux traitements à la toute fin, quand on sait qu'on est à la dernière étape. Mais du coup ça ne va pas, car les erreurs ajoutées peuvent être sur des champs qui sont à d'autres étapes. Et CVT ne le sait pas, il reste sur la dernière étape. Donc ça montre "Vous avez X erreurs" en haut, mais on ne voit pas forcément le ou les champs précis en erreur s'ils sont ailleurs. Je ne sais pas encore comment résoudre ça…

Location:
_plugins_/formidable/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formidable/trunk/formulaires/editer_formulaire_champs.html

    r113069 r114460  
    77        [(#ENV*{message_erreur}|non)
    88        <div class="ajax">
    9                 #FORMULAIRE_CONSTRUIRE_FORMULAIRE{#ENV{saisie_id}, #ENV{_saisies}}
     9                #FORMULAIRE_CONSTRUIRE_FORMULAIRE{#ENV{saisie_id}, #ENV{_saisies}, #ARRAY{options_globales,#ENV{_options_globales}}}
    1010        </div>
    1111        ]
  • _plugins_/formidable/trunk/formulaires/editer_formulaire_champs.php

    r101261 r114460  
    2222                $contexte['id'] = $id_formulaire;
    2323                $contexte['saisie_id'] = "formidable_$id_formulaire";
     24               
     25                // Les options globales que l'on permet de configurer pour le contexte de Formidables
     26                $contexte['_options_globales'] = array(
     27                        array(
     28                                'saisie' => 'input',
     29                                'options' => array(
     30                                        'nom' => 'texte_submit',
     31                                        'label' => _T('formidable:editer_globales_texte_submit_label'),
     32                                ),
     33                        ),
     34                        array(
     35                                'saisie' => 'case',
     36                                'options' => array(
     37                                        'nom' => 'etapes_activer',
     38                                        'label_case' => _T('formidable:editer_globales_etapes_activer_label_case'),
     39                                        'explication' => _T('formidable:editer_globales_etapes_activer_explication'),
     40                                ),
     41                        ),
     42                        array(
     43                                'saisie' => 'input',
     44                                'options' => array(
     45                                        'nom' => 'etapes_suivant',
     46                                        'label' => _T('formidable:editer_globales_etapes_suivant_label'),
     47                                ),
     48                        ),
     49                        array(
     50                                'saisie' => 'input',
     51                                'options' => array(
     52                                        'nom' => 'etapes_precedent',
     53                                        'label' => _T('formidable:editer_globales_etapes_precedent_label'),
     54                                ),
     55                        ),
     56                );
    2457        }
    2558
  • _plugins_/formidable/trunk/formulaires/formidable.html

    r112928 r114460  
    1010        [(#ENV{editable}|oui)
    1111                [(#ENV{_saisies}|et{#ENV{_saisies}|count}|oui)
    12         <form method='post' action='[(#ENV{action}|ancre_url{[formulaire_#ENV{form}-(#ENV{id,nouveau})]})]' enctype='multipart/form-data'><div>
    13                 [(#REM) declarer les hidden qui declencheront le service du formulaire
    14                         parametre : url d'action ]
    15                 #ACTION_FORMULAIRE{#ENV{action}}
    16                 <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
    17                         #GENERER_SAISIES{#ENV{_saisies}}
    18                         <[(#VAL{li}|saisie_balise_structure_formulaire)] style="display:none;">
    19                                 <label for="mechantrobot-#ENV{id}"><:antispam_champ_vide:></label>
    20                                 <input type="text" id="mechantrobot-#ENV{id}" name="mechantrobot" value="#ENV{mechantrobot}" />
    21                         </[(#VAL{li}|saisie_balise_structure_formulaire)]>
    22                 </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
     12                <form method='post' action='[(#ENV{action}|ancre_url{[formulaire_#ENV{form}-(#ENV{id,nouveau})]})]' enctype='multipart/form-data'><div>
     13                        [(#REM) declarer les hidden qui declencheront le service du formulaire
     14                                parametre : url d'action ]
     15                        #ACTION_FORMULAIRE{#ENV{action}}
     16                       
     17                        [(#ENV{_etape}|oui)
     18                                #SET{etapes, #ENV{_saisies}|saisies_lister_par_etapes}
     19                                <INCLURE{fond=formulaires/inc-saisies-cvt-etapes, etapes=#GET{etapes}, env} />
     20                        ]
     21                       
     22                        <[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
     23                                #SET{saisies, #ENV{_saisies}}
     24                                [(#ENV{_etape}|oui)
     25                                        #SET{saisies, #GET{etapes}|table_valeur{#ENV{_etape}/saisies}}
     26                                ]
     27                                #GENERER_SAISIES{#GET{saisies}}
     28                               
     29                                <[(#VAL{li}|saisie_balise_structure_formulaire)] style="display:none;">
     30                                        <label for="mechantrobot-#ENV{id}"><:antispam_champ_vide:></label>
     31                                        <input type="text" id="mechantrobot-#ENV{id}" name="mechantrobot" value="#ENV{mechantrobot}" />
     32                                </[(#VAL{li}|saisie_balise_structure_formulaire)]>
     33                        </[(#VAL{ul}|saisie_balise_structure_formulaire)]>
    2334
    24                 [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
    25                 <!--extra-->
     35                        [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
     36                        <!--extra-->
    2637
    27                 <INCLURE{fond=formulaires/inc-formidable-boutons,id_formulaire=#ENV{id}} />
    28         </div></form>
    29         ]
     38                        <INCLURE{fond=formulaires/inc-formidable-boutons, id_formulaire=#ENV{id}, env} />
     39                </div></form>
     40                ]
     41               
    3042                [(#ENV{_saisies}|et{#ENV{_saisies}|count}|non)
    31                         <p class="notice"><:formidable:formulaires_aucun_champ:></p>
     43                <p class="notice"><:formidable:formulaires_aucun_champ:></p>
    3244                ]
    3345        ]
  • _plugins_/formidable/trunk/formulaires/formidable.php

    r114361 r114460  
    4747
    4848/**
    49 * Chargement du formulaire CVT de Formidable.
    50 *
    51 * Genere le formulaire dont l'identifiant (numerique ou texte est indique)
     49* Déclaration des saisies du formulaire à l'API Saisies.
    5250*
    5351* @param int|string $id
     
    6058*
    6159* @return array
     60*     Tableau des saisies
     61**/
     62function formulaires_formidable_saisies_dist($id, $valeurs = array(), $id_formulaires_reponse = false) {
     63        $saisies = array();
     64       
     65        if (
     66                $id_formulaire = formidable_id_formulaire($id)
     67                and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))
     68        ) {
     69                $saisies = unserialize($formulaire['saisies']);
     70               
     71                // Si on est en train de réafficher les valeurs postées,
     72                // ne pas afficher les saisies hidden
     73                if (
     74                        $formulaire['apres'] == 'valeurs'
     75                        and _request('formidable_afficher_apres') == 'valeurs'
     76                        and _request('formidable_traiter_ok') == true
     77                ) {
     78                        $champs_hidden = saisies_lister_avec_type($saisies, 'hidden');
     79                        foreach ($champs_hidden as $champ => $desc) {
     80                                $saisies = saisies_supprimer($saisies, $champ);
     81                        }
     82                }
     83        }
     84       
     85        return $saisies;
     86}
     87
     88/**
     89* Chargement du formulaire CVT de Formidable.
     90*
     91* Genere le formulaire dont l'identifiant (numerique ou texte est indique)
     92*
     93* @param int|string $id
     94*     Identifiant numerique ou textuel du formulaire formidable
     95* @param array $valeurs
     96*     Valeurs par défauts passées au contexte du formulaire
     97*     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
     98* @param int|bool $id_formulaires_reponse
     99*     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
     100*
     101* @return array
    62102*     Contexte envoyé au squelette HTML du formulaire.
    63103**/
    64 function formulaires_formidable_charger($id, $valeurs = array(), $id_formulaires_reponse = false) {
     104function formulaires_formidable_charger_dist($id, $valeurs = array(), $id_formulaires_reponse = false) {
    65105        $contexte = array();
    66106
     
    80120                // Est-ce que la personne a le droit de répondre ?
    81121                if (autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire' => $formulaire))) {
    82                         $saisies = unserialize($formulaire['saisies']);
    83122                        $traitements = unserialize($formulaire['traitements']);
    84                         // Si on est en train de réafficher les valeurs postées,
    85                         // ne pas afficher les saisies hidden
    86                         if ($formulaire['apres'] == 'valeurs'
    87                                 and _request('formidable_afficher_apres') == 'valeurs'
    88                                 and _request('erreurs') == false
    89                         ) {
    90                                 $champs_hidden = saisies_lister_avec_type($saisies, 'hidden');
    91                                 foreach ($champs_hidden as $champ => $desc) {
    92                                         $saisies = saisies_supprimer($saisies, $champ);
    93                                 }
    94                         }
    95 
    96                         // On déclare les champs avec les valeurs par défaut
    97                         $contexte = array_merge(saisies_lister_valeurs_defaut($saisies), $contexte);
     123
    98124                        $contexte['mechantrobot'] = '';
    99                         // On ajoute le formulaire complet
    100                         $contexte['_saisies'] = $saisies;
    101125
    102126                        $contexte['id'] = $formulaire['id_formulaire'];
     
    186210*     Tableau des erreurs
    187211**/
    188 function formulaires_formidable_verifier($id, $valeurs = array(), $id_formulaires_reponse = false) {
     212function formulaires_formidable_verifier_dist($id, $valeurs = array(), $id_formulaires_reponse = false) {
    189213        $erreurs = array();
    190         // On peut donner soit un id soit un identifiant
    191         if (!$id_formulaire = formidable_id_formulaire($id)) {
    192                 $erreurs['message_erreur'] = _T('formidable:erreur_base');
    193         } else {
    194                 // Sale bête !
    195                 if (_request('mechantrobot')!='') {
    196                         $erreurs['hahahaha'] = 'hahahaha';
    197                         return $erreurs;
    198                 }
    199 
    200                 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire));
    201                 $saisies = unserialize($formulaire['saisies']);
    202 
    203                 $erreurs_par_fichier = array();
    204                 $erreurs = saisies_verifier($saisies, true, $erreurs_par_fichier);
    205 
    206                 // On supprime de $_FILES les fichiers envoyés qui ne passent pas le test de vérification
    207 
    208                 $plugins_actifs = liste_plugin_actifs();
    209                 if (isset($plugins_actifs['CVTUPLOAD'])) {
    210                         include_spip('inc/cvtupload');
    211                         foreach ($erreurs as $champ => $erreur) {
    212                                 if (isset($erreurs_par_fichier[$champ])) {
    213                                         cvtupload_nettoyer_files_selon_erreurs($champ, $erreurs_par_fichier[$champ]);
    214                                 }
    215                         }
    216                 }
    217                 // Si on a pas déjà une erreur sur le champ unicite, on lance une verification
    218                 $traitements = unserialize($formulaire['traitements']);
    219                 $unicite = $traitements['enregistrement']['unicite'];
    220                 $message_erreur_unicite = $traitements['enregistrement']['message_erreur_unicite'];
    221                 if ($unicite != '') {
    222                         if (!$erreurs[$unicite]) {
    223                                 $options_enregistrement = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null;
    224                                 if (!$id_formulaires_reponse) { // si pas de réponse explictement passée au formulaire, on cherche la réponse qui serait édité
    225                                         $id_formulaires_reponse = formidable_trouver_reponse_a_editer($formulaire['id_formulaire'], $id_formulaires_reponse, $options_enregistrement);
    226                                 }
    227                                 if ($id_formulaires_reponse != false) {
    228                                         $unicite_exclure_reponse_courante = ' AND R.id_formulaires_reponse != '.$id_formulaires_reponse;
    229                                 } else {
    230                                         $unicite_exclure_reponse_courante = '';
    231                                 }
    232                                 $reponses = sql_allfetsel(
    233                                         'R.id_formulaire AS id',
    234                                         'spip_formulaires_reponses AS R
    235                                                 LEFT JOIN spip_formulaires AS F
    236                                                 ON R.id_formulaire=F.id_formulaire
    237                                                 LEFT JOIN spip_formulaires_reponses_champs AS C
    238                                                 ON R.id_formulaires_reponse=C.id_formulaires_reponse',
    239                                         'R.id_formulaire = ' . $id_formulaire .
    240                                                 $unicite_exclure_reponse_courante .
    241                                                 ' AND C.nom='.sql_quote($unicite).'
    242                                                 AND C.valeur='.sql_quote(_request($unicite)).'
    243                                                 AND R.statut = "publie"'
    244                                 );
    245                                 if (is_array($reponses) && count($reponses) > 0) {
    246                                         $erreurs[$unicite] = $message_erreur_unicite ?
    247                                                 _T($message_erreur_unicite) : _T('formidable:erreur_unicite');
    248                                 }
    249                         }
    250                 }
    251 
    252                 if ($erreurs and !isset($erreurs['message_erreur'])) {
    253                         $erreurs['message_erreur'] = _T('formidable:erreur_generique');
    254                 }
    255                 if ($erreurs) { // Pour savoir au chargement si le formulaire a deja été envoyé avec erreur'
    256                         set_request('erreurs', true);
    257                 }
    258         }
     214       
     215        include_spip('inc/saisies');
     216        $saisies = saisies_chercher_formulaire('formidable', array($id, $valeurs, $id_formulaires_reponse));
     217       
     218        // Si on n'est pas dans un formulaire à étape, on lance les vérifications des traitements
     219        if ($saisies and !saisies_lister_par_etapes($saisies)) {
     220                $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse);
     221        }
     222       
     223        // Sale bête ! Ça on le fait tout le temps
     224        if (_request('mechantrobot')!='') {
     225                $erreurs['hahahaha'] = 'hahahaha';
     226        }
     227       
    259228        return $erreurs;
    260229}
    261230
    262 
    263 /**
    264  * Traitement du formulaire CVT de Formidable.
    265  *
    266  * Exécute les traitements qui sont indiqués dans la configuration des
    267  * traitements de ce formulaire formidable.
    268  *
    269  * Une fois fait, gère le retour après traitements des saisies en fonction
    270  * de ce qui a été configuré dans le formulaire, par exemple :
    271  * - faire réafficher le formulaire,
    272  * - faire afficher les saisies
    273  * - rediriger sur une autre page...
    274  *
     231/**
     232* Vérification du formulaire CVT de Formidable mais s'il y a des étapes
     233*
     234* @param int|string $id
     235*     Identifiant numerique ou textuel du formulaire formidable
     236* @param array $valeurs
     237*     Valeurs par défauts passées au contexte du formulaire
     238*     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
     239* @param int|bool $id_formulaires_reponse
     240*     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
     241*
     242* @return array
     243*     Tableau des erreurs
     244**/
     245function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = array(), $id_formulaires_reponse = false) {
     246        $erreurs = array();
     247       
     248        include_spip('inc/saisies');
     249        $saisies = saisies_chercher_formulaire('formidable', array($id, $valeurs, $id_formulaires_reponse));
     250       
     251        // Seulement si on est à la DERNIÈRE étape, on lance les vérifications propres aux traitements
     252        if ($saisies and $etapes = saisies_lister_par_etapes($saisies) and $etape==count($etapes)) {
     253                $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse);
     254        }
     255       
     256        return $erreurs;
     257}
     258
     259/**
     260 * Lancer des vérifications propres aux traitements
     261 *
    275262 * @param int|string $id
    276263 *     Identifiant numerique ou textuel du formulaire formidable
     
    283270 * @return array
    284271 *     Tableau des erreurs
     272 */
     273function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $id_formulaires_reponse = false) {
     274        $erreurs = array();
     275       
     276        if (
     277                $id_formulaire = formidable_id_formulaire($id)
     278                and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))
     279        ) {
     280                $traitements = unserialize($formulaire['traitements']);
     281               
     282                // Pour chaque traitement choisi, on cherche s'il propose une fonction de vérification propre à ses besoins
     283                foreach ($traitements as $type_traitement => $options) {
     284                        if ($verifier_traitement = charger_fonction('verifier', "traiter/$type_traitement", true)) {
     285                                $erreurs_traitements = $verifier_traitement(
     286                                        array(
     287                                                'formulaire' => $formulaire,
     288                                                'options' => $options,
     289                                                'id_formulaire' => $formulaire['id_formulaire'],
     290                                                'valeurs' => $valeurs,
     291                                                'id_formulaires_reponse' => $id_formulaires_reponse,
     292                                        ),
     293                                        $erreurs
     294                                );
     295                                $erreurs = array_merge($erreurs, $erreurs_traitements);
     296                        }
     297                }
     298        }
     299       
     300        return $erreurs;
     301}
     302
     303/**
     304 * Traitement du formulaire CVT de Formidable.
     305 *
     306 * Exécute les traitements qui sont indiqués dans la configuration des
     307 * traitements de ce formulaire formidable.
     308 *
     309 * Une fois fait, gère le retour après traitements des saisies en fonction
     310 * de ce qui a été configuré dans le formulaire, par exemple :
     311 * - faire réafficher le formulaire,
     312 * - faire afficher les saisies
     313 * - rediriger sur une autre page...
     314 *
     315 * @param int|string $id
     316 *     Identifiant numerique ou textuel du formulaire formidable
     317 * @param array $valeurs
     318 *     Valeurs par défauts passées au contexte du formulaire
     319 *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
     320 * @param int|bool $id_formulaires_reponse
     321 *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
     322 *
     323 * @return array
     324 *     Tableau des erreurs
    285325 **/
    286 function formulaires_formidable_traiter($id, $valeurs = array(), $id_formulaires_reponse = false) {
     326function formulaires_formidable_traiter_dist($id, $valeurs = array(), $id_formulaires_reponse = false) {
    287327        $retours = array();
    288328
     
    484524                $envoyer_mail($GLOBALS['meta']['email_webmaster'], $erreur_sujet, $erreur_texte);
    485525        }
     526       
     527        // Pas besoin de ça dans le vrai retour final
    486528        unset($retours['traitements']);
     529        // Drapeau pour dire que tous les traitements sont terminés, afin qu'on le sache dans le charger()
     530        set_request('formidable_traiter_ok', true);
     531       
    487532        return $retours;
    488533}
  • _plugins_/formidable/trunk/formulaires/inc-formidable-boutons.html

    r80679 r114460  
    11<p class='boutons'>
    22    <span class='image_loading'></span>
    3     <input type='submit' class='submit' value='<:bouton_valider:>' />
     3    [(#SET{label_valider, #ENV{_saisies/options/texte_submit, #ENV{saisies_texte_submit, <:bouton_enregistrer:>}}})]
     4                [(#ENV{_etape}|et{#ENV{_etape}|!={#ENV{_etapes}}})
     5                        [(#SET{label_valider, #ENV{_saisies/options/etapes_suivant, <:bouton_suivant:>}})]
     6                ]
     7                [(#ENV{_etape}|>{1}|oui)
     8                        <input type="submit" class="submit" name="_retour_etape_[(#ENV{_etape}|moins{1})]" value="[(#ENV{_saisies/options/etapes_precedent, <:bouton_precedent:>})]" />
     9                ]
     10                <input type="submit" class="submit" value="#GET{label_valider}" />
    411</p>
  • _plugins_/formidable/trunk/lang/formidable_fr.php

    r113587 r114460  
    5858        'editer_descriptif' => 'Descriptif',
    5959        'editer_descriptif_explication' => 'Une explication du formulaire destinée à l’espace privé.',
     60        'editer_globales_etapes_activer_explication' => 'Lorsque cette option est active, chaque groupe de champs de premier niveau est transformé en étape du formulaire.',
     61        'editer_globales_etapes_activer_label_case' => 'Activer la gestion multi-étapes',
     62        'editer_globales_etapes_precedent_label' => 'Texte du bouton de validation vers l’étape suivante (par défaut "Suivant")',
     63        'editer_globales_etapes_suivant_label' => 'Texte du bouton de validation vers l’étape suivante (par défaut "Suivant")',
     64        'editer_globales_texte_submit_label' => 'Texte du bouton de validation',
    6065        'editer_identifiant' => 'Identifiant',
    6166        'editer_identifiant_explication' => 'Donnez un identifiant textuel unique qui vous permettra d’appeler plus facilement le formulaire. L’identifiant ne peut contenir que des chiffres, lettres latines non accentuées et le caractère "_".',
  • _plugins_/formidable/trunk/paquet.xml

    r114452 r114460  
    22        prefix="formidable"
    33        categorie="communication"
    4         version="3.35.0"
     4        version="3.36.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
     
    3939        <pipeline nom="corbeille_table_infos" inclure="formidable_pipelines.php" />
    4040        <necessite nom="spip_bonux" compatibilite="[3.3.8;[" />
    41         <necessite nom="saisies" compatibilite="[3.13.0;[" />
     41        <necessite nom="saisies" compatibilite="[3.18.1;[" />
    4242        <necessite nom="verifier" compatibilite="[1.6.2;[" />
    4343        <necessite nom="yaml" compatibilite="[1.5.2;[" />
     
    4646
    4747        <utilise nom="collectionjson" compatibilite="[1.5.0;[" />
    48         <utilise nom="cvtupload" compatibilite="[1.11.0;[" />
     48        <utilise nom="cvtupload" compatibilite="[1.16.0;[" />
    4949        <utilise nom="corbeille" compatibilite="[3.1.0;[" />
    5050
  • _plugins_/formidable/trunk/prive/squelettes/contenu/formulaire.html

    r85094 r114460  
    3030        <//B_traitements>
    3131        #BOITE_FERMER
    32 
    33         #FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE}
     32       
     33        <div class="ajax">
     34                #FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE}
     35        </div>
    3436
    3537        #PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,formulaire,id,#ID_FORMULAIRE},data,'<div class="nettoyeur"></div>'}}
  • _plugins_/formidable/trunk/traiter/enregistrement.php

    r113850 r114460  
    191191}
    192192
     193function traiter_enregistrement_verifier_dist($args, $erreurs) {
     194        $id_formulaire = $args['id_formulaire'];
     195        $options = $args['options'];
     196        $id_formulaires_reponse = $args['id_formulaires_reponse'];
     197       
     198        if (($unicite = $options['unicite']) != '' and !$erreurs[$unicite]) {
     199                if (!$id_formulaires_reponse) { // si pas de réponse explictement passée au formulaire, on cherche la réponse qui serait édité
     200                        $id_formulaires_reponse = formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_reponse, $options);
     201                }
     202               
     203                if ($id_formulaires_reponse != false) {
     204                        $unicite_exclure_reponse_courante = ' AND R.id_formulaires_reponse != '.$id_formulaires_reponse;
     205                } else {
     206                        $unicite_exclure_reponse_courante = '';
     207                }
     208               
     209                $reponses = sql_allfetsel(
     210                        'R.id_formulaire AS id',
     211                        'spip_formulaires_reponses AS R
     212                                LEFT JOIN spip_formulaires AS F
     213                                ON R.id_formulaire=F.id_formulaire
     214                                LEFT JOIN spip_formulaires_reponses_champs AS C
     215                                ON R.id_formulaires_reponse=C.id_formulaires_reponse',
     216                        'R.id_formulaire = ' . $id_formulaire .
     217                                $unicite_exclure_reponse_courante .
     218                                ' AND C.nom='.sql_quote($unicite).'
     219                                AND C.valeur='.sql_quote(_request($unicite)).'
     220                                AND R.statut = "publie"'
     221                );
     222                if (is_array($reponses) && count($reponses) > 0) {
     223                        $erreurs[$unicite] = $options['message_erreur_unicite'] ?
     224                                _T($options['message_erreur_unicite']) : _T('formidable:erreur_unicite');
     225                }
     226        }
     227       
     228        return $erreurs;
     229}
     230
    193231/**
    194232 * Pour une saisie 'fichiers' particulière,
Note: See TracChangeset for help on using the changeset viewer.