# $Id: /local/CPAN/Mango/lib/Mango/Catalyst/Controller/Wishlists.pm 1644 2008-06-02T01:46:53.055259Z claco $
package Mango::Catalyst::Controller::Wishlists;
use strict;
use warnings;
BEGIN {
use base qw/Mango::Catalyst::Controller/;
use Handel::Constants qw/:cart/;
use Mango ();
use Path::Class::Dir ();
__PACKAGE__->config(
resource_name => 'mango/wishlists',
form_directory =>
Path::Class::Dir->new( Mango->share, 'forms', 'wishlists' )
);
}
sub auto : Private {
my ( $self, $c ) = @_;
if ( !$c->user_exists ) {
$c->response->status(401);
$c->stash->{'template'} = 'errors/401';
$c->detach;
}
return 1;
}
sub list : Chained('/') PathPrefix Args(0) Template('wishlists/list') {
my ( $self, $c ) = @_;
my $wishlists = $c->model('Wishlists')->search(
{ user => $c->user->id },
{
page => $self->current_page,
rows => $self->entries_per_page
}
);
my $pager = $wishlists->pager;
$c->stash->{'wishlists'} = $wishlists;
$c->stash->{'pager'} = $pager;
return;
}
sub instance : Chained('/') PathPrefix CaptureArgs(1) {
my ( $self, $c, $id ) = @_;
my $wishlist = $c->model('Wishlists')->search(
{
user => $c->user->id,
id => $id
}
)->first;
if ( defined $wishlist ) {
$c->stash->{'wishlist'} = $wishlist;
} else {
$c->response->status(404);
$c->detach;
}
return;
}
sub view : Chained('instance') PathPart('') Args(0) Template('wishlists/view')
{
my ( $self, $c ) = @_;
return;
}
sub clear : Chained('instance') PathPart Args(0) Template('wishlists/view') {
my ( $self, $c ) = @_;
my $form = $self->form;
my $wishlist = $c->stash->{'wishlist'};
if ( $self->submitted && $self->validate->success ) {
$wishlist->clear;
}
$c->response->redirect(
$c->uri_for_resource( 'mango/wishlists', 'view', [ $wishlist->id ] )
. '/' );
return;
}
sub edit : Chained('instance') PathPart Args(0) Template('wishlists/edit') {
my ( $self, $c ) = @_;
my $wishlist = $c->stash->{'wishlist'};
my $form = $self->form;
$form->values(
{
id => $wishlist->id,
name => $wishlist->name,
description => $wishlist->description,
created => $wishlist->created . '',
updated => $wishlist->updated . ''
}
);
if ( $self->submitted && $self->validate->success ) {
$wishlist->name( $form->field('name') );
$wishlist->description( $form->field('description') );
$wishlist->update;
$form->values( { updated => $wishlist->updated . '' } );
$c->response->redirect(
$c->uri_for_resource( 'mango/wishlists', 'view',
[ $wishlist->id ] )
. '/'
);
}
return;
}
sub delete : Chained('instance') PathPart Args(0) Template('wishlists/view') {
my ( $self, $c ) = @_;
my $form = $self->form;
my $wishlist = $c->stash->{'wishlist'};
if ( $self->submitted && $self->validate->success ) {
$wishlist->destroy;
$c->response->redirect(
$c->uri_for_resource( 'mango/wishlists', 'list' ) . '/' );
}
return;
}
sub restore : Chained('instance') PathPart Args(0) Template('wishlists/view')
{
my ( $self, $c ) = @_;
my $form = $self->form;
my $wishlist = $c->stash->{'wishlist'};
if ( $self->submitted && $self->validate->success ) {
$c->user->cart->restore( $wishlist, $form->field('mode') );
$c->response->redirect(
$c->uri_for_resource( 'mango/cart', 'view' ) . '/' );
}
return;
}
1;
__END__
=head1 NAME
Mango::Catalyst::Controller::Wishlists - Catalyst controller for current users wishlists
=head1 SYNOPSIS
package MyApp::Controller::Wishlists;
use base 'Mango::Catalyst::Controller::Wishlists';
=head1 DESCRIPTION
Mango::Catalyst::Controller::Wishlists provides the web interface for the
current users wishlists.
=head1 ACTIONS
=head2 auto
Checks to see if the current user is authenticated and sends a 401 http status
code if they are not.
=head2 clear : /wishlists/<id>/clear/
Removes all items in the specified wishlist for the current user.
=head2 delete : /wishlists/<id>/delete/
Deletes the specified wishlist for the current user.
=head2 edit : /wishlists/<id>/edit/
Updates the specified wishlist for the current user.
=head2 instance : /wishlists/<id>/
Loads the specified wishlist for the current user.
=head2 list : /wishlists/
Displays a list of the wishlists for the current user.
=head2 restore : /wishlists/<id>/restore/
Copies the specified wishlists items in the current users cart.
=head2 view : /wishlists/<id>/
Displays the specified wishlist for the current user.
=head1 SEE ALSO
L<Mango::Catalyst::Model::Carts>, L<Mango::Provider::Carts>
=head1 AUTHOR
Christopher H. Laco
CPAN ID: CLACO
claco@chrislaco.com
http://today.icantfocus.com/blog/