source: trunk/htdocs/common/common.php @ 1068

Last change on this file since 1068 was 1068, checked in by moo, 2 years ago

htdocs: blue skin

  • Property svn:eol-style set to native
File size: 5.9 KB
Line 
1<?php
2
3class Cycle
4{
5    var $values;
6    var $i;
7    var $count;
8
9    function Cycle($v)
10    {
11        $this->values = func_get_args();
12        $this->i = -1;
13        $this->count = count($this->values);
14    }
15
16    function next()
17    {
18        $this->i = ($this->i + 1) % $this->count;
19        return $this->values[$this->i];
20    }
21
22    function cur()
23    {
24        return $this->values[$this->i];
25    }
26
27    function reset()
28    {
29        $this->i = -1;
30    }
31}
32
33function switcher($name, $options)
34{
35    $n = isset($_GET[$name]) ? $_GET[$name] : null;
36    $html = array();
37    foreach ($options as $k => $v) {
38        $html[] = sprintf('<a href="?%s=%s"%s>%s</a>', $name, $k, $k == $n ? ' class="active"' : '', $v);
39    }
40    return implode('', $html);
41}
42
43function mainnav()
44{
45    foreach (array(
46                "http://xcache.lighttpd.net/" => "XCache",
47                "http://www.php.net/" => "PHP",
48                "http://www.lighttpd.net/" => "LIGHTTPD",
49                ) as $url => $title) {
50        $html[] = sprintf('<a href="%s" target="_blank">%s</a>', $url, $title);
51    }
52    return implode('|', $html);
53}
54
55function subnav()
56{
57    global $module, $modules;
58    $html = array();
59    foreach ($modules as $k => $v) {
60        $html[] = sprintf('<a href="../%s/"%s>%s</a>', $k, $k == $module ? ' class="active"' : '', $v);
61    }
62    return implode('', $html);
63}
64
65function th($name, $attrs = null)
66{
67    $translated = __($name);
68    if ($translated == $name) {
69        $translated = "$name|$name";
70    }
71    list($text, $title) = explode('|', $translated, 2);
72    return sprintf('%s<th%s id="%s" class="h" title="%s"><a href="javascript:" onclick="resort(this); return false">%s</a></th>%s'
73            , "\t"
74            , $attrs ? " $attrs" : ""
75            , $name, htmlspecialchars(trim($title)), trim($text)
76            , "\n");
77}
78
79function xcache_validateFileName($name)
80{
81    if (!preg_match('!^[a-zA-Z0-9._-]+$!', $name)) {
82        var_dump($name);
83    }
84    return preg_match('!^[a-zA-Z0-9._-]+$!', $name);
85}
86
87function get_language_file_ex($name, $lang)
88{
89    static $langMap = array(
90            'zh'    => 'zh-simplified',
91            'zh-hk' => 'zh-traditional',
92            'zh-tw' => 'zh-traditional',
93            );
94
95    if (isset($langMap[$lang])) {
96        $lang = $langMap[$lang];
97    }
98    else if (!xcache_validateFileName($lang)) {
99        return null;
100    }
101
102    $file = "$name-$lang.lang.php";
103    if (file_exists($file)) {
104        return $file;
105    }
106    return null;
107}
108
109function get_language_file($name)
110{
111    global $config;
112    if (!empty($config['lang'])) {
113        $lang = strtolower($config['lang']);
114        $file = get_language_file_ex($name, $lang);
115        if (!isset($file)) {
116            $lang = strtok($lang, ':-');
117            $file = get_language_file_ex($name, $lang);
118        }
119    }
120    else if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
121        foreach (explode(',', str_replace(' ', '', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) as $lang) {
122            $lang = strtok($lang, ':;');
123            $file = get_language_file_ex($name, $lang);
124            if (isset($file)) {
125                $config['lang'] = $lang;
126                break;
127            }
128            if (strpos($lang, '-') !== false) {
129                $file = get_language_file_ex($name, strtok($lang, ':-'));
130                if (isset($file)) {
131                    $config['lang'] = $lang;
132                    break;
133                }
134            }
135        }
136    }
137    return isset($file) ? $file : "$name-en.lang.php";
138}
139
140function _($str)
141{
142    if (isset($GLOBALS['strings'][$str])) {
143        return $GLOBALS['strings'][$str];
144    }
145    if (!empty($GLOBALS['config']['show_todo_strings'])) {
146        return '<span style="color:red">' . htmlspecialchars($str) . '</span>|';
147    }
148    return $str;
149}
150
151function __($str)
152{
153    return _($str);
154}
155
156function N_($str)
157{
158    return $str;
159}
160
161function number_formats($a, $keys)
162{
163    foreach ($keys as $k) {
164        $a[$k] = number_format($a[$k]);
165    }
166    return $a;
167}
168
169function size($size)
170{
171    $size = (int) $size;
172    if ($size < 1024)
173        return number_format($size, 2) . ' b';
174
175    if ($size < 1048576)
176        return number_format($size / 1024, 2) . ' K';
177
178    return number_format($size / 1048576, 2) . ' M';
179}
180
181function age($time)
182{
183    if (!$time) return '';
184    $delta = REQUEST_TIME - $time;
185
186    if ($delta < 0) {
187        $delta = -$delta;
188    }
189   
190    static $seconds = array(1, 60, 3600, 86400, 604800, 2678400, 31536000);
191    static $name = array('s', 'm', 'h', 'd', 'w', 'M', 'Y');
192
193    for ($i = 6; $i >= 0; $i --) {
194        if ($delta >= $seconds[$i]) {
195            $ret = (int) ($delta / $seconds[$i]);
196            return $ret . $name[$i];
197        }
198    }
199
200    return '0s';
201}
202
203function stripaddslashes_array($value, $mqs = false)
204{
205    if (is_array($value)) {
206        foreach($value as $k => $v) {
207            $value[$k] = stripaddslashes_array($v, $mqs);
208        }
209    }
210    else if(is_string($value)) {
211        $value = $mqs ? str_replace('\'\'', '\'', $value) : stripslashes($value);
212    }
213    return $value;
214}
215
216function ob_filter_path_nicer_default($list_html)
217{
218    $sep = DIRECTORY_SEPARATOR;
219    $docRoot = $_SERVER['DOCUMENT_ROOT'];
220    if ($sep != '/') {
221        $docRoot = str_replace('/', $sep, $docRoot);
222    }
223    $list_html = str_replace(">$docRoot",  ">{DOCROOT}" . (substr($docRoot, -1) == $sep ? $sep : ""), $list_html);
224    $xcachedir = realpath(dirname(__FILE__) . "$sep..$sep");
225    $list_html = str_replace(">$xcachedir$sep", ">{XCache}$sep", $list_html);
226    if ($sep == '/') {
227        $list_html = str_replace(">/home/", ">{H}/", $list_html);
228    }
229    return $list_html;
230}
231
232error_reporting(E_ALL);
233ini_set('display_errors', 'On');
234define('REQUEST_TIME', time());
235
236if (function_exists('get_magic_quotes_gpc') && @get_magic_quotes_gpc()) {
237    $mqs = (bool) ini_get('magic_quotes_sybase');
238    $_GET = stripaddslashes_array($_GET, $mqs);
239    $_POST = stripaddslashes_array($_POST, $mqs);
240    $_REQUEST = stripaddslashes_array($_REQUEST, $mqs);
241    unset($mqs);
242}
243ini_set('magic_quotes_runtime', '0');
244
245$config = array();
246if (file_exists("./config.default.php")) {
247    include("./config.default.php");
248}
249include("../config.default.php");
250if (file_exists("../config.php")) {
251    include("../config.php");
252}
253if (file_exists("./config.php")) {
254    include("./config.php");
255}
256
257include(get_language_file("../common/common"));
258
259$modules = array();
260if (file_exists("../cacher/index.php")) {
261    $modules["cacher"] = _("Cacher");
262}
263if (file_exists("../coverager/index.php")) {
264    $modules["coverager"] = _("Coverager");
265}
266header("Cache-Control: no-cache, must-revalidate");
267header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
268header("Content-Type: text/html; " . $GLOBALS['config']['charset']);
269header("Content-Language: " . $GLOBALS['config']['lang']);
270
271?>
Note: See TracBrowser for help on using the repository browser.