diff --git a/docs/upgrades/upgrade_7.5.2-7.5.3.pl b/docs/upgrades/upgrade_7.5.2-7.5.3.pl index 4a8489668..b989b8728 100644 --- a/docs/upgrades/upgrade_7.5.2-7.5.3.pl +++ b/docs/upgrades/upgrade_7.5.2-7.5.3.pl @@ -56,9 +56,20 @@ sub upgradeEMS { } } print "\t\tAltering table structures.\n" unless ($quiet); - $db->write("alter table EventManagementSystem add column timezone varchar(30) not null default 'America/Chicago'"); $db->write("alter table EventManagementSystem drop column globalMetadata"); $db->write("alter table EventManagementSystem drop column globalPrerequisites"); + $db->write("alter table EventManagementSystem drop column displayTemplateId"); + $db->write("alter table EventManagementSystem drop column checkoutTemplateId"); + $db->write("alter table EventManagementSystem drop column managePurchasesTemplateId"); + $db->write("alter table EventManagementSystem drop column viewPurchaseTemplateId"); + $db->write("alter table EventManagementSystem drop column searchTemplateId"); + $db->write("alter table EventManagementSystem drop column paginateAfter"); + $db->write("alter table EventManagementSystem drop column groupToAddEvents"); + $db->write("alter table EventManagementSystem drop column badgePrinterTemplateId"); + $db->write("alter table EventManagementSystem drop column ticketPrinterTemplateId"); + $db->write("alter table EventManagementSystem add column timezone varchar(30) not null default 'America/Chicago'"); + $db->write("alter table EventManagementSystem add column templateId varchar(22) binary not null"); + $db->write("alter table EventManagementSystem add column extrasTemplateId varchar(22) binary not null"); print "\t\tCreating new tables.\n" unless ($quiet); $db->write("create table EMSRegistrant ( badgeId varchar(22) binary not null primary key, @@ -380,6 +391,7 @@ sub addShippingDrivers { # and here's our code $session->config->delete('shippingPlugins'); $session->config->addToArray('shippingDrivers', 'WebGUI::Shop::ShipDriver::FlatRate'); + $session->db->write("insert into shipper (shipperId, className,options) values ('defaultfreeshipping000','WebGUI::Shop::ShipDriver::FlatRate',?)",[q|{"label":"Free Shipping","enabled":1}|]); } #------------------------------------------------- diff --git a/lib/WebGUI/Asset/Sku/EMSBadge.pm b/lib/WebGUI/Asset/Sku/EMSBadge.pm index 3ab35259a..a7e4af528 100644 --- a/lib/WebGUI/Asset/Sku/EMSBadge.pm +++ b/lib/WebGUI/Asset/Sku/EMSBadge.pm @@ -242,18 +242,18 @@ sub view { $info->hidden(name=>"func", value=>"addToCart"); $info->text( name => 'name', - defaultValue => (defined $address) ? $address->get("name") : $form->get('name'), label => $i18n->get('name','Shop'), + defaultValue => (defined $address) ? $address->get("name") : $form->get('name'), ); $info->text( name => 'organization', - defaultValue => $form->get("organization"), label => $i18n->get('organization'), + defaultValue => $form->get("organization"), ); $info->text( name => 'address1', - defaultValue => (defined $address) ? $address->get("address1") : $form->get('address1'), label => $i18n->get('address','Shop'), + defaultValue => (defined $address) ? $address->get("address1") : $form->get('address1'), ); $info->text( name => 'address2', @@ -265,35 +265,35 @@ sub view { ); $info->text( name => 'city', - defaultValue => (defined $address) ? $address->get("city") : $form->get('city'), label => $i18n->get('city','Shop'), + defaultValue => (defined $address) ? $address->get("city") : $form->get('city'), ); $info->text( name => 'state', - defaultValue => (defined $address) ? $address->get("state") : $form->get('state'), label => $i18n->get('state','Shop'), + defaultValue => (defined $address) ? $address->get("state") : $form->get('state'), ); $info->zipcode( name => 'zipcode', - defaultValue => (defined $address) ? $address->get("code") : $form->get('zipcode','zipcode'), label => $i18n->get('code','Shop'), + defaultValue => (defined $address) ? $address->get("code") : $form->get('zipcode','zipcode'), ); $info->country( name => 'country', - defaultValue => (defined $address) ? $address->get("country") : ($form->get('country') || 'United States'), label => $i18n->get('country','Shop'), + defaultValue => (defined $address) ? $address->get("country") : ($form->get('country') || 'United States'), ); $info->phone( name => 'phoneNumber', - defaultValue => (defined $address) ? $address->get("phoneNumber") : $form->get("phone","phone"), label => $i18n->get('phone number','Shop'), + defaultValue => (defined $address) ? $address->get("phoneNumber") : $form->get("phone","phone"), ); $info->email( name => 'email', label => $i18n->get('email address'), defaultValue => $form->get("email","email") ); - $info->submit(value=>$i18n->get('add to cart','Shop')); + $info->submit(value=>$i18n->get('add to cart')); # render the page; my $output = '

'.$self->getTitle.'

' diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index d201a81b8..f59800043 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -85,19 +85,30 @@ See WebGUI::Asset::prepareView() for details. sub prepareView { my $self = shift; $self->SUPER::prepareView(); - my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); - $template->prepare; # set up all the files that we need my ($style, $url) = $self->session->quick(qw(style url)); $style->setLink($url->extras('/yui/build/fonts/fonts-min.css'), {rel=>'stylesheet', type=>'text/css'}); $style->setLink($url->extras('/yui/build/datatable/assets/skins/sam/datatable.css'), {rel=>'stylesheet', type=>'text/css'}); + $style->setLink($url->extras('/yui/build/container/assets/skins/sam/container.css'), {rel=>'stylesheet', type=>'text/css'}); $style->setScript($url->extras('/yui/build/utilities/utilities.js'), {type=>'text/javascript'}); $style->setScript($url->extras('/yui/build/json/json-min.js'), {type=>'text/javascript'}); $style->setScript($url->extras('/yui/build/datasource/datasource-beta-min.js'), {type=>'text/javascript'}); $style->setScript($url->extras('/yui/build/datatable/datatable-beta-min.js'), {type=>'text/javascript'}); - - + $style->setScript($url->extras('/yui/build/container/container-min.js'), {type=>'text/javascript'}); + $style->setRawHeadTags(q| + + |); + return undef; + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; $self->{_viewTemplate} = $template; } @@ -116,7 +127,6 @@ sub view { # set up objects we'll need my $badgeId = $session->form->get("badgeId"); - my $i18n = WebGUI::International->new($session, "Asset_EventManagementSystem"); my %var = (); @@ -127,51 +137,91 @@ sub view { my $output = q|
+ Add a badge
+ @@ -197,13 +247,16 @@ sub www_getBadgesAsJson { return $session->privilege->insufficient() unless $self->canView; my ($db, $form) = $session->quick(qw(db form)); my %results = (); - foreach my $badge (@{$self->getLineage(['children'],{returnObjects=>1, includeOnlyClasses=>['WebGUI::Asset::Sku::Badge']})}) { + foreach my $badge (@{$self->getLineage(['children'],{returnObjects=>1, includeOnlyClasses=>['WebGUI::Asset::Sku::EMSBadge']})}) { push(@{$results{records}}, { title => $badge->getTitle, description => $badge->get('description'), - price => $badge->getPrice, + price => $badge->getPrice+0, quantityAvailable => $badge->getQuantityAvailable, - url => $badge->getUrl + url => $badge->getUrl, + editUrl => $badge->getUrl('func=edit'), + deleteUrl => $badge->getUrl('func=delete'), + assetId => $badge->getId, }); } $results{totalRecords} = $results{recordsReturned} = scalar(@{$results{records}}); @@ -3822,22 +3875,6 @@ sub www_saveRegistrantInfo { return $self->www_view(); } -#------------------------------------------------------------------- - -=head2 prepareView ( ) - -See WebGUI::Asset::prepareView() for details. - -=cut - -sub prepareView { - my $self = shift; - $self->SUPER::prepareView(); - my $templateId = $self->get("displayTemplateId"); - my $template = WebGUI::Asset::Template->new($self->session, $templateId); - $template->prepare; - $self->{_viewTemplate} = $template; -} #------------------------------------------------------------------- sub www_search { diff --git a/lib/WebGUI/Shop/AddressBook.pm b/lib/WebGUI/Shop/AddressBook.pm index 87123f5b8..16b72dbe2 100644 --- a/lib/WebGUI/Shop/AddressBook.pm +++ b/lib/WebGUI/Shop/AddressBook.pm @@ -3,6 +3,7 @@ package WebGUI::Shop::AddressBook; use strict; use Class::InsideOut qw{ :std }; +use JSON; use WebGUI::Asset::Template; use WebGUI::Exception::Shop; use WebGUI::Form; @@ -146,6 +147,24 @@ sub delete { #------------------------------------------------------------------- +=head2 formatCallbackForm ( callback ) + +Returns an HTML hidden form field with the callback JSON block properly escaped. + +=head3 callback + +A JSON string that holds the callback information. + +=cut + +sub formatCallbackForm { + my ($self, $callback) = @_; + $callback =~ s/"/'/g; + return ''; +} + +#------------------------------------------------------------------- + =head2 get ( [ property ] ) Returns a duplicated hash reference of this object’s data. @@ -329,9 +348,9 @@ sub www_editAddress { error => $error, formHeader => WebGUI::Form::formHeader($session) .WebGUI::Form::hidden($session, {name=>"shop", value=>"address"}) + .$self->formatCallbackForm($form->get('callback')) .WebGUI::Form::hidden($session, {name=>"method", value=>"editAddressSave"}) - .WebGUI::Form::hidden($session, {name=>"addressId", value=>$form->get("addressId")}) - .WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")}), + .WebGUI::Form::hidden($session, {name=>"addressId", value=>$form->get("addressId")}), saveButton => WebGUI::Form::submit($session), formFooter => WebGUI::Form::formFooter($session), address1Field => WebGUI::Form::text($session, {name=>"address1", maxlength=>35, defaultValue=>($form->get("address1") || ((defined $address) ? $address->get('address1') : undef))}), @@ -419,6 +438,13 @@ sub www_view { my $self = shift; my $session = $self->session; my $form = $session->form; + my $callback = $form->get('callback'); + $callback =~ s/'/"/g; + $callback = JSON::from_json($callback); + my $callbackForm = ''; + foreach my $param (@{$callback->{params}}) { + $callbackForm .= WebGUI::Form::hidden($session, {name=>$param->{name}, value=>$param->{value}}); + } my $i18n = WebGUI::International->new($session, "Shop"); my @addresses = (); foreach my $address (@{$self->getAddresses}) { @@ -429,21 +455,19 @@ sub www_view { .WebGUI::Form::hidden($session, {name=>"shop", value=>"address"}) .WebGUI::Form::hidden($session, {name=>"method", value=>"deleteAddress"}) .WebGUI::Form::hidden($session, {name=>"addressId", value=>$address->getId}) - .WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")}) + .$self->formatCallbackForm($form->get('callback')) .WebGUI::Form::submit($session, {value=>$i18n->get("delete")}) .WebGUI::Form::formFooter($session), editButton => WebGUI::Form::formHeader($session) .WebGUI::Form::hidden($session, {name=>"shop", value=>"address"}) .WebGUI::Form::hidden($session, {name=>"method", value=>"editAddress"}) .WebGUI::Form::hidden($session, {name=>"addressId", value=>$address->getId}) - .WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")}) + .$self->formatCallbackForm($form->get('callback')) .WebGUI::Form::submit($session, {value=>$i18n->get("edit")}) .WebGUI::Form::formFooter($session), - useButton => WebGUI::Form::formHeader($session) - .WebGUI::Form::hidden($session, {name=>"shop", value=>"cart"}) - .WebGUI::Form::hidden($session, {name=>"method", value=>"setShippingAddress"}) - .WebGUI::Form::hidden($session, {name=>"shippingAddressId", value=>$address->getId}) - .WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")}) + useButton => WebGUI::Form::formHeader($session,{action=>$callback->{url}}) + .$callbackForm + .WebGUI::Form::hidden($session, {name=>"addressId", value=>$address->getId}) .WebGUI::Form::submit($session, {value=>$i18n->get("use this address")}) .WebGUI::Form::formFooter($session), }); @@ -453,7 +477,7 @@ sub www_view { addButton => WebGUI::Form::formHeader($session) .WebGUI::Form::hidden($session, {name=>"shop", value=>"address"}) .WebGUI::Form::hidden($session, {name=>"method", value=>"editAddress"}) - .WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")}) + .$self->formatCallbackForm($form->get('callback')) .WebGUI::Form::submit($session, {value=>$i18n->get("add a new address")}) .WebGUI::Form::formFooter($session), ); diff --git a/lib/WebGUI/Shop/Cart.pm b/lib/WebGUI/Shop/Cart.pm index 84053fc69..8bd49398a 100644 --- a/lib/WebGUI/Shop/Cart.pm +++ b/lib/WebGUI/Shop/Cart.pm @@ -3,6 +3,7 @@ package WebGUI::Shop::Cart; use strict; use Class::InsideOut qw{ :std }; +use JSON; use WebGUI::Asset::Template; use WebGUI::Exception::Shop; use WebGUI::Form; @@ -429,10 +430,10 @@ sub www_setShippingAddress { my $self = shift; my $form = $self->session->form; if ($form->get("itemId") ne "") { - $self->getItem($form->get("itemId"))->update({shippingAddressId=>$form->get('shippingAddressId')}); + $self->getItem($form->get("itemId"))->update({shippingAddressId=>$form->get('addressId')}); } else { - $self->update({shippingAddressId=>$form->get('shippingAddressId')}); + $self->update({shippingAddressId=>$form->get('addressId')}); } return $self->www_view; } @@ -475,6 +476,17 @@ sub www_view { my $url = $session->url; my $i18n = WebGUI::International->new($session, "Shop"); my @items = (); + $session->style->setRawHeadTags(q| + + |); foreach my $item (@{$self->getItems}) { my $sku = $item->getSku; $sku->applyOptions($item->get("options")); @@ -489,7 +501,7 @@ sub www_view { removeButton => WebGUI::Form::submit($session, {value=>$i18n->get("remove button"), extras=>q|onclick="this.form.method.value='removeItem';this.form.itemId.value='|.$item->getId.q|';this.form.submit;"|}), shipToButton => WebGUI::Form::submit($session, {value=>$i18n->get("ship to button"), - extras=>q|onclick="this.form.shop.value='address';this.form.method.value='view';this.form.itemId.value='|.$item->getId.q|';this.form.submit;"|}), + extras=>q|onclick="setCallbackForAddressChooser(this.form,'|.$item->getId.q|');"|}), ); my $address = eval { $item->getShippingAddress }; unless (WebGUI::Error->caught) { @@ -504,7 +516,7 @@ sub www_view { formHeader => WebGUI::Form::formHeader($session) . WebGUI::Form::hidden($session, {name=>"shop", value=>"cart"}) . WebGUI::Form::hidden($session, {name=>"method", value=>"update"}) - . WebGUI::Form::hidden($session, {name=>"itemId", value=>""}), + . WebGUI::Form::hidden($session, {name=>"callback", value=>""}), formFooter => WebGUI::Form::formFooter($session), updateButton => WebGUI::Form::submit($session, {value=>$i18n->get("update cart button")}), checkoutButton => WebGUI::Form::submit($session, {value=>$i18n->get("checkout button"), @@ -512,9 +524,9 @@ sub www_view { continueShoppingButton => WebGUI::Form::submit($session, {value=>$i18n->get("continue shopping button"), extras=>q|onclick="this.form.method.value='continueShopping';this.form.submit;"|}), chooseShippingButton => WebGUI::Form::submit($session, {value=>$i18n->get("choose shipping button"), - extras=>q|onclick="this.form.shop.value='address';this.form.method.value='view';this.form.submit;"|}), + extras=>q|onclick="setCallbackForAddressChooser(this.form);"|}), shipToButton => WebGUI::Form::submit($session, {value=>$i18n->get("ship to button"), - extras=>q|onclick="this.form.shop.value='address';this.form.method.value='view';this.form.submit;"|}), + extras=>q|onclick="setCallbackForAddressChooser(this.form);"|}), couponField => WebGUI::Form::text($session, {name=>"couponCode", value=>"", size=>20}), subtotalPrice => $self->formatCurrency($self->calculateSubtotal()), couponDiscount => $self->formatCurrency(0),