Hi,

Sorry for the shakey subject title, but that's the best way I can
think of to sumarise. Anyway, in my project at the moment I often have
forms where the user is moving something, and needs to first search
for a destination. An example is changing the track artist: first the
user searches for a new artist, then they enter this edit with a
moderation note.

My current solution, refactored as best as I could, is the following:

# ----
package Foo::Search;

sub filter_artist : Private
{
    my ($self, $c) = @_;

    my $form = $c->form(undef, 'Search::Query');

    return unless $c->form_posted && $form->validate($c->req->params);

    my $artists = $c->model('Artist')->direct_search($form->value('query'));
    $c->stash->{artists} = $artists;
}

package Foo::Track;

sub change_artist : Chained('track')
{
    my ($self, $c) = @_;

    $c->forward('/user/login');
    $c->forward('/search/filter_artist');

}

sub confirm_change_artist : Chained('track') Args(1)
{
    my ($self, $c, $new_artist) = @_;

    $c->forward('/user/login');

    my $track      = $c->stash->{track};
    my $new_artist = $c->model('Artist')->load($new_artist);
    $c->stash->{new_artist} = $new_artist;

    my $form = $c->form($track, 'Track::ChangeArtist');
    $form->context($c);

    return unless $c->form_posted && $form->validate($c->req->params);

    # Database edit here:
    $form->change_artist($new_artist);

    my $release = $c->model('Release')->load($track->release);
    $c->response->redirect($c->entity_url($release, 'show'));
}
# ----

The user would visit change_artist and be presented with a search
form. They submit back to change_artist, and selecting an artist
navigates them to confirm_change_artist, with a new form.

Is this a sensible approach to this problem? As I said, I have a fair
few actions that follow this idiom of searching for an artist before
entering the moderation - so I've tried to do it with the least
duplication possible.

Any advice on this (or my code in general I suppose!) will be greatly
appreciated :)
- Ollie

_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to