source: spip-zone/_plugins_/coordonnees/trunk/coordonnees_fonctions.php @ 82256

Last change on this file since 82256 was 82256, checked in by tcharlss@…, 5 years ago

PHPDoc : reprendre les commentaires de la branche 2
Administrations : petite coquille

File size: 10.4 KB
Line 
1<?php
2/**
3 * Fonctions utiles au plugin Coordonnées
4 *
5 * @plugin     Coordonnees
6 * @copyright  2013
7 * @author     Marcimat / Ateliers CYM
8 * @licence    GNU/GPL
9 * @package    SPIP\Coordonnees\Fonctions
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) return;
13
14/**
15 * Lister l'ensemble des types de liaisons d'une coordonnée, ou la chaîne de langue d'un type de liaison donné.
16 *
17 * Fonction privée mutualisée utilisée par les fonctions `filtre_coordonnees_lister_types_xxx()`.
18 * Si on veut tous les types, ignorer le paramètre `$type` : la fonction renvoie un tableau contenant les couples types/chaînes de langue de la coordonnée.
19 * Si on veut un seul type en utilisant le paramètre éponyme, elle renvoie la chaîne de langue du type donné.
20 *
21 * adresses : RFC2426/CCITT.X520 :         dom home intl parcel postal pref work
22 * numéros :  RFC2426/CCITT.X500 :         bbs car cell fax home isdn modem msg pager pcs pref video voice work
23 *            RFC6350/CCITT.X520.1988 :    cell fax pager text textphone video voice x-... (iana-token)
24 *                                         +dsl
25 * emails :   RFC2426/IANA :               internet pref x400
26 *            RFC6350/CCITT.X520+RFC5322 : home (perso) intl work (pro)
27 *
28 * @note
29 * Quand la paramètre `$type` n'est pas `NULL`, mais qu'il est vide,
30 * ça veut dire qu'on a utilisé `#TYPE|coordonnees_lister_types_xxx` avec un `#TYPE` vide.
31 * Dans ce cas là il ne faut rien retourner.
32 *
33 * @param string $coordonnee
34 *     Coordonnée dont on veut retourner les types
35 *     adresse | numero | email
36 *     à éviter : adr | tel | mel
37 * @param string $type
38 *     Type de liaison dont on veut retourner la chaîne de langue
39 *     A utiliser lorsqu'on ne veut retourner qu'une seule chaîne de langue
40 * @return array|int
41 *     Couples types/chaînes de langues
42 *     ou chaîne de langue d'un type donné
43 *     ou type tel quel si on ne trouve pas sa chaîne de langue
44 */
45function coordonnees_lister_types_coordonnees($coordonnee='', $type=null) {
46
47        // cf. note
48        if (!strlen($coordonnee) or (!is_null($type) and !strlen($type))) return;
49
50        // On veut définir une liste avec pour chaque objet coordonnée, ses types et les chaînes de langue correspondantes
51        // Or les chaînes de langue suivent la norme : type_{coordonnee}_{type}
52        // On s'en sert pour se simplifier la tâche en remplissant automatiquement le tableau
53
54        // Définition des types
55        $types = array(
56                'adresse' => array('work','home','pref','postal','dom','intl','parcel'),
57                'numero'  => array('voice','work','home','msg','pref','fax','cell','dsl','video','pager','bbs','modem','car','isdn','pcs'),
58                'email'   => array('work','home','internet','pref','x400')
59        );
60
61        // Attention, les chaînes de langue ne sont pas "type_adresse_xxx", mais "type_adr_xxx" etc.
62        // Il faut donc établir une correspondance abbréviation/coordonnée
63        $abbr = array(
64                'adr'    => 'adresse',
65                'tel'    => 'numero',
66                'mel'    => 'email',
67                'email'  => 'email'
68        );
69        $coord2abbr = array_flip($abbr);
70
71        // Vérification au cas-où
72        if (!in_array($coordonnee,$abbr) and !in_array($coordonnee,$coord2abbr)) return;
73
74        // Pour compatibilité si on utilise les abbréviations : adr etc.
75        if (in_array($coordonnee,$coord2abbr))
76                $coordonnee = $abbr[$coordonnee];
77
78        // Remplissage de la liste
79        foreach ($types as $coord=>$types_coord)
80                foreach ($types_coord as $type_coord)
81                        $liste[$coord][$type_coord] = _T('coordonnees:type_'.$coord2abbr[$coordonnee].'_'.$type_coord);
82
83        // Envoyer aux plugins pour qu'ils complètent (ou altèrent) la liste
84        $liste = pipeline('types_coordonnees', $liste);
85
86        // Par défaut, renvoyer un tableau de tous les types
87        if (is_null($type))
88                return $liste[$coordonnee];
89        // S'il y a un type, renvoyer sa chaîne de langue ou à défaut, tel quel
90        else if ($type)
91                if ($langue=$liste[$coordonnee][$type])
92                        return $langue;
93                else
94                        return $type;
95        else return;
96
97}
98
99
100/*
101 * Filtre renvoyant les couples types d'adresses/chaînes de langue ou la chaîne de langue d'une type en particulier
102 *
103 * @note
104 * Quand on veut lister les types d'adresses depuis un squelette, utiliser
105 * ```#EVAL{null}``` au lieu de ```#REM```
106 *
107 * @uses coordonnees_lister_types_coordonnees()
108 *
109 * @filtre
110 * @param string $type
111 *     Type dont on veut retourner la chaîne de langue
112 * @return array|int
113 *     Couples types/chaînes de langues
114 *     ou chaîne de langue d'un type donné
115**/
116function filtre_coordonnees_lister_types_adresses($type=null) {
117        return coordonnees_lister_types_coordonnees('adresse',$type);
118}
119
120/*
121 * Filtre renvoyant les couples types de numéros/chaînes de langue ou la chaîne de langue d'une type en particulier
122 *
123 * @note
124 * Quand on veut lister les types de numéros depuis un squelette, utiliser
125 * ```#EVAL{null}``` au lieu de ```#REM```
126 *
127 * @uses coordonnees_lister_types_coordonnees()
128 *
129 * @filtre
130 * @param string $type
131 *     Type dont on veut retourner la chaîne de langue
132 * @return array|int
133 *     Couples types/chaînes de langues
134 *     ou chaîne de langue d'un type donné
135**/
136function filtre_coordonnees_lister_types_numeros($type=null) {
137        return coordonnees_lister_types_coordonnees('numero',$type);
138}
139
140/*
141 * Filtre renvoyant les couples types d'emails/chaînes de langue ou la chaîne de langue d'une type en particulier
142 *
143 * @note
144 * Quand on veut lister les types d'emails depuis un squelette, utiliser
145 * ```#EVAL{null}``` au lieu de ```#REM```
146 *
147 * @uses coordonnees_lister_types_coordonnees()
148 *
149 * @filtre
150 * @param string $type
151 *     Type dont on veut retourner la chaîne de langue
152 * @return array|int
153 *     Couples types/chaînes de langues
154 *     ou chaîne de langue d'un type donné
155**/
156function filtre_coordonnees_lister_types_emails($type=null) {
157        return coordonnees_lister_types_coordonnees('email',$type);
158}
159
160/**
161 * Affichage du type de liaison d'une coordonnée
162 *
163 * Fonction privee mutualisée utilisée par les filtres logo_type_xx
164 *
165 * @note
166 * Nomenclature des fichiers d'images :
167 *
168 * - avec le paramètre `$coordonnee` : `type_${coordonnee}_${type}.ext`
169 *   ex: `type_adresse_home.png`
170 * - sans le paramètre `$coordonnee` : `type_${type}.ext`
171 *   ex: `type_home.png`
172 *
173 * @note
174 * http://www.alsacreations.com/tuto/lire/1222-microformats-design-patterns.html
175 * http://www.alsacreations.com/tuto/lire/1223-microformats-composes.html
176 *
177 * @param string $coordonnee
178 *     Suffixe du du filtre logo_type_${coordonnee} appelant ;
179 *     Infixe du logo "type_${coordonnee}_${type}.???" correspondant ;
180 *     adresse | numero | email
181 *     à éviter : adr | tel | mel
182 * @param string $type
183 *     Valeur associée transmise par le filtre logo_type_${coordonnee} ;
184 *     Suffixe du logo "type_${coordonnee}_${type}.???" correspondant ;
185 *     Correspond au "type" de liaison de la la coordonnée (home, work, etc.)
186 * @return string
187 *     Balise `<IMG>` ou `<ABBR>` (sinon),
188 *     avec classes semantiques micro-format et traduction des valeurs clés RFC2426
189 */
190function logo_type_($coordonnee='', $type='') {
191
192        include_spip('inc/utils');
193        include_spip('inc/filtres');
194        global $formats_logos;
195
196        // compatibilité : correspondance abbréviation/coordonnée
197        $abbr = array(
198                'adr'    => 'adresse',
199                'tel'    => 'numero',
200                'mel'    => 'email',
201                'email'  => 'email'
202        );
203        $coord2abbr = array_flip($abbr);
204        if (in_array($coordonnee,$coord2abbr))
205                $coordonnee = $abbr[$coordonnee];
206
207        // chaîne de langue
208        $type = strtolower($type);
209        $langue_coordonnee = coordonnees_lister_types_coordonnees($coordonnee,$type);
210        $langue_perso = _T("perso:type_${type}",'',array('force'=>false));
211        $langue = ($type) ? ($coordonnee) ? $langue_coordonnee : $langue_perso : '';
212
213        // fichier image
214        $fichier_coordonnee = "type_${coordonnee}_${type}";
215        $fichier_abbr = "type_" .$coord2abbr[$coordonnee] ."_${type}";
216        $fichier_perso = "type_${type}";
217        foreach ($formats_logos as $ext) {
218                if ($coordonnee) {
219                        if     ($image = chemin_image($fichier_coordonnee.'.'.$ext)) break;
220                        elseif ($image = chemin_image($fichier_abbr.'.'.$ext)) break;
221                } else {
222                        if     ($image = chemin_image($fichier_perso.'.'.$ext)) break;
223                }
224        }
225
226        if($langue){
227                if (isset($image))
228                        return inserer_attribut(filtre_balise_img_dist($image,$type),'title',$langue);
229                elseif ($type)
230                        return inserer_attribut(inserer_attribut(wrap($langue,'<abbr>'),'title',$type),'class','type');
231                else
232                        return '';
233        } else
234                return '';
235}
236
237/**
238 * Filtre d'affichage du type d'une adresse
239 *
240 * @uses logo_type_()
241 * @filtre
242 *
243 * @param string $type_adresse
244 *     Valeur du type de liaison (cf. logo_type_).
245 *     Les valeurs nativement prises en compte sont les codes normalisés
246 *     CCITT.X520/RFC2426 (section 3.2.1) : dom home intl parcel postal pref work
247 * @return string
248 *     Balise HTML micro-format (cf. logo_type_)
249 */
250function filtre_logo_type_adresse($type_adresse) {
251        return logo_type_('adresse', $type_adresse);
252}
253/**
254 * @deprecated
255 * @uses filtre_logo_type_adresse()
256 */
257function filtre_logo_type_adr($type_adresse) {
258        return filtre_logo_type_adresse($type_adresse);
259}
260
261/**
262 * Filtre d'affichage du type d'un numero
263 *
264 * @uses logo_type_()
265 * @filtre
266 *
267 * @param string $type_numero
268 *     Valeur du type de liaison (cf. logo_type_).
269 *     Les valeurs nativement prises en compte sont les codes normalisés
270 *     CCITT.X500/RFC2426 (section 3.3.1) :      bbs car cell fax home isdn modem msg pager pcs pref video voice work
271 *     CCITT.X520.1988/RFC6350 (section 6.4.1) : cell fax pager text textphone video voice x-... (iana-token)
272 *     ainsi que :                               dsl
273 *     (<http://fr.wikipedia.org/wiki/Digital_Subscriber_Line#Familles>)
274 * @return string
275 *     Balise HTML micro-format (cf. logo_type_)
276 */
277function filtre_logo_type_numero($type_numero) {
278        return logo_type_('numero', $type_numero);
279}
280/**
281 * @deprecated
282 * @uses filtre_logo_type_numero()
283 */
284function filtre_logo_type_tel($type_numero) {
285        return filtre_logo_type_numero($type_numero);
286}
287
288/**
289 * Filtre d'affichage du type d'un courriel
290 *
291 * @uses logo_type_()
292 * @filtre
293 *
294 * @param string $type_email
295 *     Valeur du type de liaison (cf. logo_type_).
296 *     Les valeurs nativement prises en compte sont les codes normalisés
297 *     IANA/RFC2426 (section 3.3.2) :               internet pref x400
298 *     CCITT.X520+RFC5322/RFC6350 (section 6.4.2) : home (perso) intl work (pro)
299 * @return string
300 *     Balise HTML micro-format (cf. logo_type_)
301**/
302function filtre_logo_type_email($type_email) {
303        return logo_type_('email', $type_email);
304}
305/**
306 * @deprecated
307 * @uses filtre_logo_type_email()
308 */
309function filtre_logo_type_mel($type_email) {
310        return filtre_logo_type_email($type_email);
311}
312
313?>
Note: See TracBrowser for help on using the repository browser.