r10412 - in mb_server/branches/TemplateToolkit: lib/MusicBrainz/Server/Controller lib/MusicBrainz/Server/Form lib/MusicBrainz/Server/Form/Artist lib/MusicBrainz/Server/Form/Field root/artist root/releases

View: New views
1 Messages — Rating Filter:   Alert me  

r10412 - in mb_server/branches/TemplateToolkit: lib/MusicBrainz/Server/Controller lib/MusicBrainz/Server/Form lib/MusicBrainz/Server/Form/Artist lib/MusicBrainz/Server/Form/Field root/artist root/releases

by root-97 :: Rate this Message:

Reply (Restricted by the Administrator) | Reply to Author | View Threaded | Show Only this Message

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
LightInTheBox - Buy quality products at wholesale price!
 
Creative Commons EFF GPL LGPL
Original Design|vacubomb.com Contact Details Server Version: RELEASE-20060712