diff options
Diffstat (limited to 'lib/class/user.class.php')
-rw-r--r-- | lib/class/user.class.php | 1902 |
1 files changed, 951 insertions, 951 deletions
diff --git a/lib/class/user.class.php b/lib/class/user.class.php index 01f709f2..edc711e9 100644 --- a/lib/class/user.class.php +++ b/lib/class/user.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) @@ -30,1089 +30,1089 @@ */ class User extends database_object { - //Basic Componets - public $id; - public $username; - public $fullname; - public $access; - public $disabled; - public $email; - public $last_seen; - public $create_date; - public $validation; + //Basic Componets + public $id; + public $username; + public $fullname; + public $access; + public $disabled; + public $email; + public $last_seen; + public $create_date; + public $validation; - // Constructed variables - public $prefs = array(); + // Constructed variables + public $prefs = array(); - /** - * Constructor - * This function is the constructor object for the user - * class, it currently takes a username - */ - public function __construct($user_id=0) { + /** + * Constructor + * This function is the constructor object for the user + * class, it currently takes a username + */ + public function __construct($user_id=0) { - if (!$user_id) { return false; } + if (!$user_id) { return false; } - $this->id = intval($user_id); + $this->id = intval($user_id); - $info = $this->_get_info(); + $info = $this->_get_info(); - foreach ($info as $key=>$value) { - // Let's not save the password in this object :S - if ($key == 'password') { continue; } - $this->$key = $value; - } + foreach ($info as $key=>$value) { + // Let's not save the password in this object :S + if ($key == 'password') { continue; } + $this->$key = $value; + } - // Make sure the Full name is always filled - if (strlen($this->fullname) < 1) { $this->fullname = $this->username; } + // Make sure the Full name is always filled + if (strlen($this->fullname) < 1) { $this->fullname = $this->username; } - } // Constructor + } // Constructor - /** - * _get_info - * This function returns the information for this object - */ - private function _get_info() { + /** + * _get_info + * This function returns the information for this object + */ + private function _get_info() { - $id = intval($this->id); + $id = intval($this->id); - if (parent::is_cached('user',$id)) { - return parent::get_from_cache('user',$id); - } + if (parent::is_cached('user',$id)) { + return parent::get_from_cache('user',$id); + } - // If the ID is -1 then - if ($id == '-1') { - $data['username'] = 'System'; - $data['fullname'] = 'Ampache User'; - $data['access'] = '25'; - return $data; - } + // If the ID is -1 then + if ($id == '-1') { + $data['username'] = 'System'; + $data['fullname'] = 'Ampache User'; + $data['access'] = '25'; + return $data; + } - $sql = "SELECT * FROM `user` WHERE `id`='$id'"; - $db_results = Dba::read($sql); + $sql = "SELECT * FROM `user` WHERE `id`='$id'"; + $db_results = Dba::read($sql); - $data = Dba::fetch_assoc($db_results); + $data = Dba::fetch_assoc($db_results); - parent::add_to_cache('user',$id,$data); + parent::add_to_cache('user',$id,$data); - return $data; + return $data; - } // _get_info + } // _get_info - /** - * load_playlist - * This is called once per page load it makes sure that this session - * has a tmp_playlist, creating it if it doesn't, then sets $this->playlist - * as a tmp_playlist object that can be fiddled with later on - */ - public function load_playlist() { + /** + * load_playlist + * This is called once per page load it makes sure that this session + * has a tmp_playlist, creating it if it doesn't, then sets $this->playlist + * as a tmp_playlist object that can be fiddled with later on + */ + public function load_playlist() { - $session_id = session_id(); + $session_id = session_id(); - $this->playlist = Tmp_Playlist::get_from_session($session_id); + $this->playlist = Tmp_Playlist::get_from_session($session_id); - } // load_playlist + } // load_playlist - /** - * get_from_username - * This returns a built user from a username. This is a - * static function so it doesn't require an instance - */ - public static function get_from_username($username) { + /** + * get_from_username + * This returns a built user from a username. This is a + * static function so it doesn't require an instance + */ + public static function get_from_username($username) { - $username = Dba::escape($username); + $username = Dba::escape($username); - $sql = "SELECT `id` FROM `user` WHERE `username`='$username'"; - $db_results = Dba::read($sql); - $results = Dba::fetch_assoc($db_results); + $sql = "SELECT `id` FROM `user` WHERE `username`='$username'"; + $db_results = Dba::read($sql); + $results = Dba::fetch_assoc($db_results); - $user = new User($results['id']); + $user = new User($results['id']); - return $user; + return $user; - } // get_from_username + } // get_from_username - /** - * get_from_email - * This returns a built user from a email. This is a - * static function so it doesn't require an instance - */ - public static function get_from_email($email) { + /** + * get_from_email + * This returns a built user from a email. This is a + * static function so it doesn't require an instance + */ + public static function get_from_email($email) { - $email = Dba::escape($email); + $email = Dba::escape($email); - $sql = "SELECT `id` FROM `user` WHERE `email`='$email'"; - $db_results = Dba::read($sql); - $results = Dba::fetch_assoc($db_results); + $sql = "SELECT `id` FROM `user` WHERE `email`='$email'"; + $db_results = Dba::read($sql); + $results = Dba::fetch_assoc($db_results); - $user = new User($results['id']); + $user = new User($results['id']); - return $user; + return $user; - } // get_from_username + } // get_from_username - /** - * get_catalogs - * This returns the catalogs as an array of ids that this user is allowed to access - */ - public function get_catalogs() { + /** + * get_catalogs + * This returns the catalogs as an array of ids that this user is allowed to access + */ + public function get_catalogs() { - if (parent::is_cached('user_catalog',$this->id)) { - return parent::get_from_cache('user_catalog',$this->id); - } + if (parent::is_cached('user_catalog',$this->id)) { + return parent::get_from_cache('user_catalog',$this->id); + } - $sql = "SELECT * FROM `user_catalog` WHERE `user`='$user_id'"; - $db_results = Dba::read($sql); + $sql = "SELECT * FROM `user_catalog` WHERE `user`='$user_id'"; + $db_results = Dba::read($sql); - while ($row = Dba::fetch_assoc($db_results)) { - $catalogs[] = $row['catalog']; - } + while ($row = Dba::fetch_assoc($db_results)) { + $catalogs[] = $row['catalog']; + } - parent::add_to_cache('user_catalog',$this->id,$catalogs); + parent::add_to_cache('user_catalog',$this->id,$catalogs); - return $catalogs; + return $catalogs; - } // get_catalogs + } // get_catalogs - /** - * get_preferences - * This is a little more complicate now that we've got many types of preferences - * This funtions pulls all of them an arranges them into a spiffy little array - * You can specify a type to limit it to a single type of preference - * []['title'] = ucased type name - * []['prefs'] = array(array('name','display','value')); - * []['admin'] = t/f value if this is an admin only section - */ - function get_preferences($type = 0, $system = false) { + /** + * get_preferences + * This is a little more complicate now that we've got many types of preferences + * This funtions pulls all of them an arranges them into a spiffy little array + * You can specify a type to limit it to a single type of preference + * []['title'] = ucased type name + * []['prefs'] = array(array('name','display','value')); + * []['admin'] = t/f value if this is an admin only section + */ + function get_preferences($type = 0, $system = false) { - // Fill out the user id - $user_id = $system ? Dba::escape(-1) : Dba::escape($this->id); + // Fill out the user id + $user_id = $system ? Dba::escape(-1) : Dba::escape($this->id); - if (!$system) { - $user_limit = "AND preference.catagory != 'system'"; - } - - if ($type != '0') { - $user_limit = "AND preference.catagory = '" . Dba::escape($type) . "'"; - } - - - $sql = "SELECT preference.name, preference.description, preference.catagory, preference.level, user_preference.value " . - "FROM preference INNER JOIN user_preference ON user_preference.preference=preference.id " . - "WHERE user_preference.user='$user_id' " . $user_limit . - " ORDER BY preference.catagory, preference.description"; - - $db_results = Dba::read($sql); - - /* Ok this is crapy, need to clean this up or improve the code FIXME */ - while ($r = Dba::fetch_assoc($db_results)) { - $type = $r['catagory']; - $admin = false; - if ($type == 'system') { $admin = true; } - $type_array[$type][$r['name']] = array('name'=>$r['name'],'level'=>$r['level'],'description'=>$r['description'],'value'=>$r['value']); - $results[$type] = array ('title'=>ucwords($type),'admin'=>$admin,'prefs'=>$type_array[$type]); - } // end while - - return $results; - - } // get_preferences - - /** - * set_preferences - * sets the prefs for this specific user - */ - public function set_preferences() { - - $user_id = Dba::escape($this->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.type != 'system'"; - $db_results = Dba::read($sql); - - while ($r = Dba::fetch_assoc($db_results)) { - $key = $r['name']; - $this->prefs[$key] = $r['value']; - } - } // set_preferences - - /** - * get_favorites - * returns an array of your $type favorites - */ - function get_favorites($type) { - - $web_path = Config::get('web_path'); - - $results = Stats::get_user(Config::get('popular_threshold'),$type,$this->id,1); - - $items = array(); - - foreach ($results as $r) { - /* If its a song */ - if ($type == 'song') { - $data = new Song($r['object_id']); - $data->count = $r['count']; - $data->format(); - $data->f_name = $data->f_link; - $items[] = $data; - } - /* If its an album */ - elseif ($type == 'album') { - $data = new Album($r['object_id']); - $data->count = $r['count']; - $data->format(); - $items[] = $data; - } - /* If its an artist */ - elseif ($type == 'artist') { - $data = new Artist($r['object_id']); - $data->count = $r['count']; - $data->format(); - $data->f_name = $data->f_link; - $items[] = $data; - } - /* If it's a genre */ - elseif ($type == 'genre') { - $data = new Genre($r['object_id']); - $data->count = $r['count']; - $data->format(); - $data->f_name = $data->f_link; - $items[] = $data; - } - - } // end foreach - - return $items; - - } // get_favorites - - /** - * get_recommendations - * This returns recommended objects of $type. The recommendations - * are based on voodoo economics,the phase of the moon and my current BAL. - */ - function get_recommendations($type) { - - /* First pull all of your ratings of this type */ - $sql = "SELECT object_id,user_rating FROM ratings " . - "WHERE object_type='" . Dba::escape($type) . "' AND user='" . Dba::escape($this->id) . "'"; - $db_results = Dba::read($sql); - - // Incase they only have one user - $users = array(); - - while ($r = Dba::fetch_assoc($db_results)) { - /* Store the fact that you rated this */ - $key = $r['object_id']; - $ratings[$key] = true; - - /* Build a key'd array of users with this same rating */ - $sql = "SELECT user FROM ratings WHERE object_type='" . Dba::escape($type) . "' " . - "AND user !='" . Dba::escape($this->id) . "' AND object_id='" . Dba::escape($r['object_id']) . "' " . - "AND user_rating ='" . Dba::escape($r['user_rating']) . "'"; - $user_results = Dba::read($sql); - - while ($user_info = Dba::fetch_assoc($user_results)) { - $key = $user_info['user']; - $users[$key]++; - } - - } // end while - - /* now we've got your ratings, and all users and the # of ratings that match your ratings - * sort the users[$key] array by value and then find things they've rated high (4+) that you - * haven't rated - */ - $recommendations = array(); - asort($users); - - foreach ($users as $user_id=>$score) { - - /* Find everything they've rated at 4+ */ - $sql = "SELECT object_id,user_rating FROM ratings " . - "WHERE user='" . Dba::escape($user_id) . "' AND user_rating >='4' AND " . - "object_type = '" . Dba::escape($type) . "' ORDER BY user_rating DESC"; - $db_results = Dba::read($sql); - - while ($r = Dba::fetch_assoc($db_results)) { - $key = $r['object_id']; - if (isset($ratings[$key])) { continue; } - - /* Let's only get 5 total for now */ - if (count($recommendations) > 5) { return $recommendations; } - - $recommendations[$key] = $r['user_rating']; - - } // end while - - - } // end foreach users - - return $recommendations; - - } // get_recommendations - - /** - * is_logged_in - * checks to see if $this user is logged in returns their current IP if they - * are logged in - */ - public function is_logged_in() { - - $username = Dba::escape($this->username); - - $sql = "SELECT `id`,`ip` FROM `session` WHERE `username`='$username'" . - " AND `expire` > ". time(); - $db_results = Dba::read($sql); - - if ($row = Dba::fetch_assoc($db_results)) { - $ip = $row['ip'] ? $row['ip'] : NULL; - return $ip; - } - - return false; - - } // is_logged_in + if (!$system) { + $user_limit = "AND preference.catagory != 'system'"; + } + + if ($type != '0') { + $user_limit = "AND preference.catagory = '" . Dba::escape($type) . "'"; + } + + + $sql = "SELECT preference.name, preference.description, preference.catagory, preference.level, user_preference.value " . + "FROM preference INNER JOIN user_preference ON user_preference.preference=preference.id " . + "WHERE user_preference.user='$user_id' " . $user_limit . + " ORDER BY preference.catagory, preference.description"; + + $db_results = Dba::read($sql); + + /* Ok this is crapy, need to clean this up or improve the code FIXME */ + while ($r = Dba::fetch_assoc($db_results)) { + $type = $r['catagory']; + $admin = false; + if ($type == 'system') { $admin = true; } + $type_array[$type][$r['name']] = array('name'=>$r['name'],'level'=>$r['level'],'description'=>$r['description'],'value'=>$r['value']); + $results[$type] = array ('title'=>ucwords($type),'admin'=>$admin,'prefs'=>$type_array[$type]); + } // end while + + return $results; + + } // get_preferences + + /** + * set_preferences + * sets the prefs for this specific user + */ + public function set_preferences() { + + $user_id = Dba::escape($this->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.type != 'system'"; + $db_results = Dba::read($sql); + + while ($r = Dba::fetch_assoc($db_results)) { + $key = $r['name']; + $this->prefs[$key] = $r['value']; + } + } // set_preferences + + /** + * get_favorites + * returns an array of your $type favorites + */ + function get_favorites($type) { + + $web_path = Config::get('web_path'); + + $results = Stats::get_user(Config::get('popular_threshold'),$type,$this->id,1); + + $items = array(); + + foreach ($results as $r) { + /* If its a song */ + if ($type == 'song') { + $data = new Song($r['object_id']); + $data->count = $r['count']; + $data->format(); + $data->f_name = $data->f_link; + $items[] = $data; + } + /* If its an album */ + elseif ($type == 'album') { + $data = new Album($r['object_id']); + $data->count = $r['count']; + $data->format(); + $items[] = $data; + } + /* If its an artist */ + elseif ($type == 'artist') { + $data = new Artist($r['object_id']); + $data->count = $r['count']; + $data->format(); + $data->f_name = $data->f_link; + $items[] = $data; + } + /* If it's a genre */ + elseif ($type == 'genre') { + $data = new Genre($r['object_id']); + $data->count = $r['count']; + $data->format(); + $data->f_name = $data->f_link; + $items[] = $data; + } + + } // end foreach + + return $items; + + } // get_favorites + + /** + * get_recommendations + * This returns recommended objects of $type. The recommendations + * are based on voodoo economics,the phase of the moon and my current BAL. + */ + function get_recommendations($type) { + + /* First pull all of your ratings of this type */ + $sql = "SELECT object_id,user_rating FROM ratings " . + "WHERE object_type='" . Dba::escape($type) . "' AND user='" . Dba::escape($this->id) . "'"; + $db_results = Dba::read($sql); + + // Incase they only have one user + $users = array(); + + while ($r = Dba::fetch_assoc($db_results)) { + /* Store the fact that you rated this */ + $key = $r['object_id']; + $ratings[$key] = true; + + /* Build a key'd array of users with this same rating */ + $sql = "SELECT user FROM ratings WHERE object_type='" . Dba::escape($type) . "' " . + "AND user !='" . Dba::escape($this->id) . "' AND object_id='" . Dba::escape($r['object_id']) . "' " . + "AND user_rating ='" . Dba::escape($r['user_rating']) . "'"; + $user_results = Dba::read($sql); + + while ($user_info = Dba::fetch_assoc($user_results)) { + $key = $user_info['user']; + $users[$key]++; + } + + } // end while + + /* now we've got your ratings, and all users and the # of ratings that match your ratings + * sort the users[$key] array by value and then find things they've rated high (4+) that you + * haven't rated + */ + $recommendations = array(); + asort($users); + + foreach ($users as $user_id=>$score) { + + /* Find everything they've rated at 4+ */ + $sql = "SELECT object_id,user_rating FROM ratings " . + "WHERE user='" . Dba::escape($user_id) . "' AND user_rating >='4' AND " . + "object_type = '" . Dba::escape($type) . "' ORDER BY user_rating DESC"; + $db_results = Dba::read($sql); + + while ($r = Dba::fetch_assoc($db_results)) { + $key = $r['object_id']; + if (isset($ratings[$key])) { continue; } + + /* Let's only get 5 total for now */ + if (count($recommendations) > 5) { return $recommendations; } + + $recommendations[$key] = $r['user_rating']; + + } // end while + + + } // end foreach users + + return $recommendations; + + } // get_recommendations + + /** + * is_logged_in + * checks to see if $this user is logged in returns their current IP if they + * are logged in + */ + public function is_logged_in() { + + $username = Dba::escape($this->username); + + $sql = "SELECT `id`,`ip` FROM `session` WHERE `username`='$username'" . + " AND `expire` > ". time(); + $db_results = Dba::read($sql); + + if ($row = Dba::fetch_assoc($db_results)) { + $ip = $row['ip'] ? $row['ip'] : NULL; + return $ip; + } + + return false; + + } // is_logged_in - /** - * has_access - * this function checkes to see if this user has access - * to the passed action (pass a level requirement) - */ - function has_access($needed_level) { + /** + * has_access + * this function checkes to see if this user has access + * to the passed action (pass a level requirement) + */ + function has_access($needed_level) { - if (!Config::get('use_auth') || Config::get('demo_mode')) { return true; } + if (!Config::get('use_auth') || Config::get('demo_mode')) { return true; } - if ($this->access >= $needed_level) { return true; } + if ($this->access >= $needed_level) { return true; } - return false; + return false; - } // has_access + } // has_access - /** - * update - * This function is an all encompasing update function that - * calls the mini ones does all the error checking and all that - * good stuff - */ - public function update($data) { + /** + * update + * This function is an all encompasing update function that + * calls the mini ones does all the error checking and all that + * good stuff + */ + public function update($data) { - if (empty($data['username'])) { - Error::add('username', T_('Error Username Required')); - } + if (empty($data['username'])) { + Error::add('username', T_('Error Username Required')); + } - if ($data['password1'] != $data['password2'] AND !empty($data['password1'])) { - Error::add('password', T_("Error Passwords don't match")); - } + if ($data['password1'] != $data['password2'] AND !empty($data['password1'])) { + Error::add('password', T_("Error Passwords don't match")); + } - if (Error::occurred()) { - return false; - } + if (Error::occurred()) { + return false; + } - foreach ($data as $name=>$value) { - switch ($name) { - case 'password1'; - $name = 'password'; - case 'access': - case 'email': - case 'username': - case 'fullname'; - if ($this->$name != $value) { - $function = 'update_' . $name; - $this->$function($value); - } - break; - default: - // Rien a faire - break; - } // end switch on field + foreach ($data as $name=>$value) { + switch ($name) { + case 'password1'; + $name = 'password'; + case 'access': + case 'email': + case 'username': + case 'fullname'; + if ($this->$name != $value) { + $function = 'update_' . $name; + $this->$function($value); + } + break; + default: + // Rien a faire + break; + } // end switch on field - } // end foreach + } // end foreach - return true; + return true; - } // update + } // update - /** - * update_username - * updates their username - */ - public function update_username($new_username) { + /** + * update_username + * updates their username + */ + public function update_username($new_username) { - $new_username = Dba::escape($new_username); - $sql = "UPDATE `user` SET `username`='$new_username' WHERE `id`='$this->id'"; - $this->username = $new_username; - $db_results = Dba::write($sql); + $new_username = Dba::escape($new_username); + $sql = "UPDATE `user` SET `username`='$new_username' WHERE `id`='$this->id'"; + $this->username = $new_username; + $db_results = Dba::write($sql); - } // update_username + } // update_username - /** - * update_validation - * This is used by the registration mumbojumbo - * Use this function to update the validation key - * NOTE: crap this doesn't have update_item the humanity of it all - */ - public function update_validation($new_validation) { + /** + * update_validation + * This is used by the registration mumbojumbo + * Use this function to update the validation key + * NOTE: crap this doesn't have update_item the humanity of it all + */ + public function update_validation($new_validation) { - $new_validation = Dba::escape($new_validation); - $sql = "UPDATE `user` SET `validation`='$new_validation', `disabled`='1' WHERE `id`='" . Dba::escape($this->id) . "'"; - $db_results = Dba::write($sql); - $this->validation = $new_validation; + $new_validation = Dba::escape($new_validation); + $sql = "UPDATE `user` SET `validation`='$new_validation', `disabled`='1' WHERE `id`='" . Dba::escape($this->id) . "'"; + $db_results = Dba::write($sql); + $this->validation = $new_validation; - return $db_results; + return $db_results; - } // update_validation + } // update_validation - /** - * update_fullname - * updates their fullname - */ - public function update_fullname($new_fullname) { + /** + * update_fullname + * updates their fullname + */ + public function update_fullname($new_fullname) { - $new_fullname = Dba::escape($new_fullname); - $sql = "UPDATE `user` SET `fullname`='$new_fullname' WHERE `id`='$this->id'"; - $db_results = Dba::write($sql); - - } // update_fullname - - /** - * update_email - * updates their email address - */ - public function update_email($new_email) { + $new_fullname = Dba::escape($new_fullname); + $sql = "UPDATE `user` SET `fullname`='$new_fullname' WHERE `id`='$this->id'"; + $db_results = Dba::write($sql); + + } // update_fullname + + /** + * update_email + * updates their email address + */ + public function update_email($new_email) { - $new_email = Dba::escape($new_email); - $sql = "UPDATE `user` SET `email`='$new_email' WHERE `id`='$this->id'"; - $db_results = Dba::write($sql); + $new_email = Dba::escape($new_email); + $sql = "UPDATE `user` SET `email`='$new_email' WHERE `id`='$this->id'"; + $db_results = Dba::write($sql); - } // update_email - - /** - * disable - * This disables the current user - */ - public function disable() { - - // Make sure we aren't disabling the last admin - $sql = "SELECT `id` FROM `user` WHERE `disabled` = '0' AND `id` != '" . $this->id . "' AND `access`='100'"; - $db_results = Dba::read($sql); - - if (!Dba::num_rows($db_results)) { return false; } - - $sql = "UPDATE `user` SET `disabled`='1' WHERE id='" . $this->id . "'"; - $db_results = Dba::write($sql); - - // Delete any sessions they may have - $sql = "DELETE FROM `session` WHERE `username`='" . Dba::escape($this->username) . "'"; - $db_results = Dba::write($sql); - - return true; - - } // disable - - /** - * enable - * this enables the current user - */ - public function enable() { - - $sql = "UPDATE `user` SET `disabled`='0' WHERE id='" . $this->id . "'"; - $db_results = Dba::write($sql); + } // update_email + + /** + * disable + * This disables the current user + */ + public function disable() { + + // Make sure we aren't disabling the last admin + $sql = "SELECT `id` FROM `user` WHERE `disabled` = '0' AND `id` != '" . $this->id . "' AND `access`='100'"; + $db_results = Dba::read($sql); + + if (!Dba::num_rows($db_results)) { return false; } + + $sql = "UPDATE `user` SET `disabled`='1' WHERE id='" . $this->id . "'"; + $db_results = Dba::write($sql); + + // Delete any sessions they may have + $sql = "DELETE FROM `session` WHERE `username`='" . Dba::escape($this->username) . "'"; + $db_results = Dba::write($sql); + + return true; + + } // disable + + /** + * enable + * this enables the current user + */ + public function enable() { + + $sql = "UPDATE `user` SET `disabled`='0' WHERE id='" . $this->id . "'"; + $db_results = Dba::write($sql); - return true; + return true; - } // enable + } // enable - /** - * update_access - * updates their access level - */ - public function update_access($new_access) { + /** + * update_access + * updates their access level + */ + public function update_access($new_access) { - /* Prevent Only User accounts */ - if ($new_access < '100') { - $sql = "SELECT `id` FROM user WHERE `access`='100' AND `id` != '$this->id'"; - $db_results = Dba::read($sql); - if (!Dba::num_rows($db_results)) { return false; } - } - - $new_access = Dba::escape($new_access); - $sql = "UPDATE `user` SET `access`='$new_access' WHERE `id`='$this->id'"; - $db_results = Dba::write($sql); - - } // update_access - - /*! - @function update_last_seen - @discussion updates the last seen data for this user - */ - function update_last_seen() { - - $sql = "UPDATE user SET last_seen='" . time() . "' WHERE `id`='$this->id'"; - $db_results = Dba::write($sql); + /* Prevent Only User accounts */ + if ($new_access < '100') { + $sql = "SELECT `id` FROM user WHERE `access`='100' AND `id` != '$this->id'"; + $db_results = Dba::read($sql); + if (!Dba::num_rows($db_results)) { return false; } + } + + $new_access = Dba::escape($new_access); + $sql = "UPDATE `user` SET `access`='$new_access' WHERE `id`='$this->id'"; + $db_results = Dba::write($sql); + + } // update_access + + /*! + @function update_last_seen + @discussion updates the last seen data for this user + */ + function update_last_seen() { + + $sql = "UPDATE user SET last_seen='" . time() . "' WHERE `id`='$this->id'"; + $db_results = Dba::write($sql); - } // update_last_seen + } // update_last_seen - /** - * update_user_stats - * updates the playcount mojo for this specific user - */ - public function update_stats($song_id) { + /** + * update_user_stats + * updates the playcount mojo for this specific user + */ + public function update_stats($song_id) { - $song_info = new Song($song_id); - $song_info->format(); - $user = $this->id; + $song_info = new Song($song_id); + $song_info->format(); + $user = $this->id; - if (!strlen($song_info->file)) { return false; } + if (!strlen($song_info->file)) { return false; } - $this->set_preferences(); + $this->set_preferences(); - foreach (Plugin::get_plugins('save_songplay') as $plugin_name) { - $plugin = new Plugin($plugin_name); - if ($plugin->load()) { - $plugin->_plugin->save_songplay($song_info); - } - } + foreach (Plugin::get_plugins('save_songplay') as $plugin_name) { + $plugin = new Plugin($plugin_name); + if ($plugin->load()) { + $plugin->_plugin->save_songplay($song_info); + } + } - // Do this last so the 'last played checks are correct' - Stats::insert('song',$song_id,$user); - Stats::insert('album',$song_info->album,$user); - Stats::insert('artist',$song_info->artist,$user); + // Do this last so the 'last played checks are correct' + Stats::insert('song',$song_id,$user); + Stats::insert('album',$song_info->album,$user); + Stats::insert('artist',$song_info->artist,$user); - return true; + return true; - } // update_stats + } // update_stats - /** - * insert_ip_history - * This inserts a row into the IP History recording this user at this - * address at this time in this place, doing this thing.. you get the point - */ - public function insert_ip_history() { + /** + * insert_ip_history + * This inserts a row into the IP History recording this user at this + * address at this time in this place, doing this thing.. you get the point + */ + public function insert_ip_history() { - if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ - $sip = $_SERVER['HTTP_X_FORWARDED_FOR']; - debug_event('User Ip', 'Login from ip adress: ' . $sip,'3'); - } - else { - $sip = $_SERVER['REMOTE_ADDR']; - debug_event('User Ip', 'Login from ip adress: ' . $sip,'3'); - } + if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ + $sip = $_SERVER['HTTP_X_FORWARDED_FOR']; + debug_event('User Ip', 'Login from ip adress: ' . $sip,'3'); + } + else { + $sip = $_SERVER['REMOTE_ADDR']; + debug_event('User Ip', 'Login from ip adress: ' . $sip,'3'); + } - $ip = Dba::escape(inet_pton($sip)); - $date = time(); - $user = $this->id; - $agent = Dba::escape($_SERVER['HTTP_USER_AGENT']); - - $sql = "INSERT INTO `ip_history` (`ip`,`user`,`date`,`agent`) VALUES ('$ip','$user','$date','$agent')"; - $db_results = Dba::write($sql); - - /* Clean up old records... sometimes */ - if (rand(1,100) > 60) { - $date = time() - (86400*Config::get('user_ip_cardinality')); - $sql = "DELETE FROM `ip_history` WHERE `date` < $date"; - $db_results = Dba::write($sql); - } - - return true; - - } // insert_ip_history - - /** - * create - * inserts a new user into ampache - */ - public static function create($username, $fullname, $email, $password, $access, $disabled = false) { - - /* Lets clean up the fields... */ - $username = Dba::escape($username); - $fullname = Dba::escape($fullname); - $email = Dba::escape($email); - $access = Dba::escape($access); - $password = hash('sha256', $password); - $disabled = $disabled ? 1 : 0; - - /* Now Insert this new user */ - $sql = "INSERT INTO `user` (`username`, `disabled`, " . - "`fullname`, `email`, `password`, `access`, " . - "`create_date`)" . - "VALUES('$username', '$disabled', '$fullname', " . - "'$email', '$password', '$access', '" . time() ."')"; - $db_results = Dba::write($sql); - - if (!$db_results) { return false; } - - // Get the insert_id - $insert_id = Dba::insert_id(); - - /* Populates any missing preferences, in this case all of them */ - self::fix_preferences($insert_id); - - return $insert_id; - - } // create - - /** - * update_password - * updates a users password - */ - public function update_password($new_password) { - - $new_password = hash('sha256',$new_password); - - $new_password = Dba::escape($new_password); - $sql = "UPDATE `user` SET `password`='$new_password' WHERE `id`='$this->id'"; - $db_results = Dba::write($sql); - - // Clear this (temp fix) - if ($db_results) { unset($_SESSION['userdata']['password']); } - - } // update_password - - /** - * format - * This function sets up the extra variables we need when we are displaying a - * user for an admin, these should not be normally called when creating a - * user object - */ - public function format() { - - /* If they have a last seen date */ - if (!$this->last_seen) { $this->f_last_seen = T_('Never'); } - else { $this->f_last_seen = date("m\/d\/Y - H:i",$this->last_seen); } - - /* If they have a create date */ - if (!$this->create_date) { $this->f_create_date = T_('Unknown'); } - else { $this->f_create_date = date("m\/d\/Y - H:i",$this->create_date); } - - // Base link - $this->f_link = '<a href="' . Config::get('web_path') . '/stats.php?action=show_user&user_id=' . $this->id . '">' . $this->fullname . '</a>'; - - /* Calculate their total Bandwidth Useage */ - $sql = "SELECT `song`.`size` FROM `song` LEFT JOIN `object_count` ON `song`.`id`=`object_count`.`object_id` " . - "WHERE `object_count`.`user`='$this->id' AND `object_count`.`object_type`='song'"; - $db_results = Dba::read($sql); - - while ($r = Dba::fetch_assoc($db_results)) { - $total = $total + $r['size']; - } - - $this->f_useage = UI::format_bytes($total); - - /* Get Users Last ip */ - if (count($data = $this->get_ip_history(1))) { - $this->ip_history = inet_ntop($data['0']['ip']); - } - else { - $this->ip_history = T_('Not Enough Data'); - } - - } // format_user - - /** - * format_favorites - * takes an array of objects and formats them corrrectly - * and returns a simply array with just <a href values - */ - public function format_favorites($items) { - - // The length of the longest item - $maxlen = strlen($items[0]->count); - - // Go through the favs - foreach ($items as $data) { - - // Make all number lengths equal - $len = strlen($data->count); - while ($len < $maxlen) { - $data->count = "0" . $data->count; - $len++; - } - - $item = "[$data->count] - $data->f_name"; - $results[]->f_name_link = $item; - } // end foreach items - - return $results; - - } // format_favorites - - /** - * format_recommendations - * This takes an array of [object_id] = ratings - * and displays them in a semi-pretty format - */ - function format_recommendations($items,$type) { - - foreach ($items as $object_id=>$rating) { - - switch ($type) { - case 'artist': - $object = new Artist($object_id); - $object->format_artist(); - $name = $object->link; - break; - case 'album': - $object = new Album($object_id); - $object->format_album(); - $name = $object->f_link; - break; - case 'song': - $object = new Song($object_id); - $object->format_song(); - $name = $object->f_link; - break; - } // end switch on type - $results[] = "<li>$name -- " . get_rating_name($rating) . "<br />\n</li>"; - - } // end foreach items - - - return $results; - - } // format_recommendations - - /** - * access_name_to_level - * This takes the access name for the user and returns the level - */ - public static function access_name_to_level($level) { - - switch ($level) { - case 'admin': - return '100'; - break; - case 'user': - return '25'; - break; - case 'manager': - return '75'; - break; - case 'guest': - return '5'; - break; - default: - return '0'; - break; - } - - return false; - - } // access_name_to_level - - /** - * fix_preferences - * This is the new fix_preferences function, it does the following - * Remove Duplicates from user, add in missing - * If -1 is passed it also removes duplicates from the `preferences` - * table. - */ - public static function fix_preferences($user_id) { - - $user_id = Dba::escape($user_id); - - /* Get All Preferences for the current user */ - $sql = "SELECT * FROM `user_preference` WHERE `user`='$user_id'"; - $db_results = Dba::read($sql); - - $results = array(); - - while ($r = Dba::fetch_assoc($db_results)) { - $pref_id = $r['preference']; - /* Check for duplicates */ - if (isset($results[$pref_id])) { - $r['value'] = Dba::escape($r['value']); - $sql = "DELETE FROM `user_preference` WHERE `user`='$user_id' AND `preference`='" . $r['preference'] . "' AND" . - " `value`='" . Dba::escape($r['value']) . "'"; - $delete_results = Dba::write($sql); - } // if its set - else { - $results[$pref_id] = 1; - } - } // end while - - /* If we aren't the -1 user before we continue grab the -1 users values */ - if ($user_id != '-1') { - $sql = "SELECT `user_preference`.`preference`,`user_preference`.`value` FROM `user_preference`,`preference` " . - "WHERE `user_preference`.`preference` = `preference`.`id` AND `user_preference`.`user`='-1' AND `preference`.`catagory` !='system'"; - $db_results = Dba::read($sql); - /* While through our base stuff */ - while ($r = Dba::fetch_assoc($db_results)) { - $key = $r['preference']; - $zero_results[$key] = $r['value']; - } - } // if not user -1 - - // get me _EVERYTHING_ - $sql = "SELECT * FROM `preference`"; - - // If not system, exclude system... *gasp* - if ($user_id != '-1') { - $sql .= " WHERE catagory !='system'"; - } - $db_results = Dba::read($sql); - - while ($r = Dba::fetch_assoc($db_results)) { - - $key = $r['id']; - - /* Check if this preference is set */ - if (!isset($results[$key])) { - if (isset($zero_results[$key])) { - $r['value'] = $zero_results[$key]; - } - $value = Dba::escape($r['value']); - $sql = "INSERT INTO user_preference (`user`,`preference`,`value`) VALUES ('$user_id','$key','$value')"; - $insert_db = Dba::write($sql); - } - } // while preferences - - /* Let's also clean out any preferences garbage left over */ - $sql = "SELECT DISTINCT(user_preference.user) FROM user_preference " . - "LEFT JOIN user ON user_preference.user = user.id " . - "WHERE user_preference.user!='-1' AND user.id IS NULL"; - $db_results = Dba::read($sql); - - $results = array(); - - while ($r = Dba::fetch_assoc($db_results)) { - $results[] = $r['user']; - } - - foreach ($results as $data) { - $sql = "DELETE FROM user_preference WHERE user='$data'"; - $db_results = Dba::write($sql); - } - - } // fix_preferences - - /** - * delete - * deletes this user and everything associated with it. This will affect - * ratings and tottal stats - */ - public function delete() { - - /* - Before we do anything make sure that they aren't the last - admin - */ - if ($this->has_access(100)) { - $sql = "SELECT `id` FROM `user` WHERE `access`='100' AND id !='" . Dba::escape($this->id) . "'"; - $db_results = Dba::read($sql); - if (!Dba::num_rows($db_results)) { - return false; - } - } // if this is an admin check for others - - // Delete their playlists - $sql = "DELETE FROM `playlist` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); - - // Clean up the playlist data table - $sql = "DELETE FROM `playlist_data` USING `playlist_data` " . - "LEFT JOIN `playlist` ON `playlist`.`id`=`playlist_data`.`playlist` " . - "WHERE `playlist`.`id` IS NULL"; - $db_results = Dba::write($sql); - - // Delete any stats they have - $sql = "DELETE FROM `object_count` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); - - // Clear the IP history for this user - $sql = "DELETE FROM `ip_history` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); - - // Nuke any access lists that are specific to this user - $sql = "DELETE FROM `access_list` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); - - // Delete their ratings - $sql = "DELETE FROM `rating` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); - - // Delete their tags - $sql = "DELETE FROM `tag_map` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); - - // Clean out the tags - $sql = "DELETE FROM `tags` USING `tag_map` LEFT JOIN `tag_map` ON tag_map.id=tags.map_id AND tag_map.id IS NULL"; - $db_results = Dba::write($sql); - - // Delete their preferences - $sql = "DELETE FROM `user_preference` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); + $ip = Dba::escape(inet_pton($sip)); + $date = time(); + $user = $this->id; + $agent = Dba::escape($_SERVER['HTTP_USER_AGENT']); + + $sql = "INSERT INTO `ip_history` (`ip`,`user`,`date`,`agent`) VALUES ('$ip','$user','$date','$agent')"; + $db_results = Dba::write($sql); + + /* Clean up old records... sometimes */ + if (rand(1,100) > 60) { + $date = time() - (86400*Config::get('user_ip_cardinality')); + $sql = "DELETE FROM `ip_history` WHERE `date` < $date"; + $db_results = Dba::write($sql); + } + + return true; + + } // insert_ip_history + + /** + * create + * inserts a new user into ampache + */ + public static function create($username, $fullname, $email, $password, $access, $disabled = false) { + + /* Lets clean up the fields... */ + $username = Dba::escape($username); + $fullname = Dba::escape($fullname); + $email = Dba::escape($email); + $access = Dba::escape($access); + $password = hash('sha256', $password); + $disabled = $disabled ? 1 : 0; + + /* Now Insert this new user */ + $sql = "INSERT INTO `user` (`username`, `disabled`, " . + "`fullname`, `email`, `password`, `access`, " . + "`create_date`)" . + "VALUES('$username', '$disabled', '$fullname', " . + "'$email', '$password', '$access', '" . time() ."')"; + $db_results = Dba::write($sql); + + if (!$db_results) { return false; } + + // Get the insert_id + $insert_id = Dba::insert_id(); + + /* Populates any missing preferences, in this case all of them */ + self::fix_preferences($insert_id); + + return $insert_id; + + } // create + + /** + * update_password + * updates a users password + */ + public function update_password($new_password) { + + $new_password = hash('sha256',$new_password); + + $new_password = Dba::escape($new_password); + $sql = "UPDATE `user` SET `password`='$new_password' WHERE `id`='$this->id'"; + $db_results = Dba::write($sql); + + // Clear this (temp fix) + if ($db_results) { unset($_SESSION['userdata']['password']); } + + } // update_password + + /** + * format + * This function sets up the extra variables we need when we are displaying a + * user for an admin, these should not be normally called when creating a + * user object + */ + public function format() { + + /* If they have a last seen date */ + if (!$this->last_seen) { $this->f_last_seen = T_('Never'); } + else { $this->f_last_seen = date("m\/d\/Y - H:i",$this->last_seen); } + + /* If they have a create date */ + if (!$this->create_date) { $this->f_create_date = T_('Unknown'); } + else { $this->f_create_date = date("m\/d\/Y - H:i",$this->create_date); } + + // Base link + $this->f_link = '<a href="' . Config::get('web_path') . '/stats.php?action=show_user&user_id=' . $this->id . '">' . $this->fullname . '</a>'; + + /* Calculate their total Bandwidth Useage */ + $sql = "SELECT `song`.`size` FROM `song` LEFT JOIN `object_count` ON `song`.`id`=`object_count`.`object_id` " . + "WHERE `object_count`.`user`='$this->id' AND `object_count`.`object_type`='song'"; + $db_results = Dba::read($sql); + + while ($r = Dba::fetch_assoc($db_results)) { + $total = $total + $r['size']; + } + + $this->f_useage = UI::format_bytes($total); + + /* Get Users Last ip */ + if (count($data = $this->get_ip_history(1))) { + $this->ip_history = inet_ntop($data['0']['ip']); + } + else { + $this->ip_history = T_('Not Enough Data'); + } + + } // format_user + + /** + * format_favorites + * takes an array of objects and formats them corrrectly + * and returns a simply array with just <a href values + */ + public function format_favorites($items) { + + // The length of the longest item + $maxlen = strlen($items[0]->count); + + // Go through the favs + foreach ($items as $data) { + + // Make all number lengths equal + $len = strlen($data->count); + while ($len < $maxlen) { + $data->count = "0" . $data->count; + $len++; + } + + $item = "[$data->count] - $data->f_name"; + $results[]->f_name_link = $item; + } // end foreach items + + return $results; + + } // format_favorites + + /** + * format_recommendations + * This takes an array of [object_id] = ratings + * and displays them in a semi-pretty format + */ + function format_recommendations($items,$type) { + + foreach ($items as $object_id=>$rating) { + + switch ($type) { + case 'artist': + $object = new Artist($object_id); + $object->format_artist(); + $name = $object->link; + break; + case 'album': + $object = new Album($object_id); + $object->format_album(); + $name = $object->f_link; + break; + case 'song': + $object = new Song($object_id); + $object->format_song(); + $name = $object->f_link; + break; + } // end switch on type + $results[] = "<li>$name -- " . get_rating_name($rating) . "<br />\n</li>"; + + } // end foreach items + + + return $results; + + } // format_recommendations + + /** + * access_name_to_level + * This takes the access name for the user and returns the level + */ + public static function access_name_to_level($level) { + + switch ($level) { + case 'admin': + return '100'; + break; + case 'user': + return '25'; + break; + case 'manager': + return '75'; + break; + case 'guest': + return '5'; + break; + default: + return '0'; + break; + } + + return false; + + } // access_name_to_level + + /** + * fix_preferences + * This is the new fix_preferences function, it does the following + * Remove Duplicates from user, add in missing + * If -1 is passed it also removes duplicates from the `preferences` + * table. + */ + public static function fix_preferences($user_id) { + + $user_id = Dba::escape($user_id); + + /* Get All Preferences for the current user */ + $sql = "SELECT * FROM `user_preference` WHERE `user`='$user_id'"; + $db_results = Dba::read($sql); + + $results = array(); + + while ($r = Dba::fetch_assoc($db_results)) { + $pref_id = $r['preference']; + /* Check for duplicates */ + if (isset($results[$pref_id])) { + $r['value'] = Dba::escape($r['value']); + $sql = "DELETE FROM `user_preference` WHERE `user`='$user_id' AND `preference`='" . $r['preference'] . "' AND" . + " `value`='" . Dba::escape($r['value']) . "'"; + $delete_results = Dba::write($sql); + } // if its set + else { + $results[$pref_id] = 1; + } + } // end while + + /* If we aren't the -1 user before we continue grab the -1 users values */ + if ($user_id != '-1') { + $sql = "SELECT `user_preference`.`preference`,`user_preference`.`value` FROM `user_preference`,`preference` " . + "WHERE `user_preference`.`preference` = `preference`.`id` AND `user_preference`.`user`='-1' AND `preference`.`catagory` !='system'"; + $db_results = Dba::read($sql); + /* While through our base stuff */ + while ($r = Dba::fetch_assoc($db_results)) { + $key = $r['preference']; + $zero_results[$key] = $r['value']; + } + } // if not user -1 + + // get me _EVERYTHING_ + $sql = "SELECT * FROM `preference`"; + + // If not system, exclude system... *gasp* + if ($user_id != '-1') { + $sql .= " WHERE catagory !='system'"; + } + $db_results = Dba::read($sql); + + while ($r = Dba::fetch_assoc($db_results)) { + + $key = $r['id']; + + /* Check if this preference is set */ + if (!isset($results[$key])) { + if (isset($zero_results[$key])) { + $r['value'] = $zero_results[$key]; + } + $value = Dba::escape($r['value']); + $sql = "INSERT INTO user_preference (`user`,`preference`,`value`) VALUES ('$user_id','$key','$value')"; + $insert_db = Dba::write($sql); + } + } // while preferences + + /* Let's also clean out any preferences garbage left over */ + $sql = "SELECT DISTINCT(user_preference.user) FROM user_preference " . + "LEFT JOIN user ON user_preference.user = user.id " . + "WHERE user_preference.user!='-1' AND user.id IS NULL"; + $db_results = Dba::read($sql); + + $results = array(); + + while ($r = Dba::fetch_assoc($db_results)) { + $results[] = $r['user']; + } + + foreach ($results as $data) { + $sql = "DELETE FROM user_preference WHERE user='$data'"; + $db_results = Dba::write($sql); + } + + } // fix_preferences + + /** + * delete + * deletes this user and everything associated with it. This will affect + * ratings and tottal stats + */ + public function delete() { + + /* + Before we do anything make sure that they aren't the last + admin + */ + if ($this->has_access(100)) { + $sql = "SELECT `id` FROM `user` WHERE `access`='100' AND id !='" . Dba::escape($this->id) . "'"; + $db_results = Dba::read($sql); + if (!Dba::num_rows($db_results)) { + return false; + } + } // if this is an admin check for others + + // Delete their playlists + $sql = "DELETE FROM `playlist` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); + + // Clean up the playlist data table + $sql = "DELETE FROM `playlist_data` USING `playlist_data` " . + "LEFT JOIN `playlist` ON `playlist`.`id`=`playlist_data`.`playlist` " . + "WHERE `playlist`.`id` IS NULL"; + $db_results = Dba::write($sql); + + // Delete any stats they have + $sql = "DELETE FROM `object_count` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); + + // Clear the IP history for this user + $sql = "DELETE FROM `ip_history` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); + + // Nuke any access lists that are specific to this user + $sql = "DELETE FROM `access_list` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); + + // Delete their ratings + $sql = "DELETE FROM `rating` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); + + // Delete their tags + $sql = "DELETE FROM `tag_map` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); + + // Clean out the tags + $sql = "DELETE FROM `tags` USING `tag_map` LEFT JOIN `tag_map` ON tag_map.id=tags.map_id AND tag_map.id IS NULL"; + $db_results = Dba::write($sql); + + // Delete their preferences + $sql = "DELETE FROM `user_preference` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); - // Delete their voted stuff in democratic play - $sql = "DELETE FROM `user_vote` WHERE `user`='$this->id'"; - $db_results = Dba::write($sql); + // Delete their voted stuff in democratic play + $sql = "DELETE FROM `user_vote` WHERE `user`='$this->id'"; + $db_results = Dba::write($sql); - // Delete their shoutbox posts - $sql = "DELETE FROM `user_shout` WHERE `user='$this->id'"; - $db_results = Dba::write($sql); + // Delete their shoutbox posts + $sql = "DELETE FROM `user_shout` WHERE `user='$this->id'"; + $db_results = Dba::write($sql); - // Delete the user itself - $sql = "DELETE FROM `user` WHERE `id`='$this->id'"; - $db_results = Dba::write($sql); + // Delete the user itself + $sql = "DELETE FROM `user` WHERE `id`='$this->id'"; + $db_results = Dba::write($sql); - $sql = "DELETE FROM `session` WHERE `username`='" . Dba::escape($this->username) . "'"; - $db_results = Dba::write($sql); + $sql = "DELETE FROM `session` WHERE `username`='" . Dba::escape($this->username) . "'"; + $db_results = Dba::write($sql); - return true; + return true; - } // delete + } // delete - /** - * is_online - * delay how long since last_seen in seconds default of 20 min - * calcs difference between now and last_seen - * if less than delay, we consider them still online - */ - public function is_online( $delay = 1200 ) { + /** + * is_online + * delay how long since last_seen in seconds default of 20 min + * calcs difference between now and last_seen + * if less than delay, we consider them still online + */ + public function is_online( $delay = 1200 ) { - return time() - $this->last_seen <= $delay; + return time() - $this->last_seen <= $delay; - } // is_online + } // is_online - /** - * get_user_validation - *if user exists before activation can be done. - */ - public static function get_validation($username) { + /** + * get_user_validation + *if user exists before activation can be done. + */ + public static function get_validation($username) { - $usename = Dba::escape($username); + $usename = Dba::escape($username); - $sql = "SELECT `validation` FROM `user` WHERE `username`='$username'"; - $db_results = Dba::read($sql); + $sql = "SELECT `validation` FROM `user` WHERE `username`='$username'"; + $db_results = Dba::read($sql); - $row = Dba::fetch_assoc($db_results); + $row = Dba::fetch_assoc($db_results); - return $row['validation']; + return $row['validation']; - } // get_validation + } // get_validation - /** - * get_recently_played - * This gets the recently played items for this user respecting - * the limit passed - */ - public function get_recently_played($limit,$type='') { + /** + * get_recently_played + * This gets the recently played items for this user respecting + * the limit passed + */ + public function get_recently_played($limit,$type='') { - if (!$type) { $type = 'song'; } + if (!$type) { $type = 'song'; } - $sql = "SELECT * FROM `object_count` WHERE `object_type`='$type' AND `user`='$this->id' " . - "ORDER BY `date` DESC LIMIT $limit"; - $db_results = Dba::read($sql); + $sql = "SELECT * FROM `object_count` WHERE `object_type`='$type' AND `user`='$this->id' " . + "ORDER BY `date` DESC LIMIT $limit"; + $db_results = Dba::read($sql); - while ($row = Dba::fetch_assoc($db_results)) { - $results[] = $row['object_id']; - } + while ($row = Dba::fetch_assoc($db_results)) { + $results[] = $row['object_id']; + } - return $results; + return $results; - } // get_recently_played + } // get_recently_played - /** - * get_ip_history - * This returns the ip_history from the - * last Config::get('user_ip_cardinality') days - */ - public function get_ip_history($count='',$distinct='') { + /** + * get_ip_history + * This returns the ip_history from the + * last Config::get('user_ip_cardinality') days + */ + public function get_ip_history($count='',$distinct='') { - $username = Dba::escape($this->id); - $count = $count ? intval($count) : intval(Config::get('user_ip_cardinality')); + $username = Dba::escape($this->id); + $count = $count ? intval($count) : intval(Config::get('user_ip_cardinality')); - // Make sure it's something - if ($count < 1) { $count = '1'; } - $limit_sql = "LIMIT " . intval($count); + // Make sure it's something + if ($count < 1) { $count = '1'; } + $limit_sql = "LIMIT " . intval($count); - if ($distinct) { $group_sql = "GROUP BY `ip`"; } + if ($distinct) { $group_sql = "GROUP BY `ip`"; } - /* Select ip history */ - $sql = "SELECT `ip`,`date` FROM `ip_history`" . - " WHERE `user`='$username'" . - " $group_sql ORDER BY `date` DESC $limit_sql"; - $db_results = Dba::read($sql); + /* Select ip history */ + $sql = "SELECT `ip`,`date` FROM `ip_history`" . + " WHERE `user`='$username'" . + " $group_sql ORDER BY `date` DESC $limit_sql"; + $db_results = Dba::read($sql); - $results = array(); + $results = array(); - while ($row = Dba::fetch_assoc($db_results)) { - $results[] = $row; - } + while ($row = Dba::fetch_assoc($db_results)) { + $results[] = $row; + } - return $results; + return $results; - } // get_ip_history + } // get_ip_history - /** - * activate_user - * the user from public_registration - */ - public function activate_user($username) { + /** + * activate_user + * the user from public_registration + */ + public function activate_user($username) { - $username = Dba::escape($username); + $username = Dba::escape($username); - $sql = "UPDATE `user` SET `disabled`='0' WHERE `username`='$username'"; - $db_results = Dba::write($sql); + $sql = "UPDATE `user` SET `disabled`='0' WHERE `username`='$username'"; + $db_results = Dba::write($sql); - } // activate_user + } // activate_user - /** - * is_xmlrpc - * checks to see if this is a valid xmlrpc user - */ - public function is_xmlrpc() { + /** + * is_xmlrpc + * checks to see if this is a valid xmlrpc user + */ + public function is_xmlrpc() { - /* If we aren't using XML-RPC return true */ - if (!Config::get('xml_rpc')) { - return false; - } + /* If we aren't using XML-RPC return true */ + if (!Config::get('xml_rpc')) { + return false; + } - //FIXME: Ok really what we will do is check the MD5 of the HTTP_REFERER - //FIXME: combined with the song title to make sure that the REFERER - //FIXME: is in the access list with full rights - return true; + //FIXME: Ok really what we will do is check the MD5 of the HTTP_REFERER + //FIXME: combined with the song title to make sure that the REFERER + //FIXME: is in the access list with full rights + return true; - } // is_xmlrpc + } // is_xmlrpc - /** - * check_username - * This checks to make sure the username passed doesn't already - * exist in this instance of ampache - */ - public static function check_username($username) { + /** + * check_username + * This checks to make sure the username passed doesn't already + * exist in this instance of ampache + */ + public static function check_username($username) { - $username = Dba::escape($username); + $username = Dba::escape($username); - $sql = "SELECT `id` FROM `user` WHERE `username`='$username'"; - $db_results = Dba::read($sql); + $sql = "SELECT `id` FROM `user` WHERE `username`='$username'"; + $db_results = Dba::read($sql); - if (Dba::num_rows($db_results)) { - return false; - } + if (Dba::num_rows($db_results)) { + return false; + } - return true; + return true; - } // check_username + } // check_username - /** - * rebuild_all_preferences - * This rebuilds the user preferences for all installed users, called by the plugin functions - */ - public static function rebuild_all_preferences() { + /** + * rebuild_all_preferences + * This rebuilds the user preferences for all installed users, called by the plugin functions + */ + public static function rebuild_all_preferences() { - $sql = "SELECT * FROM `user`"; - $db_results = Dba::read($sql); + $sql = "SELECT * FROM `user`"; + $db_results = Dba::read($sql); - User::fix_preferences('-1'); + User::fix_preferences('-1'); - while ($row = Dba::fetch_assoc($db_results)) { - User::fix_preferences($row['id']); - } + while ($row = Dba::fetch_assoc($db_results)) { + User::fix_preferences($row['id']); + } - return true; + return true; - } // rebuild_all_preferences + } // rebuild_all_preferences } //end user class ?> |