source: spip-zone/_galaxie_/galactic/galactic_spip_net/urls/trad.php @ 105541

Last change on this file since 105541 was 105541, checked in by nicolas.dorigny@…, 3 years ago

Un squelette basé sur le design créé par Jordan
cf la capture écran sur l'article https://contrib.spip.net/Refonte-de-l-identite-graphique

Ce squelette Z et SCSS est conçu pour être surchargé par des thèmes spécialisé, sous la forme d'autres plugins à installer.

Ce ne sont pas des thèmes au sens de ceux qui existent pour la dist ou pour Spipr, ces thèmes là peuvent déclarer des dépendances, des configurations, des options etc.
Ils s'installent donc comme des plugins et pas avec Zen-Garden.

Deux thèmes pour l'instant : programmer.spip.net, et spip.net

C'est un travail en cours, j'uploade tout ça sur la zone pour le partager et en discuter.

TODO : une documentation du squelette et de la façon de créer un thème (surcharges).

File size: 6.6 KB
Line 
1<?php
2
3// executer une seule fois
4if (defined("_INC_URLS2")) return;
5define("_INC_URLS2", "1"); // est-ce encore utile ?
6
7// Les cles de ce tableau sont reperees par le htaccess
8$GLOBALS['articles_aide_en_ligne'] = array(
9        'download' =>  2670,
10        'update' =>  1318,
11        'suivi' => 2275,
12        'article(\d+)\.html' => 0
13);
14
15define('_TRAD_ARTICLE', "#^(([a-z_]+)_)?(" . 
16       join('|', array_keys($GLOBALS['articles_aide_en_ligne'])) .
17       ")$#");
18define('_TRAD_AIDE',     "#^aide/([^-]*)-aide\.html$#");
19define('_TRAD_MOT',      "#^(@[a-z_0-9,-]+)$#");
20define('_TRAD_RUBRIQUE', "#^([a-z_]+)_$#");
21
22
23define('URLS_TRAD_EXEMPLE', 'fr_rubrique_91.html');
24
25function langue_choix ($id, $type='article') {
26        switch ($type) {
27        case 'article':
28                if ($a = sql_fetsel('lang, id_secteur', "spip_articles", "id_article='$id'")) {
29
30                        if ($a['id_secteur'] == 324) # aide en ligne
31                                return "aide/".$a['lang'].'-aide.html';
32                        if ($a['lang'] == 'cpf_hat')
33                                return 'cpf_hat';
34                        return preg_replace(",_.*,","",$a['lang']);
35                }
36        case 'rubrique':
37                if ($a = sql_fetsel('lang, id_secteur', "spip_rubriques", "id_rubrique='$id'")) {
38                        if ($a['id_secteur'] == 324) # aide en ligne
39                                return "aide/".$a['lang'].'-aide.html';
40                        if ($a['lang'] == 'cpf_hat')
41                                return 'cpf_hat';
42                        return preg_replace(",_.*,","",$a['lang']);
43                }
44        case 'forum':
45                include_spip('inc/forum');
46                if ($racine = racine_forum($id))
47                        return langue_choix($racine[1], $racine[0]);
48        }
49        return '';
50}
51
52function _generer_url_trad($type, $id, $args='', $ancre='')
53{
54        $args = ($args ? "?$args" : '') . ($ancre ? "#$ancre" : '');
55        $lang = langue_choix ($id, $type);
56        if (function_exists($f = "generer_url_trad_$type"))
57                return _DIR_RACINE.$f($lang, $id, $args);
58        else return '';
59}
60
61function generer_url_trad_rubrique($lang, $id, $args) {
62        return ($lang ? "{$lang}_" : '') . 'rubrique' . $id . '.html' . $args;
63}
64
65function generer_url_trad_auteur($lang, $id, $args) {
66        return  "./?page=auteur&amp;id_auteur=$id&amp;$args";
67}
68
69function generer_url_trad_breve($lang, $id, $args) {
70        return ($lang ? "{$lang}_" : '') . 'breve' . $id . '.html' . $args;
71}
72
73function generer_url_trad_article($lang, $id_article, $args) {
74        if (preg_match(',aide/,', $lang))
75                return $lang;
76        else if ($lang)
77                return $lang."_article$id_article.html$args";
78        else
79                return "article$id_article.html$args";
80}
81
82function generer_url_trad_forum($lang, $id_forum, $args) {
83        $t = sql_fetsel("id_thread, id_forum", 'spip_forum', "id_forum=$id_forum");
84        if (!$t) return '';
85        $url = $lang."_".$t['id_thread'].'.html';
86        if ($t['id_forum'] <> $t['id_thread']) $url .= '#forum'.$t['id_forum'];
87        return $url;
88}
89
90function generer_url_trad_mot($lang, $id_mot, $args) {
91        include_spip('inc/charsets');
92        $q = sql_fetsel('titre', 'spip_mots',  "id_mot=$id_mot");
93        if (!$q) return "mot$id_mot.html$args";
94        $url = '@'.preg_replace(';[^a-z0-9_,-];', '',
95                        strtolower(translitteration($q['titre'])));
96        $extra = serialize(array('url'=>$url));
97        sql_updateq('spip_mots', array('extra' => $extra), "id_mot=$id_mot");
98        return $url . $args;
99}
100
101function generer_url_trad_document($lang, $id_document, $args) {
102
103        include_spip('inc/documents');
104        return get_spip_doc(sql_getfetsel('fichier', 'spip_documents', 'id_document=' . sql_quote($id_document)));
105}
106
107function urls_trad_dist($i, &$entite, $args='', $ancre=''){
108
109        if (is_numeric($i))
110                return _generer_url_trad($entite, $i, $args, $ancre);
111
112        $url = $i;
113        $id_objet = $type = 0;
114        $url_redirect = null;
115        // recuperer les &debut_xx;
116        if (is_array($args))
117                $contexte = $args;
118        else
119                parse_str($args,$contexte);
120
121        $lang = (isset($contexte['sitelang'])?$contexte['sitelang']:null); //RewriteRule ?page=secteur&sitelang=URI
122        // recuperer les rubriques meres demandees par "www.spip.net/LANG"
123        if (preg_match(_TRAD_RUBRIQUE, $url, $regs) || $lang) {
124                $entite = 'rubrique';
125                if ($regs[1]) $lang = $regs[1];
126                if ($lang == 'fr'){
127                  // cas particulier du francais qui a plusieurs rubriques
128                        $contexte['id_rubrique'] = 91;
129                }
130                else {
131                        $where =  "id_parent=0 AND lang LIKE "
132                                . sql_quote($lang .'%')
133                                . " AND statut='publie'"; 
134
135                        $t = sql_getfetsel("id_secteur", 'spip_rubriques', $where . " AND NOT (titre LIKE '%-aide.html%')");
136                        if (!$t)
137                                $t = sql_getfetsel("id_secteur", 'spip_rubriques', $where);
138                        if ($t){
139                                $contexte['id_rubrique'] = $t;
140                        }
141                        else {
142                                $sites_redirection = Array (
143                                        'da' => 'http://listes.rezo.net/mailman/listinfo/spip-da',
144                                //      'de' => 'http://www.spip.de/',
145                                //      'eo' => 'http://listes.rezo.net/mailman/listinfo/spip-eo',
146                                        'gl' => 'http://listes.rezo.net/mailman/listinfo/spip-gl',
147                                        'it' => 'http://listes.rezo.net/mailman/listinfo/spip-it',
148                                //      'nl' => 'http://listes.rezo.net/mailman/listinfo/spip-nl',
149                                        'pt' => 'http://listes.rezo.net/mailman/listinfo/spip-pt'
150                                );
151
152                                if ($url = $sites_redirection[$lang]) {
153                                        $url_redirect = $url;
154                                } else {
155                                        $url_redirect = "https://www.spip.net/";
156                                }
157                        }
158                }
159        }
160
161        // recuperer l'aide en ligne
162        else if (preg_match(_TRAD_AIDE, $url, $regs)) {
163                $entite = 'aide';
164                $lang = addslashes($regs[1]);
165
166                ## redirections d'aide
167                if (preg_match(',^oc(_.*)?$,', $lang)) $lang = 'oc_lnc';
168                if (preg_match(',^pt(_.*)?$,', $lang)) $lang = 'pt';
169
170                $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques',
171                                   "id_parent=324 AND lang="
172                                   . sql_quote($lang)
173                                   . " AND statut='publie' AND (titre LIKE '%-aide.html%')");
174                if ($id_rubrique)
175                        $contexte['id_rubrique'] = $id_rubrique;
176        }
177
178        // recuperer l'article correspondant a "www.spip.net/xx_suivi"
179        // si possible dans la langue, sinon en francais
180        else if (preg_match(_TRAD_ARTICLE, $url, $regs)) {
181                $entite = 'article';
182                $lang = $regs[2];
183                $id_original = $GLOBALS['articles_aide_en_ligne'][$regs[3]];
184                if (!$id_original) $id_original = intval($regs[4]);
185                $id_article = sql_getfetsel('id_article', 'spip_articles', "id_trad=".intval($id_original)." AND statut='publie'", '',  "lang<>'$lang',lang<>'fr'");
186                if ($id_article)
187                        $contexte['id_article'] = $id_article;
188        }
189
190        // recuperer les mots-cles (balises de spip)
191        else if (preg_match(_TRAD_MOT, $url, $regs)) {
192                $entite = 'mot';
193                $extra = serialize(array('url'=>$regs[1]));
194                $id_mot = sql_getfetsel('id_mot', 'spip_mots', "extra=" . sql_quote($extra));
195                if ($id_mot)
196                        $contexte['id_mot'] = $id_mot;
197        }
198
199        if ($entite == '') {
200                if ($type) {
201                        $entite = objet_type($type);
202                } else {
203                        // Si ca ressemble a une URL d'objet, ce n'est pas la home
204                        // et on provoque un 404
205                        if (preg_match(',^[^\.]+(\.html)?$,', $url)) {
206                                $entite = '404';
207                                $contexte['erreur'] = ''; // qu'afficher ici ?  l'url n'existe pas... on ne sait plus dire de quel type d'objet il s'agit
208                        }
209                }
210        }
211
212        return array($contexte, $entite, $url_redirect, null);
213}
Note: See TracBrowser for help on using the repository browser.