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

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

refactor: move htdocs, bin, lib for easier installation

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