\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 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 " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if ($user->username == $pluser->username || $user->has_access(100)) { echo " \n"; echo " \n"; } else { echo " \n"; echo " \n"; } if ( $count[0] ) { echo " \n"; } else { echo " \n"; } if( batch_ok() ) { echo" \n"; } else { echo" \n"; } echo " \n"; } echo "\n"; } //if rows in result else { echo " \n"; echo " \n"; echo " \n"; } echo "
Playlist Name # Songs Owner Actions
$plname$count$plfullname" . _("View") . "" . _("Edit") . "" . _("Delete") . "  " . _("Play") . " | " . "" . _("Random") . " " . _("Download") . " 
" . _("There are no playlists of this type") . "
\n"; echo "
\n"; } function get_playlist_track_from_song ( $playlist_id, $song_id ) { $dbh = dbh(); $sql = "SELECT track FROM playlist_data" . " WHERE playlist = '$playlist_id'" . " AND song = '$song_id'"; $db_result = mysql_query($sql, $dbh); if ($r = mysql_fetch_array($db_result)) { return $r[0]; } else { return FALSE; } } //FIXME: Pull this and put it in a template function show_playlist_create () { $web_path = conf('web_path'); print <<
ECHO; print _("Create a new playlist"); print <<
Name:
Type:
 
ECHO; } function show_playlist_edit ( $playlist ) { $username = $GLOBALS['user']->username; if (check_playlist_access($playlist->id,$username) == false) { show_playlist_access_error($playlist, $username); return; } $plname = $playlist->name; $self = conf('web_path') . "/playlist.php"; print <<
Editing Playlist
Name:
Type:
 
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); } ?>