« Return to Thread: r11783 - in mb_server/trunk: lib/MusicBrainz/Server/Controller lib/MusicBrainz/Server/Entity lib/MusicBrainz/Server/Model root/artist root/components root/label root/recording root/release root/release_group root/work t

r11783 - in mb_server/trunk: lib/MusicBrainz/Server/Controller lib/MusicBrainz/Server/Entity lib/MusicBrainz/Server/Model root/artist root/components root/label root/recording root/release root/release_group root/work t

by root-97 :: Rate this Message:

Reply (Restricted by the Administrator) | Reply to Author | View in Thread

Author: luks
Date: 2009-06-27 18:00:14 +0000 (Sat, 27 Jun 2009)
New Revision: 11783

Added:
   mb_server/trunk/lib/MusicBrainz/Server/Controller/URL.pm
   mb_server/trunk/lib/MusicBrainz/Server/Model/URL.pm
   mb_server/trunk/root/artist/relationships.tt
   mb_server/trunk/root/label/relationships.tt
   mb_server/trunk/root/recording/relationships.tt
   mb_server/trunk/root/release/relationships.tt
   mb_server/trunk/root/release_group/relationships.tt
   mb_server/trunk/t/controller_url.t
Removed:
   mb_server/trunk/lib/MusicBrainz/Server/Controller/Url.pm
   mb_server/trunk/lib/MusicBrainz/Server/Model/Url.pm
   mb_server/trunk/root/artist/relations.tt
   mb_server/trunk/root/label/relations.tt
   mb_server/trunk/root/recording/relations.tt
   mb_server/trunk/root/release/relations.tt
Modified:
   mb_server/trunk/lib/MusicBrainz/Server/Controller/Artist.pm
   mb_server/trunk/lib/MusicBrainz/Server/Controller/Label.pm
   mb_server/trunk/lib/MusicBrainz/Server/Controller/Recording.pm
   mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm
   mb_server/trunk/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm
   mb_server/trunk/lib/MusicBrainz/Server/Controller/User.pm
   mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm
   mb_server/trunk/lib/MusicBrainz/Server/Entity/Relationship.pm
   mb_server/trunk/lib/MusicBrainz/Server/Entity/URL.pm
   mb_server/trunk/root/artist/header.tt
   mb_server/trunk/root/components/common-macros.tt
   mb_server/trunk/root/components/relationships.tt
   mb_server/trunk/root/label/header.tt
   mb_server/trunk/root/recording/header.tt
   mb_server/trunk/root/release/header.tt
   mb_server/trunk/root/release_group/header.tt
   mb_server/trunk/root/work/header.tt
   mb_server/trunk/t/controller_artist.t
   mb_server/trunk/t/controller_release_group.t
Log:
Controller for relationships

Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Artist.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Artist.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Artist.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -5,6 +5,7 @@
 
 with 'MusicBrainz::Server::Controller::Annotation';
 with 'MusicBrainz::Server::Controller::Alias';
