source: spip-zone/_plugins_/boussole/trunk/boussole_fonctions.php @ 75096

Last change on this file since 75096 was 75008, checked in by eric@…, 8 years ago

Mise au point de la déclaration des boussoles manuelles pour remplacer la globale supprimée lors du précédent commit:

  • ajout d'un formulaire de déclaration dans la page serveur
  • ajout d'un bouton d'action pour retirer une boussole déclarée

Des améliorations de traductions, de traitements des erreurs et des messages.

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1<?php
2if (!defined("_ECRIRE_INC_VERSION")) return;
3
4// ----------------------- Balises propres a Boussole ---------------------------------
5
6/**
7 * La balise #BOUSSOLE_INFOS renvoie :
8 * - soit le tableau des infos contenues dans la meta boussole_infos_<alias> si l'alias est fourni
9 * - soit la liste de tous les tableaux d'infos des meta boussole_infos_xxxx sinon
10 *
11 * @param string $p     alias de la boussole ou vide
12 * @return array        tableau des informations demandees (une boussole ou toutes les boussoles)
13 */
14function balise_BOUSSOLE_INFOS($p) {
15       
16        $alias = interprete_argument_balise(1,$p);
17        $alias = isset($alias) ? str_replace('\'', '"', $alias) : '""';
18
19        $p->code = 'calcul_boussole_infos('.$alias.')';
20
21        return $p;
22}
23
24function calcul_boussole_infos($alias) {
25
26        $infos = array();
27       
28        $where = array();
29        $group_by = array();
30        if ($alias)
31                $where[] = 'aka_boussole=' . sql_quote($alias);
32        else
33                $group_by[] = 'aka_boussole';
34
35        $akas_boussole = sql_allfetsel('aka_boussole', 'spip_boussoles', $where, $group_by);
36        if ($akas_boussole) {
37                foreach (array_map('reset', $akas_boussole) as $_aka_boussole) {
38                        $meta = sql_fetsel('valeur, maj', 'spip_meta', 'nom=' . sql_quote('boussole_infos_' . $_aka_boussole));
39                        if ($meta) {
40                                if ($alias)
41                                        $infos = array_merge(unserialize($meta['valeur']), array('maj' => $meta['maj']));
42                                else
43                                        $infos[] = array_merge(unserialize($meta['valeur']), array('maj' => $meta['maj']));
44                        }
45                }
46        }
47
48        return $infos;
49}
50
51
52// ----------------------- Filtres propres a Boussole ---------------------------------
53
54/**
55 * Renvoie la traduction d'un champ d'une boussole, d'un groupe ou d'un site
56 *
57 * @api
58 * @filtre boussole_traduire
59 *
60 * @param string $aka_boussole  alias de la boussole
61 * @param string $champ                 champ a traduire
62 * @param string $alias                 alias du groupe ou du site
63 * @return string                               champ traduit
64 */
65function boussole_traduire($aka_boussole, $champ, $alias='') {
66        static  $champs_boussole = array('nom_boussole', 'slogan_boussole', 'descriptif_boussole');
67        static  $champs_groupe = array('nom_groupe');
68        static  $champs_site = array('nom_site', 'slogan_site', 'descriptif_site');
69
70        $traduction = '';
71
72        if ($champ == '')
73                return $traduction;
74
75
76        // Détermination de la traduction à rechercher dans les extras de boussole
77        if ($aka_boussole) {
78                if (in_array($champ, $champs_boussole)) {
79                        $type_objet = 'boussole';
80                        $aka_objet = $aka_boussole;
81                        $info = str_replace('boussole', 'objet', $champ);
82                }
83                elseif (in_array($champ, $champs_groupe)) {
84                        $type_objet = 'groupe';
85                        $aka_objet = $alias;
86                        $info = str_replace('groupe', 'objet', $champ);
87                }
88                elseif (in_array($champ, $champs_site)) {
89                        $type_objet = 'site';
90                        $aka_objet = $alias;
91                        $info = str_replace('site', 'objet', $champ);
92                }
93                elseif ($champ == 'nom_slogan_site') {
94                        $type_objet = 'site';
95                        $aka_objet = $alias;
96                        $info = array('nom_objet', 'slogan_objet');
97                }
98                else
99                        return $traduction;
100        }
101
102        // Accès à la table boussoles_extras où sont stockées les traductions
103        $where = array(
104                'aka_boussole=' . sql_quote($aka_boussole),
105                'type_objet=' . sql_quote($type_objet),
106                'aka_objet=' . sql_quote($aka_objet));
107        $traductions = sql_fetsel($info, 'spip_boussoles_extras', $where);
108        if (count($traductions) == 1)
109                $traduction = extraire_multi($traductions[$info]);
110        else if (count($traductions) == 2)
111                $traduction = extraire_multi($traductions['nom_objet']) . '-' . extraire_multi($traductions['slogan_objet']);
112
113        return $traduction;
114}
115
116?>
Note: See TracBrowser for help on using the repository browser.