]>
Commit | Line | Data |
---|---|---|
1 | <?php | |
2 | if(function_exists("mb_internal_encoding")) | |
3 | mb_internal_encoding("UTF-8"); | |
4 | define('HASH_PASS', "********"); | |
5 | define('SALT_LENGTH', 15); | |
6 | ||
7 | session_start(); | |
8 | ||
9 | /* make sure . is first in include path */ | |
10 | set_include_path("." . PATH_SEPARATOR . get_include_path()); | |
11 | require_once('Net/MPD.php'); | |
12 | ||
13 | $release_version = "0.5.5"; | |
14 | $release_date = "18-01-2008"; | |
15 | ||
16 | $config_dir = "../config"; | |
17 | ||
18 | /* should be metadata_dir, no time to change now TODO */ | |
19 | $cover_dir = "$config_dir/metadata/"; | |
20 | $metadata_dir = $cover_dir; | |
21 | ||
22 | ||
23 | $theme_dir = "../theme/"; | |
24 | ||
25 | $config = @simplexml_load_file("../config/config.xml"); | |
26 | $error_msg = false; | |
27 | ||
28 | /* playlist fields */ | |
29 | $pl_fields = array("Title", "Album", "Artist", "Track", "Name", "Genre", "Date", "Composer", "Performer", "Comment", "Disc"); | |
30 | ||
31 | if(!$config&&!isset($_GET['new_config'])) { | |
32 | header("Location: config.php?new_config=true") or die("Unable to redirect, go here <a href='config.php?new_config=true'>config</a>"); | |
33 | exit(); | |
34 | } | |
35 | ||
36 | $language = get_config("lang", "en"); | |
37 | ||
38 | ||
39 | $selected_theme = get_config("theme", "default"); | |
40 | if(!is_theme_dir_ok($theme_dir . $selected_theme)) | |
41 | $selected_theme = "default"; | |
42 | ||
43 | $lpass = get_config('login_pass'); | |
44 | ||
45 | $rw = true; | |
46 | $ro = false; | |
47 | if(isset($_SESSION['logged_in']) && ($_SESSION['logged_in'] == "ro")) { | |
48 | $rw = false; | |
49 | $ro = true; | |
50 | } | |
51 | ||
52 | if(!is_null($lpass)&&$lpass!="") { | |
53 | if(!isset($_SESSION['logged_in'])||!$_SESSION['logged_in'] || ($need_rw && !$rw)) { | |
54 | if(!isset($no_require_login)) { | |
55 | header("Location: login.php"); | |
56 | echo "Wrong password"; | |
57 | exit(); | |
58 | } | |
59 | } | |
60 | } | |
61 | ||
62 | ||
63 | function get_config($name, $default = null) { | |
64 | global $config; | |
65 | if(isset($config->$name)) { | |
66 | if(trim($config->$name)=="") | |
67 | return $default; | |
68 | return ((string)$config->$name); | |
69 | } | |
70 | else { | |
71 | return $default; | |
72 | } | |
73 | } | |
74 | ||
75 | function get_selected_plfields() { | |
76 | global $config, $pl_fields; | |
77 | $plentry = false; | |
78 | if(isset($config->plentry)) | |
79 | $plentry = $config->plentry; | |
80 | $ret = array(); | |
81 | $i = 0; | |
82 | foreach($pl_fields as $field) { | |
83 | if($plentry) { | |
84 | $ret[] = ((string)$plentry->$field)!=""; | |
85 | } | |
86 | else { | |
87 | $ret[] = $i++<3; | |
88 | } | |
89 | } | |
90 | return $ret; | |
91 | } | |
92 | ||
93 | function set_config($name, $value) { | |
94 | ||
95 | } | |
96 | /* if a key is found to be numeric it will be replaced by numb_replace | |
97 | */ | |
98 | function array_to_xml($arr, $xml = null, $numb_replace = "elem") { | |
99 | if(is_null($xml)) { | |
100 | $xml = simplexml_load_string("<?xml version='1.0' ?><root/>"); | |
101 | } | |
102 | foreach($arr as $key => $value) { | |
103 | if(is_numeric($key)) | |
104 | $key = $numb_replace; | |
105 | if(is_array($value)) { | |
106 | $tmp = $xml->addChild($key); | |
107 | array_to_xml($value, $tmp, $numb_replace); | |
108 | } | |
109 | else { | |
110 | $xml->addChild($key, htmlspecialchars($value)); | |
111 | } | |
112 | } | |
113 | return $xml; | |
114 | } | |
115 | ||
116 | function get_mpd($type) { | |
117 | try { | |
118 | $port = 6600; | |
119 | if(is_numeric(get_config("mpd_port"))) | |
120 | $port = (int) get_config("mpd_port"); | |
121 | $ret = Net_MPD::factory($type, get_config('mpd_host'), intval($port), get_config("mpd_pass")); | |
122 | $ret->connect(); | |
123 | return $ret; | |
124 | } | |
125 | catch(PEAR_Exception $e) { | |
126 | return false; | |
127 | } | |
128 | } | |
129 | function get_playlist() { | |
130 | return get_mpd("Playlist"); | |
131 | } | |
132 | function get_playback() { | |
133 | return get_mpd("Playback"); | |
134 | } | |
135 | function get_database() { | |
136 | return get_mpd("Database"); | |
137 | } | |
138 | function get_admin() { | |
139 | return get_mpd("Admin"); | |
140 | } | |
141 | ||
142 | /* mimic behaviour of java System.currentTimeMillis() */ | |
143 | // ex: 1172151695935.8 | |
144 | function current_time_millis() { | |
145 | return microtime(true)*1000; | |
146 | } | |
147 | ||
148 | // returns array with available themes | |
149 | function get_available_themes() { | |
150 | global $theme_dir; | |
151 | $dirs = scandir($theme_dir); | |
152 | $themes = array(); | |
153 | foreach($dirs as $dir) { | |
154 | if($dir=="."||$dir=="..") | |
155 | continue; | |
156 | ||
157 | if(is_theme_dir_ok($theme_dir . $dir)) { | |
158 | $themes[] = $dir; | |
159 | } | |
160 | } | |
161 | return $themes; | |
162 | } | |
163 | ||
164 | function is_theme_dir_ok($tdir) { | |
165 | return is_dir($tdir) && file_exists($tdir . "/theme.css") && file_exists($tdir . "/theme.js"); | |
166 | } | |
167 | ||
168 | function generate_hash($val, $salt = false) { | |
169 | if(function_exists("hash")) { | |
170 | if($salt===false) | |
171 | $salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH); | |
172 | ||
173 | $p = hash("sha256", $val . $salt); | |
174 | return "sha:" . $p . $salt; | |
175 | } | |
176 | else return $val; | |
177 | } | |
178 | function check_hash($proper, $check) { | |
179 | $len = strlen($proper); | |
180 | $nhash = generate_hash($check, substr($proper, $len-SALT_LENGTH)); | |
181 | if($proper==$nhash) { | |
182 | return true; | |
183 | } | |
184 | return false; | |
185 | } | |
186 | ||
187 | /* someone find me a php equiv */ | |
188 | function str_byte_count($data) { | |
189 | if(function_exists("mb_strlen")) { | |
190 | /* count bytes, not characters if utf-8, | |
191 | * I imagine this works, but hard to actually test */ | |
192 | return mb_strlen($data, "ascii"); | |
193 | } | |
194 | else { | |
195 | return strlen($data); | |
196 | } | |
197 | } | |
198 | ?> |