Changeset 108827 in spip-zone


Ignore:
Timestamp:
Feb 5, 2018, 9:53:03 PM (2 years ago)
Author:
rastapopoulos@…
Message:

mutualisation de la fonction qui génère les noisettes, pour pouvoir être appelée ailleurs

Location:
_plugins_/profils/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/profils/trunk/formulaires/profil.php

    r108788 r108827  
    4646 */
    4747function formulaires_profil_saisies_dist($id_auteur = 'new', $id_ou_identifiant_profil = '') {
    48         $saisies = array();
     48        $saisies = profils_chercher_saisies_profil('edition', $id_auteur, $id_ou_identifiant_profil);
    4949       
    50         // S'il y a un id_auteur on cherche s'il a un profil
    51         if (intval($id_auteur) > 0 and $id_profil = sql_getfetsel('id_profil', 'spip_auteurs', 'id_auteur = '.intval($id_auteur))) {
    52                 $id_ou_identifiant_profil = $id_profil;
    53         }
    54        
    55         // On ne continue que si on a un profil sous la main
    56         if ($profil = profils_chercher_profil($id_ou_identifiant_profil) and $config = $profil['config']) {
    57                 foreach (array('auteur', 'organisation', 'contact') as $objet) {
    58                         // Si c'est autre chose que l'utilisateur, faut le plugin qui va avec et que ce soit activé
    59                         if ($objet == 'auteur' or (defined('_DIR_PLUGIN_CONTACTS') and $config["activer_$objet"])) {
    60                                 // On récupère les champs pour cet objet ET ses champs extras s'il y a
    61                                 $saisies_objet = profils_chercher_saisies_objet($objet);
    62                                 $saisies_a_utiliser = array();
    63                                
    64                                 // Pour chaque chaque champ vraiment configuré
    65                                 foreach ($config[$objet] as $champ => $config_champ) {
    66                                         // On cherche la saisie pour ce champ
    67                                         if ($saisie = saisies_chercher($saisies_objet, $champ)) {
    68                                                 // On modifie son nom
    69                                                 $saisie['options']['nom'] = $objet . '[' . $saisie['options']['nom'] . ']';
    70                                                 // On modifie son obligatoire suivant la config
    71                                                 $saisie['options']['obligatoire'] = in_array('obligatoire', $config_champ) ? 'oui' : false;
    72                                                 // On ajoute la saisie
    73                                                 $saisies_a_utiliser[] = $saisie;
    74                                         }
    75                                 }
    76                                
    77                                 // On cherche des coordonnées pour cet objet
    78                                 if (
    79                                         defined('_DIR_PLUGIN_COORDONNEES')
    80                                         and $config["activer_coordonnees_$objet"]
    81                                         and $coordonnees = $config['coordonnees'][$objet]
    82                                 ) {
    83                                         // Pour chaque type de coordonnéees (num, email, adresse)
    84                                         foreach ($coordonnees as $coordonnee => $champs) {
    85                                                 // Pour chaque champ ajouté
    86                                                 foreach ($champs as $cle => $champ) {
    87                                                         // Attention, si pas de type, on transforme ici en ZÉRO
    88                                                         if (!$champ['type']) {
    89                                                                 $champ['type'] = 0;
    90                                                         }
    91                                                         // On va chercher les saisies de ce type de coordonnées
    92                                                         $saisies_coordonnee = profils_chercher_saisies_objet($coordonnee);
    93                                                         // On vire le titre libre
    94                                                         $saisies_coordonnee = saisies_supprimer($saisies_coordonnee, 'titre');
    95                                                         // On change le nom de chacun des champs
    96                                                         $saisies_coordonnee =  saisies_transformer_noms(
    97                                                                 $saisies_coordonnee,
    98                                                                 '/^\w+$/',
    99                                                                 "coordonnees[$objet][$coordonnee][${champ['type']}][\$0]"
    100                                                         );
    101                                                         // On reconstitue le label
    102                                                         $label = $champ['label'] ? $champ['label'] : _T(objet_info(table_objet_sql($coordonnee), 'texte_objet'));
    103                                                         if ($champ['type'] and !$champ['label']) {
    104                                                                 $label .= ' (' . coordonnees_lister_types_coordonnees(objet_type($coordonnee), $champ['type']) . ')';
    105                                                         }
    106                                                         // Si c'est un numéro ou un email on change peut-être le label du champ lui-même et le obligatoire
    107                                                         if (in_array($coordonnee, array('numeros', 'emails'))) {
    108                                                                 $saisies_coordonnee = saisies_modifier(
    109                                                                         $saisies_coordonnee,
    110                                                                         "coordonnees[$objet][$coordonnee][${champ['type']}][" . objet_type($coordonnee) . ']',
    111                                                                         array(
    112                                                                                 'options' => array(
    113                                                                                         'label' => $label,
    114                                                                                         'obligatoire' => $champ['obligatoire'] ? 'oui' : false,
    115                                                                                 ),
    116                                                                         )
    117                                                                 );
    118                                                                 // On ajoute enfin
    119                                                                 $saisies_a_utiliser     = array_merge($saisies_a_utiliser, $saisies_coordonnee);
    120                                                         }
    121                                                         // Alors que si c'est une adresse on l'utilise pour le groupe de champs
    122                                                         else {
    123                                                                 $saisies_a_utiliser[] = array(
    124                                                                         'saisie' => 'fieldset',
    125                                                                         'options' => array(
    126                                                                                 'nom' => "groupe_${coordonnee}_$cle",
    127                                                                                 'label' => $label,
    128                                                                         ),
    129                                                                         'saisies' => $saisies_coordonnee,
    130                                                                 );
    131                                                         }
    132                                                 }
    133                                         }
    134                                 }
    135                                
    136                                 // On teste s'il faut un groupe de champs ou pas pour cet objet
    137                                 if ($legend = $config["activer_groupe_$objet"]) {
    138                                         $saisies[] = array(
    139                                                 'saisie' => 'fieldset',
    140                                                 'options' => array(
    141                                                         'nom' => "groupe_$objet",
    142                                                         'label' => $legend,
    143                                                 ),
    144                                                 'saisies' => $saisies_a_utiliser,
    145                                         );
    146                                 }
    147                                 // Sinon on les ajoute directement
    148                                 else {
    149                                         $saisies = array_merge($saisies, $saisies_a_utiliser);
    150                                 }
    151                         }
    152                 }
    153         }
    154                
    15550        return $saisies;
    15651}
  • _plugins_/profils/trunk/inc/profils.php

    r108788 r108827  
    9090       
    9191        return $saisies[$objet];
     92}
     93
     94/**
     95 * Cherche les saisies configurées pour un profil pour tel formulaire (inscription ou édition du profil)
     96 *
     97 * @param string $form
     98 *              Quel formulaire : "inscription" ou "edition"
     99 * @param $id_auteur
     100 *              Identifiant du compte utilisateur dont on cherche les saisies
     101 * @param $id_ou_identifiant_profil
     102 *              Identifiant du profil, notamment si c'est une création
     103 * @return array
     104 *              Retourne le tableau des saisies du profil
     105 */
     106function profils_chercher_saisies_profil($form, $id_auteur='', $id_ou_identifiant_profil='') {
     107        $saisies = array();
     108       
     109        // S'il y a un id_auteur on cherche s'il a un profil
     110        if (intval($id_auteur) > 0 and $id_profil = sql_getfetsel('id_profil', 'spip_auteurs', 'id_auteur = '.intval($id_auteur))) {
     111                $id_ou_identifiant_profil = $id_profil;
     112        }
     113       
     114        // On ne continue que si on a un profil sous la main
     115        if ($profil = profils_chercher_profil($id_ou_identifiant_profil) and $config = $profil['config']) {
     116                foreach (array('auteur', 'organisation', 'contact') as $objet) {
     117                        // Si c'est autre chose que l'utilisateur, faut le plugin qui va avec et que ce soit activé
     118                        if ($objet == 'auteur' or (defined('_DIR_PLUGIN_CONTACTS') and $config["activer_$objet"])) {
     119                                // On récupère les champs pour cet objet ET ses champs extras s'il y a
     120                                $saisies_objet = profils_chercher_saisies_objet($objet);
     121                                $saisies_a_utiliser = array();
     122                               
     123                                // Pour chaque chaque champ vraiment configuré
     124                                foreach ($config[$objet] as $champ => $config_champ) {
     125                                        // On cherche la saisie pour ce champ SI c'est pour le form demandé
     126                                        if (in_array($form, $config_champ) and $saisie = saisies_chercher($saisies_objet, $champ)) {
     127                                                // On modifie son nom
     128                                                $saisie['options']['nom'] = $objet . '[' . $saisie['options']['nom'] . ']';
     129                                                // On modifie son obligatoire suivant la config
     130                                                $saisie['options']['obligatoire'] = in_array('obligatoire', $config_champ) ? 'oui' : false;
     131                                                // On ajoute la saisie
     132                                                $saisies_a_utiliser[] = $saisie;
     133                                        }
     134                                }
     135                               
     136                                // On cherche des coordonnées pour cet objet
     137                                if (
     138                                        defined('_DIR_PLUGIN_COORDONNEES')
     139                                        and $config["activer_coordonnees_$objet"]
     140                                        and $coordonnees = $config['coordonnees'][$objet]
     141                                ) {
     142                                        // Pour chaque type de coordonnéees (num, email, adresse)
     143                                        foreach ($coordonnees as $coordonnee => $champs) {
     144                                                // Pour chaque champ ajouté
     145                                                foreach ($champs as $cle => $champ) {
     146                                                        // Si ce cette coordonnées est configurée pour le form demandé
     147                                                        if ($champ[$form]) {
     148                                                                // Attention, si pas de type, on transforme ici en ZÉRO
     149                                                                if (!$champ['type']) {
     150                                                                        $champ['type'] = 0;
     151                                                                }
     152                                                                // On va chercher les saisies de ce type de coordonnées
     153                                                                $saisies_coordonnee = profils_chercher_saisies_objet($coordonnee);
     154                                                                // On vire le titre libre
     155                                                                $saisies_coordonnee = saisies_supprimer($saisies_coordonnee, 'titre');
     156                                                                // On change le nom de chacun des champs
     157                                                                $saisies_coordonnee =  saisies_transformer_noms(
     158                                                                        $saisies_coordonnee,
     159                                                                        '/^\w+$/',
     160                                                                        "coordonnees[$objet][$coordonnee][${champ['type']}][\$0]"
     161                                                                );
     162                                                                // On reconstitue le label
     163                                                                $label = $champ['label'] ? $champ['label'] : _T(objet_info(table_objet_sql($coordonnee), 'texte_objet'));
     164                                                                if ($champ['type'] and !$champ['label']) {
     165                                                                        $label .= ' (' . coordonnees_lister_types_coordonnees(objet_type($coordonnee), $champ['type']) . ')';
     166                                                                }
     167                                                                // Si c'est un numéro ou un email on change peut-être le label du champ lui-même et le obligatoire
     168                                                                if (in_array($coordonnee, array('numeros', 'emails'))) {
     169                                                                        $saisies_coordonnee = saisies_modifier(
     170                                                                                $saisies_coordonnee,
     171                                                                                "coordonnees[$objet][$coordonnee][${champ['type']}][" . objet_type($coordonnee) . ']',
     172                                                                                array(
     173                                                                                        'options' => array(
     174                                                                                                'label' => $label,
     175                                                                                                'obligatoire' => $champ['obligatoire'] ? 'oui' : false,
     176                                                                                        ),
     177                                                                                )
     178                                                                        );
     179                                                                        // On ajoute enfin
     180                                                                        $saisies_a_utiliser     = array_merge($saisies_a_utiliser, $saisies_coordonnee);
     181                                                                }
     182                                                                // Alors que si c'est une adresse on l'utilise pour le groupe de champs
     183                                                                else {
     184                                                                        $saisies_a_utiliser[] = array(
     185                                                                                'saisie' => 'fieldset',
     186                                                                                'options' => array(
     187                                                                                        'nom' => "groupe_${coordonnee}_$cle",
     188                                                                                        'label' => $label,
     189                                                                                ),
     190                                                                                'saisies' => $saisies_coordonnee,
     191                                                                        );
     192                                                                }
     193                                                        }
     194                                                }
     195                                        }
     196                                }
     197                               
     198                                // On teste s'il faut un groupe de champs ou pas pour cet objet
     199                                if ($saisies_a_utiliser and $legend = $config["activer_groupe_$objet"]) {
     200                                        $saisies[] = array(
     201                                                'saisie' => 'fieldset',
     202                                                'options' => array(
     203                                                        'nom' => "groupe_$objet",
     204                                                        'label' => $legend,
     205                                                ),
     206                                                'saisies' => $saisies_a_utiliser,
     207                                        );
     208                                }
     209                                // Sinon on les ajoute directement
     210                                else {
     211                                        $saisies = array_merge($saisies, $saisies_a_utiliser);
     212                                }
     213                        }
     214                }
     215        }
     216               
     217        return $saisies;
    92218}
    93219
Note: See TracChangeset for help on using the changeset viewer.