Add support for view-only mode.
[patchfork.git] / inc / base.php
CommitLineData
964dd0bc
JW
1<?php
2if(function_exists("mb_internal_encoding"))
3 mb_internal_encoding("UTF-8");
4define('HASH_PASS', "********");
5define('SALT_LENGTH', 15);
6
7session_start();
8
9/* make sure . is first in include path */
10set_include_path("." . PATH_SEPARATOR . get_include_path());
11require_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
31if(!$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");
40if(!is_theme_dir_ok($theme_dir . $selected_theme))
41 $selected_theme = "default";
42
43$lpass = get_config('login_pass');
44
f8fb3735
JW
45$rw = true;
46$ro = false;
47if(isset($_SESSION['logged_in']) && ($_SESSION['logged_in'] == "ro")) {
48 $rw = false;
49 $ro = true;
50}
51
964dd0bc 52if(!is_null($lpass)&&$lpass!="") {
f8fb3735 53 if(!isset($_SESSION['logged_in'])||!$_SESSION['logged_in'] || ($need_rw && !$rw)) {
964dd0bc
JW
54 if(!isset($no_require_login)) {
55 header("Location: login.php");
56 echo "Wrong password";
57 exit();
58 }
59 }
60}
61
f8fb3735 62
964dd0bc
JW
63function 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
75function 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
93function set_config($name, $value) {
94
95}
96/* if a key is found to be numeric it will be replaced by numb_replace
97*/
98function 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
116function 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}
129function get_playlist() {
130 return get_mpd("Playlist");
131}
132function get_playback() {
133 return get_mpd("Playback");
134}
135function get_database() {
136 return get_mpd("Database");
137}
138function get_admin() {
139 return get_mpd("Admin");
140}
141
142/* mimic behaviour of java System.currentTimeMillis() */
143// ex: 1172151695935.8
144function current_time_millis() {
145 return microtime(true)*1000;
146}
147
148// returns array with available themes
149function 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
164function is_theme_dir_ok($tdir) {
165 return is_dir($tdir) && file_exists($tdir . "/theme.css") && file_exists($tdir . "/theme.js");
166}
167
168function 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}
178function 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 */
188function 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?>
This page took 0.074313 seconds and 5 git commands to generate.