Migrate to AwlQuery and preg*, and remove need for globals.
[adorno.git] / www / artist.php
blob29d1fa8527b54c11e8c8cd9b6d480b833d790d6b
1 <?php
2 require_once("always.php");
3 require_once("Session.php");
5 param_to_global('a','{.*}' );
6 param_to_global('l','{.*}' );
8 require_once("PlayTracks.php");
10 $title = $c->system_name;
11 require_once("header.php");
14 if ( "$error_loc$error_msg" == "" ) {
16 function track_link( $trk, $link_title, $row_class = "" ) {
17 global $letter_get, $search;
19 $track_link_url = sprintf( "?l=%s&a=%s&t=%s", urlencode($trk->album), urlencode($trk->artist), urlencode($trk->title) );
20 $safe_title = htmlspecialchars($link_title);
21 if ( isset($search) ) {
22 $delimiter_list = '/#~`!@$%^&*_-=|';
23 for( $i=0; strpos($search,substr($delimiter_list,$i,1)) !== false; $i++ );
24 $delimiter = substr($delimiter_list,$i,1);
25 if ( preg_match($delimiter.$search.$delimiter.'i', $link_title) ) {
26 $row_class = "found";
30 $duration = preg_replace( "/^[0:]{1,4}/", "", $trk->duration );
31 $last_played = ($trk->last_played == '-infinity'?"-":substr($trk->last_played,0,10));
32 $link = <<<EOHTML
33 <tr class="track$row_class">
34 <td class="track$row_class">
35 <a class="track$row_class" href="artist.php$track_link_url$letter_get" title="$trk->path_name">$safe_title</a>
36 </td>
37 <td class="track$row_class"> $last_played </td>
38 <td class="track$row_class"> $duration </td>
39 <th class="track$row_class">
40 <a class="alphabetica" href="edit_track.php$track_link_url" title="Edit Track Info">E</a>
41 </th>
42 </tr>
44 EOHTML;
46 return $link;
50 echo "<table width=\"100%\"><tr valign=\"top\">\n";
52 echo "<td width=\"50%\">\n";
53 if ( isset($a) ) {
54 $qa = "SELECT artist, album, title, tracknum, path_name, duration::interval(0), ";
55 $qa .= "extract( EPOCH FROM duration)::int AS secs, quality, get_last_played(hash_key) AS last_played ";
56 $qa .= "FROM tracks WHERE lower(artist) = lower(?) ";
57 $qa .= "ORDER BY lower(album), setpart, tracknum; ";
58 $qry = new AwlQuery($qa, $a);
59 if ( $qry->Exec() && $qry->rows() > 0 ) {
60 echo "<h3>".htmlspecialchars($a)."</h3>\n";
61 $last_album = "";
62 $rownum = 0;
63 while ( $track = $qry->Fetch() ) {
64 if ( $track->album != "" && $track->album != $last_album ) {
65 if ( $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 ( $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", $rownum % 2 );
78 $rownum++;
80 echo "</table>";
83 else if ( isset( $l ) ) {
84 $qa = "SELECT artist, album, title, tracknum, path_name, duration::interval(0), ";
85 $qa .= "extract( EPOCH FROM duration)::int AS secs, quality, get_last_played(hash_key) AS last_played ";
86 $qa .= "FROM tracks WHERE album = '" . addslashes($l) . "' ";
87 $qa .= "ORDER BY album, setpart, tracknum; ";
88 $qry = new AwlQuery($qa);
89 if ( $qry->Exec() && $qry->rows() > 0 ) {
90 echo "<h3><a class=th4 href=\"artist.php?play=1&l=" . urlencode($l) . "$letter_get\">$l</a></h3>\n";
91 $last_artist = "";
92 while ( $track = $qry->Fetch() ) {
93 if ( $track->artist != "" && $track->artist != $last_artist ) {
94 echo "<br><table width=100% cellspacing=0 cellpadding=0><tr class=th4><td width=71% class=th4>";
95 echo "<a class=h4 href=\"artist.php?a=" . urlencode($track->artist) . "&l=" . urlencode($track->album) . "$letter_get\">$track->artist</a></td>\n";
96 echo "<td width=15% class=th4>&nbsp;</td>";
97 echo "<td width=10% class=th4>&nbsp;</td>";
98 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>";
99 $last_artist = $track->artist;
101 else if ( $rownum == 0 ) {
102 echo "<br><table width=100% cellspacing=0 cellpadding=0><tr class=th4><td width=71% class=th4>Unkown Album</td>";
103 echo "<td width='29%' class='th4' colspan='3'>&nbsp;</td></tr>\n";
105 echo track_link($track, ($track->tracknum > 0 ? "$track->tracknum: " : "") . "$track->title", $rownum % 2 );
106 $rownum++;
108 echo "</table>";
111 else {
112 echo "&nbsp;";
114 echo "</td>";
116 echo "<td width=\"50%\">\n";
117 echo "<h3>Artists</h3>\n<p>";
118 if ( isset($altr) || isset($search) ) {
119 $altr = trim("$altr");
120 if ( isset($search) ) {
121 $sql = "SELECT distinct ON ( lower(artist)) artist FROM tracks ";
122 $sql .= "WHERE artist ~* ? OR album ~* ? OR title ~* ? OR path_name ~* ? ";
123 $sql .= "ORDER BY lower(artist);";
124 $qry = new AwlQuery( $sql, $search, $search, $search, $search );
126 else {
127 $qry = new AwlQuery( "SELECT distinct ON ( lower(artist)) artist FROM tracks WHERE artist ~* ? ORDER BY lower(artist)", "^$altr");
129 if ( $qry->Exec('artist') && $qry->rows() > 0 ) {
130 while ( $artist = $qry->Fetch() ) {
131 $display = htmlspecialchars($artist->artist);
132 if ( trim($display) == "" ) $display = "&laquo;unknown&raquo;";
133 echo " <a href=\"artist.php?a=" . urlencode($artist->artist) . "$letter_get\" class=\"artist\">$display</a>\n";
137 echo "</td>\n";
139 echo "</tr></table>\n";
142 include("footers.php");