\n";
while ( $r = mysql_fetch_row($db_result) ) {
// $r[0] = id, $r[1] = name
if ( $album == $r[0] ) {
echo "\t \n";
}
else {
echo "\t \n";
}
}//while
echo "\n\n";
} // show_album_pulldown()
/*
* show_flagged_popup($reason);
*
* Shows a listing of the flagged_types for when people want to mark
* a song as being broken in some way.
*/
function show_flagged_popup($reason,$label='value', $name='flagged_type', $other='') {
global $settings;
$dbh = dbh();
$access = $_SESSION['userdata']['access'];
$query = "SELECT type,value FROM flagged_types";
if ($access !== 'admin') {
$query .= " WHERE access = '$access'";
}
$db_result = mysql_query($query, $dbh);
echo "\n\n";
} // show_flagged_popup()
/*
* delete_user_stats()
*
* just delete stats for specific users or all of them
*
*/
function delete_user_stats ($user) {
$dbh = dbh();
if ( $user == 'all' ) {
$sql = "DELETE FROM object_count";
}
else {
$sql = "DELETE FROM object_count WHERE userid = '$user'";
}
$db_result = mysql_query($sql, $dbh);
} // delete_user_stats()
/*
* insert_flagged_song()
*
*/
function insert_flagged_song($song, $reason, $comment) {
$user = $_SESSION['userdata']['id'];
$time = time();
$sql = "INSERT INTO flagged (user,song,type,comment,date)" .
" VALUES ('$user','$song', '$reason', '$comment', '$time')";
$db_result = mysql_query($sql, dbh());
} // insert_flagged_song()
/*
* get_flagged();
*
* Get all of the songs from the flagged table. These are songs that
* may or may not be broken.
* Deprecated by hopson on 7/27
*/
function get_flagged() {
$dbh = dbh();
$sql = "SELECT flagged.id, user.username, type, song, date, comment" .
" FROM flagged, user" .
" WHERE flagged.user = user.username" .
" ORDER BY date";
$db_result = mysql_query($sql, $dbh);
$arr = array();
while ( $flag = mysql_fetch_object($db_result) ) {
$arr[] = $flag;
}
return $arr;
} // get_flagged()
/*
* get_flagged_type($type);
*
* Return the text associated with this type.
*/
function get_flagged_type($type) {
$dbh = dbh();
$sql = "SELECT value FROM flagged_types WHERE type = '$type'";
echo $sql;
$db_result = mysql_query($sql, $dbh);
if ($flagged_type = mysql_fetch_object($db_result)) {
return $flagged_type->value;
}
else {
return FALSE;
}
} // get_flagged_type()
/*
* delete_flagged( $flag );
*
*/
function delete_flagged($flag) {
$dbh = dbh();
$sql = "DELETE FROM flagged WHERE id = '$flag'";
$db_result = mysql_query($sql, $dbh);
} // delete_flagged()
/*********************************************************/
/* Functions for getting songs given artist, album or id */
/*********************************************************/
// TODO : albums should be always gruoped by
// id, like 'greatest hits' album is below, never by name.
// Other catalog functions should take care of assigning all
// songs with same name album to the same album id. It should
// not be done here.
// I'm commenting all this out to always sort by ID, to
// see how bad it is. -Rubin
function get_songs_from_album ($album) {
global $settings;
$dbh = dbh();
$songs = array();
$query = "SELECT track, id as song FROM song" .
" WHERE album = '$album'" .
" ORDER BY track, title";
$db_result = mysql_query($query, $dbh);
while ( $r = mysql_fetch_array($db_result) ) {
$songs[] = $r;
}
return $songs;
}
function get_song_ids_from_album ($album) {
$dbh = dbh();
$song_ids = array();
$query = "SELECT id FROM song" .
" WHERE album = '$album'" .
" ORDER BY track, title";
$db_result = mysql_query($query, $dbh);
while ( $r = mysql_fetch_object($db_result) ) {
$song_ids[] = $r->id;
}
return $song_ids;
}
function get_song_ids_from_artist ($artist) {
global $settings;
$dbh = dbh();
$song_ids = array();
$artist = sql_escape($artist);
$query = "SELECT id FROM song" .
" WHERE artist = '$artist'" .
" ORDER BY album, track";
$db_result = mysql_query($query, $dbh);
while ( $r = mysql_fetch_object($db_result) ) {
$song_ids[] = $r->id;
}
return $song_ids;
}
/*
* get_song_ids_from_artist_and_album();
*
* Get all of the songs that are from this album and artist
*
*/
function get_song_ids_from_artist_and_album ($artist, $album) {
global $settings;
$dbh = dbh();
$sql = "SELECT id FROM song" .
" WHERE artist = '$artist'" .
" AND album = '$album'" .
" ORDER BY track, title";
$db_result = mysql_query($sql, $dbh);
$song_ids = array();
while ( $r = mysql_fetch_object($db_result) ) {
$song_ids[] = $r->id;
}
return $song_ids;
}
// Used by playlist functions when you have an array of something of type
// and you want to extract the songs from it whether type is artists or albums
function get_songs_from_type ($type, $results, $artist_id = 0) {
$dbh = dbh();
$count = 0;
$song = array();
foreach ($results as $value) {
// special case from the album view where we don't want every orphan
if ($type == 'album' && ($value == 'orphans' || $artist_id != 0)) {
$sql = "SELECT id FROM song WHERE $type = '$value' AND artist = '$artist_id'";
$db_result = mysql_query($sql, $dbh);
}
else {
$sql = "SELECT id FROM song WHERE $type = '$value'";
$db_result = mysql_query($sql, $dbh);
}
while ( $r = mysql_fetch_row($db_result) ) {
$song[$count] = $r[0];
$count++;
}
}
return $song;
}
/*********************************************************/
/* This is the main song display function. I found tieing it to the playlist functions
was really handy in getting added functionality at no cost.
/* Lets tie it to album too, so we can show art ;) */
/*********************************************************/
/* One symbol, m(__)m */
function show_songs ($song_ids, $playlist_id=0, $album=0) {
$dbh = dbh();
// Get info about current user
$user = new User($_SESSION['userdata']['username']);
// Get info about playlist owner
if (isset($playlist_id) && $playlist_id != 0) {
$sql = "SELECT user FROM playlist WHERE id = '$playlist_id'";
$db_result = mysql_query($sql, $dbh);
if ($r = mysql_fetch_array($db_result)) {
$pluser = get_user_byid($r[0]);
}
}
$totaltime = 0;
$totalsize = 0;
require (conf('prefix') . "/templates/show_songs.inc");
return true;
}// function show_songs
function show_playlist_form () {
print <<
Playlist:
ECHO;
show_playlist_dropdown();
print <<
ECHO;
}
function get_artist_name ($artist, $dbh=0) {
global $settings;
if (!is_resource($dbh)) {
$dbh = dbh();
}
$query = "SELECT name FROM artist WHERE id = '$artist'";
$db_result = mysql_query($query, $dbh);
if ($r = mysql_fetch_object($db_result)) {
return $r->name;
}
else {
return FALSE;
}
}
function get_artist_info ($artist_id) {
$dbh = dbh();
$sql = "SELECT * FROM artist WHERE id = '$artist_id'";
$db_result = mysql_query($sql, $dbh);
if ($info = mysql_fetch_array($db_result)) {
$sql = "SELECT COUNT(song.album) FROM song " .
" WHERE song.artist = '$artist_id'" .
" GROUP BY song.album";
$db_result = mysql_query($sql, $dbh);
$albums = 0;
$songs = 0;
while(list($song) = mysql_fetch_row($db_result)) {
$songs += $song;
$albums++;
}
$info['songs'] = $songs;
$info['albums'] = $albums;
//FIXME: Lame place to put this
//if ($songs < conf('min_artist_songs') || $albums < conf('min_artist_albums')) {
// return FALSE;
//}
return $info;
}
else {
return FALSE;
}
}
function get_artist_from_album ($album_id) {
global $settings;
$dbh = dbh();
$query = "SELECT DISTINCT artist.id, artist.name FROM artist,song" .
" WHERE song.album = '$album_id' AND song.artist = artist.id";
$db_result = mysql_query($query, $dbh);
$r = mysql_fetch_object($db_result);
return $r;
}
function get_artist_name_from_song ($song_id) {
$dbh = dbh();
$sql = "SELECT artist.name AS name FROM artist, song" .
" WHERE artist.id = song.artist" .
" AND song.id = '$song_id'";
$db_result = mysql_query($sql, $dbh);
if ($r = mysql_fetch_object($db_result)) {
return $r->name;
}
else {
return FALSE;
}
}
function get_album_name ($album, $dbh = 0) {
$album = new Album($album);
return $album->name;
} // get_album_name
function get_genre_info($genre_id) {
global $settings;
$dbh = dbh();
$sql = "SELECT name FROM genre WHERE id = '$genre_id'";
$db_result = mysql_query($sql, $dbh);
// if its -1 then we're doing all songs
if ( $genre_id < 0 ) {
$sql = "SELECT count(*) FROM song";
}
else {
$sql = "SELECT count(*) FROM song WHERE genre = '$genre_id'";
}
$genre_result = mysql_query($sql, $dbh);
$genre_count = mysql_fetch_row($genre_result);
$r = mysql_fetch_row($db_result);
// Crude hack for non-standard genre types
if ($genre_id == -1) {
return array('All', $genre_count[0]);
}
elseif ($genre_id == 0) {
return array('N/A', $genre_count[0]);
}
else {
return array($r[0], $genre_count[0]);
}
}
function get_genre($id) {
global $settings;
$dbh = dbh();
$query = "SELECT * FROM genre WHERE id = '$id'";
$db_result = mysql_query($query, $dbh);
$r = mysql_fetch_object($db_result);
return $r;
}
// Utility function to help move things along
function get_song_info ($song, $dbh = 0) {
$song = new Song($song);
return $song;
} // get_song_info
/*!
@function show_albums
@discussion show many albums, uses view class
*/
function show_albums ($albums,$view=0) {
$dbh = libglue_param(libglue_param('dbh_name'));
if (!$view) {
$view = new View($_SESSION['view_base_sql'], $_SESSION['script'], $total_items,$_SESSION['view_offset_limit']);
}
if ($albums) {
require (conf('prefix') . "/templates/show_albums.inc");
}
else {
echo "
No Albums Found
";
}
} // show_albums
// Had to tweak this so it would show both public and private playlists
// Defaults to showing both although you could pass type=private|adminprivate|public
// to see only those
function show_playlists ($type = 'all') {
$dbh = dbh();
$user = $GLOBALS['user'];
$web_path = conf('web_path');
// mapping of types to pretty names
$typemap = array( "public" => _("Public"),
"private" => _("Your Private"),
"adminprivate" => _("Other Private")
);
if ($type == 'all') {
show_playlists('private');
if ( $user->access === 'admin' ) {
show_playlists('adminprivate');
}
show_playlists('public');
return true;
}
elseif ($type == 'public') {
$sql = "SELECT id,name,user,date ".
" FROM playlist ".
" WHERE type='public'".
" ORDER BY name";
}
elseif ($type == 'private') {
$sql = "SELECT id,name,user,date ".
" FROM playlist ".
" WHERE type='private'" .
" AND user = '$user->username'" .
" AND name <> 'Temporary'".
" ORDER BY name";
}
elseif ($type == 'adminprivate') {
if ( $user->access === 'admin' ) {
$sql = "SELECT id,name,user,date ".
" FROM playlist ".
" WHERE type='private'" .
" AND username != '$user->username'" .
" AND name <> 'Temporary'".
" ORDER BY name";
}
else {
// No admin access
$sql = 'SELECT 1+1';
}
}
else {
echo "** Error ** Call to show_playlists with unknown type $type ".
"in file ".$_SERVER['PHP_SELF']." ** \n";
$sql = 'SELECT 1+1';
}
$db_result = mysql_query($sql, $dbh);
print <<$typemap[$type] Playlists
Playlist Name
# Songs
Owner
Actions
ECHO;
flip_class(array('even','odd'));
if ( mysql_num_rows($db_result) ) {
while ( $r = mysql_fetch_array($db_result) ) {
$plname = $r['name'];
$plid = $r['id'];
$pluser = new User($r['user']);
$plfullname = $pluser->fullname;
$plowner = $pluser->username;
// find out how many songs in this playlist
$count_query = "SELECT count(*) ".
" FROM playlist_data ".
" WHERE playlist = '$plid'";
$count_result = mysql_query($count_query, $dbh);
list($count) = mysql_fetch_row($count_result);
$class = flip_class();
echo "
ECHO;
}
// See if this user has access to work on this list
function check_playlist_access ($playlist_id, $username) {
$dbh = dbh();
$sql = "SELECT playlist.id FROM playlist, user" .
" WHERE playlist.id = '$playlist_id'" .
" AND playlist.user = user.username" .
" AND user.username = '$username'";
$db_result = mysql_query($sql, $dbh);
if ( mysql_num_rows($db_result) == 1) {
return TRUE;
}
else {
if (!conf('use_auth')) {
return TRUE;
}
// check to see if this user is an admin
if ($user = get_user($username)) {
if ( $user->access == 'admin' ) {
return TRUE;
}
}
}
// If we get here, access is denied
return FALSE;
}
function show_playlist_dropdown ($playlist_id=0) {
global $settings;
$dbh = dbh();
$userid = scrub_in($_SESSION['userdata']['username']);
$sql = "SELECT * FROM playlist" .
" WHERE user = '$userid'" .
" AND name <> 'Temporary'" .
" ORDER BY name";
$db_result = @mysql_query($sql, $dbh);
print <<
ECHO;
while ( $r = @mysql_fetch_object($db_result) ) {
if ( $playlist_id == $r->id ) {
echo "\n";
}
else {
echo "\n";
}
}
echo "\n";
}
// Used to show when we have an access error for a playlist
function show_playlist_access_error ($playlist, $username) {
$plname = $playlist->name;
$pluser = new User($playlist->user);
$plowner = $pluser->username;
print << Playlist Access Error
$username doesn't have access to update the '$plname' playlist, it is owned by $plowner.
ECHO;
}
// Used to show a form with confirm action button on it (for deleting playlists, users, etc)
/*!
@function show_confirm_action
@discussion shows a confirmation of an action, gives a YES/NO choice
*/
function show_confirm_action ($text, $script, $arg) {
$web_path = conf('web_path');
require (conf('prefix') . "/templates/show_confirm_action.inc.php");
} // show_confirm_action
function unhtmlentities ($string) {
$trans_tbl = get_html_translation_table (HTML_ENTITIES);
$trans_tbl = array_flip ($trans_tbl);
$ret = strtr ($string, $trans_tbl);
return preg_replace('/(\d+);/me', "chr('\\1')",$ret);
}
?>