[mb-commits] r10122 - in mb_server/branches/TemplateToolkit: lib/MusicBrainz/Server lib/MusicBrainz/Server/Action lib/MusicBrainz/Server/Controller root root/artist root/components root/releases root/static root/track

root at musicbrainz.org root at musicbrainz.org
Fri Jul 18 17:10:53 UTC 2008


Author: acid2
Date: 2008-07-18 17:10:52 +0000 (Fri, 18 Jul 2008)
New Revision: 10122

Added:
   mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Adapter.pm
   mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Track.pm
   mb_server/branches/TemplateToolkit/root/artist/relations.tt
   mb_server/branches/TemplateToolkit/root/track/
   mb_server/branches/TemplateToolkit/root/track/relations.tt
Modified:
   mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Action/ArtistPage.pm
   mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
   mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Release.pm
   mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Track.pm
   mb_server/branches/TemplateToolkit/root/components/relations.tt
   mb_server/branches/TemplateToolkit/root/releases/full.tt
   mb_server/branches/TemplateToolkit/root/static/main.css
Log:
Full view on advance relationships for entities. Introduced general adapter module to simplify loading entities from a row ID or MBID

Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Action/ArtistPage.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Action/ArtistPage.pm	2008-07-18 12:22:22 UTC (rev 10121)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Action/ArtistPage.pm	2008-07-18 17:10:52 UTC (rev 10122)
@@ -4,6 +4,8 @@
 use warnings;
 use base 'Catalyst::Action';
 
+use Carp;
+use MusicBrainz::Server::Adapter;
 use MusicBrainz::Server::Artist;
 use MusicBrainz;
 
@@ -35,34 +37,18 @@
         my $mb = $c->mb;
         my $artist = MusicBrainz::Server::Artist->new($mb->{DBH});
 
-        # Validate the arguments
-        unless(MusicBrainz::Server::Validation::IsGUID($mbid))
-        {
-            if (MusicBrainz::Server::Validation::IsNonNegInteger($mbid))
-            {
-                # Appears to be a row ID
-                $artist->SetId($mbid);
-            }
-            else
-            {
-                die "Not a valid GUID or row ID";
-            }
-        }
-        else
-        {
-            # Looks like a GUID
-            $artist->SetMBId($mbid);
-        }
+        MusicBrainz::Server::Adapter::LoadEntity ($artist, $mbid);
 
-        $artist->LoadFromId(1)
-            or die "Failed to load artist";
-
-        die "You cannot view the special DELETED_ARTIST"
+        croak "You cannot view the special DELETED_ARTIST"
             if ($artist->GetId == ModDefs::DARTIST_ID);
 
         $c->stash->{_artist} = $artist;
         $c->stash->{artist} = $artist->ExportStash qw( name mbid type date quality resolution );
     }
+    else
+    {
+        croak "No MBID/row ID given.";
+    }
 
     $self->NEXT::execute(@_);
 }

Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Adapter.pm

Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm	2008-07-18 12:22:22 UTC (rev 10121)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm	2008-07-18 17:10:52 UTC (rev 10122)
@@ -49,6 +49,23 @@
    };
 }
 
+=head2 relations
+
+Shows all the entities (except track) that this artist is related to.
+
+=cut
+
+sub relations : Local Args(1) MyAction('ArtistPage')
+{
+    my ($self, $c, $mbid) = @_;
+
+    my $artist = $c->stash->{_artist};
+    my $links = LoadArtistARLinks ($c->mb->{DBH}, $artist);
+    $c->stash->{relations} = MusicBrainz::Server::Adapter::Relations::ExportLinks($links);
+
+    $c->stash->{template} = 'artist/relations.tt';
+}
+
 =head2 create
 
 When given a GET request this displays a form allowing the user to enter

Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Release.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Release.pm	2008-07-18 12:22:22 UTC (rev 10121)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Release.pm	2008-07-18 17:10:52 UTC (rev 10122)
@@ -6,6 +6,7 @@
 
 use ModDefs;
 use MusicBrainz;
+use MusicBrainz::Server::Adapter;
 use MusicBrainz::Server::Adapter::Relations;
 use MusicBrainz::Server::CoverArt;
 use MusicBrainz::Server::Release;
