Changeset 110847 in spip-zone


Ignore:
Timestamp:
Jun 24, 2018, 7:55:19 PM (3 years ago)
Author:
maieul@…
Message:

Raccourcis de type @@ dans la construction des sujets, expediteurs, etc.
On mutualise le code (ce qui en plus rend plus lisible la fonction de
traitement des emails)

Location:
_plugins_/formidable/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formidable/trunk/inc/formidable.php

    r98144 r110847  
    409409        return $login_num;
    410410}
     411
     412/**
     413 * Dans une chaîne, remplace les @raccourci@
     414 * par la valeur saisie.
     415 * @param string $chaine la chaîne à transformer
     416 * @param array $saisies la liste des saisies du formulaire
     417 * @param bool|string $brut=false, pour indiquer si on veut utiliser les valeurs brutes;
     418 * @return string la chaîne transformée
     419 */
     420function formidable_raccourcis_arobases_2_valeurs_champs($chaine, $saisies, $brut=false) {
     421        list($valeurs,$valeurs_libellees) = formidable_tableau_valeurs_saisies($saisies);
     422        $a_remplacer = array();
     423        if (preg_match_all('/@[\w]+@/', $chaine, $a_remplacer)) {
     424                $a_remplacer = $a_remplacer[0];
     425                foreach ($a_remplacer as $cle => $val) {
     426                        $a_remplacer[$cle] = trim($val, '@');
     427                }
     428                $a_remplacer = array_flip($a_remplacer);
     429                if ($brut) {
     430                        $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
     431                }
     432                else {
     433                        $a_remplacer = array_intersect_key($valeurs_libellees, $a_remplacer);
     434                }
     435                $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
     436        }
     437        return trim(_L($chaine, $a_remplacer));
     438}
     439/**
     440 * Récupère l'ensemble des valeurs postée dans un formulaires
     441 * Les retourne sous deux formes : brutes et libellés (par ex. pour les @select@
     442 * @param array $saisies les saisies du formulaires
     443 * @return array (brutes, libellées)
     444 * On met les résultats en statiques pour gagner un peu de temps
     445 */
     446function formidable_tableau_valeurs_saisies($saisies) {
     447        if (isset($valeurs)) {
     448                return array($valeurs,$valeurs_libellees);
     449        }
     450        // On parcourt les champs pour générer le tableau des valeurs
     451        static $valeurs = array();
     452        static $valeurs_libellees = array();
     453        $saisies_fichiers = saisies_lister_avec_type($saisies, 'fichiers');
     454        $saisies_par_nom = saisies_lister_par_nom($saisies);
     455        $champs = saisies_lister_champs($saisies);
     456
     457        // On n'utilise pas formulaires_formidable_fichiers,
     458        // car celui-ci retourne les saisies fichiers du formulaire dans la base… or, on sait-jamais,
     459        // il peut y avoir eu une modification entre le moment où l'utilisateur a vu le formulaire et maintenant
     460        foreach ($champs as $champ) {
     461                if (array_key_exists($champ, $saisies_fichiers)) {// si on a affaire à une saisie de type fichiers, on considère qu'il n'y pas vraiment de valeur brute
     462                } else {
     463                        // On récupère la valeur postée
     464                        $valeurs[$champ] = _request($champ);
     465
     466                        // Le champ est un tableau objet ? on le parse
     467                        if (is_array($valeurs[$champ])) {
     468                                // si on ne demande pas la valeur brute
     469                                if (
     470                                        isset($saisies_par_nom[$champ]['options']['datas'])
     471                                        and $labels_data = saisies_aplatir_tableau(saisies_chaine2tableau($saisies_par_nom[$champ]['options']['datas']))
     472                                        and !$options['champ_sujet_valeurs_brutes']
     473                                ) {
     474                                        $valeurs_libellees[$champ] = array();
     475                                        foreach ($valeurs[$champ] as $valeur) {
     476                                                $valeurs_libellees[$champ][] = $labels_data[$valeur];
     477                                        }
     478                                        $valeurs_libellees[$champ] =  implode($valeurs_libellees[$champ], ",");
     479                                }
     480                                // Sinon on utilise directement la valeur postée
     481                                else {
     482                                        $valeurs_libellees[$champ] = implode($valeurs[$champ],",");
     483                                }
     484                                // Si la saisie a une valeur unique
     485                        } else {
     486                                // Si la saisie est une liste de choix avec des clés et labels humains, on cherche le label humain
     487                                if (
     488                                        isset($saisies_par_nom[$champ]['options']['datas'])
     489                                        and $labels_data = saisies_aplatir_tableau(saisies_chaine2tableau($saisies_par_nom[$champ]['options']['datas']))
     490                                        and isset($labels_data[$valeurs[$champ]])
     491                                ) {
     492                                        $valeurs_libellees[$champ] = $labels_data[$valeurs[$champ]];
     493                                }
     494                                // Sinon on utilise directement la valeur postée
     495                                else {
     496                                        $valeurs_libellees[$champ] = $valeurs[$champ];
     497                                }
     498                        }
     499                }
     500        }
     501        return array($valeurs, $valeurs_libellees);
     502}
  • _plugins_/formidable/trunk/traiter/email.php

    r110846 r110847  
    8989        }
    9090
     91        // Récuperer les valeurs saisies
     92        list($valeurs,$valeurs_libellees) = formidable_tableau_valeurs_saisies($saisies);
     93
     94        // Traitement à part pour les saisies de types fichiers :
     95        // 1. Calculer la taille totale des fichiers
     96        // 2. Ajouter au facteur
     97        $saisies_fichiers = saisies_lister_avec_type($saisies, 'fichiers');
     98        foreach ($champs as $champ) {
     99                if (array_key_exists($champ, $saisies_fichiers)) {
     100                        $valeurs[$champ] = traiter_email_fichiers($saisies_fichiers[$champ], $champ, $formulaire['id_formulaire'], $retours, $timestamp);
     101                        if ($ajouter_fichier) {
     102                                $retours['fichiers'][$champ] = $valeurs[$champ];
     103                        }
     104                        $taille_fichiers += formidable_calculer_taille_fichiers_saisie($valeurs[$champ]);
     105                        $fichiers_facteur = array_merge(
     106                                $fichiers_facteur,
     107                                vue_fichier_to_tableau_facteur($valeurs[$champ])
     108                        );
     109                }
     110        }
    91111        // Si on a bien des destinataires, on peut continuer
    92112        if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])) {
     
    94114                include_spip('inc/texte');
    95115
    96 
    97                 // On parcourt les champs pour générer le tableau des valeurs
    98                 $valeurs = array();
    99                 $valeurs_libellees = array();
    100                 $saisies_fichiers = saisies_lister_avec_type($saisies, 'fichiers');
    101                 $saisies_par_nom = saisies_lister_par_nom($saisies);
    102 
    103                 // On n'utilise pas formulaires_formidable_fichiers,
    104                 // car celui-ci retourne les saisies fichiers du formulaire dans la base… or, on sait-jamais,
    105                 // il peut y avoir eu une modification entre le moment où l'utilisateur a vu le formulaire et maintenant
    106                 foreach ($champs as $champ) {
    107                         if (array_key_exists($champ, $saisies_fichiers)) {// si on a affaire à une saisie de type fichiers, on traite à part
    108                                 $valeurs[$champ] = traiter_email_fichiers($saisies_fichiers[$champ], $champ, $formulaire['id_formulaire'], $retours, $timestamp);
    109                                 if ($ajouter_fichier) {
    110                                         $retours['fichiers'][$champ] = $valeurs[$champ];
    111                                 }
    112                                 $taille_fichiers += formidable_calculer_taille_fichiers_saisie($valeurs[$champ]);
    113                                 $fichiers_facteur = array_merge(
    114                                         $fichiers_facteur,
    115                                         vue_fichier_to_tableau_facteur($valeurs[$champ])
    116                                 );
    117                         } else {
    118                                 // On récupère la valeur postée
    119                                 $valeurs[$champ] = _request($champ);
    120 
    121                                 // Le champ est un tableau objet ? on le parse
    122                                 if (is_array($valeurs[$champ])) {
    123                                         // si on ne demande pas la valeur brute
    124                                         if (
    125                                                 isset($saisies_par_nom[$champ]['options']['datas'])
    126                                                 and $labels_data = saisies_aplatir_tableau(saisies_chaine2tableau($saisies_par_nom[$champ]['options']['datas']))
    127                                                 and !$options['champ_sujet_valeurs_brutes']
    128                                         ) {
    129                                                 $valeurs_libellees[$champ] = array();
    130                                                 foreach ($valeurs[$champ] as $valeur) {
    131                                                         $valeurs_libellees[$champ][] = $labels_data[$valeur];
    132                                                 }
    133                                                 $valeurs_libellees[$champ] =  implode($valeurs_libellees[$champ], ",");
    134                                         }
    135                                         // Sinon on utilise directement la valeur postée
    136                                         else {
    137                                                 $valeurs_libellees[$champ] = implode($valeurs[$champ],",");
    138                                         }
    139                                 // Si la saisie a une valeur unique
    140                                 } else {
    141                                         // Si la saisie est une liste de choix avec des clés et labels humains, on cherche le label humain, sauf si la case champ_sujet_valeurs_brutes est cochée dans la config du traitement
    142                                         if (
    143                                                 isset($saisies_par_nom[$champ]['options']['datas'])
    144                                                 and $labels_data = saisies_aplatir_tableau(saisies_chaine2tableau($saisies_par_nom[$champ]['options']['datas']))
    145                                                 and isset($labels_data[$valeurs[$champ]])
    146                                                 and !$options['champ_sujet_valeurs_brutes']
    147                                         ) {
    148                                                 $valeurs_libellees[$champ] = $labels_data[$valeurs[$champ]];
    149                                         }
    150                                         // Sinon on utilise directement la valeur postée
    151                                         else {
    152                                                 $valeurs_libellees[$champ] = $valeurs[$champ];
    153                                         }
    154                                 }
    155                         }
    156                 }
    157116                $nom_site_spip = supprimer_tags(typo(lire_meta('nom_site')));
     117               
    158118                // On récupère le nom de l'envoyeur
    159119                if ($options['champ_nom']) {
    160                         $a_remplacer = array();
    161                         if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)) {
    162                                 $a_remplacer = $a_remplacer[0];
    163                                 foreach ($a_remplacer as $cle => $val) {
    164                                         $a_remplacer[$cle] = trim($val, '@');
    165                                 }
    166                                 $a_remplacer = array_flip($a_remplacer);
    167                                 $a_remplacer = array_intersect_key($valeurs_libellees, $a_remplacer);
    168                                 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
    169                         }
    170                         $nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
     120                        $nom_envoyeur = formidable_raccourcis_arobases_2_valeurs_champs(
     121                                $options['champ_nom'],
     122                                $saisies
     123                        );
    171124                }
    172125                if (!isset($nom_envoyeur) or !$nom_envoyeur) {
     
    176129                // On récupère le sujet s'il existe sinon on le construit
    177130                if ($options['champ_sujet']) {
    178                         $a_remplacer = array();
    179                         if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)) {
    180                                 $a_remplacer = $a_remplacer[0];
    181                                 foreach ($a_remplacer as $cle => $val) {
    182                                         $a_remplacer[$cle] = trim($val, '@');
    183                                 }
    184                                 $a_remplacer = array_flip($a_remplacer);
    185                                 $a_remplacer = array_intersect_key($valeurs_libellees, $a_remplacer);
    186                                 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
    187                         }
    188                         $sujet = trim(_L($options['champ_sujet'], $a_remplacer));
     131                        $sujet = formidable_raccourcis_arobases_2_valeurs_champs(
     132                                $options['champ_sujet'],
     133                                $saisies,
     134                                $options['champ_sujet_valeurs_brutes']
     135                        );
    189136                }
    190137                if (!isset($sujet) or !$sujet) {
     
    262209                        // On récupère le sujet s'il existe sinon on le construit
    263210                        if ($options['sujet_accuse']) {
    264                                 $a_remplacer = array();
    265                                 if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)) {
    266                                         $a_remplacer = $a_remplacer[0];
    267                                         foreach ($a_remplacer as $cle => $val) {
    268                                                 $a_remplacer[$cle] = trim($val, '@');
    269                                         }
    270                                         $a_remplacer = array_flip($a_remplacer);
    271                                         $a_remplacer = array_intersect_key($valeurs_libellees, $a_remplacer);
    272                                         $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
    273                                 }
    274                                 $sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
     211                                $sujet_accuse = formidable_raccourcis_arobases_2_valeurs_champs(
     212                                        $options['sujet_accuse'],
     213                                        $saisies
     214                                );
    275215                        }
    276216                        if (!isset($sujet_accuse) or !$sujet_accuse) {
Note: See TracChangeset for help on using the changeset viewer.