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 "\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 "\n";
break;
case 'playlist_type':
$var_name = $value . "_type";
${$var_name} = "selected=\"selected\"";
echo "\n";
break;
case 'lang':
$languages = get_languages();
$var_name = $value . "_lang";
${$var_name} = "selected=\"selected\"";
echo "\n";
break;
case 'localplay_controller':
$controllers = Localplay::get_controllers();
echo "\n";
break;
case 'localplay_level':
if ($value == '2') { $is_full = 'selected="selected"'; }
elseif ($value == '1') { $is_global = 'selected="selected"'; }
echo "\n";
break;
case 'theme_name':
$themes = get_themes();
echo "\n";
break;
case 'mystrands_pass':
case 'lastfm_pass':
echo "";
break;
case 'playlist_method':
${$value} = ' selected="selected"';
echo "\n";
break;
case 'transcode':
${$value} = ' selected="selected"';
echo "\n";
break;
default:
echo "";
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
?>