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

Contents of /nav/lib.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1305 - (show annotations) (download)
Mon Jun 11 12:15:13 2012 UTC (11 years, 9 months ago) by rda
File size: 5850 byte(s)
new NCache class
1 <?php
2 // definition
3
4 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 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 function load($lang) {
122 $lang_file = __DIR__ . '/langs/' . $lang . '.lang';
123 if (file_exists($lang_file)) {
124 global $_t;
125 $f = file($lang_file);
126 foreach ($f as $k => $v) {
127 if (substr($v, 0, 1) == ';' && !empty($f[$k+1])) {
128 $_t[trim(substr($v, 1))] = trim($f[$k+1]);
129 }
130 }
131 }
132 }
133
134 /**
135 * Get value for key $s in global array $_t.
136 *
137 * @param string $s
138 *
139 * @return string
140 */
141 function _t($s) {
142 if (trim($s) == '')
143 return '';
144
145 global $_t;
146
147 return array_key_exists($s, $_t) ? $_t[$s] : $s;
148 }
149 }
150
151 /**
152 * Produce navigation HTML code.
153 *
154 * @param boolean $wrap = false should it be wrapped in a <header id="nav" /> element?
155 * @param string $lang = 'en'
156 * @param string $inject = null
157 * @param string $vhost = '//www.mageia.org'
158 *
159 * @return string HTML code
160 */
161 function _mgnav_html($wrap = false, $lang = 'en', $inject = null, $vhost = '//www.mageia.org')
162 {
163 $lang = _lang_check($lang);
164
165 l10n::load($lang);
166
167 $tn = array(
168 array('mageia', '$S/$L/map/', 'Mageia', l10n::_t('Go to mageia.org site map.')),
169 array('about', '$S/$L/about/', l10n::_t('About&nbsp;us', $_t), l10n::_t('Learn more about Mageia.')),
170 array('downloads', '$S/$L/downloads/', l10n::_t('Downloads', $_t), l10n::_t('Download Mageia ISO and updates.')),
171 array('support', '$S/$L/support/', l10n::_t('Support', $_t), l10n::_t('Get support from Mageia community.')),
172 array('community', '$S/$L/community/', l10n::_t('Community', $_t), l10n::_t('')),
173 array('contribute', '$S/$L/contribute/', l10n::_t('Contribute', $_t), l10n::_t('You too can build Mageia with us!')),
174 array('you', '//identity.mageia.org/', l10n::_t('You', $_t), l10n::_t('Your Mageia online account.'))
175 // <search>
176 );
177
178 $s = array();
179 foreach ($tn as $i) {
180 $s[] = sprintf('<li><a href="%s" class="%s" title="%s">%s</a></li>',
181 str_replace(
182 array('$L', '$S'),
183 array($lang, $vhost),
184 $i[1]
185 ),
186 $i[0],
187 $i[3],
188 $i[2]
189 );
190 }
191
192 if (!is_null($inject))
193 $s[] = sprintf('<li>%s</li>', $inject);
194
195 $s = implode($s);
196 $h = sprintf('<nav id="mgnav"><ul id="nav">%s</ul></nav>', $s);
197
198 if ($wrap)
199 $h = sprintf('<header id="hmgn">%s</header>', $h);
200
201 return $h;
202 }
203
204 /**
205 * Returns CSS definition ready to be inserted into a HTML document.
206 *
207 * @return string
208 */
209 function _mgnav_style()
210 {
211 return '<style>' . file_get_contents(__DIR__ . '/css/source.css') . '</style>';
212 }
213
214 /**
215 * Get the primary language subtag only.<p></p>
216 */
217 function _lang_check($s = null)
218 {
219 if (is_null($s))
220 return 'en';
221
222 $supported = array(
223 'cs',
224 'de',
225 'el', 'en', 'eo', 'es', 'et',
226 'fi', 'fr',
227 'it',
228 'lv',
229 'nb', 'nl',
230 'pl', 'pt', 'pt-br',
231 'ro', 'ru',
232 'sl',
233 'tr',
234 'uk',
235 'zh-cn', 'zh-tw'
236 );
237
238 if (in_array($s, $supported))
239 return $s;
240
241 $sub = explode('-', $s);
242 $sub = strtolower($sub[0]);
243
244 if (in_array($sub, $supported))
245 return $sub;
246
247 return 'en';
248 }

  ViewVC Help
Powered by ViewVC 1.1.30