diff --git a/lib/WebGUI/Shop/PayDriver.pm b/lib/WebGUI/Shop/PayDriver.pm index 03d0fec66..2f694b167 100644 --- a/lib/WebGUI/Shop/PayDriver.pm +++ b/lib/WebGUI/Shop/PayDriver.pm @@ -126,31 +126,6 @@ around BUILDARGS => sub { return $class->$orig($options); }; -#------------------------------------------------------------------- - -=head2 _buildObj ( ) - -Private method used to build objects, shared by new and create. - -=cut - -#sub _buildObj { -# my ($class, $session, $requestedClass, $paymentGatewayId, $options) = @_; -# my $self = {}; -# bless $self, $requestedClass; -# register $self; -# -# my $id = id $self; -# -# $session{ $id } = $session; -# $options{ $id } = $options; -# $className{ $id } = $requestedClass; -# $paymentGatewayId{ $id } = $paymentGatewayId; -# -# return $self; -#} - - #------------------------------------------------------------------- =head2 appendCartVariables ( $var ) @@ -257,50 +232,6 @@ sub className { #------------------------------------------------------------------- -=head2 create ( $session, $options ) - -Constructor for new WebGUI::Shop::PayDriver objects. Returns a WebGUI::Shop::PayDriver object. -To access driver objects that have already been configured, use C. - -=head3 $session - -A WebGUI::Session object. - -=head4 $options - -A list of properties to assign to this PayDriver. See C for details. - -=cut - -#sub create { -# my $class = shift; -# my $session = shift; -# my $options = shift; -# WebGUI::Error::InvalidParam->throw(error => q{Must provide a hashref of options}) -# unless ref $options eq 'HASH' and scalar keys %{ $options }; -# WebGUI::Error::InvalidParam->throw(error => q{Must provide a human readable label in the hashref of options}) -# unless exists $options->{label} && $options->{label}; -# -# # Generate a unique id for this payment -# my $paymentGatewayId = $session->id->generate; -# -# # Build object -# my $self = WebGUI::Shop::PayDriver->_buildObj($session, $class, $paymentGatewayId, $options); -# -# # and persist this instance in the db -# $session->db->write('insert into paymentGateway (paymentGatewayId, className) VALUES (?,?)', [ -# $paymentGatewayId, -# $class, -# ]); -# -# # Set the options via the update method because update() will automatically serialize the options hash -# $self->update($options); -# -# return $self; -#} - -#------------------------------------------------------------------- - =head2 delete ( ) Removes this PayDriver object from the db. @@ -511,32 +442,6 @@ that object. =cut -#sub new { -# my $class = shift; -# my $session = shift; -# WebGUI::Error::InvalidParam->throw(error => q{Must provide a session variable}) -# unless ref $session eq 'WebGUI::Session'; -# my $paymentGatewayId = shift; -# WebGUI::Error::InvalidParam->throw(error => q{Must provide a paymentGatewayId}) -# unless defined $paymentGatewayId; -# -# # Fetch the instance data from the db -# my $properties = $session->db->quickHashRef('select * from paymentGateway where paymentGatewayId=?', [ -# $paymentGatewayId, -# ]); -# WebGUI::Error::ObjectNotFound->throw(error => q{paymentGatewayId not found in db}, id => $paymentGatewayId) -# unless scalar keys %{ $properties }; -# -# croak "Somehow, the options property of this object, $paymentGatewayId, got broken in the db" -# unless exists $properties->{options} and $properties->{options}; -# -# my $options = from_json($properties->{options}); -# -# my $self = WebGUI::Shop::PayDriver->_buildObj($session, $class, $paymentGatewayId, $options); -# -# return $self; -#} - #------------------------------------------------------------------- =head2 processPayment () @@ -589,20 +494,18 @@ Updates ship driver with data from Form. sub processPropertiesFromFormPost { my $self = shift; - my %properties; - my $fullDefinition = $self->definition($self->session); - foreach my $definition (@{$fullDefinition}) { - foreach my $property (keys %{$definition->{properties}}) { - $properties{$property} = $self->session->form->process( - $property, - $definition->{properties}{$property}{fieldType}, - $definition->{properties}{$property}{defaultValue} - ); - } + my $form = $self->session->form; + foreach my $property_name ($self->getProperties) { + my $property = $self->meta->find_attribute_by_name($property_name); + my $value = $form->process( + $property_name, + $property->form->{fieldType}, + $self->$property_name, + ); + $self->$property_name($value); } - $properties{label} = $fullDefinition->[0]{name} if ($properties{label} eq "" || lc($properties{label}) eq "untitled"); - $self->update(\%properties); + $self->write; } #------------------------------------------------------------------- @@ -775,6 +678,12 @@ sub www_editSave { =head2 CHANGES ( ) +=head3 8.0.0 + +In 8.0.0, the base PayDriver class was modified so that it uses WebGUI::Definition::Shop as its base, +rather than Class::InsideOut. All PayDriver subclasses from 7.x will need to do the same. +The current PayDriver subclasses, like Cash and ITransact, can be used as examples on what to do. + =head3 7.9.4 In 7.9.4, the base PayDriver class was changed to accomodate the new Cart. The Cart is now in diff --git a/t/Shop/PayDriver.t b/t/Shop/PayDriver.t index 65de828cd..2869c08b5 100644 --- a/t/Shop/PayDriver.t +++ b/t/Shop/PayDriver.t @@ -448,4 +448,32 @@ is ($count, 0, 'delete deleted the object'); undef $driver; +####################################################################### +# +# processPropertiesFromFormPost +# +####################################################################### + +$session->request->setup_body({ + label => 'form processed driver', + enabled => 1, + groupToUse => 7, +}); + +my $form_driver = WebGUI::Shop::PayDriver->new($session, {}); +WebGUI::Test->addToCleanup($form_driver); + +$form_driver->processPropertiesFromFormPost; + +cmp_deeply( + $form_driver->get(), + { + label => 'form processed driver', + enabled => 1, + groupToUse => 7, + paymentGatewayId => $form_driver->paymentGatewayId, + }, + 'form contents processed. Missing form properties inherit defaults' +); + done_testing;