Commerce::Payment has been sessionized and the API propagated :)

to where it's used.
This commit is contained in:
Colin Kuskie 2006-01-13 22:27:16 +00:00
parent 297b9f8487
commit 5c5c8075cf
6 changed files with 56 additions and 23 deletions

View file

@ -21,7 +21,7 @@ An abstract class for all payment plugins to extend.
Invoking goes as follows:
$plugin = WebGUI::Commerce::Payment->new('MyPlugin');
$plugin = WebGUI::Commerce::Payment->init('MyPlugin');
=head1 METHODS
@ -173,11 +173,12 @@ Returns a reference to an array of all enabled instantiated payment plugins.
=cut
sub getEnabledPlugins {
my ($session) = @_;
my (@enabledPlugins, $plugin, @plugins);
@enabledPlugins = $self->session->db->buildArray("select namespace from commerceSettings where type='Payment' and fieldName='enabled' and fieldValue='1'");
@enabledPlugins = $session->db->buildArray("select namespace from commerceSettings where type='Payment' and fieldName='enabled' and fieldValue='1'");
foreach (@enabledPlugins) {
$plugin = WebGUI::Commerce::Payment->load($_);
$plugin = WebGUI::Commerce::Payment->load($session, $_);
push(@plugins, $plugin) if ($plugin);
}
@ -197,13 +198,14 @@ The namespace of the plugin.
=cut
sub init {
my ($class, $namespace, $properties);
my ($class, $session, $namespace, $properties);
$class = shift;
$session = shift;
$namespace = shift;
$properties = $self->session->db->buildHashRef("select fieldName, fieldValue from commerceSettings where namespace=".$self->session->db->quote($namespace)." and type='Payment'");
$properties = $session->db->buildHashRef("select fieldName, fieldValue from commerceSettings where namespace=".$session->db->quote($namespace)." and type='Payment'");
bless {_properties=>$properties, _namespace=>$namespace, _enabled=>$properties->{enabled}}, $class;
bless {_session=>$session, _properties=>$properties, _namespace=>$namespace, _enabled=>$properties->{enabled}}, $class;
}
#-------------------------------------------------------------------
@ -215,6 +217,7 @@ Returns the gatewayId of the transaction. You must override this method.
=cut
sub gatewayId {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the gatewayId method in your Payment plugin.");
}
@ -253,6 +256,7 @@ Returns the error code of the last submission.
=cut
sub errorCode {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override thie errorCode method in the payment plugin.");
}
@ -263,6 +267,10 @@ sub errorCode {
A convienient method to load a plugin. It handles all error checking and stuff for you.
This is a SUPER class method only and shoud NOT be overridden.
=head3 session
The session variable.
=head3 namespace
The namespace of the plugin.
@ -272,14 +280,15 @@ The namespace of the plugin.
sub load {
my ($class, $namespace, $load, $cmd, $plugin);
$class = shift;
my $session = shift;
$namespace = shift;
$cmd = "WebGUI::Commerce::Payment::$namespace";
$load = "use $cmd";
eval($load);
$self->session->errorHandler->warn("Payment plugin failed to compile: $cmd.".$@) if($@);
$session->errorHandler->warn("Payment plugin failed to compile: $cmd.".$@) if($@);
$plugin = eval($cmd."->init");
$self->session->errorHandler->warn("Couldn't instantiate payment plugin: $cmd.".$@) if($@);
$session->errorHandler->warn("Couldn't instantiate payment plugin: $cmd.".$@) if($@);
return $plugin;
}
@ -292,7 +301,8 @@ Returns the (display) name of the plugin. You must override this method.
=cut
sub name {
return $self->session->errorHandler->fatal("You must override the name method in the payment plugin.");
my ($session) = @_;
return $session->errorHandler->fatal("You must override the name method in the payment plugin.");
}
#-------------------------------------------------------------------
@ -363,6 +373,7 @@ Returns the result code of the transaction. You must override this method.
=cut
sub resultCode {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the resultCode method in the payment plugin.");
}
@ -375,6 +386,7 @@ Returns the result message of the transaction. You must override this method.
=cut
sub resultMessage {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the resultMessage method in the payment plugin.");
}
@ -420,8 +432,9 @@ The period you want the name for.
=cut
sub recurringPeriodValues {
my ($session) = @_;
my ($i18n, %periods);
$i18n = WebGUI::International->new($self->session, 'Commerce');
$i18n = WebGUI::International->new($session, 'Commerce');
tie %periods, "Tie::IxHash";
%periods = (
Weekly => $i18n->get('weekly'),
@ -438,6 +451,19 @@ sub recurringPeriodValues {
#-------------------------------------------------------------------
=head2 session ( )
Returns the local copy of the session variable
=cut
sub session {
my ($self) = @_;
return $self->{_session};
}
##-------------------------------------------------------------------
=head2 shippingCost ( amount )
This sets the shippingcost involved with the transaction. Your plugin must override this
@ -450,6 +476,7 @@ The amaount of money that's being charged for shipping.
=cut
sub shippingCost {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the shippingCost method in the payment plugin.");
}
@ -467,6 +494,7 @@ The description of the shiping cost.
=cut
sub shippingDescription {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the shippingDescription method in the payment plugin.");
}
@ -484,6 +512,7 @@ You must override this method.
=cut
sub supports {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the supports method in the payment plugin.");
}
@ -496,6 +525,7 @@ A boolean indicating whether the payment has been finished or not. You must over
=cut
sub transactionCompleted {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the transactionCompleted method in the payment plugin.");
}
@ -508,6 +538,7 @@ Returns an error message if a transaction error has occurred. You must override
=cut
sub transactionError {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the transactionError method in the payment plugin.");
}
@ -520,6 +551,7 @@ A boolean indicating whether the payment is pending or not. You must override th
=cut
sub transactionPending {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the transactionPending method in the payment plugin.");
}
@ -534,6 +566,7 @@ undef. You must override this method.
=cut
sub validateFormData {
my ($self) = @_;
return $self->session->errorHandler->fatal("You must override the validateFormData method in the payment plugin.");
}

View file

@ -565,14 +565,14 @@ sub errorCode {
#-------------------------------------------------------------------
sub name {
my $i18n = WebGUI::International->new($self->session, "CommercePaymentITransact");
my ($session) = @_;
my $i18n = WebGUI::International->new($session, "CommercePaymentITransact");
return $i18n->get('module name');
}
#-------------------------------------------------------------------
sub namespace {
my $self = shift;
return $self->{_namespace};
}

View file

@ -206,7 +206,7 @@ sub getItems {
my ($self, $periodResolve, %cartContent, $item, $properties, @recurring, @normal);
$self = shift;
$periodResolve = WebGUI::Commerce::Payment::recurringPeriodValues;
$periodResolve = WebGUI::Commerce::Payment::recurringPeriodValues($self->session);
%cartContent = %{$self->{_items}};
foreach (values(%cartContent)) {
$item = WebGUI::Commerce::Item->new($_->{itemId}, $_->{itemType});

View file

@ -61,7 +61,7 @@ sub cancelTransaction {
# Recurring transactions can only have one item, so our items must be the first
$item = $self->getItems->[0];
$plugin = WebGUI::Commerce::Payment->load($self->gateway);
$plugin = WebGUI::Commerce::Payment->load($self->session, $self->gateway);
$plugin->cancelRecurringPayment({
id => $self->gatewayId,
transaction => $self,

View file

@ -60,7 +60,7 @@ sub _clearShippingScratch {
sub _paymentSelected {
my $session = shift;
return 0 unless ($session->scratch->get('paymentGateway'));
my $plugin = WebGUI::Commerce::Payment->load($session->scratch->get('paymentGateway'));
my $plugin = WebGUI::Commerce::Payment->load($session, $session->scratch->get('paymentGateway'));
return 1 if ($plugin && $plugin->enabled);
return 0;
}
@ -171,7 +171,7 @@ sub www_checkoutConfirm {
$var{total} = sprintf('%.2f', $total + $shipping->calc);
$plugin = WebGUI::Commerce::Payment->load($session->scratch->get('paymentGateway'));
$plugin = WebGUI::Commerce::Payment->load($session, $session->scratch->get('paymentGateway'));
$f = WebGUI::HTMLForm->new($session);
$f->hidden(
@ -217,7 +217,7 @@ sub www_checkoutSubmit {
$shipping->setOptions(Storable::thaw($session->scratch->get('shippingOptions'))) if ($session->scratch->get('shippingOptions'));
# Load payment plugin.
$plugin = WebGUI::Commerce::Payment->load($session->scratch->get('paymentGateway'));
$plugin = WebGUI::Commerce::Payment->load($session, $session->scratch->get('paymentGateway'));
$shoppingCart = WebGUI::Commerce::ShoppingCart->new;
($normal, $recurring) = $shoppingCart->getItems;
@ -339,7 +339,7 @@ sub www_confirmRecurringTransaction {
my $session = shift;
my($plugin, %var);
$plugin = WebGUI::Commerce::Payment->load($session->form->process("gateway"));
$plugin = WebGUI::Commerce::Payment->load($session, $session->form->process("gateway"));
if ($plugin) {
$plugin->confirmRecurringTransaction;
}
@ -349,7 +349,7 @@ sub www_confirmRecurringTransaction {
sub www_confirmTransaction {
my $session = shift;
my($plugin, %var);
$plugin = WebGUI::Commerce::Payment->load($session->form->process("pg"));
$plugin = WebGUI::Commerce::Payment->load($session, $session->form->process("pg"));
if ($plugin->confirmTransaction) {
WebGUI::Commerce::Transaction->new($plugin->getTransactionId)->completeTransaction;
@ -433,7 +433,7 @@ sub www_editCommerceSettings {
# Check which payment plugins will compile, and load them.
foreach (@{$session->config->get("paymentPlugins")}) {
$plugin = WebGUI::Commerce::Payment->load($_);
$plugin = WebGUI::Commerce::Payment->load($session, $_);
if ($plugin) {
push(@paymentPlugins, $plugin);
$paymentPlugins{$_} = $plugin->name;
@ -668,7 +668,7 @@ sub www_selectPaymentGateway {
_clearPaymentScratch;
$i18n = WebGUI::International->new($session, 'Commerce');
$plugins = WebGUI::Commerce::Payment->getEnabledPlugins;
$plugins = WebGUI::Commerce::Payment->getEnabledPlugins($session);
if (scalar(@$plugins) > 1) {
foreach (@$plugins) {
push(@pluginLoop, {
@ -696,7 +696,7 @@ sub www_selectPaymentGateway {
#-------------------------------------------------------------------
sub www_selectPaymentGatewaySave {
my $session = shift;
if (WebGUI::Commerce::Payment->load($session->form->process("paymentGateway"))->enabled) {
if (WebGUI::Commerce::Payment->load($session, $session->form->process("paymentGateway"))->enabled) {
$session->scratch->set('paymentGateway', $session->form->process("paymentGateway"));
} else {
$session->scratch->set('paymentGateway', '-delete-');

View file

@ -238,7 +238,7 @@ sub www_editSubscription {
-label => $i18n->get('subscription duration'),
-hoverHelp => $i18n->get('subscription duration description'),
-value => [$properties->{duration} || 'Monthly'],
-options=> WebGUI::Commerce::Payment::recurringPeriodValues
-options=> WebGUI::Commerce::Payment->recurringPeriodValues($session),
);
$f->text(
-name => 'executeOnSubscription',