3 Pitchfork Music Player Daemon Client
4 Copyright (C) 2007 Roger Bystrøm
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.
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.
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.
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'";
28 function return_bytes($val) {
30 $last = strtolower($val{strlen($val)-1});
32 // The 'G' modifier is available since PHP 5.1.0
47 require_once("../inc/base.php");
48 require_once("../lang/master.php");
50 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
53 <meta name="robots" content="noindex,nofollow" />
54 <style type="text/css">
56 font: 12.4px/160% sans-serif;
59 border: 1px solid #e2e2e2;
60 background-color: #f7f7f7;
65 border: 1px solid #a20000;
66 background-color: #ffcccc;
70 border: 1px solid #877E6E;
71 background-color: #DEE7F7;
73 padding: 0px 5px 0px 5px;
83 <script type='text/javascript'>
85 function toggle_showing_plentries() {
89 while(e = document.getElementById('ple_' + i)) {
90 e.style.display = showing?"":"none";
93 var t = document.getElementById('plentry_show');
94 t.innerHTML = showing?" Hide nonstandard [~]":" Show nonstandard [+]";
97 <title><?php echo m("Pitchfork MPD Client Configuration"); ?></title>
101 $new_config = $config?false:true;
103 $config = simplexml_load_string("<?xml version='1.0' ?>\n<root>\n</root>\n");
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) {
110 if(isset($_POST[$var])&&trim($_POST[$var])!="")
111 $add = trim($_POST[$var]);
113 if($var=="pagination") {
114 if(!is_numeric($add))
116 else $add = intval($add);
118 else if($var=="login_pass"&&strlen($add)>0) {
121 $add = generate_hash($add);
125 if(isset($config->$var)) {
126 $config->$var = $add;
129 $config->addChild($var, $add);
134 if(isset($config->plentry))
135 $plentry = $config->plentry;
137 $plentry = $config->addChild("plentry");
139 foreach($pl_fields as $field) {
140 $val = isset($_POST['plentry_' . $field])?"yes":"";
141 $plentry->$field = $val;
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>";
151 echo "<p class='error'>Could not save your configuration, check that config/config.xml is writeable</p>\n";
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.");
166 <div class='main_container' id='main_container'>
168 <h1>Pitchfork configuration</h1>
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>";
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>
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>
186 <h2><?php echo m("User interface");?></h2>
187 <p><?php echo m("Some other settings!");?><br/></p>
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
194 $pass = get_config('login_pass', '');
195 if(substr($pass,0, 4)=="sha:") {
199 echo htmlspecialchars($pass);
202 ?>' name='login_pass' /></td></tr>
203 <tr><td><?php echo m("Theme:");?> </td>
205 <select name='theme'>
207 $themes = get_available_themes();
208 $ctheme = get_config("theme", "default");
209 foreach($themes as $theme) {
210 echo "\n<option value='$theme' ";
212 echo "selected='selected' ";
213 echo ">$theme</option>";
220 <tr><td><?php echo m("Language:");?> </td><td>
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'";
229 echo " selected='selected' ";
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' />
239 <tr><td><?php echo m("Pagination:");?></td><td><input name='pagination' type='text' value="<?php echo get_config("pagination", 0); ?>"
240 title="<?php echo m("Maximum number of entries pr. page. Set to 0 to disable.");?>" size="5" /></td></tr>
241 <tr><td> </td><td> </td></tr>
242 <tr><td colspan="2"><?php echo m("Show these fields in the playlist:");?> </td></tr>
243 <tr><td> </td><td><input type='checkbox' disabled='disabled' checked='checked' id='tnode_1' /> <label for='tnode_1'>
244 <?php echo m("Position"); ?></label></td></tr>
247 $selected_fields = get_selected_plfields();
248 $length = count($pl_fields);
249 for($i=0; $i<$length;$i++) {
251 echo "<tr><td colspan='2' style='cursor: pointer;' id='plentry_show' onclick='toggle_showing_plentries();'> ";
252 echo m("Show nonstandard") . " [+]</td></tr>";
254 echo "<tr id='ple_$i' ";
256 echo "style='display: none; ' ";
257 echo "><td> </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";
265 <tr><td> </td><td><input type='checkbox' disabled='disabled' checked='checked' id='tnode_2' /> <label for='tnode_2'> Time</label></td></tr>
268 <p><?php echo m("Configuration for retrieving metadata. This requires that the machine pitchfork is running on can access the internet."); ?></p>
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>
272 <h2><?php echo m("Shoutcast integration"); ?></h2>
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")); ?>' />
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" />
282 <?php if(!isset($_GET['new_config'])) { ?>
285 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.
287 <span id='housecleaning_info'></span>
288 <input type='button' value='Housecleaning' onclick='location.href="metadata.php?housecleaning"'/>
292 function 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>";
297 // function_name:fatal (0/1)
298 function test_function($stuff) {
299 $stuff = explode(":", $stuff);
302 echo print_yesno(function_exists($name), $stuff[1]);
309 <h2><?php echo m("Pitchfork info"); ?></h2>
310 <p style='padding: 0px 0px 4px 0px;'>
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;
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;
327 catch(PEAR_Exception $e) {
328 $has_commands = false;
331 echo m("Connect to mpd:"). " ". print_yesno($pl, true) . "<br/>\n";
333 echo m("MPD commands:")." " . print_yesno($has_commands, true) . "<br />\n";
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);
340 <h3><?php echo m("Functions:"); ?></h3>
341 <p style='padding: 0px 0px 4px 0px; '>
344 foreach(array("json_encode:0", "simplexml_load_string:1", "mb_internal_encoding:0") as $f)
346 echo "SimpleXMLaddChild: ";
347 $sxe = array_to_xml(array("test"));
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>";
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.");
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.");