webgui/lib/WebGUI/Content/Shop.pm

279 lines
6.9 KiB
Perl

package WebGUI::Content::Shop;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2009 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
use WebGUI::AdminConsole;
use WebGUI::Exception::Shop;
use WebGUI::Shop::AddressBook;
use WebGUI::Shop::Cart;
use WebGUI::Shop::Credit;
use WebGUI::Shop::Pay;
use WebGUI::Shop::Ship;
use WebGUI::Shop::Tax;
use WebGUI::Shop::Transaction;
use WebGUI::Shop::Vendor;
=head1 NAME
Package WebGUI::Content::Shop
=head1 DESCRIPTION
A content handler that opens up all the commerce functionality. The shop modules are accessed via the url like this:
/pagename?shop=modulehandler;method=www_method
For example:
/home?shop=transaction;method=manage
In the above we're accessing the WebGUI::Shop::Transaction module, which is configured with the www_transaction() sub in this package. And we're calling www_manage() on that object.
=head1 SYNOPSIS
use WebGUI::Content::Shop;
my $output = WebGUI::Content::Shop::handler($session);
=head1 SUBROUTINES
These subroutines are available from this package:
=cut
#-------------------------------------------------------------------
=head2 handler ( session )
The content handler for this package.
=cut
sub handler {
my ($session) = @_;
my $output = undef;
my $shop = $session->form->get("shop");
return $output unless ($shop);
my $function = "www_".$shop;
if ($function ne "www_" && (my $sub = __PACKAGE__->can($function))) {
$output = $sub->($session);
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $function", method=>$function);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_address ()
Hand off to the address book.
=cut
sub www_address {
my $session = shift;
my $output = undef;
my $method = "www_". ( $session->form->get("method") || "view");
my $cart = WebGUI::Shop::AddressBook->newByUserId($session);
if ($cart->can($method)) {
$output = $cart->$method();
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_admin ()
Hand off to admin processor.
=cut
sub www_admin {
my $session = shift;
my $output = undef;
my $method = "www_". ( $session->form->get("method") || "editSettings");
my $admin = WebGUI::Shop::Admin->new($session);
if ($admin->can($method)) {
$output = $admin->$method();
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_cart ()
Hand off to the cart.
=cut
sub www_cart {
my $session = shift;
my $output = undef;
my $method = "www_". ( $session->form->get("method") || "view");
my $cart = WebGUI::Shop::Cart->newBySession($session);
if ($cart->can($method)) {
$output = $cart->$method();
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_credit ()
Hand off to the credit system.
=cut
sub www_credit {
my $session = shift;
my $output = undef;
my $method = "www_".$session->form->get("method");
if ($method ne "www_" && WebGUI::Shop::Credit->can($method)) {
$output = WebGUI::Shop::Credit->$method($session);
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_pay ()
Hand off to the payment gateway.
=cut
sub www_pay {
my $session = shift;
my $output = undef;
my $method = "www_".$session->form->get("method");
my $pay = WebGUI::Shop::Pay->new($session);
if ($method ne "www_" && $pay->can($method)) {
$output = $pay->$method();
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_ship ()
Hand off to the shipper.
=cut
sub www_ship {
my $session = shift;
my $output = undef;
my $method = "www_".$session->form->get("method");
my $ship = WebGUI::Shop::Ship->new($session);
if ($method ne "www_" && $ship->can($method)) {
$output = $ship->$method($session);
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_tax ()
Hand off to the tax system.
=cut
sub www_tax {
my $session = shift;
my $output = undef;
my $method = "www_".$session->form->get("method");
my $tax = WebGUI::Shop::Tax->new($session);
if ($method ne "www_" && $tax->can($method)) {
$output = $tax->$method();
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_transaction ()
Hand off to the transaction system.
=cut
sub www_transaction {
my $session = shift;
my $output = undef;
my $method = "www_".$session->form->get("method");
if ($method ne "www_" && WebGUI::Shop::Transaction->can($method)) {
$output = WebGUI::Shop::Transaction->$method($session);
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
#-------------------------------------------------------------------
=head2 www_vendor ()
Hand off to the vendor system.
=cut
sub www_vendor {
my $session = shift;
my $output = undef;
my $method = "www_".$session->form->get("method");
if ($method ne "www_" && WebGUI::Shop::Vendor->can($method)) {
$output = WebGUI::Shop::Vendor->$method($session);
}
else {
WebGUI::Error::MethodNotFound->throw(error=>"Couldn't call non-existant method $method", method=>$method);
}
return $output;
}
1;