Author: acid2
Date: 2008-10-02 11:36:47 +0000 (Thu, 02 Oct 2008)
New Revision: 10412
Added:
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/AddNonAlbumTrack.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Base.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Create.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/DataQuality.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Edit.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Merge.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/EditNote.pm
mb_server/branches/TemplateToolkit/root/artist/add_non_album.tt
mb_server/branches/TemplateToolkit/root/artist/change_quality.tt
Removed:
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/AddNonAlbumTrack.pm
mb_server/branches/TemplateToolkit/root/artist/add-non-album.tt
mb_server/branches/TemplateToolkit/root/artist/quality.tt
Modified:
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/DataQuality.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Field/Track.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Track.pm
mb_server/branches/TemplateToolkit/root/releases/release.tt
Log:
Rethought the way I interact with forms, cleaner approach
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm 2008-10-02 11:36:11 UTC (rev 10411)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm 2008-10-02 11:36:47 UTC (rev 10412)
@@ -210,37 +210,28 @@
$c->forward('/user/login');
- use MusicBrainz::Server::Form::Artist;
-
- my $form = new MusicBrainz::Server::Form::Artist;
+ my $form = $c->form(undef, 'Artist::Create');
$form->context($c);
- $c->stash->{form} = $form;
+ return unless $c->form_posted && $form->validate($c->req->params);
- if ($c->form_posted)
- {
- if (my $mods = $form->update_from_form($c->req->params))
- {
- $c->flash->{ok} = "Thanks! The artist has been added to the " .
- "database, and we have redirected you to " .
- "their landing page";
+ my $mods = $form->create_artist($c->req->params);
- # Make sure that the moderation did go through, and redirect to
- # the new artist
- my $addmod = grep { $_->Type eq ModDefs::MOD_ADD_ARTIST } @$mods;
+ $c->flash->{ok} = "Thanks! The artist has been added to the " .
+ "database, and we have redirected you to " .
+ "their landing page";
- die "Artist could not be created"
- unless $addmod;
+ # Make sure that the moderation did go through, and redirect to
+ # the new artist
+ my @add_mods = grep { $_->type eq ModDefs::MOD_ADD_ARTIST } @$mods;
- # we can't use entity_url because that would require loading the new artist
- # or creating a mock artist - both are messier than this slightly
- # hacky solution
- $c->response->redirect($c->uri_for('/artist/show', $addmod->row_id));
- $c->detach;
- }
- }
+ die "Artist could not be created"
+ unless @add_mods;
- $c->stash->{template} = 'artist/create.tt';
+ # we can't use entity_url because that would require loading the new artist
+ # or creating a mock artist - both are messier than this slightly
+ # hacky solution
+ $c->response->redirect($c->uri_for('/artist', $add_mods[0]->row_id));
}
=head2 edit
@@ -262,26 +253,17 @@
my $artist = $c->stash->{artist};
- use MusicBrainz::Server::Form::Artist;
-
- my $form = new MusicBrainz::Server::Form::Artist($artist->id);
+ my $form = $c->form($artist, 'Artist::Edit');
$form->context($c);
- $c->stash->{form} = $form;
+ return unless $c->form_posted && $form->validate($c->req->params);
- if ($c->form_posted)
- {
- if ($form->update_from_form($c->req->params))
- {
- $c->flash->{ok} = "Thanks, your artist edit has been entered " .
- "into the moderation queue";
+ $form->update_model($artist);
- $c->response->redirect($c->entity_url($artist, 'show'));
- $c->detach;
- }
- }
+ $c->flash->{ok} = "Thanks, your artist edit has been entered " .
+ "into the moderation queue";
- $c->stash->{template} = 'artist/edit.tt';
+ $c->response->redirect($c->entity_url($artist, 'show'));
}
=head2 merge
@@ -295,20 +277,15 @@
my ($self, $c) = @_;
$c->forward('/user/login');
+ $c->stash->{template} = 'artist/merge_search.tt';
- use MusicBrainz::Server::Form::Search::Query;
- my $form = new MusicBrainz::Server::Form::Search::Query;
+ my $form = $c->form(undef, 'Search::Query');
- if ($c->form_posted && $form->validate($c->req->params))
- {
- my $artist = $c->stash->{artist};
-
- my $artists = $c->model('Artist')->direct_search($form->value('query'));
- $c->stash->{artists} = $artists;
- }
-
- $c->stash->{form } = $form;
- $c->stash->{template} = 'artist/merge_search.tt';
+ return unless $c->form_posted && $form->validate($c->req->params);
+
+ my $artist = $c->stash->{artist};
+ my $artists = $c->model('Artist')->direct_search($form->value('query'));
+ $c->stash->{artists} = $artists;
}
sub merge_into : Chained('artist') PathPart('merge-into') Args(1)
@@ -317,41 +294,23 @@
$c->forward('/user/login');
- use MusicBrainz::Server::Form;
- my $form = new MusicBrainz::Server::Form(profile => {
- required => { edit_note => 'TextArea' },
- });
-
+ my $artist = $c->stash->{artist};
my $new_artist = $c->model('Artist')->load($new_mbid);
- $c->stash->{new_artist} = $new_artist;
- if ($c->form_posted)
- {
- require Moderation;
- my @mods = Moderation->InsertModeration(
- DBH => $c->mb->{DBH},
- uid => $c->user->id,
- privs => $c->user->privs,
- type => ModDefs::MOD_MERGE_ARTIST,
+ my $form = $c->form($artist, 'Artist::Merge');
+ $form->context($c);
- source => $c->stash->{artist},
- target => $new_artist,
- );
+ $c->stash->{new_artist} = $new_artist;
+ $c->stash->{template } = 'artist/merge.tt';
- if (@mods)
- {
- $mods[0]->InsertNote($c->user->id, $form->value('edit_note'))
- if $form->value('edit_note') =~ /\S/;
+ return unless $c->form_posted && $form->validate($c->req->params);
- $c->flash->{ok} = "Thanks, your artist edit has been entered " .
- "into the moderation queue";
+ $form->perform_merge($new_artist);
- $c->response->redirect($c->entity_url($new_artist, 'show'));
- $c->detach;
- }
- }
+ $c->flash->{ok} = "Thanks, your artist edit has been entered " .
+ "into the moderation queue";
- $c->stash->{template} = 'artist/merge.tt';
+ $c->response->redirect($c->entity_url($new_artist, 'show'));
}
=head2 subscribe
@@ -472,21 +431,17 @@
$c->forward('/user/login');
my $artist = $c->stash->{artist};
-
- use MusicBrainz::Server::Form::AddNonAlbumTrack;
- my $form = MusicBrainz::Server::Form::AddNonAlbumTrack->new($artist);
+
+ my $form = $c->form($artist, 'Artist::AddNonAlbumTrack');
$form->context($c);
- if ($c->form_posted && $form->update_from_form($c->req->params))
- {
- $c->flash->{ok} = 'Thanks, your edit has been entered into the moderation queue';
+ return unless $c->form_posted && $form->validate($c->req->params);
- $c->response->redirect($c->entity_url($artist, 'show'));
- $c->detach;
- }
+ $form->add_track;
- $c->stash->{form } = $form;
- $c->stash->{template} = 'artist/add-non-album.tt';
+ $c->flash->{ok} = 'Thanks, your edit has been entered into the moderation queue';
+
+ $c->response->redirect($c->entity_url($artist, 'show'));
}
=head2 change_quality
@@ -503,25 +458,17 @@
my $artist = $c->stash->{artist};
- use MusicBrainz::Server::Form::DataQuality;
-
- my $form = new MusicBrainz::Server::Form::DataQuality($artist);
+ my $form = $c->form($artist, 'Artist::DataQuality');
$form->context($c);
- if ($c->form_posted)
- {
- if ($form->update_from_form($c->req->params))
- {
- $c->flash->{ok} = "Thanks, your artist edit has been entered " .
- "into the moderation queue";
+ return unless $c->form_posted && $form->validate($c->req->params);
- $c->response->redirect($c->entity_url($artist, 'show'));
- $c->detach;
- }
- }
+ $form->update_model;
- $c->stash->{form} = $form;
- $c->stash->{template} = 'artist/quality.tt';
+ $c->flash->{ok} = "Thanks, your artist edit has been entered " .
+ "into the moderation queue";
+
+ $c->response->redirect($c->entity_url($artist, 'show'));
}
=head1 LICENSE
Deleted: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/AddNonAlbumTrack.pm
Copied: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/AddNonAlbumTrack.pm (from rev 10411, mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/AddNonAlbumTrack.pm)
Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Base.pm
Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Create.pm
Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/DataQuality.pm
Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Edit.pm
Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist/Merge.pm
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist.pm 2008-10-02 11:36:11 UTC (rev 10411)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Artist.pm 2008-10-02 11:36:47 UTC (rev 10412)
@@ -85,10 +85,7 @@
{
my $self = shift;
- my $mb = new MusicBrainz;
- $mb->Login;
-
- my $artist = MusicBrainz::Server::Artist->new($mb->{DBH});
+ my $artist = MusicBrainz::Server::Artist->new($self->context->mb->{DBH});
my $artists = $artist->select_artists_by_name($self->value('name'));
my @dupes;
@@ -105,28 +102,6 @@
}
}
-=head2 init_item
-
-If we have been passed an artist row ID at creation time, load this
-artist so we can fill the form fields.
-
-=cut
-
-sub init_item
-{
- my $self = shift;
- my $id = $self->item_id;
-
- return unless defined $id;
-
- my $mb = new MusicBrainz;
- $mb->Login();
-
- my $artist = MusicBrainz::Server::Artist->newFromId($mb->{DBH}, $id);
-
- return $artist;
-}
-
=head2 init_value
Initialize the value for a form field, given the name of the field.
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/DataQuality.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/DataQuality.pm 2008-10-02 11:36:11 UTC (rev 10411)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/DataQuality.pm 2008-10-02 11:36:47 UTC (rev 10412)
@@ -97,25 +97,10 @@
$moderation{DBH } = $self->context->mb->{DBH};
$moderation{uid } = $user->id;
$moderation{privs} = $user->privs;
+ $moderation{quality} = $self->value('quality');
- use Switch;
- switch ($item->entity_type)
- {
- case ("artist")
- {
- $moderation{type } = ModDefs::MOD_CHANGE_ARTIST_QUALITY;
- $moderation{artist } = $item;
- $moderation{quality} = $self->value('quality');
- }
+ %moderation = %{ $self->build_moderation };
- case ("release")
- {
- $moderation{type } = ModDefs::MOD_CHANGE_RELEASE_QUALITY;
- $moderation{releases} = [ $item ];
- $moderation{quality } = $self->value('quality');
- }
- }
-
my @mods = Moderation->InsertModeration(%moderation);
$mods[0]->InsertNote($user->id, $self->value('edit_note'))
@@ -124,21 +109,6 @@
return \@mods;
}
-=head2 update_from_form
-
-A small helper method to validate the form and update the database if
-validation succeeds in one easy call.
-
-=cut
-
-sub update_from_form
-{
- my ($self, $data) = @_;
-
- return unless $self->validate($data);
- $self->update_model;
-}
-
=head1 LICENSE
This software is provided "as is", without warranty of any kind, express or
Added: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/EditNote.pm
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Field/Track.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Field/Track.pm 2008-10-02 11:36:11 UTC (rev 10411)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Field/Track.pm 2008-10-02 11:36:47 UTC (rev 10412)
@@ -33,9 +33,9 @@
my $profile = {
required => {
name => 'Text',
- duration => '+MusicBrainz::Server::Form::Field::Time',
},
optional => {
+ duration => '+MusicBrainz::Server::Form::Field::Time',
}
};
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Track.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Track.pm 2008-10-02 11:36:11 UTC (rev 10411)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Track.pm 2008-10-02 11:36:47 UTC (rev 10412)
@@ -9,63 +9,76 @@
sub profile
{
- {
+ return {
required => {
- name => 'Text',
- number => '+MusicBrainz::Server::Form::Field::TrackNumber',
+ track => '+MusicBrainz::Server::Form::Field::Track',
},
optional => {
- duration => '+MusicBrainz::Server::Form::Field::Time',
edit_note => 'TextArea',
}
}
}
+sub init_value
+{
+ my ($self, $field) = @_;
+
+ my $track = $self->item;
+
+ use Switch;
+ switch ($field->name)
+ {
+ case ('track') { return $self->item; }
+ }
+}
+
sub update_model
{
my $self = shift;
- my $item = $self->item;
- my $user = $self->context->user;
+ my $track = $self->item;
+ my $user = $self->context->user;
my %mod_base = (
DBH => $self->context->mb->{DBH},
uid => $user->id,
privs => $user->privileges,
- track => $item->get_track,
+ track => $track,
);
my $has_edit_note = $self->value('edit_note') =~ /\S/;
# Track number:
- if ($self->value('number') ne $item->number)
+ if ($self->value('track')->{number} ne $track->sequence)
{
my %moderation = %mod_base;
$moderation{type} = ModDefs::MOD_EDIT_TRACKNUM;
- $moderation{newseq} = $self->value('number');
+ $moderation{newseq} = $self->value('track');
my @mods = Moderation->InsertModeration(%moderation);
$mods[0]->InsertNote($user->id, $self->value('edit_note'))
if $mods[0] and $has_edit_note;
}
- if ($self->value('name') ne $item->name)
+ # Track name:
+ if ($self->value('track')->{name} ne $track->name)
{
my %moderation = %mod_base;
$moderation{type} = ModDefs::MOD_EDIT_TRACKNAME;
- $moderation{newname} = $self->value('name');
+ $moderation{newname} = $self->value('track')->{name};
my @mods = Moderation->InsertModeration(%moderation);
$mods[0]->InsertNote($user->id, $self->value('edit_note'))
if $mods[0] and $has_edit_note;
}
- if ($self->value('duration') ne MusicBrainz::Server::Track::UnformatTrackLength($item->duration))
+ # Track Duration
+ if ($self->value('track')->{duration} ne $track->length)
{
my %moderation = %mod_base;
$moderation{type} = ModDefs::MOD_EDIT_TRACKTIME;
- $moderation{newlength} = $self->value('duration');
+ $moderation{newlength} = $self->value('track')->{duration};
my @mods = Moderation->InsertModeration(%moderation);
$mods[0]->InsertNote($user->id, $self->value('edit_note'))
@@ -79,7 +92,10 @@
{
my ($self, $data) = @_;
- $self->validate($data) and $self->update_model;
+ $self->validate($data) or return;
+ $self->update_model;
+
+ return 1;
}
1;
Deleted: mb_server/branches/TemplateToolkit/root/artist/add-non-album.tt
Copied: mb_server/branches/TemplateToolkit/root/artist/add_non_album.tt (from rev 10411, mb_server/branches/TemplateToolkit/root/artist/add-non-album.tt)
Copied: mb_server/branches/TemplateToolkit/root/artist/change_quality.tt (from rev 10411, mb_server/branches/TemplateToolkit/root/artist/quality.tt)
Deleted: mb_server/branches/TemplateToolkit/root/artist/quality.tt
Modified: mb_server/branches/TemplateToolkit/root/releases/release.tt
===================================================================
--- mb_server/branches/TemplateToolkit/root/releases/release.tt 2008-10-02 11:36:11 UTC (rev 10411)
+++ mb_server/branches/TemplateToolkit/root/releases/release.tt 2008-10-02 11:36:47 UTC (rev 10412)
@@ -36,6 +36,7 @@
[%- IF c.user_exists -%]
<td class="editinglinks">
[%- track_edit_links = [
+ { link => c.entity_url(track, 'edit'), text => "Edit" },
{ link => c.entity_url(track, 'remove'), text => "Remove" }
] -%]
[%- INCLUDE "components/piped-list.tt" list=track_edit_links -%]
_______________________________________________
MusicBrainz-commits mailing list
MusicBrainz-commits@...
http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits