Add support for using mpd as a backend music-playing
[adorno.git] / www / artist.php
blob2061d8eb0aba8e939fa7ba6eeebb99bc886412d1
1 <?php
2 unset($altr); if ( isset($_GET['altr']) ) $altr = $_GET['altr'];
3 unset($lltr); if ( isset($_GET['lltr']) ) $lltr = $_GET['lltr'];
4 unset($a); if ( isset($_GET['a']) ) $a = $_GET['a'];
5 unset($l); if ( isset($_GET['l']) ) $l = $_GET['l'];
7 require_once("always.php");
8 require_once("Session.php");
9 require_once("PlayTracks.php");
11 $title = $system_name;
12 require_once("header.php");
15 if ( "$error_loc$error_msg" == "" ) {
17 function track_link( $trk, $link_title, $row_class = "" ) {
18 global $letter_get, $search;
20 $track_link_url = sprintf( "?l=%s&a=%s&t=%s", urlencode($trk->album), urlencode($trk->artist), urlencode($trk->title) );
21 $safe_title = htmlspecialchars($link_title);
22 if ( isset($search) ) {
23 $delimiter_list = '/#~`!@$%^&*_-=|';
24 for( $i=0; strpos($search,substr($delimiter_list,$i,1)) !== false; $i++ );
25 $delimiter = substr($delimiter_list,$i,1);
26 if ( preg_match($delimiter.$search.$delimiter.'i', $link_title) ) {
27 $row_class = "found";
31 $duration = preg_replace( "/^[0:]{1,4}/", "", $trk->duration );
32 $last_played = ($trk->last_played == '-infinity'?"-":substr($trk->last_played,0,10));
33 $link = <<<EOHTML
34 <tr class="track$row_class">
35 <td class="track$row_class">
36 <a class="track$row_class" href="artist.php$track_link_url$letter_get" title="$trk->path_name">$safe_title</a>
37 </td>
38 <td class="track$row_class"> $last_played </td>
39 <td class="track$row_class"> $duration </td>
40 <th class="track$row_class">
41 <a class="alphabetica" href="edit_track.php$track_link_url" title="Edit Track Info">E</a>
42 </th>
43 </tr>
45 EOHTML;
47 return $link;
51 echo "<table width=\"100%\"><tr valign=\"top\">\n";
53 echo "<td width=\"50%\">\n";
54 if ( isset($a) ) {
55 $qa = "SELECT artist, album, title, tracknum, path_name, duration::interval(0), ";
56 $qa .= "extract( EPOCH FROM duration)::int AS secs, quality, get_last_played(hash_key) AS last_played ";
57 $qa .= "FROM tracks WHERE lower(artist) = lower(?) ";
58 $qa .= "ORDER BY lower(album), setpart, tracknum; ";
59 $qry = new PgQuery($qa, $a);
60 if ( $qry->Exec() && $qry->rows > 0 ) {
61 echo "<h3>".htmlspecialchars($a)."</h3>\n";
62 $last_album = "";
63 while ( $track = $qry->Fetch() ) {
64 if ( $track->album != "" && $track->album != $last_album ) {
65 if ( $qry->rownum > 1 ) echo "</table>";
66 echo "<br><table width=100% cellspacing=0 cellpadding=0><tr class=th4><td width=71% class=th4>";
67 echo "<a class=th4 href=\"artist.php?a=" . urlencode($track->artist) . "&l=" . urlencode($track->album) . "$letter_get\">".htmlspecialchars($track->album)."</a></td>\n";
68 echo "<td width=15% class=th4>&nbsp;</td>";
69 echo "<td width=10% class=th4>&nbsp;</td>";
70 echo "<td width=4% class=th4><a class=alphabetica class=track href=\"edit_track.php?l=" . urlencode($track->album) . "&a=" . urlencode($track->artist) . "\" title=\"Edit Album Info\">E</a></td></tr>";
71 $last_album = $track->album;
73 else if ( $qry->rownum == 0 ) {
74 echo "<br><table width=100% cellspacing=0 cellpadding=0><tr class=th4><td width=71% class=th4>Unkown Album</td>";
75 echo "<td width='29%' class='th4' colspan='3'>&nbsp;</td></tr>\n";
77 echo track_link($track, ($track->tracknum > 0 ? "$track->tracknum: " : "") . "$track->title", $qry->rownum % 2 );
79 echo "</table>";
82 else if ( isset( $l ) ) {
83 $qa = "SELECT artist, album, title, tracknum, path_name, duration::interval(0), ";
84 $qa .= "extract( EPOCH FROM duration)::int AS secs, quality, get_last_played(hash_key) AS last_played ";
85 $qa .= "FROM tracks WHERE album = '" . addslashes($l) . "' ";
86 $qa .= "ORDER BY album, setpart, tracknum; ";
87 $qry = new PgQuery($qa);
88 if ( $qry->Exec() && $qry->rows > 0 ) {
89 echo "<h3><a class=th4 href=\"artist.php?play=1&l=" . urlencode($l) . "$letter_get\">$l</a></h3>\n";
90 $last_artist = "";
91 while ( $track = $qry->Fetch() ) {
92 if ( $track->artist != "" && $track->artist != $last_artist ) {
93 echo "<br><table width=100% cellspacing=0 cellpadding=0><tr class=th4><td width=71% class=th4>";
94 echo "<a class=h4 href=\"artist.php?a=" . urlencode($track->artist) . "&l=" . urlencode($track->album) . "$letter_get\">$track->artist</a></td>\n";
95 echo "<td width=15% class=th4>&nbsp;</td>";
96 echo "<td width=10% class=th4>&nbsp;</td>";
97 echo "<td width=4% class=th4><a class=alphabetica class=track href=\"edit_track.php?l=" . urlencode($track->album) . "&a=" . urlencode($track->artist) . "\" title=\"Edit Album Info\">E</a></td></tr>";
98 $last_artist = $track->artist;
100 else if ( $qry->rownum == 0 ) {
101 echo "<br><table width=100% cellspacing=0 cellpadding=0><tr class=th4><td width=71% class=th4>Unkown Album</td>";
102 echo "<td width='29%' class='th4' colspan='3'>&nbsp;</td></tr>\n";
104 echo track_link($track, ($track->tracknum > 0 ? "$track->tracknum: " : "") . "$track->title", $qry->rownum % 2 );
106 echo "</table>";
109 else {
110 echo "&nbsp;";
112 echo "</td>";
114 echo "<td width=\"50%\">\n";
115 echo "<h3>Artists</h3>\n<p>";
116 if ( isset($altr) || isset($search) ) {
117 $altr = trim("$altr");
118 if ( isset($search) ) {
119 $sql = "SELECT distinct ON ( lower(artist)) artist FROM tracks ";
120 $sql .= "WHERE artist ~* ? OR album ~* ? OR title ~* ? OR path_name ~* ? ";
121 $sql .= "ORDER BY lower(artist);";
122 $qry = new PgQuery( $sql, $search, $search, $search, $search );
124 else {
125 $qry = new PgQuery( "SELECT distinct ON ( lower(artist)) artist FROM tracks WHERE artist ~* ? ORDER BY lower(artist);", "^$altr");
127 if ( $qry->Exec('artist') && $qry->rows > 0 ) {
128 while ( $artist = $qry->Fetch() ) {
129 $display = htmlspecialchars($artist->artist);
130 if ( trim($display) == "" ) $display = "&laquo;unknown&raquo;";
131 echo " <a href=\"artist.php?a=" . urlencode($artist->artist) . "$letter_get\" class=\"artist\">$display</a>\n";
135 echo "</td>\n";
137 echo "</tr></table>\n";
140 include("footers.php");