+with 'MusicBrainz::Server::Controller::RelationshipRole';
 
 __PACKAGE__->config(
     model       => 'Artist',

Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Label.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Label.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Label.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -5,6 +5,7 @@
 
 with 'MusicBrainz::Server::Controller::Annotation';
 with 'MusicBrainz::Server::Controller::Alias';
+with 'MusicBrainz::Server::Controller::RelationshipRole';
 
 use MusicBrainz::Server::Constants qw( $DLABEL_ID );
 use Data::Page;

Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Recording.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Recording.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Recording.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -4,6 +4,7 @@
 BEGIN { extends 'MusicBrainz::Server::Controller'; }
 
 with 'MusicBrainz::Server::Controller::Annotation';
+with 'MusicBrainz::Server::Controller::RelationshipRole';
 
 __PACKAGE__->config(
     entity_name => 'recording',

Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -4,6 +4,7 @@
 BEGIN { extends 'MusicBrainz::Server::Controller' }
 
 with 'MusicBrainz::Server::Controller::Annotation';
+with 'MusicBrainz::Server::Controller::RelationshipRole';
 
 __PACKAGE__->config(
     entity_name => 'release',

Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/ReleaseGroup.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -4,6 +4,7 @@
 BEGIN { extends 'MusicBrainz::Server::Controller'; }
 
 with 'MusicBrainz::Server::Controller::Annotation';
+with 'MusicBrainz::Server::Controller::RelationshipRole';
 
 __PACKAGE__->config(
     model       => 'ReleaseGroup',
@@ -41,6 +42,12 @@
     );
 }
 
+# TODO
+sub tags : Chained('load') { }
+
+# TODO
+sub details : Chained('load') { }
+
 1;
 
 =head1 NAME

Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/User.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Controller/User.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/User.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -44,7 +44,9 @@
     return 1 if $c->user_exists;
 
     my $login_form = MusicBrainz::Server::Form::User::Login->new;
-    my $redirect = $c->req->query_params->{uri} // $c->req->path;
+    my $redirect = defined $c->req->query_params->{uri}
+        ? $c->req->query_params->{uri}
+        : $c->req->path;
 
     if ($c->form_posted && $login_form->process(params => $c->req->params))
     {

Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -4,6 +4,7 @@
 BEGIN { extends 'MusicBrainz::Server::Controller'; }
 
 with 'MusicBrainz::Server::Controller::Annotation';
+with 'MusicBrainz::Server::Controller::RelationshipRole';
 
 __PACKAGE__->config(
     model       => 'Work',

Modified: mb_server/trunk/lib/MusicBrainz/Server/Entity/Relationship.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Entity/Relationship.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Entity/Relationship.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -52,6 +52,36 @@
     lazy => 1
 );
 
+sub source
+{
+    my ($self) = @_;
+    return ($self->direction == $DIRECTION_FORWARD)
+        ? $self->entity0 : $self->entity1;
+}
+
+sub source_type
+{
+    my ($self) = @_;
+    return ($self->direction == $DIRECTION_FORWARD)
+        ? $self->link->type->entity0_type
+        : $self->link->type->entity1_type;
+}
+
+sub target
+{
+    my ($self) = @_;
+    return ($self->direction == $DIRECTION_FORWARD)
+        ? $self->entity1 : $self->entity0;
+}
+
+sub target_type
+{
+    my ($self) = @_;
+    return ($self->direction == $DIRECTION_FORWARD)
+        ? $self->link->type->entity1_type
+        : $self->link->type->entity0_type;
+}
+
 sub _join_attrs
 {
     my @attrs = map { lc $_ } @{$_[0]};

Modified: mb_server/trunk/lib/MusicBrainz/Server/Entity/URL.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Entity/URL.pm 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/lib/MusicBrainz/Server/Entity/URL.pm 2009-06-27 18:00:14 UTC (rev 11783)
@@ -20,6 +20,8 @@
     isa => 'Int'
 );
 
+sub name { shift->url }
+
 __PACKAGE__->meta->make_immutable;
 no Moose;
 1;

Modified: mb_server/trunk/root/artist/header.tt
===================================================================
--- mb_server/trunk/root/artist/header.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/artist/header.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -3,6 +3,7 @@
     ['releases', link_artist(artist, 'releases', l('Releases'))],
     ['works', link_artist(artist, 'works', l('Works'))],
     ['recordings', link_artist(artist, 'recordings', l('Recordings'))],
+    ['relationships', link_artist(artist, 'relationships', l('Relationships'))],
     ['aliases', link_artist(artist, 'aliases', l('Aliases'))],
     ['tags', link_artist(artist, 'tags', l('Tags'))],
     ['details', link_artist(artist, 'details', l('Details'))],

Modified: mb_server/trunk/root/components/common-macros.tt
===================================================================
--- mb_server/trunk/root/components/common-macros.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/components/common-macros.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -96,6 +96,7 @@
     ELSIF type.search('Entity::Release='); link_release(entity, action, text);
     ELSIF type.search('Entity::ReleaseGroup='); link_release_group(entity, action, text);
     ELSIF type.search('Entity::Recording='); link_recording(entity, action, text);
+    ELSIF type.search('Entity::URL='); link_url(entity, action, text);
     END;
 END -%]
 
@@ -155,6 +156,13 @@
     '<a href="' _ link _ '">' _ text _ '</a>';
 END -%]
 
+[%- MACRO link_url(url, action, text) BLOCK;
+    action = action || 'show';
+    link = c.uri_for_action("/url/$action", [ url.gid ]);
+    text = text || html_escape(url.url);
+    '<a href="' _ url.url _ '">' _ text _ '</a> [<a href="' _ link _ '">' _ l('info') _ '</a>]';
+END -%]
+
 [%- MACRO link_editor(editor, action, text) BLOCK;
     action = action || 'profile';
     link = c.uri_for_action("/user/$action", editor.name);

Modified: mb_server/trunk/root/components/relationships.tt
===================================================================
--- mb_server/trunk/root/components/relationships.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/components/relationships.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,94 +1,33 @@
-[%- DEFAULT maximum=4 -%]
-[%- BLOCK relation_group -%]
-    [% ar.connector | html %]
-    [%- FOREACH entity IN ar.entities -%]
-        [%- IF loop.count > 4 && !showall -%]
-           …
-           [%- LAST -%]
-        [%- ELSE -%]
-           [%#- Has to be on one line so we don't mess up the spacing with the comma :x -%]
-           [%- entity_link(entity) -%]
-           [%- loop.count == (loop.size - 1) ? " and " : !loop.last ? "," : "" -%]
-        [%- END -%]
+<h2>[% l("Relationships") %]</h2>
+
+[%- IF relationships.size -%]
+    <ul>
+    [%- FOREACH relationship IN relationships -%]
+        <li>
+            [%- relationship.phrase | html %] [% link_entity(relationship.target) -%]
+            [%- IF !relationship.link.begin_date.is_empty -%]
+                [%- IF !relationship.link.end_date.is_empty -%]
+                    [%- IF relationship.link.begin_date.format == relationship.link.end_date.format -%]
+                        [%- IF relationship.link.begin_date.day -%]
+                            [% l('on {date}', { date => relationship.link.begin_date.format }) %]
+                        [%- ELSE -%]
+                            [% l('in {date}', { date => relationship.link.begin_date.format }) %]
+                        [%- END -%]
+                    [%- ELSE -%]
+                        [% l('from {begin_date} until {end_date}', {
+                            begin_date => relationship.link.begin_date.format,
+                            end_date => relationship.link.end_date.format
+                        }) %]
+                    [%- END -%]
+                [%- ELSE -%]
+                    [% l('from {date}', { date => relationship.link.begin_date.format }) %]
+                [%- END -%]
+            [%- ELSIF !relationship.link.end_date.is_empty -%]
+                [% l('until {date}', { date => relationship.link.end_date.format }) %]
+            [%- END -%]
+        </li>
     [%- END -%]
-    [% "from ${ar.start_date}" IF ar.start_date %]
-    [% "until ${ar.end_date}" IF ar.end_date %]
+    </ul>
+[%- ELSE -%]
+    [% l('{link} has no relationships.', { link => entity_link(source) }) -%]
 [%- END -%]
-[%- BLOCK list -%]
-    [%- IF relations.size > 1 OR nocompact -%]
-        <ul class="relations_list">
-        [%- FOREACH ar IN relations -%]
-            [%- LAST IF loop.count > maximum && !showall -%]
-            <li>[%- PROCESS relation_group -%]</li>
-        [%- END -%]
-        </ul>
-    [%- ELSIF relations.size == 1 -%]
-        [%- PROCESS relation_group ar=relations.first -%]
-    [%- END -%]
-    [%- IF relations.size > maximum && !showall -%]
-        [%- n = relations.size - maximum -%]
-        <div class="more_relationships">
-            [% ln('{num} relationship not shown', '{num} relationships not shown', n, {num => n}) %]
-            <a href="[% c.entity_url(source, 'relations') %]">[% l('View all relationships…') %]</a>
-        </div>
-    [%- END -%]
-[%- END -%]
-[%- UNLESS justlist -%]
-    [%- IF showall -%]
-        <div class="box orange">
-            <h2>
-                [% l("Relationships for ${source.entity_type} ${source.name}") %]
-            </h2>
-        </div>
-    [%- END -%]
-        <div class="RelationshipBox">
-            [%- IF relations.size -%]
-                [%- entity_link(source) -%][% relations.size > 1 ? ":" : "" %]
-                [%- PROCESS list -%]
-            [%- ELSE -%]
-                [% l(entity_link(source) _ ' has no relationships.') -%]
-            [%- END -%]
-        [%- IF current_relationship -%]
-            <hr/>
-            <p>
-                [% l('Create a relationship with:') %]
-            </p>
-           <ul>
-                <li>[%- entity_link(current_relationship) -%]</li>
-           </ul>
-        [%- END -%]
-        [%- links = [
-            {
-                link => c.uri_for(c.controller('relate').action_for('store'),
-                    [ source.entity_type, source.mbid ]),
-                text => l("Use this ${make_ucfirst(source.entity_type)} in a Relationship")
-                    hide => !c.user_exists,
-                },
-                {
-                link => c.uri_for('/relate/cancel'),
-                    text => l('Cancel'),
-                    hide => !current_relationship || !c.user_exists,
-                },
-                {
-                link => c.uri_for(c.controller('relate').action_for('create'),
-                    [ current_relationship.entity_type, current_relationship.mbid ],
-                    source.entity_type, source.mbid),
-                    text => l('Create Relationship'),
-                    hide => (current_relationship.id == source.id) || !c.user_exists,
-                },
-                {
-                link => c.uri_for(c.controller('relate').action_for('url'),
-                    [ source.entity_type, source.mbid ]),
-                    text => l('Relate to <abbr title="Uniform Resource Locator">URL</abbr>'),
-                    hide => !c.user_exists
-                },
-                {
-                link => c.entity_url(source, 'relations'),
-                    text => l('View Relationships')
-            },
-        ] -%]
-        <div>
-            [%- INCLUDE 'components/piped-list.tt' list=links -%]
-        </div>
-        </div>
-[%- END -%]

Modified: mb_server/trunk/root/label/header.tt
===================================================================
--- mb_server/trunk/root/label/header.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/label/header.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,5 +1,6 @@
 [%- info_links = [
     ['index', link_label(label, 'show', l('Releases'))],
+    ['relationships', link_label(label, 'relationships', l('Relationships'))],
     ['aliases', link_label(label, 'aliases', l('Aliases'))],
     ['tags', link_label(label, 'tags', l('Tags'))],
     ['details', link_label(label, 'details', l('Details'))],

Modified: mb_server/trunk/root/recording/header.tt
===================================================================
--- mb_server/trunk/root/recording/header.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/recording/header.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,7 +1,8 @@
 [%- info_links = [
-    ['index', link_artist(artist, 'show', l('Releases'))],
-    ['tags', link_artist(artist, 'tags', l('Tags'))],
-    ['details', link_artist(artist, 'details', l('Details'))],
+    ['index', link_recording(recording, 'show', l('Releases'))],
+    ['relationships', link_recording(recording, 'relationships', l('Relationships'))],
+    ['tags', link_recording(recording, 'tags', l('Tags'))],
+    ['details', link_recording(recording, 'details', l('Details'))],
 ] -%]
 
 <h1>“[% link_recording(recording) %]” [% disambiguation(recording) %]</h1>

Modified: mb_server/trunk/root/release/header.tt
===================================================================
--- mb_server/trunk/root/release/header.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/release/header.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,7 +1,8 @@
 [%- info_links = [
-    ['index', link_artist(release, 'show', l('Release'))],
-    ['tags', link_artist(release, 'tags', l('Tags'))],
-    ['details', link_artist(release, 'details', l('Details'))],
+    ['index', link_release(release, 'show', l('Release'))],
+    ['relationships', link_release(release, 'relationships', l('Relationships'))],
+    ['tags', link_release(release, 'tags', l('Tags'))],
+    ['details', link_release(release, 'details', l('Details'))],
 ] -%]
 
 <h1>“[% link_release(release) %]” [% disambiguation(release) %]</h1>

Modified: mb_server/trunk/root/release_group/header.tt
===================================================================
--- mb_server/trunk/root/release_group/header.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/release_group/header.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,7 +1,8 @@
 [%- info_links = [
-    ['index', link_artist(artist, 'show', l('Overview'))],
-    ['tags', link_artist(artist, 'tags', l('Tags'))],
-    ['details', link_artist(artist, 'details', l('Details'))],
+    ['index', link_release_group(rg, 'show', l('Overview'))],
+    ['relationships', link_release_group(rg, 'relationships', l('Relationships'))],
+    ['tags', link_release_group(rg, 'tags', l('Tags'))],
+    ['details', link_release_group(rg, 'details', l('Details'))],
 ] -%]
 
 <h1>“[% link_release_group(rg) %]” [% disambiguation(rg) %]</h1>

Modified: mb_server/trunk/root/work/header.tt
===================================================================
--- mb_server/trunk/root/work/header.tt 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/root/work/header.tt 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,5 +1,6 @@
 [%- info_links = [
-    ['index', link_artist(work, 'show', l('Overview'))],
+    ['index', link_work(work, 'show', l('Overview'))],
+    ['relationships', link_work(work, 'relationships', l('Relationships'))],
 ] -%]
 
 <h1>“[% link_work(work) %]” [% disambiguation(work) %]</h1>

Modified: mb_server/trunk/t/controller_artist.t
===================================================================
--- mb_server/trunk/t/controller_artist.t 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/t/controller_artist.t 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 use strict;
-use Test::More tests => 39;
+use Test::More tests => 42;
 
 BEGIN {
     use MusicBrainz::Server::Context;
@@ -66,3 +66,8 @@
 
 $mech->get_ok('/artist/745c079d-374e-4436-9448-da92dedef3ce', 'get artist aliases');
 $mech->content_unlike(qr/Test Alias/, 'other artist pages do not have the alias');
+
+# Test relationships
+$mech->get_ok('/artist/e2a083a9-9942-4d6e-b4d2-8397320b95f7/relationships', 'get artist relationships');
+$mech->content_contains('performed guitar');
+$mech->content_contains('/recording/54b9d183-7dab-42ba-94a3-7388a66604b8');

Modified: mb_server/trunk/t/controller_release_group.t
===================================================================
--- mb_server/trunk/t/controller_release_group.t 2009-06-27 17:18:32 UTC (rev 11782)
+++ mb_server/trunk/t/controller_release_group.t 2009-06-27 18:00:14 UTC (rev 11783)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 use strict;
-use Test::More tests => 24;
+use Test::More tests => 26;
 
 BEGIN {
     use MusicBrainz::Server::Context;
@@ -40,3 +40,10 @@
 $mech->content_like(qr{Warp Records}, 'has uk label');
 $mech->content_like(qr{82796 97772 2}, 'has uk label');
 $mech->content_like(qr{/label/46f0f4cd-8aab-4b33-b698-f459faf64190}, 'has uk label');
+
+TODO: {
+    local $TODO = "Not implemented";
+
+    $mech->get_ok('/release-group/7c3218d7-75e0-4e8c-971f-f097b6c308c5/tags');
+    $mech->get_ok('/release-group/7c3218d7-75e0-4e8c-971f-f097b6c308c5/details');
+}


_______________________________________________
MusicBrainz-commits mailing list
MusicBrainz-commits@...
http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits

 « Return to Thread: r11783 - in mb_server/trunk: lib/MusicBrainz/Server/Controller lib/MusicBrainz/Server/Entity lib/MusicBrainz/Server/Model root/artist root/components root/label root/recording root/release root/release_group root/work t