@@ -45,6 +46,30 @@
     };
 }
 
+=head2 relations
+
+Show all relationships attached to this release
+
+=cut
+
+sub relations : Local Args(1) {
+    my ($self, $c, $mbid) = @_;
+
+    my $release = MusicBrainz::Server::Release->new($c->mb->{DBH});
+    MusicBrainz::Server::Adapter::LoadEntity ($release, $mbid);
+
+    $c->stash->{release} = $release->ExportStash;
+
+    my $link = MusicBrainz::Server::Link->new($c->mb->{DBH});
+    my @arLinks = $link->FindLinkedEntities($release->GetId, 'album');
+
+    MusicBrainz::Server::Adapter::Relations::NormaliseLinkDirections(\@arLinks, $release->GetId, 'album');
+    @arLinks = MusicBrainz::Server::Adapter::Relations::SortLinks(\@arLinks);
+    $c->stash->{relations} = MusicBrainz::Server::Adapter::Relations::ExportLinks(\@arLinks);
+
+    $c->stash->{template} = 'releases/relations.tt';
+}
+
 =head2 show
 
 Display a release to the user.
@@ -61,19 +86,8 @@
     # Load Release
     #
     my $release = MusicBrainz::Server::Release->new($c->mb->{DBH});
-
-    unless (MusicBrainz::Server::Validation::IsGUID($mbid))
-    {
-        if (MusicBrainz::Server::Validation::IsNonNegInteger($mbid))
-            { $release->SetId($mbid); }
-        else
-            { die "Not a valid GUID or row ID"; }
-    }
-    else { $release->SetMBId($mbid); }
-
-    $release->LoadFromId(1)
-        or die "Failed to load release";
-
+    MusicBrainz::Server::Adapter::LoadEntity ($release, $mbid);
+    
     $c->stash->{release} = $release->ExportStash qw/ puids track_count quality language type /;
 
 
@@ -111,13 +125,11 @@
         MusicBrainz::Server::Adapter::Relations::NormaliseLinkDirections(\@trackLinks, $track->GetId, 'track');
         @trackLinks = MusicBrainz::Server::Adapter::Relations::SortLinks(\@trackLinks);
 
-        push @{ $c->stash->{tracks} }, {
-            number => $track->GetSequence,
-            title => $track->GetName,
-            puids => $puid_counts->{ $track->GetId },
-            duration => MusicBrainz::Server::Track::FormatTrackLength($track->GetLength),
-            relations => MusicBrainz::Server::Adapter::Relations::ExportLinks(\@trackLinks),
-        };
+        my $trackStash = $track->ExportStash qw/number duration/;
+        $trackStash->{puids} = $puid_counts->{ $track->GetId };
+        $trackStash->{relations} = MusicBrainz::Server::Adapter::Relations::ExportLinks(\@trackLinks);
+
+        push @{ $c->stash->{tracks} }, $trackStash;
     }
 
 

Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Track.pm

Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Track.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Track.pm	2008-07-18 12:22:22 UTC (rev 10121)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Track.pm	2008-07-18 17:10:52 UTC (rev 10122)
@@ -131,6 +131,29 @@
    $_[0]->{albumjoinmodpending} = $_[1];
 }
 
