initial import from pitchfork-0.5.5
[patchfork.git] / player / config.php
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");
209 foreach($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); ?>" 
240 title="<?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);
249 for($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>
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.
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
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>";
295 }
296
297 // function_name:fatal (0/1)
298 function 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.033194 seconds and 4 git commands to generate.