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;