+sub ExportStash
+{
+    my ($self, @data) = @_;
+
+    my %stash = (
+        name => $self->GetName,
+        mbid => $self->GetMBId,
+        link_type => 'track',
+    );
+
+    use Switch;
+    for (@data)
+    {
+        switch($_)
+        {
+            case('number')   { $stash{number} = $self->GetSequence; }
+            case('duration') { $stash{duration} = FormatTrackLength($self->GetLength); }
+        }
+    }
+
+    return \%stash;
+}
+
 # Given an albumjoin id, determine the track id and load it
 sub LoadFromAlbumJoin
 {

Added: mb_server/branches/TemplateToolkit/root/artist/relations.tt

Modified: mb_server/branches/TemplateToolkit/root/components/relations.tt
===================================================================
--- mb_server/branches/TemplateToolkit/root/components/relations.tt	2008-07-18 12:22:22 UTC (rev 10121)
+++ mb_server/branches/TemplateToolkit/root/components/relations.tt	2008-07-18 17:10:52 UTC (rev 10122)
@@ -1,20 +1,27 @@
 [%- DEFAULT maximum=3 -%]
 [%- BLOCK list -%]
-  <ul>
-    [% FOREACH ar IN relations %]
-      [% LAST IF loop.count > maximum && !showall %]
+  <ul class="relations_list">
+    [%- FOREACH ar IN relations -%]
+      [%- LAST IF loop.count > maximum && !showall -%]
       <li>
         [% ar.connector %]
-        [% FOREACH entity IN ar.entities %] 
-          [% INCLUDE "components/entity-link.tt" %][% !loop.last ? "," : "" %]
-          [% "(${entity.resolution})" IF entity.resolution %]
-        [% END %]
-    [% END %]
+        [%- FOREACH entity IN ar.entities -%]
+          [%- IF loop.count > 4 && !showall -%]
+            &hellip;
+            [%- LAST -%]
+          [%- ELSE -%]
+            [% INCLUDE "components/entity-link.tt" %][% !loop.last ? "," : "" %]
+            [% "(${entity.resolution})" IF entity.resolution %]
+          [%- END -%]
+        [%- END -%]
+    [%- END -%]
   </ul>
   [%- IF relations.size > maximum  && !showall -%]
     [%- n = relations.size - maximum -%]
-    [% n %] relationship[% n > 1 ? "s" : "" %] not shown.
-    <a href="[% c.uri_for("/relations/${source.link_type}/${source.mbid}") %]">View all relationships&hellip;</a>
+    <div class="more_relationships">
+      [% n %] relationship[% n > 1 ? "s" : "" %] not shown.
+    <a href="[% c.uri_for("/${source.link_type}/relations", source.mbid) %]">View all relationships&hellip;</a>
+    </div>
   [%- END -%]
 [%- END -%]
 

Modified: mb_server/branches/TemplateToolkit/root/releases/full.tt
===================================================================
--- mb_server/branches/TemplateToolkit/root/releases/full.tt	2008-07-18 12:22:22 UTC (rev 10121)
+++ mb_server/branches/TemplateToolkit/root/releases/full.tt	2008-07-18 17:10:52 UTC (rev 10122)
@@ -44,7 +44,11 @@
       [%- FOREACH track=tracks -%]
         <tr>
           <td class="number">[% track.number %]</td>
-          <td class="title">[% track.title %]</td>
+          <td class="title">
+            [% track.name %]
+            [% INCLUDE "components/relations.tt" source=track relations=track.relations justlist=1
+                 IF track.relations.size%]
+          </td>
           <td class="duration">[% track.duration %]</td>
           [%- IF c.user_exists -%]
           <td class="editinglinks">
@@ -52,13 +56,6 @@
           </td>
           [%- END -%]
         </tr>
-        [%- IF track.relations.size -%]
-        <tr>
-          <td colspan="3">
-          [% INCLUDE "components/relations.tt" relations=track.relations justlist=1 %]
-          </td>
-        </tr>
-        [%- END -%]
       [%- END -%]
     </tbody>
   </table>

Modified: mb_server/branches/TemplateToolkit/root/static/main.css
===================================================================
--- mb_server/branches/TemplateToolkit/root/static/main.css	2008-07-18 12:22:22 UTC (rev 10121)
+++ mb_server/branches/TemplateToolkit/root/static/main.css	2008-07-18 17:10:52 UTC (rev 10122)
@@ -327,6 +327,7 @@
 
 div.release table td {
     padding: 2pt 3pt;
+    vertical-align: top;
 }
 
 div.release table .number {
@@ -400,3 +401,18 @@
 table.appears .title {
     text-align: left;
 }
+
+.release_tracks ul {
+    padding: 0;
+    margin: 0;
+}
+
+.release_tracks ul,
+.release_tracks .more_relationships {
+    margin-left: 15pt;
+    font-size: 8pt;
+}
+
+.release_tracks ul li {
+    list-style-type: none;
+}

Added: mb_server/branches/TemplateToolkit/root/track/relations.tt




More information about the MusicBrainz-commits mailing list