initial import from pitchfork-0.5.5
[patchfork.git] / player / config.php
CommitLineData
964dd0bc
JW
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?>
50<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
51<html>
52<head>
53<meta name="robots" content="noindex,nofollow" />
54<style type="text/css">
55 body {
56 font: 12.4px/160% sans-serif;
57 }
58 .main_container {
59 border: 1px solid #e2e2e2;
60 background-color: #f7f7f7;
61 padding-left: 8px;
62 padding-bottom: 10px;
63 }
64 .red-box {
65 border: 1px solid #a20000;
66 background-color: #ffcccc;
67 padding-left: 5px;
68 }
69 #pinfo {
70 border: 1px solid #877E6E;
71 background-color: #DEE7F7;
72 background: #f1f1f1;
73 padding: 0px 5px 0px 5px;
74 position: absolute;
75 top: 30px;
76 right: 20px;
77 }
78 select, input {
79 font-size: 0.90em;
80 line-height: 1em;
81 }
82</style>
83<script type='text/javascript'>
84 var showing = false;
85 function toggle_showing_plentries() {
86 var e = null;
87 var i =3;
88 showing = !showing;
89 while(e = document.getElementById('ple_' + i)) {
90 e.style.display = showing?"":"none";
91 i++;
92 }
93 var t = document.getElementById('plentry_show');
94 t.innerHTML = showing?"&nbsp;&nbsp;Hide nonstandard [~]":"&nbsp;&nbsp;Show nonstandard [+]";
95 }
96</script>
97<title><?php echo m("Pitchfork MPD Client Configuration"); ?></title>
98</head>
99<body>
100<?php
101 $new_config = $config?false:true;
102 if(!$config) {
103 $config = simplexml_load_string("<?xml version='1.0' ?>\n<root>\n</root>\n");
104 }
105 if(isset($_POST['submit'])) {
106 $vars = array( 'mpd_host', 'mpd_port', 'mpd_pass', 'login_pass', 'update_delay',
107 'metadata_disable', 'theme', 'stop_button', 'shout_url', 'pagination', 'lang');
108 foreach ($vars as $var) {
109 $add = "";
110 if(isset($_POST[$var])&&trim($_POST[$var])!="")
111 $add = trim($_POST[$var]);
112
113 if($var=="pagination") {
114 if(!is_numeric($add))
115 $add = 0;
116 else $add = intval($add);
117 }
118 else if($var=="login_pass"&&strlen($add)>0) {
119 if($add== HASH_PASS)
120 continue;
121 $add = generate_hash($add);
122 }
123
124
125 if(isset($config->$var)) {
126 $config->$var = $add;
127 }
128 else {
129 $config->addChild($var, $add);
130 }
131 }
132
133 $plentry = null;
134 if(isset($config->plentry))
135 $plentry = $config->plentry;
136 else
137 $plentry = $config->addChild("plentry");
138
139 foreach($pl_fields as $field) {
140 $val = isset($_POST['plentry_' . $field])?"yes":"";
141 $plentry->$field = $val;
142 }
143
144 // need to save config!
145 if($config->asXML("../config/config.xml")) {
146 header("Location: index.php");
147 echo "<p>If you're not redirected, go here: <a href='index.php'>player</a></p>";
148 exit();
149 }
150 else {
151 echo "<p class='error'>Could not save your configuration, check that config/config.xml is writeable</p>\n";
152 }
153 }
154
155 if(!is_writeable("../config")) {
156 echo "<p class='red-box'>";
157 echo m("Warning: Your config/ directory is not writeable! Please change owner of directory to apache user.");
158 echo "</p>\n";
159 }
160 @ob_end_flush();
161
162?>
163
164
165
166<div class='main_container' id='main_container'>
167
168<h1>Pitchfork configuration</h1>
169
170<?php if(isset($_GET['new_config']))
171 echo "<p>" . m("Let us take a minute to configure this player") . "</p>\n";
172 else echo "<p>" . m("Configure settings") . "</p>";
173?>
174<form action="config.php<?php echo $new_config?'?new_config':''; ?>" method="post">
175<h2><?php echo m("Connection-settings"); ?> </h2>
176<p><?php echo m("Where can I find your MPD-server?"); ?></p>
177<table>
178<tr><td><?php echo m("Hostname:"); ?> </td>
179<td><input type='text' value='<?php echo htmlspecialchars(get_config('mpd_host', 'localhost')) ?>' name='mpd_host' /></td></tr>
180<tr><td><?php echo m("Port:");?>
181</td><td><input type='text' value='<?php echo htmlspecialchars(get_config('mpd_port', '6600')) ?>' name='mpd_port' /></td></tr>
182<tr><td><?php echo m("Password:");?>
183</td><td><input type='password' value='<?php echo htmlspecialchars(get_config('mpd_pass', '')) ?>' name='mpd_pass' /></td></tr>
184
185</table>
186<h2><?php echo m("User interface");?></h2>
187<p><?php echo m("Some other settings!");?><br/></p>
188<table>
189<tr><td><?php echo m("Update time:"); ?>
190</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>
191 <tr><td><?php echo m("Login password (optional):");?>
192 </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
193
194 $pass = get_config('login_pass', '');
195 if(substr($pass,0, 4)=="sha:") {
196 echo HASH_PASS;
197 }
198 else {
199 echo htmlspecialchars($pass);
200 }
201
202?>' name='login_pass' /></td></tr>
203<tr><td><?php echo m("Theme:");?> </td>
204<td>
205<select name='theme'>
206<?php
207$themes = get_available_themes();
208$ctheme = get_config("theme", "default");
209foreach($themes as $theme) {
210 echo "\n<option value='$theme' ";
211 if($theme==$ctheme)
212 echo "selected='selected' ";
213 echo ">$theme</option>";
214}
215
216?>
217</select>
218</td>
219</tr>
220<tr><td><?php echo m("Language:");?> </td><td>
221<select name="lang">
222<?php
223 // TODO: move
224 $languages = array("eu" => "Basque", "en" => "English", "fr" => "French", "de" => "German");
225 $clang = get_config("lang", "en");
226 foreach($languages as $l => $n) {
227 echo "\n<option value='$l'";
228 if($l==$clang)
229 echo " selected='selected' ";
230 echo ">$n</option>";
231 }
232?>
233</select>
234</td></tr>
235
236<tr><td><?php echo m("Include stop button:");?></td><td>
237<input type='checkbox' <?php if(!is_null(get_config("stop_button"))) echo "checked='checked'"; ?> name='stop_button' value='yesplease' />
238</td></tr>
239<tr><td><?php echo m("Pagination:");?></td><td><input name='pagination' type='text' value="<?php echo get_config("pagination", 0); ?>"
240title="<?php echo m("Maximum number of entries pr. page. Set to 0 to disable.");?>" size="5" /></td></tr>
241<tr><td>&nbsp; </td><td> </td></tr>
242<tr><td colspan="2"><?php echo m("Show these fields in the playlist:");?> </td></tr>
243<tr><td>&nbsp;</td><td><input type='checkbox' disabled='disabled' checked='checked' id='tnode_1' /> <label for='tnode_1'>
244<?php echo m("Position"); ?></label></td></tr>
245<?php
246
247$selected_fields = get_selected_plfields();
248$length = count($pl_fields);
249for($i=0; $i<$length;$i++) {
250 if($i==3) {
251 echo "<tr><td colspan='2' style='cursor: pointer;' id='plentry_show' onclick='toggle_showing_plentries();'>&nbsp;&nbsp;";
252 echo m("Show nonstandard") . " [+]</td></tr>";
253 }
254 echo "<tr id='ple_$i' ";
255 if($i>=3)
256 echo "style='display: none; ' ";
257 echo "><td>&nbsp;</td><td>";
258 echo "<input type='checkbox' ";
259 if($selected_fields[$i])
260 echo "checked='checked' ";
261 echo "name='plentry_".$pl_fields[$i]."' id='pl_i_$i' /> <label for='pl_i_$i'>".$pl_fields[$i]."</label></td></tr>\n";
262}
263
264?>
265<tr><td>&nbsp;</td><td><input type='checkbox' disabled='disabled' checked='checked' id='tnode_2' /> <label for='tnode_2'> Time</label></td></tr>
266</table>
267<h2>Metadata</h2>
268<p><?php echo m("Configuration for retrieving metadata. This requires that the machine pitchfork is running on can access the internet."); ?></p>
269<table>
270<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>
271</table>
272<h2><?php echo m("Shoutcast integration"); ?></h2>
273<p>
274<?php echo m("Optionally specify the URL to the shout stream provided by mpd to enable integration with pitchfork.");?> <br/>
275<input size="35" type='text' name='shout_url' value='<?php if(!is_null(get_config("shout_url"))) echo htmlspecialchars(get_config("shout_url")); ?>' />
276</p>
277<p style='padding: 12px 0px 12px 00px;'>
278<input name='cancel' type='button' value='Cancel' onclick='window.location = "index.php" ' />
279<input name='submit' type="submit" value="Save" />
280</p>
281</form>
282<?php if(!isset($_GET['new_config'])) { ?>
283<hr/>
284<p>
285For 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.
286<br/>
287<span id='housecleaning_info'></span>
288<input type='button' value='Housecleaning' onclick='location.href="metadata.php?housecleaning"'/>
289</p>
290<?php }
291
292function print_yesno($test, $fatal) {
293 if($test) return "<span style='color: green;'>" . m("Yes") . "</span>";
294 else return "<span style='color: " . ($fatal?"red":"orange") . ";'>" . m("No") . "</span>";
295}
296
297// function_name:fatal (0/1)
298function test_function($stuff) {
299 $stuff = explode(":", $stuff);
300 $name = $stuff[0];
301 echo $name . ": ";
302 echo print_yesno(function_exists($name), $stuff[1]);
303 echo "<br/>\n";
304}
305
306?>
307
308<div id='pinfo'>
309<h2><?php echo m("Pitchfork info"); ?></h2>
310<p style='padding: 0px 0px 4px 0px;'>
311<?php
312 echo m("Release version:") . " $release_version<br/>\n";
313 echo m("Release date:") . " $release_date<br/><br/>\n";
314 $pl = get_playback();
315 $has_commands = true;
316 try {
317 if($pl) {
318 $commands = $pl->getCommands();
319 /* these are just some of the needed commands */
320 $needed = array("outputs", "disableoutput", "enableoutput", "plchangesposid");
321 $res = array_intersect($needed, $commands);
322 if(count($res)!=count($needed))
323 $has_commands = false;
324 $pl->disconnect();
325 }
326 }
327 catch(PEAR_Exception $e) {
328 $has_commands = false;
329 }
330
331 echo m("Connect to mpd:"). " ". print_yesno($pl, true) . "<br/>\n";
332 if($pl) {
333 echo m("MPD commands:")." " . print_yesno($has_commands, true) . "<br />\n";
334 }
335 echo m("Metadata directory:"). " " . print_yesno((file_exists($metadata_dir)&&is_writeable($metadata_dir))
336 ||(!file_exists($metadata_dir)&&is_writeable($config_dir)), true);
337?>
338</p>
339
340<h3><?php echo m("Functions:"); ?></h3>
341<p style='padding: 0px 0px 4px 0px; '>
342<?php
343 // name:fatal
344 foreach(array("json_encode:0", "simplexml_load_string:1", "mb_internal_encoding:0") as $f)
345 test_function($f);
346 echo "SimpleXMLaddChild: ";
347 $sxe = array_to_xml(array("test"));
348 if($sxe)
349 echo print_yesno(is_callable(array($sxe, "addChild"), true), true) . "<br/>";
350 else echo "<span class='color: red'>error</span>\n";
351 $mem = ceil(return_bytes(ini_get("memory_limit"))/(1024*1024));
352 echo m("PHP memory limit:") . " <span style='color: " . ($mem<32?"orange":"green") . "'>" . $mem . "MB</span>";
353
354?>
355</p>
356<?php
357 if(get_magic_quotes_runtime()) {
358 echo "<p style='color: orange'>";
359 echo m("Warning: Magic quotes runtime is on, <br/>please use pitchfork.conf or turn<br/> of manually.");
360 echo "</p>\n";
361 }
362 if(get_magic_quotes_gpc()) {
363 echo "<p style='color: orange'>";
364 echo m("Warning: Magic quotes gpc is on, <br/>please use pitchfork.conf or turn<br/> of manually.");
365 echo "</p>\n";
366 }
367
368?>
369</div>
370
371</div>
372
373</body>
374</html>
This page took 0.050242 seconds and 4 git commands to generate.