1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-03 09:49:30 +02:00
ampache/lib/preferences.php

545 lines
17 KiB
PHP

<?php
/*
Copyright (c) 2001 - 2007 Ampache.org
All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License v2
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*!
@function get_site_preferences
@discussion gets all of the preferences for this Ampache site
*/
function get_site_preferences() {
$results = array();
$sql = "SELECT preferences.name, preferences.type, user_preference.value, preferences.description FROM preferences,user_preference " .
" WHERE preferences.id=user_preference.preference AND user_preference.user = '-1' ORDER BY `type`,`name`";
$db_results = mysql_query($sql, dbh());
while ($r = mysql_fetch_object($db_results)) {
$results[] = $r;
}
return $results;
} // get_site_preferences
/*!
@function set_site_preferences
@discussion sets the conf() function with the current site preferences from the db
*/
function set_site_preferences() {
$results = array();
$sql = "SELECT preferences.name,user_preference.value FROM preferences,user_preference WHERE user='-1' AND user_preference.preference=preferences.id";
$db_results = mysql_query($sql, dbh());
while ($r = mysql_fetch_object($db_results)) {
$results[$r->name] = $r->value;
} // db results
if (strlen($results['theme_name']) > 0) {
$results['theme_path'] = "/themes/" . $results['theme_name'];
}
conf($results,1);
} // set_site_preferences
/**
* clean_preference_name
* s/_/ /g & upper case first
*/
function clean_preference_name($name) {
$name = str_replace("_"," ",$name);
$name = ucwords($name);
return $name;
} // clean_preference_name
/*
* update_preferences
* grabs the current keys that should be added
* and then runs throught $_REQUEST looking for those
* values and updates them for this user
*/
function update_preferences($pref_id=0) {
$pref_user = new User($pref_id);
/* Get current keys */
$sql = "SELECT `id`,`name`,`type` FROM `preference`";
/* If it isn't the System Account's preferences */
if ($pref_id != '-1') { $sql .= " WHERE `type` != 'system'"; }
$db_results = Dba::query($sql);
// Collect the current possible keys
while ($r = Dba::fetch_assoc($db_results)) {
$results[] = array('id' => $r['id'], 'name' => $r['name'],'type' => $r['type']);
} // end collecting keys
/* Foreach through possible keys and assign them */
foreach ($results as $data) {
/* Get the Value from POST/GET var called $data */
$type = $data['type'];
$name = $data['name'];
$apply_to_all = "check_" . $data['name'];
$id = $data['id'];
$value = Dba::escape(scrub_in($_REQUEST[$name]));
/* Some preferences require some extra checks to be performed */
switch ($name) {
case 'sample_rate':
$value = validate_bitrate($value);
break;
/* MD5 the LastFM & MyStrands so it's not plainTXT */
case 'lastfm_pass':
case 'mystrands_pass':
/* If it's our default blanking thing then don't use it */
if ($value == '******') { unset($_REQUEST[$name]); break; }
$value = md5($value);
break;
default:
break;
}
/* Run the update for this preference only if it's set */
if (isset($_REQUEST[$name])) {
update_preference($pref_id,$name,$id,$value);
}
} // end foreach preferences
} // update_preferences
/**
* update_preference
* This function updates a single preference and is called by the update_preferences function
*/
function update_preference($user_id,$name,$pref_id,$value) {
$apply_check = "check_" . $name;
$level_check = "level_" . $name;
/* First see if they are an administrator and we are applying this to everything */
if ($GLOBALS['user']->has_access(100) AND make_bool($_REQUEST[$apply_check])) {
$sql = "UPDATE `user_preference` SET `value`='$value' WHERE `preference`='$pref_id'";
$db_results = Dba::query($sql);
return true;
}
/* Check and see if they are an admin and the level def is set */
if ($GLOBALS['user']->has_access(100) AND make_bool($_REQUEST[$level_check])) {
update_preference_level($pref_id,$_REQUEST[$level_check]);
}
/* Else make sure that the current users has the right to do this */
if (has_preference_access($name)) {
$sql = "UPDATE `user_preference` SET `value`='$value' WHERE `preference`='$pref_id' AND `user`='$user_id'";
$db_results = Dba::query($sql);
return true;
}
return false;
} // update_preference
/**
* has_preference_access
* makes sure that the user has sufficient
* rights to actually set this preference, handle
* as allow all, deny X
*/
function has_preference_access($name) {
/* If it's a demo they don't get jack */
if (Config::get('demo_mode')) {
return false;
}
$name = Dba::escape($name);
/* Check Against the Database Row */
$sql = "SELECT `level` FROM `preference` " .
"WHERE `name`='$name'";
$db_results = Dba::query($sql);
$data = Dba::fetch_assoc($db_results);
if ($GLOBALS['user']->has_access($data['level'])) {
return true;
}
return false;
} //has_preference_access
/**
* create_preference_input
* takes the key and then creates the correct type of input for updating it
*/
function create_preference_input($name,$value) {
$len = strlen($value);
if ($len <= 1) { $len = 8; }
if (!has_preference_access($name)) {
if ($value == '1') {
echo "Enabled";
}
elseif ($value == '0') {
echo "Disabled";
}
else {
echo $value;
}
return;
} // if we don't have access to it
switch($name) {
case 'display_menu':
case 'download':
case 'quarantine':
case 'upload':
case 'access_list':
case 'lock_songs':
case 'xml_rpc':
case 'force_http_play':
case 'no_symlinks':
case 'use_auth':
case 'access_control':
case 'allow_stream_playback':
case 'allow_democratic_playback':
case 'allow_localplay_playback':
case 'demo_mode':
case 'condPL':
case 'rio_track_stats':
case 'rio_global_stats':
case 'embed_xspf':
case 'direct_link':
if ($value == '1') { $is_true = "selected=\"selected\""; }
else { $is_false = "selected=\"selected\""; }
echo "<select name=\"$name\">\n";
echo "\t<option value=\"1\" $is_true>" . _("Enable") . "</option>\n";
echo "\t<option value=\"0\" $is_false>" . _("Disable") . "</option>\n";
echo "</select>\n";
break;
case 'play_type':
if ($value == 'localplay') { $is_local = 'selected="selected"'; }
elseif ($value == 'democratic') { $is_vote = 'selected="selected"'; }
elseif ($value == 'xspf_player') { $is_xspf_player = 'selected="selected"'; }
else { $is_stream = "selected=\"selected\""; }
echo "<select name=\"$name\">\n";
echo "\t<option value=\"\">" . _('None') . "</option>\n";
if (Config::get('allow_stream_playback')) {
echo "\t<option value=\"stream\" $is_stream>" . _('Stream') . "</option>\n";
}
if (Config::get('allow_democratic_playback')) {
echo "\t<option value=\"democratic\" $is_vote>" . _('Democratic') . "</option>\n";
}
if (Config::get('allow_localplay_playback')) {
echo "\t<option value=\"localplay\" $is_local>" . _('Localplay') . "</option>\n";
}
echo "\t<option value=\"xspf_player\" $is_xspf_player>" . _('Flash Player') . "</option>\n";
echo "</select>\n";
break;
case 'playlist_type':
$var_name = $value . "_type";
${$var_name} = "selected=\"selected\"";
echo "<select name=\"$name\">\n";
echo "\t<option value=\"m3u\" $m3u_type>" . _('M3U') . "</option>\n";
echo "\t<option value=\"simple_m3u\" $simple_m3u_type>" . _('Simple M3U') . "</option>\n";
echo "\t<option value=\"pls\" $pls_type>" . _('PLS') . "</option>\n";
echo "\t<option value=\"asx\" $asx_type>" . _('Asx') . "</option>\n";
echo "\t<option value=\"ram\" $ram_type>" . _('RAM') . "</option>\n";
echo "\t<option value=\"xspf\" $xspf_type>" . _('XSPF') . "</option>\n";
echo "</select>\n";
break;
case 'lang':
$languages = get_languages();
$var_name = $value . "_lang";
${$var_name} = "selected=\"selected\"";
echo "<select name=\"$name\">\n";
foreach ($languages as $lang=>$name) {
$var_name = $lang . "_lang";
echo "\t<option value=\"$lang\" " . ${$var_name} . ">$name</option>\n";
} // end foreach
echo "</select>\n";
break;
case 'localplay_controller':
$controllers = get_localplay_controllers();
echo "<select name=\"$name\">\n";
foreach ($controllers as $controller) {
$is_selected = '';
if ($value == $controller) { $is_selected = 'selected="selected"'; }
echo "\t<option value=\"" . $controller . "\" $is_selected>" . ucfirst($controller) . "</option>\n";
} // end foreach
echo "\t<option value=\"\">" . _('None') . "</option>\n";
echo "</select>\n";
break;
case 'localplay_level':
if ($value == '2') { $is_full = 'selected="selected"'; }
elseif ($value == '1') { $is_global = 'selected="selected"'; }
echo "<select name=\"$name\">\n";
echo "<option value=\"0\">" . _('Disabled') . "</option>\n";
echo "<option value=\"1\" $is_global>" . _('Global') . "</option>\n";
echo "<option value=\"2\" $is_full>" . _('Local') . "</option>\n";
echo "</select>\n";
break;
case 'theme_name':
$themes = get_themes();
echo "<select name=\"$name\">\n";
foreach ($themes as $theme) {
$is_selected = "";
if ($value == $theme['path']) { $is_selected = "selected=\"selected\""; }
echo "\t<option value=\"" . $theme['path'] . "\" $is_selected>" . $theme['name'] . "</option>\n";
} // foreach themes
echo "</select>\n";
break;
case 'random_method':
echo "<select name=\"$name\">\n";
echo "\t<option value=\"default\">" . _('Pure Random') . "</option>";
echo "\t<option value=\"album\">" . _('Related Album') . "</option>";
echo "\t<option value=\"genre\">" . _('Related Genre') . "</option>";
echo "</select>\n";
break;
case 'mystrands_pass':
case 'lastfm_pass':
echo "<input type=\"password\" size=\"16\" name=\"$name\" value=\"******\" />";
break;
case 'playlist_add':
echo "<select name=\"$name\">\n";
echo "\t<option value=\"append\">" . _('Append to Existing') . "</option>\n";
echo "\t<option value=\"default\">" . _('Default') . "</option>\n";
echo "</select>\n";
break;
case 'playlist_method':
${$value} = ' selected="selected"';
echo "<select name=\"$name\">\n";
echo "\t<option value=\"send\"$send>" . _('Send on Add') . "</option>\n";
echo "\t<option value=\"send_clear\"$send_clear>" . _('Send and Clear') . "</option>\n";
echo "\t<option value=\"default\"$default>" . _('Default') . "</option>\n";
echo "</select>\n";
break;
case 'transcode':
${$value} = ' selected="selected"';
echo "<select name=\"$name\">\n";
echo "\t<option value=\"never\"$never>" . _('Never') . "</option>\n";
echo "\t<option value=\"default\"$default>" . _('Default') . "</option>\n";
echo "\t<option value=\"always\"$always>" . _('Always') . "</option>\n";
echo "</select>\n";
break;
default:
echo "<input type=\"text\" size=\"$len\" name=\"$name\" value=\"$value\" />";
break;
}
} // create_preference_input
/**
* get_preference_id
* This takes the name of a preference and returns it's id this is usefull for calling
* the user classes update_preference function
* @package Preferences
* @catagory Get
*/
function get_preference_id($name) {
$sql = "SELECT `id` FROM `preference` WHERE `name`='" . Dba::escape($name) . "'";
$db_results =Dba::query($sql);
$results = Dba::fetch_assoc($db_results);
return $results['id'];
} // get_preference_id
/**
* get_preference_name
* This does the inverse of the above function and returns the preference name from the ID
* This is usefull for doing... the opposite of above. Amazing isn't it.
*/
function get_preference_name($id) {
$id = sql_escape($id);
$sql = "SELECT name FROM preferences WHERE id='$id'";
$db_results = mysql_query($sql,dbh());
$results = mysql_fetch_assoc($db_results);
return $results['name'];
} // get_preference_name
/**
* insert_preference
* This creates a new preference record in the
* preferences table this is used by the modules
*/
function insert_preference($name,$description,$default,$level,$type,$catagory) {
/* Clean the incomming variables */
$name = sql_escape($name);
$description = sql_escape($description);
$default = sql_escape($default);
$level = sql_escape($level);
$type = sql_escape($type);
$catagory = sql_escape($catagory);
/* Form the sql statement */
$sql = "INSERT INTO preferences (`name`,`description`,`value`,`type`,`level`,`catagory`) VALUES " .
" ('$name','$description','$default','$type','$level','$catagory')";
$db_results = mysql_query($sql, dbh());
if ($db_results) { return true; }
return false;
} // insert_preference
/**
* init_preferences
* Third times the charm, why rename a function once when you can do it three times :(
* This grabs the preferences and then loads them into conf it should be run on page load
* to initialize the needed variables
*/
function init_preferences() {
/* Get Global Preferences */
$sql = "SELECT preference.name,user_preference.value FROM preference,user_preference WHERE user_preference.user='-1' " .
" AND user_preference.preference = preference.id AND preference.catagory='system'";
$db_results = Dba::query($sql);
while ($r = Dba::fetch_assoc($db_results)) {
$name = $r['name'];
$results[$name] = $r['value'];
} // end while sys prefs
/* Now we need to allow the user to override some stuff that's been set by the above */
$user_id = '-1';
if ($GLOBALS['user']->username) {
$user_id = Dba::escape($GLOBALS['user']->id);
}
$sql = "SELECT preference.name,user_preference.value FROM preference,user_preference WHERE user_preference.user='$user_id' " .
" AND user_preference.preference = preference.id AND preference.catagory != 'system'";
$db_results = Dba::query($sql);
while ($r = Dba::fetch_assoc($db_results)) {
$name = $r['name'];
$results[$name] = $r['value'];
} // end while
/* Set the Theme mojo */
if (strlen($results['theme_name']) > 0) {
$results['theme_path'] = '/themes/' . $results['theme_name'];
}
// Default to the classic theme if we don't get anything from their
// preferenecs because we're going to want at least something otherwise
// the page is going to be really ugly
else {
$results['theme_path'] = '/themes/classic';
}
Config::set_by_array($results,1);
} // init_preferences
/**
* show_import_playlist
* This just shows the template for importing playlists
* from something outside Ampache such as a m3u
*/
function show_import_playlist() {
require_once(conf('prefix') . '/templates/show_import_playlist.inc.php');
} // show_import_playlist
/**
* get_preferences
* This returns an array of all current preferences in the
* preferences table, this isn't a users preferences
*/
function get_preferences() {
$sql = "SELECT * FROM preferences";
$db_results = mysql_query($sql, dbh());
$results = array();
while ($r = mysql_fetch_assoc($db_results)) {
$results[] = $r;
}
return $results;
} // get_preferences
/**
* update_preference_level
* This function updates the level field in the preferences table
* this has nothing to do with a users actuall preferences
*/
function update_preference_level($pref_id,$level) {
$name = Dba::escape($pref_id);
$level = Dba::escape($level);
$sql = "UPDATE `preference` SET `level`='$level' WHERE `id`='$pref_id'";
$db_results = Dba::query($sql);
return true;
} // update_preference_level
/**
* fix_preferences
* This takes the preferences, explodes what needs to
* become an array and boolean everythings
*/
function fix_preferences($results) {
$results['auth_methods'] = explode(",",$results['auth_methods']);
$results['tag_order'] = explode(",",$results['tag_order']);
$results['album_art_order'] = explode(",",$results['album_art_order']);
$results['amazon_base_urls'] = explode(",",$results['amazon_base_urls']);
foreach ($results as $key=>$data) {
if (strcasecmp($data,"true") == "0") { $results[$key] = 1; }
if (strcasecmp($data,"false") == "0") { $results[$key] = 0; }
}
return $results;
} // fix_preferences
?>