[mb-commits] r9900 - in mb_server/branches/TemplateToolkit: lib/MusicBrainz/Server/Controller root/artist root/forms/user root/user
root at musicbrainz.org
root at musicbrainz.org
Sun Jun 29 16:09:08 UTC 2008
Author: acid2
Date: 2008-06-29 16:09:08 +0000 (Sun, 29 Jun 2008)
New Revision: 9900
Added:
mb_server/branches/TemplateToolkit/root/forms/user/preferences.fb
mb_server/branches/TemplateToolkit/root/user/preferences.tt
Modified:
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm
mb_server/branches/TemplateToolkit/root/artist/show.tt
mb_server/branches/TemplateToolkit/root/forms/user/register.fb
Log:
Done most of the work loading releases on the show album page (but this still needs options to decide between all release types and just albums, singles & eps). Updated the show artist page with a basic use of this new data
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm 2008-06-29 15:09:26 UTC (rev 9899)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm 2008-06-29 16:09:08 UTC (rev 9900)
@@ -28,6 +28,7 @@
require MusicBrainz::Server::Validation;
require MusicBrainz::Server::Artist;
require ModDefs;
+ use MusicBrainz::Server::Release;
if($mbid ne "")
{
@@ -41,6 +42,70 @@
$artist->SetMBId($mbid);
$artist->LoadFromId(1) or $c->error("Failed to load artist");
+ # Load releases
+ my @releases = $artist->GetReleases(1, 1);
+ my $onlyHasVAReleases = (scalar @releases) == 0;
+
+ my @shortList;
+
+ for my $release (@releases)
+ {
+ my ($type, $status) = $release->GetReleaseTypeAndStatus;
+
+ # Construct values to sort on
+ use Encode qw( decode );
+
+ $release->SetMultipleTrackArtists($release->GetArtist != $release->GetId() ? 1 : 0);
+ $release->{_is_va_} = ($release->GetArtist == &ModDefs::VARTIST_ID or
+ $release->GetArtist != $release->GetId());
+ $release->{_is_nonalbum_} = ($type == MusicBrainz::Server::Release::RELEASE_ATTR_NONALBUMTRACKS);
+ $release->{_section_key_} = ($release->{_is_va_} . " " . $type);
+ $release->{_name_sort_} = lc decode "utf-8", $release->GetName;
+ $release->{_disc_max_} = 0;
+ $release->{_disc_no_} = 0;
+ $release->{_firstreleasedate_} = ($release->GetFirstReleaseDate || "9999-99-99");
+
+ CheckAttributes($release);
+
+ # Attempt to sort "disc x [of y]" correctly
+ if ($release->{_name_sort_} =~
+ /^(.*) # $1 <main title>
+ (?:[(]disc\ (\d+) # $2 (disc x
+ (?:\ of\ (\d+))? # $3 [of y]
+ (?::[^()]* # [: <disc title>
+ (?:[(][^()]*[)][^()]*)* # [<1 level of nested par.>]
+ )? # ]
+ [)] # )
+ )
+ (.*)$ # $4 [<rest of main title>]
+ /xi)
+ {
+ $release->{_name_sort_} = "$1 $4";
+ $release->{_disc_no_} = $2;
+ $release->{_disc_max_} = $3 || 0;
+ }
+
+ # Push onto our list of releases we are actually interested in
+ push @shortList, $release
+ if ($type == MusicBrainz::Server::Release::RELEASE_ATTR_ALBUM ||
+ $type == MusicBrainz::Server::Release::RELEASE_ATTR_EP ||
+ $type == MusicBrainz::Server::Release::RELEASE_ATTR_COMPILATION ||
+ $type == MusicBrainz::Server::Release::RELEASE_ATTR_SINGLE);
+ }
+
+ if(scalar @shortList)
+ {
+ @releases = @shortList;
+ @releases = sort SortAlbums @releases;
+ }
+ else
+ {
+ $c->error("No releases to show");
+ }
+
+ # Create data structures for the template
+ #
+ # Artist:
$c->stash->{artist} = {
name => $artist->GetName,
type => MusicBrainz::Server::Artist::GetTypeName($artist->GetType) || '',
@@ -52,10 +117,93 @@
resolution => $artist->GetResolution,
};
+ # Releases, sorted into "release groups":
+ $c->stash->{groups} = [];
+
+ my $currentGroup;
+ for my $release (@releases)
+ {
+ my ($type, $status) = $release->GetReleaseTypeAndStatus;
+
+ # Releases should have sorted into groups, so if $type has changed, we need to create
+ # a new "release group"
+ if(not defined $currentGroup or $currentGroup->{type} != $type)
+ {
+ $currentGroup = {
+ name => $release->GetAttributeNamePlural($type),
+ releases => [],
+ type => $type
+ };
+
+ push @{$c->stash->{groups}}, $currentGroup;
+ }
+
+ my $rel = {
+ title => $release->GetName,
+ id => $release->GetMBId
+ };
+
+ push @{$currentGroup->{releases}}, $rel;
+ }
+
$c->stash->{template} = 'artist/show.tt';
}
+sub CheckAttributes
+{
+ my ($a) = @_;
+ use MusicBrainz::Server::Release;
+
+ for my $attr ($a->GetAttributes)
+ {
+ $a->{_attr_type} = $attr if ($attr >= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_START &&
+ $attr <= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_END);
+ $a->{_attr_status} = $attr if ($attr >= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_START &&
+ $attr <= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_END);
+ $a->{_attr_type} = $attr if ($attr == MusicBrainz::Server::Release::RELEASE_ATTR_NONALBUMTRACKS);
+ }
+
+ # The "actual values", used for display
+ $a->{_actual_attr_type} = $a->{_attr_type};
+ $a->{_actual_attr_status} = $a->{_attr_status};
+
+ # Used for sorting
+ $a->{_attr_type} = MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_END + 1 if (not defined $a->{_attr_type});
+ $a->{_attr_status} = MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_END + 1 if (not defined $a->{_attr_status});
+};
+
+sub SortAlbums
+{
+ require MusicBrainz::Server::Release;
+
+ # I edited these out of one huge "or"ed conditional as it was a bitch to debug
+
+ my $p1 = $a->{_is_va_} <=> $b->{_is_va_};
+ my $p2 = $b->{_is_nonalbum_} <=> $a->{_is_nonalbum_};
+ my $p3 = $a->{_attr_type} <=> $b->{_attr_type};
+
+ $p1 or $p2 or $p3 or
+
+ ($a->{_firstreleasedate_} cmp $b->{_firstreleasedate_}) or
+
+ ($a->{_name_sort_} cmp $b->{_name_sort_}) or
+
+ ($a->{_disc_max_} <=> $b->{_disc_max_}) or
+
+ ($a->{_disc_no_} <=> $b->{_disc_no_}) or
+
+ ($a->{_attr_status} <=> $b->{_attr_status}) or
+
+ ($a->{trackcount} cmp $b->{trackcount}) or
+
+ ($b->{trmidcount} cmp $a->{trmidcount}) or
+
+ ($b->{puidcount} cmp $a->{puidcount}) or
+
+ ($a->GetId cmp $b->GetId)
+};
+
=head1 AUTHOR
Oliver Charles <oliver.g.charles at googlemail.com>
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm 2008-06-29 15:09:26 UTC (rev 9899)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm 2008-06-29 16:09:08 UTC (rev 9900)
@@ -207,6 +207,18 @@
$c->response->redirect($c->uri_for('/user/login'));
}
+=head2 preferences
+
+Change the users preferences
+
+=cut
+
+sub preferences : Local Form {
+ my ($self, $c) = @_;
+
+ $c->stash->{template} = 'user/preferences.tt';
+}
+
=head1 AUTHOR
Oliver Charles <oliver.g.charles at googlemail.com>
Modified: mb_server/branches/TemplateToolkit/root/artist/show.tt
===================================================================
--- mb_server/branches/TemplateToolkit/root/artist/show.tt 2008-06-29 15:09:26 UTC (rev 9899)
+++ mb_server/branches/TemplateToolkit/root/artist/show.tt 2008-06-29 16:09:08 UTC (rev 9900)
@@ -42,4 +42,16 @@
</div>
</div>
+<h1>Releases</h1>
+[% FOREACH group IN groups %]
+ <h2>[% group.name %]</h2>
+ <ul>
+ [% FOREACH release IN group.releases %]
+ <li>
+ <a href="[% c.uri_for('/release', release.id) %]">[% release.title %]</a>
+ </li>
+ [% END %]
+ </ul>
[% END %]
+
+[% END %]
Added: mb_server/branches/TemplateToolkit/root/forms/user/preferences.fb
Modified: mb_server/branches/TemplateToolkit/root/forms/user/register.fb
===================================================================
--- mb_server/branches/TemplateToolkit/root/forms/user/register.fb 2008-06-29 15:09:26 UTC (rev 9899)
+++ mb_server/branches/TemplateToolkit/root/forms/user/register.fb 2008-06-29 16:09:08 UTC (rev 9900)
@@ -1,27 +1,27 @@
name: user_register
method: post
fields:
- username:
- label: Username
- size: 50
- required: 1
-
- password:
- label: Password
- type: password
- size: 50
- required: 1
-
- confirm_password:
- label: Confirm Password
- type: password
- size: 50
- required: 1
-
- email:
- size: 50
- required: 0
+ username:
+ label: Username
+ size: 50
+ required: 1
+
+ password:
+ label: Password
+ type: password
+ size: 50
+ required: 1
+
+ confirm_password:
+ label: Confirm Password
+ type: password
+ size: 50
+ required: 1
+
+ email:
+ size: 50
+ required: 0
validate:
- confirm_password:
- perl: eq $form->field("password")
\ No newline at end of file
+ confirm_password:
+ perl: eq $form->field("password")
\ No newline at end of file
Added: mb_server/branches/TemplateToolkit/root/user/preferences.tt
More information about the MusicBrainz-commits
mailing list