summaryrefslogtreecommitdiffstats
path: root/lib/class/preference.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/class/preference.class.php')
-rw-r--r--lib/class/preference.class.php718
1 files changed, 359 insertions, 359 deletions
diff --git a/lib/class/preference.class.php b/lib/class/preference.class.php
index e342e65a..2515b750 100644
--- a/lib/class/preference.class.php
+++ b/lib/class/preference.class.php
@@ -1,5 +1,5 @@
<?php
-/* vim:set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab: */
+/* vim:set softtabstop=4 shiftwidth=4 expandtab: */
/**
*
* LICENSE: GNU General Public License, version 2 (GPLv2)
@@ -29,419 +29,419 @@
*/
class Preference {
- /**
- * __constructor
- * This does nothing... amazing isn't it!
- */
- private function __construct() {
-
- // Rien a faire
-
- } // __construct
-
- /**
- * update
- * This updates a single preference from the given name or id
- */
- public static function update($preference,$user_id,$value,$applytoall='') {
-
- // First prepare
- if (!is_numeric($preference)) {
- $id = self::id_from_name($preference);
- $name = $preference;
- }
- else {
- $name = self::name_from_id($preference);
- $id = $preference;
- }
- if ($applytoall AND Access::check('interface','100')) {
- $user_check = "";
- }
- else {
- $user_check = " AND `user`='$user_id'";
- }
-
- // Now do
- if (self::has_access($name)) {
- $value = Dba::escape($value);
- $user_id = Dba::escape($user_id);
- $sql = "UPDATE `user_preference` SET `value`='$value' " .
- "WHERE `preference`='$id'$user_check";
- $db_results = Dba::write($sql);
- Preference::clear_from_session();
- return true;
- }
- else {
- debug_event('denied',$GLOBALS['user']->username . ' attempted to update ' . $name . ' but does not have sufficient permissions','3');
- }
+ /**
+ * __constructor
+ * This does nothing... amazing isn't it!
+ */
+ private function __construct() {
+
+ // Rien a faire
+
+ } // __construct
+
+ /**
+ * update
+ * This updates a single preference from the given name or id
+ */
+ public static function update($preference,$user_id,$value,$applytoall='') {
+
+ // First prepare
+ if (!is_numeric($preference)) {
+ $id = self::id_from_name($preference);
+ $name = $preference;
+ }
+ else {
+ $name = self::name_from_id($preference);
+ $id = $preference;
+ }
+ if ($applytoall AND Access::check('interface','100')) {
+ $user_check = "";
+ }
+ else {
+ $user_check = " AND `user`='$user_id'";
+ }
+
+ // Now do
+ if (self::has_access($name)) {
+ $value = Dba::escape($value);
+ $user_id = Dba::escape($user_id);
+ $sql = "UPDATE `user_preference` SET `value`='$value' " .
+ "WHERE `preference`='$id'$user_check";
+ $db_results = Dba::write($sql);
+ Preference::clear_from_session();
+ return true;
+ }
+ else {
+ debug_event('denied',$GLOBALS['user']->username . ' attempted to update ' . $name . ' but does not have sufficient permissions','3');
+ }
- return false;
- } // update
-
- /**
- * update_level
- * This takes a preference ID and updates the level required to update it (performed by an admin)
- */
- public static function update_level($preference,$level) {
-
- // First prepare
- if (!is_numeric($preference)) {
- $preference_id = self::id_from_name($preference);
- }
- else {
- $preference_id = $preference;
- }
+ return false;
+ } // update
+
+ /**
+ * update_level
+ * This takes a preference ID and updates the level required to update it (performed by an admin)
+ */
+ public static function update_level($preference,$level) {
+
+ // First prepare
+ if (!is_numeric($preference)) {
+ $preference_id = self::id_from_name($preference);
+ }
+ else {
+ $preference_id = $preference;
+ }
- $preference_id = Dba::escape($preference_id);
- $level = Dba::escape($level);
+ $preference_id = Dba::escape($preference_id);
+ $level = Dba::escape($level);
- $sql = "UPDATE `preference` SET `level`='$level' WHERE `id`='$preference_id'";
- $db_results = Dba::write($sql);
+ $sql = "UPDATE `preference` SET `level`='$level' WHERE `id`='$preference_id'";
+ $db_results = Dba::write($sql);
- return true;
+ return true;
- } // update_level
+ } // update_level
- /**
- * update_all
- * This takes a preference id and a value and updates all users with the new info
- */
- public static function update_all($preference_id,$value) {
+ /**
+ * update_all
+ * This takes a preference id and a value and updates all users with the new info
+ */
+ public static function update_all($preference_id,$value) {
- $preference_id = Dba::escape($preference_id);
- $value = Dba::escape($value);
+ $preference_id = Dba::escape($preference_id);
+ $value = Dba::escape($value);
- $sql = "UPDATE `user_preference` SET `value`='$value' WHERE `preference`='$preference_id'";
- $db_results = Dba::write($sql);
+ $sql = "UPDATE `user_preference` SET `value`='$value' WHERE `preference`='$preference_id'";
+ $db_results = Dba::write($sql);
- return true;
+ return true;
- } // update_all
+ } // update_all
- /**
- * exists
- * This just checks to see if a preference currently exists
- */
- public static function exists($preference) {
+ /**
+ * exists
+ * This just checks to see if a preference currently exists
+ */
+ public static function exists($preference) {
- // We assume it's the name
- $name = Dba::escape($preference);
- $sql = "SELECT * FROM `preference` WHERE `name`='$name'";
- $db_results = Dba::read($sql);
+ // We assume it's the name
+ $name = Dba::escape($preference);
+ $sql = "SELECT * FROM `preference` WHERE `name`='$name'";
+ $db_results = Dba::read($sql);
- return Dba::num_rows($db_results);
+ return Dba::num_rows($db_results);
- } // exists
+ } // exists
- /**
- * has_access
- * This checks to see if the current user has access to modify this preference
- * as defined by the preference name
- */
- public static function has_access($preference) {
+ /**
+ * has_access
+ * This checks to see if the current user has access to modify this preference
+ * as defined by the preference name
+ */
+ public static function has_access($preference) {
- // Nothing for those demo thugs
- if (Config::get('demo_mode')) { return false; }
+ // Nothing for those demo thugs
+ if (Config::get('demo_mode')) { return false; }
- $preference = Dba::escape($preference);
+ $preference = Dba::escape($preference);
- $sql = "SELECT `level` FROM `preference` WHERE `name`='$preference'";
- $db_results = Dba::read($sql);
- $data = Dba::fetch_assoc($db_results);
+ $sql = "SELECT `level` FROM `preference` WHERE `name`='$preference'";
+ $db_results = Dba::read($sql);
+ $data = Dba::fetch_assoc($db_results);
- if (Access::check('interface',$data['level'])) {
- return true;
- }
+ if (Access::check('interface',$data['level'])) {
+ return true;
+ }
- return false;
+ return false;
- } // has_access
+ } // has_access
- /**
- * id_from_name
- * This takes a name and returns the id
- */
- public static function id_from_name($name) {
+ /**
+ * id_from_name
+ * This takes a name and returns the id
+ */
+ public static function id_from_name($name) {
- $name = Dba::escape($name);
+ $name = Dba::escape($name);
- $sql = "SELECT `id` FROM `preference` WHERE `name`='$name'";
- $db_results = Dba::read($sql);
+ $sql = "SELECT `id` FROM `preference` WHERE `name`='$name'";
+ $db_results = Dba::read($sql);
- $row = Dba::fetch_assoc($db_results);
+ $row = Dba::fetch_assoc($db_results);
- return $row['id'];
+ return $row['id'];
- } // id_from_name
+ } // id_from_name
- /**
- * name_from_id
- * This returns the name from an id, it's the exact opposite
- * of the function above it, amazing!
- */
- public static function name_from_id($id) {
+ /**
+ * name_from_id
+ * This returns the name from an id, it's the exact opposite
+ * of the function above it, amazing!
+ */
+ public static function name_from_id($id) {
- $id = Dba::escape($id);
+ $id = Dba::escape($id);
- $sql = "SELECT `name` FROM `preference` WHERE `id`='$id'";
- $db_results = Dba::read($sql);
+ $sql = "SELECT `name` FROM `preference` WHERE `id`='$id'";
+ $db_results = Dba::read($sql);
- $row = Dba::fetch_assoc($db_results);
+ $row = Dba::fetch_assoc($db_results);
- return $row['name'];
+ return $row['name'];
- } // name_from_id
+ } // name_from_id
- /**
- * get_catagories
- * This returns an array of the names of the different possible sections
- * it ignores the 'internal' catagory
- */
- public static function get_catagories() {
+ /**
+ * get_catagories
+ * This returns an array of the names of the different possible sections
+ * it ignores the 'internal' catagory
+ */
+ public static function get_catagories() {
- $sql = "SELECT `preference`.`catagory` FROM `preference` GROUP BY `catagory` ORDER BY `catagory`";
- $db_results = Dba::read($sql);
+ $sql = "SELECT `preference`.`catagory` FROM `preference` GROUP BY `catagory` ORDER BY `catagory`";
+ $db_results = Dba::read($sql);
- $results = array();
+ $results = array();
- while ($row = Dba::fetch_assoc($db_results)) {
- if ($row['catagory'] != 'internal') {
- $results[] = $row['catagory'];
- }
- } // end while
+ while ($row = Dba::fetch_assoc($db_results)) {
+ if ($row['catagory'] != 'internal') {
+ $results[] = $row['catagory'];
+ }
+ } // end while
- return $results;
+ return $results;
- } // get_catagories
+ } // get_catagories
- /**
- * get_all
- * This returns a nice flat array of all of the possible preferences for the specified user
- */
- public static function get_all($user_id) {
+ /**
+ * get_all
+ * This returns a nice flat array of all of the possible preferences for the specified user
+ */
+ public static function get_all($user_id) {
- $user_id = Dba::escape($user_id);
+ $user_id = Dba::escape($user_id);
- if ($user_id != '-1') {
- $user_limit = "AND `preference`.`catagory` != 'system'";
- }
+ if ($user_id != '-1') {
+ $user_limit = "AND `preference`.`catagory` != 'system'";
+ }
- $sql = "SELECT `preference`.`name`,`preference`.`description`,`user_preference`.`value` FROM `preference` " .
- " INNER JOIN `user_preference` ON `user_preference`.`preference`=`preference`.`id` " .
- " WHERE `user_preference`.`user`='$user_id' AND `preference`.`catagory` != 'internal' $user_limit " .
- " ORDER BY `preference`.`description`";
- $db_results = Dba::read($sql);
+ $sql = "SELECT `preference`.`name`,`preference`.`description`,`user_preference`.`value` FROM `preference` " .
+ " INNER JOIN `user_preference` ON `user_preference`.`preference`=`preference`.`id` " .
+ " WHERE `user_preference`.`user`='$user_id' AND `preference`.`catagory` != 'internal' $user_limit " .
+ " ORDER BY `preference`.`description`";
+ $db_results = Dba::read($sql);
- $results = array();
+ $results = array();
- while ($row = Dba::fetch_assoc($db_results)) {
- $results[] = array('name'=>$row['name'],'level'=>$row['level'],'description'=>$row['description'],'value'=>$row['value']);
- }
+ while ($row = Dba::fetch_assoc($db_results)) {
+ $results[] = array('name'=>$row['name'],'level'=>$row['level'],'description'=>$row['description'],'value'=>$row['value']);
+ }
- return $results;
+ return $results;
- } // get_all
+ } // get_all
- /**
- * insert
- * This inserts a new preference into the preference table
- * it does NOT sync up the users, that should be done independtly
- */
- public static function insert($name,$description,$default,$level,$type,$catagory) {
+ /**
+ * insert
+ * This inserts a new preference into the preference table
+ * it does NOT sync up the users, that should be done independtly
+ */
+ public static function insert($name,$description,$default,$level,$type,$catagory) {
- // Clean em up
- $name = Dba::escape($name);
- $description = Dba::escape($description);
- $default = Dba::escape($default);
- $level = Dba::escape($level);
- $type = Dba::escape($type);
- $catagory = Dba::escape($catagory);
+ // Clean em up
+ $name = Dba::escape($name);
+ $description = Dba::escape($description);
+ $default = Dba::escape($default);
+ $level = Dba::escape($level);
+ $type = Dba::escape($type);
+ $catagory = Dba::escape($catagory);
- $sql = "INSERT INTO `preference` (`name`,`description`,`value`,`level`,`type`,`catagory`) " .
- "VALUES ('$name','$description','$default','$level','$type','$catagory')";
- $db_results = Dba::write($sql);
+ $sql = "INSERT INTO `preference` (`name`,`description`,`value`,`level`,`type`,`catagory`) " .
+ "VALUES ('$name','$description','$default','$level','$type','$catagory')";
+ $db_results = Dba::write($sql);
- if (!$db_results) { return false; }
+ if (!$db_results) { return false; }
- return true;
+ return true;
- } // insert
+ } // insert
- /**
- * delete
- * This deletes the specified preference, a name or a ID can be passed
- */
- public static function delete($preference) {
+ /**
+ * delete
+ * This deletes the specified preference, a name or a ID can be passed
+ */
+ public static function delete($preference) {
- // First prepare
- if (!is_numeric($preference)) {
- $name = Dba::escape($preference);
- $sql = "DELETE FROM `preference` WHERE `name`='$name'";
- }
- else {
- $id = Dba::escape($preference);
- $sql = "DELETE FROM `preference` WHERE `id`='$id'";
- }
-
- $db_results = Dba::write($sql);
-
- self::rebuild_preferences();
-
- } // delete
-
- /**
- * rename
- * This renames a preference in the database
- */
- public static function rename($old, $new) {
- $old = Dba::escape($old);
- $new = Dba::escape($new);
-
- $sql = "UPDATE `preference` SET `name`='$new' WHERE `name`='$old'";
- $db_results = Dba::write($sql);
- }
-
- /**
- * rebuild_preferences
- * This removes any garbage and then adds back in anything missing preferences wise
- */
- public static function rebuild_preferences() {
-
- // First remove garbage
- $sql = "DELETE FROM `user_preference` USING `user_preference` LEFT JOIN `preference` ON `preference`.`id`=`user_preference`.`preference` " .
- "WHERE `preference`.`id` IS NULL";
- $db_results = Dba::write($sql);
-
- // Now add anything that we are missing back in, except System
- $sql = "SELECT * FROM `preference` WHERE `type`!='system'";
- //FIXME: Uhh WTF shouldn't there be something here??
-
- } // rebuild_preferences
-
- /**
- * fix_preferences
- * This takes the preferences, explodes what needs to
- * become an array and boolean everythings
- */
- public static function fix_preferences($results) {
- $arrays = array('auth_methods', 'getid3_tag_order',
- 'metadata_order', 'art_order', 'amazon_base_urls');
-
- foreach ($arrays as $item) {
- $results[$item] = trim($results[$item])
- ? explode(',', $results[$item])
- : array();
- }
-
- foreach ($results as $key=>$data) {
- if (!is_array($data)) {
- if (strcasecmp($data,"true") == "0") { $results[$key] = 1; }
- if (strcasecmp($data,"false") == "0") { $results[$key] = 0; }
- }
- }
-
- return $results;
-
- } // fix_preferences
-
- /**
- * load_from_session
- * This loads the preferences from the session rather then creating a connection to the database
- */
- public static function load_from_session($uid=-1) {
-
- if (is_array($_SESSION['userdata']['preferences']) AND $_SESSION['userdata']['uid'] == $uid) {
- Config::set_by_array($_SESSION['userdata']['preferences'], true);
- return true;
- }
-
- return false;
-
- } // load_from_session
-
- /**
- * clear_from_session
- * This clears the users preferences, this is done whenever modifications are made to the preferences
- * or the admin resets something
- */
- public static function clear_from_session() {
-
- unset($_SESSION['userdata']['preferences']);
-
- } // clear_from_session
-
- /**
- * is_boolean
- * This returns true / false if the preference in question is a boolean preference
- * This is currently only used by the debug view, could be used other places.. wouldn't be a half
- * bad idea
- */
- public static function is_boolean($key) {
-
- $boolean_array = array('session_cookiesecure','require_session',
- 'access_control','require_localnet_session',
- 'downsample_remote','track_user_ip',
- 'xml_rpc','allow_zip_download',
- 'file_zip_download','ratings',
- 'shoutbox','resize_images',
- 'show_album_art','allow_public_registration',
- 'captcha_public_reg','admin_notify_reg',
- 'use_rss','download','force_http_play','cookie_secure',
- 'allow_stream_playback','allow_democratic_playback',
- 'use_auth','allow_localplay_playback','debug','lock_songs',
- 'transcode_m4a','transcode_mp3','transcode_ogg','transcode_flac',
- 'shoutcast_active','httpq_active','show_lyrics');
-
- if (in_array($key,$boolean_array)) {
- return true;
- }
-
- return false;
-
- } // is_boolean
-
- /**
- * init
- * This grabs the preferences and then loads them into conf it should be run on page load
- * to initialize the needed variables
- */
- public static function init() {
-
- $user_id = $GLOBALS['user']->id ? Dba::escape($GLOBALS['user']->id) : '-1';
-
- // First go ahead and try to load it from the preferences
- if (self::load_from_session($user_id)) {
- return true;
- }
-
- /* Get Global Preferences */
- $sql = "SELECT `preference`.`name`,`user_preference`.`value`,`syspref`.`value` AS `system_value` FROM `preference` " .
- "LEFT JOIN `user_preference` `syspref` ON `syspref`.`preference`=`preference`.`id` AND `syspref`.`user`='-1' AND `preference`.`catagory`='system' " .
- "LEFT JOIN `user_preference` ON `user_preference`.`preference`=`preference`.`id` AND `user_preference`.`user`='$user_id' AND `preference`.`catagory`!='system'";
- $db_results = Dba::read($sql);
-
- while ($row = Dba::fetch_assoc($db_results)) {
- $value = $row['system_value'] ? $row['system_value'] : $row['value'];
- $name = $row['name'];
- $results[$name] = $value;
- } // end while sys prefs
-
- /* 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, true);
- $_SESSION['userdata']['preferences'] = $results;
- $_SESSION['userdata']['uid'] = $user_id;
-
- } // init
+ // First prepare
+ if (!is_numeric($preference)) {
+ $name = Dba::escape($preference);
+ $sql = "DELETE FROM `preference` WHERE `name`='$name'";
+ }
+ else {
+ $id = Dba::escape($preference);
+ $sql = "DELETE FROM `preference` WHERE `id`='$id'";
+ }
+
+ $db_results = Dba::write($sql);
+
+ self::rebuild_preferences();
+
+ } // delete
+
+ /**
+ * rename
+ * This renames a preference in the database
+ */
+ public static function rename($old, $new) {
+ $old = Dba::escape($old);
+ $new = Dba::escape($new);
+
+ $sql = "UPDATE `preference` SET `name`='$new' WHERE `name`='$old'";
+ $db_results = Dba::write($sql);
+ }
+
+ /**
+ * rebuild_preferences
+ * This removes any garbage and then adds back in anything missing preferences wise
+ */
+ public static function rebuild_preferences() {
+
+ // First remove garbage
+ $sql = "DELETE FROM `user_preference` USING `user_preference` LEFT JOIN `preference` ON `preference`.`id`=`user_preference`.`preference` " .
+ "WHERE `preference`.`id` IS NULL";
+ $db_results = Dba::write($sql);
+
+ // Now add anything that we are missing back in, except System
+ $sql = "SELECT * FROM `preference` WHERE `type`!='system'";
+ //FIXME: Uhh WTF shouldn't there be something here??
+
+ } // rebuild_preferences
+
+ /**
+ * fix_preferences
+ * This takes the preferences, explodes what needs to
+ * become an array and boolean everythings
+ */
+ public static function fix_preferences($results) {
+ $arrays = array('auth_methods', 'getid3_tag_order',
+ 'metadata_order', 'art_order', 'amazon_base_urls');
+
+ foreach ($arrays as $item) {
+ $results[$item] = trim($results[$item])
+ ? explode(',', $results[$item])
+ : array();
+ }
+
+ foreach ($results as $key=>$data) {
+ if (!is_array($data)) {
+ if (strcasecmp($data,"true") == "0") { $results[$key] = 1; }
+ if (strcasecmp($data,"false") == "0") { $results[$key] = 0; }
+ }
+ }
+
+ return $results;
+
+ } // fix_preferences
+
+ /**
+ * load_from_session
+ * This loads the preferences from the session rather then creating a connection to the database
+ */
+ public static function load_from_session($uid=-1) {
+
+ if (is_array($_SESSION['userdata']['preferences']) AND $_SESSION['userdata']['uid'] == $uid) {
+ Config::set_by_array($_SESSION['userdata']['preferences'], true);
+ return true;
+ }
+
+ return false;
+
+ } // load_from_session
+
+ /**
+ * clear_from_session
+ * This clears the users preferences, this is done whenever modifications are made to the preferences
+ * or the admin resets something
+ */
+ public static function clear_from_session() {
+
+ unset($_SESSION['userdata']['preferences']);
+
+ } // clear_from_session
+
+ /**
+ * is_boolean
+ * This returns true / false if the preference in question is a boolean preference
+ * This is currently only used by the debug view, could be used other places.. wouldn't be a half
+ * bad idea
+ */
+ public static function is_boolean($key) {
+
+ $boolean_array = array('session_cookiesecure','require_session',
+ 'access_control','require_localnet_session',
+ 'downsample_remote','track_user_ip',
+ 'xml_rpc','allow_zip_download',
+ 'file_zip_download','ratings',
+ 'shoutbox','resize_images',
+ 'show_album_art','allow_public_registration',
+ 'captcha_public_reg','admin_notify_reg',
+ 'use_rss','download','force_http_play','cookie_secure',
+ 'allow_stream_playback','allow_democratic_playback',
+ 'use_auth','allow_localplay_playback','debug','lock_songs',
+ 'transcode_m4a','transcode_mp3','transcode_ogg','transcode_flac',
+ 'shoutcast_active','httpq_active','show_lyrics');
+
+ if (in_array($key,$boolean_array)) {
+ return true;
+ }
+
+ return false;
+
+ } // is_boolean
+
+ /**
+ * init
+ * This grabs the preferences and then loads them into conf it should be run on page load
+ * to initialize the needed variables
+ */
+ public static function init() {
+
+ $user_id = $GLOBALS['user']->id ? Dba::escape($GLOBALS['user']->id) : '-1';
+
+ // First go ahead and try to load it from the preferences
+ if (self::load_from_session($user_id)) {
+ return true;
+ }
+
+ /* Get Global Preferences */
+ $sql = "SELECT `preference`.`name`,`user_preference`.`value`,`syspref`.`value` AS `system_value` FROM `preference` " .
+ "LEFT JOIN `user_preference` `syspref` ON `syspref`.`preference`=`preference`.`id` AND `syspref`.`user`='-1' AND `preference`.`catagory`='system' " .
+ "LEFT JOIN `user_preference` ON `user_preference`.`preference`=`preference`.`id` AND `user_preference`.`user`='$user_id' AND `preference`.`catagory`!='system'";
+ $db_results = Dba::read($sql);
+
+ while ($row = Dba::fetch_assoc($db_results)) {
+ $value = $row['system_value'] ? $row['system_value'] : $row['value'];
+ $name = $row['name'];
+ $results[$name] = $value;
+ } // end while sys prefs
+
+ /* 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, true);
+ $_SESSION['userdata']['preferences'] = $results;
+ $_SESSION['userdata']['uid'] = $user_id;
+
+ } // init
} // end Preference class