/[web]/nav/lib.php
ViewVC logotype

Annotation of /nav/lib.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2046 - (hide annotations) (download)
Sat Feb 9 14:46:57 2013 UTC (11 years, 2 months ago) by rda
File size: 7033 byte(s)
i18n string lookup fixed
1 rda 1096 <?php
2     // definition
3    
4 rda 1305 class NCache
5     {
6     function __construct() { }
7    
8     /**
9     * Factory.
10     *
11     * @param string $path where cache file store is located, relative to app path.
12     * @param integer $timeout in seconds
13     *
14     * @return NCache
15     */
16     function build($path, $timeout = 3600)
17     {
18     $path = __DIR__ . '/' . $path;
19    
20     if (!is_dir($path))
21     return null;
22    
23     if ($timeout < 60)
24     $timeout = 60;
25    
26     $i = new self;
27     $i->_path = $path;
28     $i->_timeout = $timeout;
29    
30     return $i;
31     }
32    
33     /**
34     * Get value for $key.
35     *
36     * @param mixed $key
37     *
38     * @return mixed
39     */
40     function get($key = null)
41     {
42     if (is_null($key))
43     return false;
44    
45     $filename = $this->_get_filename($key);
46    
47     if ($this->_is_valid_file($filename, $this->_timeout)) {
48     return unserialize(file_get_contents($filename));
49     }
50    
51     return null;
52     }
53    
54     /**
55     * Save $value under $key.
56     *
57     * @param mixed $key
58     * @param mixed $value
59     */
60     function set($key, $value)
61     {
62     if (is_null($key))
63     return false;
64    
65     $filename = $this->_get_filename($key);
66     file_put_contents($filename, serialize($value));
67    
68     return true;
69     }
70    
71     /**
72     * Get cache file from key.
73     *
74     * @param mixed $key
75     *
76     * @return string
77     */
78     private function _get_filename($key)
79     {
80     $key = hash('sha1', serialize($key));
81    
82     return $this->_path . '/' . $key . '.cache';
83     }
84    
85     /**
86     * Check that the cache file exists and has not expired.
87     *
88     * @param string $filename
89     *
90     * @return boolean
91     */
92     private function _is_valid_file($filename, $timeout)
93     {
94     if (!file_exists($filename)) {
95     //error_log(sprintf('Could not find %s', $filename), 0);
96     return false;
97     }
98    
99     if (filemtime($filename) + $timeout < time()) {
100     //error_log(sprintf('%s timestamp expired (timeout was %ds.).', $filename, $timeout));
101     unlink($filename);
102     return false;
103     }
104    
105     //error_log(sprintf('Found %s', $filename));
106     return true;
107     }
108     }
109    
110 rda 1096 class l10n
111     {
112     public static $t;
113    
114     /**
115     * Load langs/$lang.lang into global $_t array.
116     *
117     * @param string $lang
118     *
119     * @return void
120     */
121 rda 1306 function load($lang)
122     {
123     global $_t;
124     $_t = array();
125    
126     if ($lang == 'en')
127     return;
128    
129     $lang_file = __DIR__ . '/langs/' . $lang . '.lang';
130     $cache_file = __DIR__ . '/var/tmp/cache/nav_lang_' . $lang . '.php';
131     $lang_ts = filemtime($lang_file);
132    
133     if (file_exists($cache_file)) {
134     include $cache_file;
135     if ($_ts > $lang_ts)
136     return;
137     }
138    
139 rda 1096 if (file_exists($lang_file)) {
140 rda 1306
141 rda 1096 $f = file($lang_file);
142 rda 1306
143 rda 1096 foreach ($f as $k => $v) {
144 rda 1306
145     if (substr($v, 0, 1) == ';'
146     && !empty($f[$k+1]))
147     {
148 rda 1096 $_t[trim(substr($v, 1))] = trim($f[$k+1]);
149     }
150     }
151 rda 1306
152     //
153     $_t_data = var_export($_t, true);
154     $cache = <<<P
155     <?php
156     /**! Generated. Do not edit. */
157    
158     // filemtime($lang_file)
159     \$_ts = $lang_ts;
160    
161     // $lang strings
162     global \$_t;
163     \$_t = $_t_data;
164     P;
165     file_put_contents($cache_file, $cache);
166 rda 1096 }
167     }
168    
169     /**
170     * Get value for key $s in global array $_t.
171     *
172     * @param string $s
173     *
174     * @return string
175     */
176     function _t($s) {
177     if (trim($s) == '')
178     return '';
179    
180     global $_t;
181    
182 rda 2046 $s = array_key_exists($s, $_t) ? $_t[$s] : $s;
183     $s = trim(str_replace(array('{ok}', '{OK}', '{Ok}', '{oK}'), '', $s));
184    
185     return $s;
186 rda 1096 }
187     }
188    
189     /**
190     * Produce navigation HTML code.
191     *
192     * @param boolean $wrap = false should it be wrapped in a <header id="nav" /> element?
193     * @param string $lang = 'en'
194     * @param string $inject = null
195 rda 1307 * @param string $vhost = 'www.mageia.org'
196     * @param object $cache
197 rda 1096 *
198     * @return string HTML code
199     */
200 rda 1307 function _mgnav_html($wrap = false, $lang = 'en', $inject = null, $vhost = 'www.mageia.org', $cache = null)
201 rda 1096 {
202 rda 1307 $key = array($wrap, $lang, $inject, $vhost);
203    
204     if (!is_null($cache) && ($h = $cache->get($key))) {
205 rda 1309 apache_note('navCacheHit', 1);
206 rda 1307 return $h;
207     }
208    
209 rda 1309 apache_note('navCacheHit', 0);
210    
211 rda 1254 $lang = _lang_check($lang);
212 rda 1154
213 rda 1307 l10n::load($lang, $cache);
214 rda 1096
215     $tn = array(
216 rda 1307 array('mageia', '//$S/$L/map/', 'Mageia', l10n::_t('Go to mageia.org site map.')),
217     array('about', '//$S/$L/about/', l10n::_t('About&nbsp;us'), l10n::_t('Learn more about Mageia.')),
218     array('downloads', '//$S/$L/downloads/', l10n::_t('Downloads'), l10n::_t('Download Mageia ISO and updates.')),
219     array('support', '//$S/$L/support/', l10n::_t('Support'), l10n::_t('Get support from Mageia community.')),
220     array('community', '//$S/$L/community/', l10n::_t('Community'), l10n::_t('')),
221     array('contribute', '//$S/$L/contribute/', l10n::_t('Contribute'), l10n::_t('You too can build Mageia with us!')),
222 rda 2028 array('you', '//identity.mageia.org/', l10n::_t('You'), l10n::_t('Your Mageia online account.')),
223     array('contact', '//$S/$L/contact/', l10n::_t('Contact'), l10n::_t('Contact Us'))
224 rda 1096 // <search>
225     );
226    
227     $s = array();
228     foreach ($tn as $i) {
229     $s[] = sprintf('<li><a href="%s" class="%s" title="%s">%s</a></li>',
230     str_replace(
231     array('$L', '$S'),
232     array($lang, $vhost),
233     $i[1]
234     ),
235     $i[0],
236     $i[3],
237     $i[2]
238     );
239     }
240    
241     if (!is_null($inject))
242     $s[] = sprintf('<li>%s</li>', $inject);
243    
244     $s = implode($s);
245 rda 2028 $h = sprintf('<!--googleoff: all--><nav id="mgnav"><ul id="nav">%s</ul></nav><!--googleon: all-->', $s);
246 rda 1096
247     if ($wrap)
248     $h = sprintf('<header id="hmgn">%s</header>', $h);
249    
250 rda 1307 if (!is_null($cache))
251     $cache->set($key, $h);
252    
253 rda 1096 return $h;
254     }
255    
256     /**
257     * Returns CSS definition ready to be inserted into a HTML document.
258     *
259     * @return string
260     */
261     function _mgnav_style()
262     {
263     return '<style>' . file_get_contents(__DIR__ . '/css/source.css') . '</style>';
264     }
265 rda 1154
266     /**
267     * Get the primary language subtag only.<p></p>
268     */
269 rda 1254 function _lang_check($s = null)
270 rda 1154 {
271 rda 2028 if (is_null($s)) {
272 rda 1257 return 'en';
273 rda 2028 }
274 rda 1254
275     $supported = array(
276     'cs',
277     'de',
278     'el', 'en', 'eo', 'es', 'et',
279     'fi', 'fr',
280 filip 1930 'id', 'it',
281 rda 1254 'lv',
282     'nb', 'nl',
283     'pl', 'pt', 'pt-br',
284     'ro', 'ru',
285     'sl',
286     'tr',
287     'uk',
288     'zh-cn', 'zh-tw'
289     );
290    
291     if (in_array($s, $supported))
292     return $s;
293    
294 rda 1257 $sub = explode('-', $s);
295     $sub = strtolower($sub[0]);
296    
297 rda 1254 if (in_array($sub, $supported))
298 rda 1257 return $sub;
299 rda 1254
300     return 'en';
301 rda 1154 }

  ViewVC Help
Powered by ViewVC 1.1.30