]>
Commit | Line | Data |
---|---|---|
1 | <?php | |
2 | /* | |
3 | Pitchfork Music Player Daemon Client | |
4 | Copyright (C) 2007 Roger Bystrøm | |
5 | ||
6 | This program is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; version 2 of the License. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU General Public License along | |
16 | with this program; if not, write to the Free Software Foundation, Inc., | |
17 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 | */ | |
19 | require_once("../inc/function_test.php"); | |
20 | function get_checkbox_from_config($name) { | |
21 | $var = get_config($name); | |
22 | if(!is_null($var)&&strlen($var)) { | |
23 | return "checked='checked'"; | |
24 | } | |
25 | return ""; | |
26 | } | |
27 | ||
28 | function return_bytes($val) { | |
29 | $val = trim($val); | |
30 | $last = strtolower($val{strlen($val)-1}); | |
31 | switch($last) { | |
32 | // The 'G' modifier is available since PHP 5.1.0 | |
33 | case 'g': | |
34 | $val *= 1024; | |
35 | case 'm': | |
36 | $val *= 1024; | |
37 | case 'k': | |
38 | $val *= 1024; | |
39 | } | |
40 | ||
41 | return $val; | |
42 | } | |
43 | ||
44 | ||
45 | $title = ""; | |
46 | @ob_start(); | |
47 | require_once("../inc/base.php"); | |
48 | require_once("../lang/master.php"); | |
49 | header("Content-Type: text/html; charset=UTF-8"); | |
50 | ?> | |
51 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | |
52 | <html> | |
53 | <head> | |
54 | <meta name="robots" content="noindex,nofollow" /> | |
55 | <style type="text/css"> | |
56 | body { | |
57 | font: 12.4px/160% sans-serif; | |
58 | } | |
59 | .main_container { | |
60 | border: 1px solid #e2e2e2; | |
61 | background-color: #f7f7f7; | |
62 | padding-left: 8px; | |
63 | padding-bottom: 10px; | |
64 | } | |
65 | .red-box { | |
66 | border: 1px solid #a20000; | |
67 | background-color: #ffcccc; | |
68 | padding-left: 5px; | |
69 | } | |
70 | #pinfo { | |
71 | border: 1px solid #877E6E; | |
72 | background-color: #DEE7F7; | |
73 | background: #f1f1f1; | |
74 | padding: 0px 5px 0px 5px; | |
75 | position: absolute; | |
76 | top: 30px; | |
77 | right: 20px; | |
78 | } | |
79 | select, input { | |
80 | font-size: 0.90em; | |
81 | line-height: 1em; | |
82 | } | |
83 | </style> | |
84 | <script type='text/javascript'> | |
85 | var showing = false; | |
86 | function toggle_showing_plentries() { | |
87 | var e = null; | |
88 | var i =3; | |
89 | showing = !showing; | |
90 | while(e = document.getElementById('ple_' + i)) { | |
91 | e.style.display = showing?"":"none"; | |
92 | i++; | |
93 | } | |
94 | var t = document.getElementById('plentry_show'); | |
95 | t.innerHTML = showing?" Hide nonstandard [~]":" Show nonstandard [+]"; | |
96 | } | |
97 | </script> | |
98 | <title><?php echo m("Pitchfork MPD Client Configuration"); ?></title> | |
99 | </head> | |
100 | <body> | |
101 | <?php | |
102 | $new_config = $config?false:true; | |
103 | if(!$config) { | |
104 | $config = simplexml_load_string("<?xml version='1.0' ?>\n<root>\n</root>\n"); | |
105 | } | |
106 | if(isset($_POST['submit'])) { | |
107 | $vars = array( 'mpd_host', 'mpd_port', 'mpd_pass', 'login_pass', 'update_delay', | |
108 | 'metadata_disable', 'theme', 'stop_button', 'shout_url', 'pagination', 'lang', | |
109 | 'aws_keyid', 'aws_secret'); | |
110 | foreach ($vars as $var) { | |
111 | $add = ""; | |
112 | if(isset($_POST[$var])&&trim($_POST[$var])!="") | |
113 | $add = trim($_POST[$var]); | |
114 | ||
115 | if($var=="pagination") { | |
116 | if(!is_numeric($add)) | |
117 | $add = 0; | |
118 | else $add = intval($add); | |
119 | } | |
120 | else if($var=="login_pass"&&strlen($add)>0) { | |
121 | if($add== HASH_PASS) | |
122 | continue; | |
123 | $add = generate_hash($add); | |
124 | } | |
125 | else if ($var=='aws_secret') { | |
126 | if ($add == HASH_PASS) | |
127 | continue; | |
128 | } | |
129 | ||
130 | ||
131 | if(isset($config->$var)) { | |
132 | $config->$var = $add; | |
133 | } | |
134 | else { | |
135 | $config->addChild($var, $add); | |
136 | } | |
137 | } | |
138 | ||
139 | $plentry = null; | |
140 | if(isset($config->plentry)) | |
141 | $plentry = $config->plentry; | |
142 | else | |
143 | $plentry = $config->addChild("plentry"); | |
144 | ||
145 | foreach($pl_fields as $field) { | |
146 | $val = isset($_POST['plentry_' . $field])?"yes":""; | |
147 | $plentry->$field = $val; | |
148 | } | |
149 | ||
150 | // need to save config! | |
151 | if($config->asXML("../config/config.xml")) { | |
152 | header("Location: index.php"); | |
153 | echo "<p>If you're not redirected, go here: <a href='index.php'>player</a></p>"; | |
154 | exit(); | |
155 | } | |
156 | else { | |
157 | echo "<p class='error'>Could not save your configuration, check that config/config.xml is writeable</p>\n"; | |
158 | } | |
159 | } | |
160 | ||
161 | if(!is_writeable("../config")) { | |
162 | echo "<p class='red-box'>"; | |
163 | echo m("Warning: Your config/ directory is not writeable! Please change owner of directory to apache user."); | |
164 | echo "</p>\n"; | |
165 | } | |
166 | @ob_end_flush(); | |
167 | ||
168 | ?> | |
169 | ||
170 | ||
171 | ||
172 | <div class='main_container' id='main_container'> | |
173 | ||
174 | <h1>Pitchfork configuration</h1> | |
175 | ||
176 | <?php if(isset($_GET['new_config'])) | |
177 | echo "<p>" . m("Let us take a minute to configure this player") . "</p>\n"; | |
178 | else echo "<p>" . m("Configure settings") . "</p>"; | |
179 | ?> | |
180 | <form action="config.php<?php echo $new_config?'?new_config':''; ?>" method="post"> | |
181 | <h2><?php echo m("Connection-settings"); ?> </h2> | |
182 | <p><?php echo m("Where can I find your MPD-server?"); ?></p> | |
183 | <table> | |
184 | <tr><td><?php echo m("Hostname:"); ?> </td> | |
185 | <td><input type='text' value='<?php echo htmlspecialchars(get_config('mpd_host', 'localhost')) ?>' name='mpd_host' /></td></tr> | |
186 | <tr><td><?php echo m("Port:");?> | |
187 | </td><td><input type='text' value='<?php echo htmlspecialchars(get_config('mpd_port', '6600')) ?>' name='mpd_port' /></td></tr> | |
188 | <tr><td><?php echo m("Password:");?> | |
189 | </td><td><input type='password' value='<?php echo htmlspecialchars(get_config('mpd_pass', '')) ?>' name='mpd_pass' /></td></tr> | |
190 | ||
191 | </table> | |
192 | <h2><?php echo m("User interface");?></h2> | |
193 | <p><?php echo m("Some other settings!");?><br/></p> | |
194 | <table> | |
195 | <tr><td><?php echo m("Update time:"); ?> | |
196 | </td><td><input type='text' title='<?php echo m("How often we should request updates from the server");?>' value='<?php echo htmlspecialchars(get_config('update_delay', '1')) ?>' name='update_delay' /></td></tr> | |
197 | <tr><td><?php echo m("Login password (optional):");?> | |
198 | </td><td><input type='password' title='<?php echo m("If you want to require a password to see these pages you may specify it here");?>' value='<?php | |
199 | ||
200 | $pass = get_config('login_pass', ''); | |
201 | if(substr($pass,0, 4)=="sha:") { | |
202 | echo HASH_PASS; | |
203 | } | |
204 | else { | |
205 | echo htmlspecialchars($pass); | |
206 | } | |
207 | ||
208 | ?>' name='login_pass' /></td></tr> | |
209 | <tr><td><?php echo m("Theme:");?> </td> | |
210 | <td> | |
211 | <select name='theme'> | |
212 | <?php | |
213 | $themes = get_available_themes(); | |
214 | $ctheme = get_config("theme", "default"); | |
215 | foreach($themes as $theme) { | |
216 | echo "\n<option value='$theme' "; | |
217 | if($theme==$ctheme) | |
218 | echo "selected='selected' "; | |
219 | echo ">$theme</option>"; | |
220 | } | |
221 | ||
222 | ?> | |
223 | </select> | |
224 | </td> | |
225 | </tr> | |
226 | <tr><td><?php echo m("Language:");?> </td><td> | |
227 | <select name="lang"> | |
228 | <?php | |
229 | // TODO: move | |
230 | $languages = array("eu" => "Basque", "en" => "English", "fr" => "French", "de" => "German"); | |
231 | $clang = get_config("lang", "en"); | |
232 | foreach($languages as $l => $n) { | |
233 | echo "\n<option value='$l'"; | |
234 | if($l==$clang) | |
235 | echo " selected='selected' "; | |
236 | echo ">$n</option>"; | |
237 | } | |
238 | ?> | |
239 | </select> | |
240 | </td></tr> | |
241 | ||
242 | <tr><td><?php echo m("Include stop button:");?></td><td> | |
243 | <input type='checkbox' <?php if(!is_null(get_config("stop_button"))) echo "checked='checked'"; ?> name='stop_button' value='yesplease' /> | |
244 | </td></tr> | |
245 | <tr><td><?php echo m("Pagination:");?></td><td><input name='pagination' type='text' value="<?php echo get_config("pagination", 0); ?>" | |
246 | title="<?php echo m("Maximum number of entries pr. page. Set to 0 to disable.");?>" size="5" /></td></tr> | |
247 | <tr><td> </td><td> </td></tr> | |
248 | <tr><td colspan="2"><?php echo m("Show these fields in the playlist:");?> </td></tr> | |
249 | <tr><td> </td><td><input type='checkbox' disabled='disabled' checked='checked' id='tnode_1' /> <label for='tnode_1'> | |
250 | <?php echo m("Position"); ?></label></td></tr> | |
251 | <?php | |
252 | ||
253 | $selected_fields = get_selected_plfields(); | |
254 | $length = count($pl_fields); | |
255 | for($i=0; $i<$length;$i++) { | |
256 | if($i==3) { | |
257 | echo "<tr><td colspan='2' style='cursor: pointer;' id='plentry_show' onclick='toggle_showing_plentries();'> "; | |
258 | echo m("Show nonstandard") . " [+]</td></tr>"; | |
259 | } | |
260 | echo "<tr id='ple_$i' "; | |
261 | if($i>=3) | |
262 | echo "style='display: none; ' "; | |
263 | echo "><td> </td><td>"; | |
264 | echo "<input type='checkbox' "; | |
265 | if($selected_fields[$i]) | |
266 | echo "checked='checked' "; | |
267 | echo "name='plentry_".$pl_fields[$i]."' id='pl_i_$i' /> <label for='pl_i_$i'>".$pl_fields[$i]."</label></td></tr>\n"; | |
268 | } | |
269 | ||
270 | ?> | |
271 | <tr><td> </td><td><input type='checkbox' disabled='disabled' checked='checked' id='tnode_2' /> <label for='tnode_2'> Time</label></td></tr> | |
272 | </table> | |
273 | <h2>Metadata</h2> | |
274 | <p><?php echo m("Configuration for retrieving metadata. This requires that the machine Patchfork is running on can access the internet. ". | |
275 | "In order to use this feature, you must now have an Amazon AWS account; to get one, <a href=\"http://aws.amazon.com\">visit aws.amazon.com</a>. ". | |
276 | "Then, get an <a href=\"https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key\">access key</a>, and fill in the details below."); ?></p> | |
277 | <table> | |
278 | <tr><td><?php echo m("Disable metadata:"); ?> </td><td><input type='checkbox' <?php echo get_checkbox_from_config('metadata_disable') ?> name='metadata_disable' /></td></tr> | |
279 | <tr><td><?php echo m("Amazon Access Key ID:"); ?></td><td><input type='text' width='20' value='<?php echo htmlspecialchars(get_config('aws_keyid', '')) ?>' name='aws_keyid' /></td></tr> | |
280 | <tr><td><?php echo m("Amazon Secret Access Key:"); ?></td><td><input type='password' width='40' value='<? | |
281 | $pass = get_config('aws_secret', ''); | |
282 | if(strlen($pass) != 0) { | |
283 | echo HASH_PASS; | |
284 | } | |
285 | ?>' name='aws_secret' /></td></tr> | |
286 | </table> | |
287 | <h2><?php echo m("Shoutcast integration"); ?></h2> | |
288 | <p> | |
289 | <?php echo m("Optionally specify the URL to the shout stream provided by mpd to enable integration with pitchfork.");?> <br/> | |
290 | <input size="35" type='text' name='shout_url' value='<?php if(!is_null(get_config("shout_url"))) echo htmlspecialchars(get_config("shout_url")); ?>' /> | |
291 | </p> | |
292 | <p style='padding: 12px 0px 12px 00px;'> | |
293 | <input name='cancel' type='button' value='Cancel' onclick='window.location = "index.php" ' /> | |
294 | <input name='submit' type="submit" value="Save" /> | |
295 | </p> | |
296 | </form> | |
297 | <?php if(!isset($_GET['new_config'])) { ?> | |
298 | <hr/> | |
299 | <p> | |
300 | For lyrics search to work in the directory browser file-names has to be saved with the lyrics, however when you move/delete files from your library this file reference become wrong. This button removes any references to such files. | |
301 | <br/> | |
302 | <span id='housecleaning_info'></span> | |
303 | <input type='button' value='Housecleaning' onclick='location.href="metadata.php?housecleaning"'/> | |
304 | </p> | |
305 | <?php } | |
306 | ||
307 | function print_yesno($test, $fatal) { | |
308 | if($test) return "<span style='color: green;'>" . m("Yes") . "</span>"; | |
309 | else return "<span style='color: " . ($fatal?"red":"orange") . ";'>" . m("No") . "</span>"; | |
310 | } | |
311 | ||
312 | // function_name:fatal (0/1) | |
313 | function test_function($stuff) { | |
314 | $stuff = explode(":", $stuff); | |
315 | $name = $stuff[0]; | |
316 | echo $name . ": "; | |
317 | echo print_yesno(function_exists($name), $stuff[1]); | |
318 | echo "<br/>\n"; | |
319 | } | |
320 | ||
321 | ?> | |
322 | ||
323 | <div id='pinfo'> | |
324 | <h2><?php echo m("Pitchfork info"); ?></h2> | |
325 | <p style='padding: 0px 0px 4px 0px;'> | |
326 | <?php | |
327 | echo m("Release version:") . " $release_version<br/>\n"; | |
328 | echo m("Release date:") . " $release_date<br/><br/>\n"; | |
329 | $pl = get_playback(); | |
330 | $has_commands = true; | |
331 | try { | |
332 | if($pl) { | |
333 | $commands = $pl->getCommands(); | |
334 | /* these are just some of the needed commands */ | |
335 | $needed = array("outputs", "disableoutput", "enableoutput", "plchangesposid"); | |
336 | $res = array_intersect($needed, $commands); | |
337 | if(count($res)!=count($needed)) | |
338 | $has_commands = false; | |
339 | $pl->disconnect(); | |
340 | } | |
341 | } | |
342 | catch(PEAR_Exception $e) { | |
343 | $has_commands = false; | |
344 | } | |
345 | ||
346 | echo m("Connect to mpd:"). " ". print_yesno($pl, true) . "<br/>\n"; | |
347 | if($pl) { | |
348 | echo m("MPD commands:")." " . print_yesno($has_commands, true) . "<br />\n"; | |
349 | } | |
350 | echo m("Metadata directory:"). " " . print_yesno((file_exists($metadata_dir)&&is_writeable($metadata_dir)) | |
351 | ||(!file_exists($metadata_dir)&&is_writeable($config_dir)), true); | |
352 | ?> | |
353 | </p> | |
354 | ||
355 | <h3><?php echo m("Functions:"); ?></h3> | |
356 | <p style='padding: 0px 0px 4px 0px; '> | |
357 | <?php | |
358 | // name:fatal | |
359 | foreach(array("json_encode:0", "simplexml_load_string:1", "mb_internal_encoding:0") as $f) | |
360 | test_function($f); | |
361 | echo "SimpleXMLaddChild: "; | |
362 | $sxe = array_to_xml(array("test")); | |
363 | if($sxe) | |
364 | echo print_yesno(is_callable(array($sxe, "addChild"), true), true) . "<br/>"; | |
365 | else echo "<span class='color: red'>error</span>\n"; | |
366 | $mem = ceil(return_bytes(ini_get("memory_limit"))/(1024*1024)); | |
367 | echo m("PHP memory limit:") . " <span style='color: " . ($mem<32?"orange":"green") . "'>" . $mem . "MB</span>"; | |
368 | ||
369 | ?> | |
370 | </p> | |
371 | <?php | |
372 | if(get_magic_quotes_runtime()) { | |
373 | echo "<p style='color: orange'>"; | |
374 | echo m("Warning: Magic quotes runtime is on, <br/>please use pitchfork.conf or turn<br/> of manually."); | |
375 | echo "</p>\n"; | |
376 | } | |
377 | if(get_magic_quotes_gpc()) { | |
378 | echo "<p style='color: orange'>"; | |
379 | echo m("Warning: Magic quotes gpc is on, <br/>please use pitchfork.conf or turn<br/> of manually."); | |
380 | echo "</p>\n"; | |
381 | } | |
382 | ||
383 | ?> | |
384 | </div> | |
385 | ||
386 | </div> | |
387 | ||
388 | </body> | |
389 | </html> |