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