1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-03 17:59:21 +02:00
ampache/modules/lib.php
Karl 'vollmerk' Vollmer bcad40a05a New Import
2005-06-09 16:34:40 +00:00

1518 lines
35 KiB
PHP

<?php
/*
Copyright (c) 2004 ampache.org
All rights reserved.
All of the main functions for Ampache.
FIXME: Remove this file... shouldn't be used anymore
*/
/*
* show_local_catalog_info()
*
*/
function show_local_catalog_info() {
global $settings, $username;
$dbh = dbh();
$query = "SELECT count(*) AS songs, SUM(size) AS size, SUM(time) as time FROM song";
$db_result = mysql_query($query, $dbh);
$songs = mysql_fetch_array($db_result);
$query = "SELECT count(*) FROM album";
$db_result = mysql_query($query, $dbh);
$albums = mysql_fetch_row($db_result);
$query = "SELECT count(*) FROM artist";
$db_result = mysql_query($query, $dbh);
$artists = mysql_fetch_row($db_result);
$sql = "SELECT count(*) FROM user";
$db_result = mysql_query($sql, $dbh);
$users = mysql_fetch_row($db_result);
$time = time();
$last_seen_time = $time - 1200;
$sql = "SELECT count(DISTINCT s.username) FROM session AS s " .
"INNER JOIN user AS u ON s.username = u.id " .
"WHERE s.expire > " . $time . " " .
"AND u.last_seen > " . $last_seen_time;
$db_result = mysql_query($sql, $dbh);
$connected_users = mysql_fetch_row($db_result);
$hours = floor($songs['time']/3600);
$size = $songs['size']/1048576;
$days = floor($hours/24);
$hours = $hours%24;
$time_text = "$days ";
$time_text .= ($days == 1) ? _("day") : _("days");
$time_text .= ", $hours ";
$time_text .= ($hours == 1) ? _("hour") : _("hours");
if ( $size > 1024 ) {
$total_size = sprintf("%.2f", ($size/1024));
$size_unit = "GB";
}
else {
$total_size = sprintf("%.2f", $size);
$size_unit = "MB";
}
print '
<table class="border" cellspacing="1" cellpadding="3" width="100%" border="0">
<tr class="table-header">
<td colspan="2">' . _("Catalog Statistics") . '</td>
</tr>
<tr class="even">
<td> ' . _("Total Users") . ' </td>
<td> <b>' . $users[0] .'</b> </td>
</tr>
<tr class="even">
<td> ' . _("Connected Users") . ' </td>
<td> <b>' . $connected_users[0] .'</b> </td>
</tr>
<tr class="even">
<td> ' . _("Albums") . ' </td>
<td> <b>' . $albums[0] .'</b> </td>
</tr>
<tr class="even">
<td> ' . _("Artists") . ' </td>
<td> <b>' . $artists[0] .'</b> </td>
</tr>
<tr class="even">
<td> ' . _("Songs") . ' </td>
<td> <b>' . $songs[0] .'</b> </td>
</tr>
<tr class="even">
<td> ' . _("Catalog Size") . ' </td>
<td> <b>' . $total_size .' ' . $size_unit .'</b> </td>
</tr>
<tr class="even">
<td> ' . _("Catalog Time") . ' </td>
<td> <b>' . $time_text .'</b> </td>
</tr>
</table>
';
} // show_local_catalog_info()
/*
* get_popular_songs()
*
*/
function get_popular_songs( $threshold, $type, $user_id = '' ) {
$dbh = dbh();
if ( $type == 'your' ) {
$sql = "SELECT object_id FROM object_count" .
" WHERE object_type = 'song'" .
" AND userid = '$user_id'" .
" ORDER BY count DESC LIMIT $threshold";
}
else {
$sql = "SELECT object_id FROM object_count" .
" WHERE object_type = 'song'" .
" ORDER BY count DESC LIMIT $threshold";
}
$db_result = mysql_query($sql, $dbh);
$songs = array();
while ( $id = mysql_fetch_array($db_result) ) {
$songs[] = $id[0];
}
return $songs;
} // get_popular_songs()
/*
* show_random_play()
*
*/
function show_random_play() {
$web_path = conf('web_path');
print '
<form name="random" method="post" enctype="multipart/form-data" action="' . $web_path . '/song.php">
<input type="hidden" name="action" value="m3u" />
<table class="border" border="0" cellpadding="3" cellspacing="1" width="100%">
<tr class="table-header">
<td colspan="4">' . _("Play Random Selection") . '</td>
</tr>
<tr class="even">
<td>
<table border="0">
<tr class="even">
<td>' . _("Item count") .'</td>
<td>
<select name="random">
<option value="1">1</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="500">500</option>
<option value="1000">1000</option>
<option value="-1">' . _("All") . '</option>
</select></td>
<td rowspan="3" valign="top"> ' . _("From genre") . '</td>
<td rowspan="3">
';
show_genre_pulldown( -1, 0 );
print '
</td></tr>
<tr class="even">
<td>
' . _("Favor Unplayed") . ' <br />
' . _("Full Albums") . ' <br />
' . _("Full Artist") . '
</td>
<td>
<input type="checkbox" id="unplayed" name="unplayed" value="1" onclick="flipField(\'album\');flipField(\'artist\')" /><br />
<input type="checkbox" id="album" name="full_album" value="1" onclick="flipField(\'unplayed\');flipField(\'artist\')" /><br />
<input type="checkbox" id="artist" name="full_artist" value="1" onclick="flipField(\'unplayed\');flipField(\'album\')" />
</td>
</tr>
<tr class="even">
<td nowrap> ' . _("from catalog") . '</td>
<td>
';
show_catalog_pulldown( -1, 0);
print '
</tr>
<tr>
<td colspan="4">
<input type="hidden" name="aaction" value="Play!" />
<input class="button" type="submit" name="aaction" value="' . _("Play Random Songs") . '" />
</td>
</tr>
</table>
</td></tr>
</table>
</form>
';
} // show_random_play()
/*
* show_artist_pulldown()
*
* Helper functions for album and artist functions
*
*/
function show_artist_pulldown ($artist) {
global $settings;
$dbh = dbh();
$query = "SELECT id,name FROM artist ORDER BY name";
$db_result = mysql_query($query, $dbh);
echo "<select name=\"artist\">\n";
while ( $r = mysql_fetch_row($db_result) ) {
// $r[0] = id, $r[1] = name
if ( $artist == $r[0] ) {
echo "<option value=\"$r[0]\" selected=\"selected\">$r[1]</option>\n";
}
else {
echo "<option value=\"$r[0]\">$r[1]</option>\n";
}
}
echo " </select>";
} // show_artist_pulldown()
/*
* show_album_pulldown()
*
*/
function show_album_pulldown ($album) {
global $settings;
$dbh = dbh();
$sql = "SELECT id,name FROM album ORDER BY name";
$db_result = mysql_query($sql, $dbh);
echo "<select name=\"album\">\n";
while ( $r = mysql_fetch_row($db_result) ) {
// $r[0] = id, $r[1] = name
if ( $album == $r[0] ) {
echo "\t <option value=\"${r[0]}\" selected=\"selected\">".htmlspecialchars($r[1])."</option>\n";
}
else {
echo "\t <option value=\"${r[0]}\">".htmlspecialchars($r[1])."</option>\n";
}
}//while
echo "</select>\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 "<select name=\"$name\" $other>\n";
while ( $r = mysql_fetch_array($db_result) ) {
// $r[0] = id, $r[1] = type
if ( $reason === $r['type'] ) {
echo "\t<option value=\"".$r['type']."\" selected=\"selected\">".$r[$label]."</option>\n";
}
else {
echo "\t<option value=\"".$r['type']."\">".$r[$label]."</option>\n";
}
}
echo "</select>\n";
} // show_flagged_popup()
/*
* show_genre_pulldown()
*
* Set complete=1 if you want the entire genre list
*
*/
function show_genre_pulldown ($genre, $complete) {
global $settings;
$dbh = dbh();
// find the genres we have in use
if ( $complete ) {
$sql = "SELECT id FROM genre ORDER BY name";
}
else {
$sql = "SELECT DISTINCT song.genre FROM genre, song" .
" WHERE song.genre = genre.id" .
" ORDER BY genre.name";
}
$db_result = mysql_query($sql, $dbh);
echo "<select name=\"genre[]\" MULTIPLE size=\"7\">\n";
if ( ! $complete ) {
$genre_info = get_genre_info( -1 );
if ( $genre == -1 ) {
echo " <option value=\"-1\" selected=\"selected\">${genre_info[0]} - (${genre_info[1]})</option>\n";
}
else {
echo " <option value=\"-1\">${genre_info[0]} - (${genre_info[1]})</option>\n";
}
}
while ( $r = mysql_fetch_row($db_result) ) {
// $r[0] = genre id
list($genre_name, $genre_count) = get_genre_info($r[0]);
$genre_name = htmlspecialchars($genre_name);
if ( $genre == $r[0] ) {
echo " <option value=\"${r[0]}\" selected=\"selected\">$genre_name - ($genre_count)</option>\n";
}
else {
echo " <option value=\"${r[0]}\">$genre_name - ($genre_count)</option>\n";
}
}
echo "</select>";
} // show_genre_pulldown()
/*
* show_catalog_pulldown()
*
* Set complete=1 if you want the entire catalog list (including disabled)
*
*/
function show_catalog_pulldown ($catalog, $complete) {
global $settings;
// find the genres we have in use
$sql = "SELECT id,name FROM catalog ORDER BY name";
$db_result = mysql_query($sql, dbh());
echo "<select name=\"catalog\">\n";
echo " <option value=\"-1\" selected=\"selected\">All</option>\n";
while ( $r = mysql_fetch_row($db_result) )
{
// $r[0] = genre id
$catalog_name = htmlspecialchars($r[1]);
if ( $catalog == $r[0] )
{
echo " <option value=\"${r[0]}\" selected=\"selected\">$catalog_name</option>\n";
}
else
{
echo " <option value=\"${r[0]}\">$catalog_name</option>\n";
}
}
echo "</select>";
} // show_catalog_pulldown()
/*
* update_counter()
*
* update what song/album/artist has just been played
*
*/
function update_counter ($type, $id, $dbh=0) {
global $settings;
if (!is_resource($dbh)) {
$dbh = dbh();
}
// from hopson: these queries will be very useful for generating overall statistics:
/*
SELECT song.title,SUM(object_count.count) FROM song,object_count WHERE object_count.object_type = 'song' AND object_count.object_id = song.id GROUP BY song.id;
SELECT album.name,SUM(object_count.count) FROM album,object_count WHERE object_count.object_type = 'album' AND object_count.object_id = album.id GROUP BY album.id;
SELECT artist.name,SUM(object_count.count) FROM artist,object_count WHERE object_count.object_type = 'artist' AND object_count.object_id = artist.id GROUP BY artist.id;
SELECT playlist.name,SUM(object_count.count) FROM playlist,object_count WHERE object_count.object_type = 'playlist' AND object_count.object_id = playlist.id GROUP BY playlist.id;
*/
if ( $type == 'song' ) {
$sql = "UPDATE $type SET times_played = times_played + 1 WHERE id = '$id'";
}
else {
$sql = "UPDATE $type SET times_played = times_played + 1 WHERE id = '$id'";
}
$db_result = mysql_query($sql, $dbh);
} // update_counter()
/*
* 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.id" .
" 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 ;) */
/*********************************************************/
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 owner 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 <<<ECHO
<table cellpadding="5" class="tabledata">
<tr align="center" class="odd">
<td>
<input type="button" name="select_all" value="Select All" onclick="this.value=check_results()" />
</td>
<td> Playlist:</td>
<td>
<input name="action" class="button" type="submit" value="Add to" />
ECHO;
show_playlist_dropdown();
print <<<ECHO
<input name="action" class="button" type="submit" value="View" />
<input name="action" class="button" type="submit" value="Edit" />
</td>
</tr>
<tr align="center" class="even">
<td colspan="6">
<input name="action" class="button" type="submit" value="Play Selected" />
</td>
</tr>
</table>
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 "<p><font color=\"red\">No Albums Found</font></p>";
}
} // 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,owner,date ".
" FROM playlist ".
" WHERE type='public'".
" ORDER BY name";
}
elseif ($type == 'private') {
$sql = "SELECT id,name,owner,date ".
" FROM playlist ".
" WHERE type='private'" .
" AND owner = '$user->id'" .
" AND name <> 'Temporary'".
" ORDER BY name";
}
elseif ($type == 'adminprivate') {
if ( $user->access === 'admin' ) {
$sql = "SELECT id,name,owner,date ".
" FROM playlist ".
" WHERE type='private'" .
" AND owner != '$user->id'" .
" 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']." ** <br />\n";
$sql = 'SELECT 1+1';
}
$db_result = mysql_query($sql, $dbh);
print <<<ECHO
<h3>$typemap[$type] Playlists</h3>
<table class="tabledata" cellspacing="0" cellpadding="0" border="0">
<tr class="table-header">
<th>Playlist Name</th>
<th># Songs</th>
<th>Owner</th>
<th colspan="6">Actions</th>
</tr>
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 = get_user_byid($r['owner']);
$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 " <tr class=\"$class\">\n";
echo " <td><a href=\"$web_path/playlist.php?playlist_id=$plid&action=view_list\">$plname</a></td>\n";
echo " <td>$count</td>\n";
echo " <td>$plfullname</td>\n";
echo " <td><a href=\"$web_path/playlist.php?playlist_id=$plid&action=view_list\">" . _("View") . "</a></td>\n";
if ($user->id == $pluser->id || $user->access === 'admin') {
echo " <td><a href=\"$web_path/playlist.php?playlist_id=$plid&action=edit\">" . _("Edit") . "</a></td>\n";
echo " <td><a href=\"$web_path/playlist.php?playlist_id=$plid&action=delete_playlist\">" . _("Delete") . "</a></td>\n";
}
else {
echo " <td>&nbsp;</td>\n";
echo " <td>&nbsp;</td>\n";
}
if ( $count[0] ) {
echo " <td><a href=\"$web_path/song.php?action=m3u&playlist_id=$plid\">" . _("Play") . "</a> | " .
"<a href=\"$web_path/song.php?action=random&playlist_id=$plid\">" . _("Random") . "</a></td>\n";
}
else {
echo " <td>&nbsp;</td>\n";
}
if( batch_ok() ) {
echo" <td><a href=\"$web_path/batch.php?action=pl&id=$plid\">" . _("Download") . "</a></td>\n";
} else {
echo" <td>&nbsp;</td>\n";
}
echo " </tr>\n";
}
echo "</ul>\n";
} //if rows in result
else {
echo " <tr class=\"even\">\n";
echo " <td colspan=\"7\">" . _("There are no playlists of this type") . "</td>\n";
echo " </tr>\n";
}
echo "</table>\n";
echo "<br>\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
<form name="songs" method="post" action="$web_path/playlist.php">
<table class="border"><tr class="table-header"><td colspan="2" align="center">
ECHO;
print _("Create a new playlist");
print <<<ECHO
</td>
</tr>
<tr class="even">
<td align="left"> Name: </td>
<td align="left"><input type="text" name="playlist_name" size="20" /></td>
</tr>
<tr class="odd">
<td align="left"> Type: </td>
<td align="left">
<select name="type">
<option value="private"> Private </option>
<option value="public"> Public </option>
</select>
</td>
</tr>
<tr class="even">
<td align="left"> &nbsp; </td>
<td align="left">
<input type="submit" name="action" value="Create" />
<input type="reset" name="Reset" />
</td>
</tr>
</table>
</form>
ECHO;
}
function show_playlist_edit ( $playlist ) {
$username = $_SESSION['userdata']['username'];
if (check_playlist_access($playlist->id,$username) == false) {
show_playlist_access_error($playlist, $username);
return;
}
$plname = $playlist->name;
$self = $_SERVER['PHP_SELF'];
print <<<ECHO
<form name="songs" method="post" action="$self">
<input type="hidden" name="playlist_id" value="$playlist->id" />
<table class="border">
<tr class="table-header">
<td colspan="2">Editing Playlist</td>
</tr>
<tr>
<td align="left"> Name: </td>
<td align="left">
<input type="text" name="new_playlist_name" value="$plname" size="20" />
</td>
</tr>
<tr>
<td align="left"> Type: </td>
<td align="left">
<select name="type">
ECHO;
if ($playlist->type == 'public') {
echo "<option value=\"public\" selected=\"selected\">Public</option>";
}
else {
echo "<option value=\"public\">Public</option>";
}
if ($playlist->type == 'private') {
echo "<option value=\"private\" selected=\"selected\">Private</option>";
}
else {
echo "<option value=\"private\">Private</option>";
}
print <<<ECHO
</select>
</td>
</tr>
<tr>
<td align="left"> &nbsp; </td>
<td align="left">
<input type="submit" name="action" value="Update" />
</td>
</tr>
</table>
</form>
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.owner = user.id" .
" 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']['id']);
$sql = "SELECT * FROM playlist" .
" WHERE owner = '$userid'" .
" AND name <> 'Temporary'" .
" ORDER BY name";
$db_result = @mysql_query($sql, $dbh);
print <<<ECHO
<select name="playlist_id">
<option value="0"> -New Playlist- </option>
ECHO;
while ( $r = @mysql_fetch_object($db_result) ) {
if ( $playlist_id == $r->id ) {
echo "<option value=\"" . $r->id . "\" selected=\"selected\">" . $r->name . "</option>\n";
}
else {
echo "<option value=\"" . $r->id . "\">" . $r->name . "</option>\n";
}
}
echo "</select>\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->owner);
$plowner = $pluser->username;
print <<<ECHO
<p style="font: 12px bold;"> Playlist Access Error </p>
<p>$username doesn't have access to update the '$plname' playlist, it is owned by $plowner.</p>
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
// search functions
function search_by_type ($type, $search) {
$dbh = dbh();
// supported types are album, artist and song
if ( $type == 'Album' ) {
$query = "SELECT id FROM album WHERE name LIKE '%$search%'";
}
elseif ( $type == 'Artist' ) {
$query = "SELECT id FROM artist WHERE name LIKE '%$search%'";
}
elseif ( $type == 'Song title' ) {
$query = "SELECT id FROM song WHERE title LIKE '%$search%'";
}
elseif ( $type == 'Genre' ) {
$query = "SELECT song.id as id FROM song, genre" .
" WHERE song.genre = genre.id" .
" AND genre.name LIKE '%$search%'";
}
$db_result = mysql_query($query, $dbh);
$search_result = array();
while ( $r = mysql_fetch_array($db_result) ) {
$search_result[] = $r;
}
return ($search_result);
}
function get_global_popular($type) {
global $settings;
$dbh = dbh();
$sql = "SELECT object_id, SUM(count) as count FROM object_count" .
" WHERE object_type = '$type'" .
" GROUP BY object_id" .
" ORDER BY count DESC LIMIT " . conf('popular_threshold');
$db_result = mysql_query($sql, $dbh);
$items = array();
$web_path = conf('web_path');
while ( $r = @mysql_fetch_object($db_result) ) {
if ( $type == 'song' ) {
$song = new Song($r->object_id);
$artist = $song->get_artist_name();
$text = "$artist - $song->title";
/* Add to array */
$items[] = "<li> <a href=\"$web_path/song.php?action=m3u&song=$song->id\" title=\"$text\">" . truncate_with_ellipse($text, conf('ellipse_threshold_title')+3) . "&nbsp;($r->count)</a> </li>";
} // if it's a song
elseif ( $type == 'artist' ) {
$artist = get_artist_name($r->object_id);
if ($artist) {
$items[] = "<li> <a href=\"$web_path/artists.php?action=show&amp;artist=$r->object_id\" title=\"$artist\">" . truncate_with_ellipse($artist, conf('ellipse_threshold_artist')+3) . "&nbsp;($r->count)</a> </li>";
} // if no artist found
} // if type isn't artist
elseif ( $type == 'album' ) {
$album = new Album($r->object_id);
if ($album) {
$items[] = "<li> <a href=\"$web_path/albums.php?action=show&amp;album=$r->object_id\" title=\"$album->name\">" . truncate_with_ellipse($album->name,conf('ellipse_threshold_album')+3) . "&nbsp;($r->count)</a> </li>";
}
}
} // end while
return $items;
}
// Get a list of newest $type (which can then be handed to show_info_box
function get_newest ($type = 'artist') {
$dbh = dbh();
if (conf('popular_threshold') < 1) { conf(array('popular_threshold'=>'10'),1); }
$sql = "SELECT DISTINCT $type FROM song ORDER BY addition_time " .
"DESC LIMIT " . conf('popular_threshold');
$db_result = mysql_query($sql, $dbh);
$items = array();
$web_path = conf('web_path');
while ( $item = mysql_fetch_row($db_result) ) {
if ( $type == 'artist' ) {
$artist = new Artist($item[0]);
$artist->format_artist();
$items[] = "<li>" . $artist->link . "</li>\n";
}
elseif ( $type == 'album' ) {
$album = new Album($item[0]);
$album->format_album();
$items[] = "<li>" . $album->f_name . "</li>";
}
}
return $items;
}
function show_info_box ($title, $type, $items) {
$web_path = conf('web_path');
$popular_threshold = conf('popular_threshold');
echo "<table class=\"border\" cellspacing=\"1\" cellpadding=\"3\" width=\"100%\" border=\"0\">";
echo " <tr class=\"table-header\">";
if ($type == 'your_song') {
echo "<td>$title - <a href=\"$web_path/song.php?action=m3u&your_popular_songs=$popular_threshold\">Play</a></td>\n";
}
elseif ($type == 'song') {
echo "<td>$title - <a href=\"$web_path/song.php?action=m3u&popular_songs=$popular_threshold\">Play</a></td>\n";
}
else {
echo "<td>$title</td>\n";
}
print <<<ECHO
</tr>
<tr class="even">
<td align="left">
<ol>
ECHO;
foreach ($items as $item) {
echo "$item\n";
}
print <<<ECHO
</ol>
</td>
</tr>
</table>
ECHO;
}
/*
* show_add_user()
*
*/
function show_add_user () {
global $error_color;
$web_path = conf('web_path');
print <<<ECHO
<h3> 2. Add the Admin user for Ampache </h3>
<p><font color="$error_color">$error_text</font></p>
<p>This will be the administration user to get you started. You can delete/chage it later. </p>
<form name="user" method="post" action="$web_path/setup.php">
<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td>Username:</td>
<td><input type="text" name="username" value="" size="30" /></td>
</tr>
<tr>
<td>Fullname:</td>
<td><input type="text" name="fullname" value="" size="30" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password_1" value="" size="30" /></td>
</tr>
<tr>
<td>Password: (again)</td>
<td><input type="password" name="password_2" value="" size="30" /></td>
</tr>
</table>
<input type="hidden" name="step" value="user" /><br />
<input type="hidden" name="step_text" value="Add the Admin user for Ampache" /><br />
<input type="submit" name="action" value="Add the Admin User" /><br />
</form>
ECHO;
} // show_add_user()
function scrub_out($str) {
return stripslashes($str);
}
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);
}
function insert_album($album) {
global $settings;
$dbh = dbh();
preg_match("/^(A |An |The ){0,1}(.*?)$/i",$album, $matches);
$album = sql_escape($matches[2]);
switch($matches[1]) {
case 'The ':
case 'the ':
$prefix = 'The';
break;
case 'A ':
case 'a ':
$prefix = 'A';
break;
case 'An ':
case 'an ':
$prefix = 'An';
break;
default:
$prefix = '';
}
$sql = "INSERT INTO album (name, prefix)" .
" VALUES ( '$album', '$prefix' )";
$db_result = mysql_query($sql, $dbh);
return (mysql_insert_id($dbh));
} // insert_album
/*
* insert_artist()
*
*/
function insert_artist($artist) {
global $settings;
$dbh = dbh();
$matches = array();
$var = preg_match('/^(A |An |The ){0,1}(.*?)$/i',$artist, $matches);
$artist = sql_escape($matches[2]);
switch($matches[1]) {
case 'The ':
case 'the ':
$prefix = 'The';
break;
case 'A ':
case 'a ':
$prefix = 'A';
break;
case 'An ':
case 'an ':
$prefix = 'An';
break;
default:
$prefix = '';
}
$sql = "INSERT INTO artist (name, prefix)" .
" VALUES ( '$artist', '$prefix' )";
$db_result = mysql_query($sql, $dbh);
return (mysql_insert_id($dbh));
} // insert_artist
?>