diff --git a/docs/upgrades/packages-7.5.3/root_import_default-donation-template.wgpkg b/docs/upgrades/packages-7.5.11/root_import_default-donation-template.wgpkg similarity index 100% rename from docs/upgrades/packages-7.5.3/root_import_default-donation-template.wgpkg rename to docs/upgrades/packages-7.5.11/root_import_default-donation-template.wgpkg diff --git a/docs/upgrades/packages-7.5.3/root_import_ems.wgpkg b/docs/upgrades/packages-7.5.11/root_import_ems.wgpkg similarity index 100% rename from docs/upgrades/packages-7.5.3/root_import_ems.wgpkg rename to docs/upgrades/packages-7.5.11/root_import_ems.wgpkg diff --git a/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg b/docs/upgrades/packages-7.5.11/shopping-cart-collateral-items-1.wgpkg similarity index 100% rename from docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg rename to docs/upgrades/packages-7.5.11/shopping-cart-collateral-items-1.wgpkg diff --git a/docs/upgrades/upgrade_7.5.10-7.5.11.pl b/docs/upgrades/upgrade_7.5.10-7.5.11.pl index 3855db93b..e5dc55b7b 100644 --- a/docs/upgrades/upgrade_7.5.10-7.5.11.pl +++ b/docs/upgrades/upgrade_7.5.10-7.5.11.pl @@ -14,7 +14,8 @@ use Getopt::Long; use WebGUI::Session; use WebGUI::Storage; use WebGUI::Asset; - +use File::Find; +use File::Spec; my $toVersion = '7.5.11'; my $quiet; # this line required @@ -24,19 +25,25 @@ my $session = start(); # this line required # upgrade functions go here addCalendarEventWorkflow( $session ); +adddingInStoreCredit($session); +insertCommerceTaxTable($session); +migrateOldTaxTable($session); +insertCommerceShipDriverTable($session); +migrateToNewCart($session); +createSkuAsset($session); +createDonationAsset($session); +addShippingDrivers($session); +addShoppingHandler($session); +addAddressBook($session); +insertCommercePayDriverTable($session); +addPaymentDrivers($session); +convertTransactionLog($session); +upgradeEMS($session); +migrateOldProduct($session); +mergeProductsWithCommerce($session); finish($session); # this line required - -#---------------------------------------------------------------------------- -# Describe what our function does -#sub exampleFunction { -# my $session = shift; -# print "\tWe're doing some stuff here that you should know about... " unless $quiet; -# # and here's our code -# print "DONE!\n" unless $quiet; -#} - #---------------------------------------------------------------------------- # Add the database column to select the workflow to approve Calendar Events sub addCalendarEventWorkflow { @@ -56,6 +63,465 @@ sub addCalendarEventWorkflow { print "DONE!\n" unless $quiet; } +#------------------------------------------------- +sub addingInStoreCredit { + my $session = shift; + print "\tAdding refunds and in-store credit.\n" unless ($quiet); + $session->db->write("create table shopCredit ( + creditId varchar(22) binary not null primary key, + userId varchar(22) binary not null, + amount float not null default 0.00, + comment text, + dateOfAdjustment datetime, + index userId (userId) + )"); +} + + +#------------------------------------------------- +sub upgradeEMS { + my $session = shift; + print "\tUpgrading Event Manager\n" unless ($quiet); + my $db = $session->db; + print "\t\tGetting rid of old templates.\n" unless ($quiet); + foreach my $namespace (qw(EventManagementSystem EventManagementSystem_checkout EventManagementSystem_managePurchas EventManagementSystem_viewPurchase EventManagementSystem_search emsbadgeprint emsticketprint)) { + my $templates = $db->read("select assetId from template where namespace=?",[$namespace]); + while (my ($id) = $templates->array) { + my $asset = WebGUI::Asset->new($session, $id,'WebGUI::Asset::Template'); + if (defined $asset) { + $asset->purge; + } + } + } + print "\t\tAltering table structures.\n" unless ($quiet); + $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 default '2rC4ErZ3c77OJzJm7O5s3w'"); + $db->write("alter table EventManagementSystem add column badgeBuilderTemplateId varchar(22) binary not null default 'BMybD3cEnmXVk2wQ_qEsRQ'"); + $db->write("alter table EventManagementSystem add column lookupRegistrantTemplateId varchar(22) binary not null default 'OOyMH33plAy6oCj_QWrxtg'"); + $db->write("alter table EventManagementSystem add column printBadgeTemplateId varchar(22) binary not null default 'PsFn7dJt4wMwBa8hiE3hOA'"); + $db->write("alter table EventManagementSystem add column printTicketTemplateId varchar(22) binary not null default 'yBwydfooiLvhEFawJb0VTQ'"); + $db->write("alter table EventManagementSystem add column badgeInstructions mediumtext"); + $db->write("alter table EventManagementSystem add column ribbonInstructions mediumtext"); + $db->write("alter table EventManagementSystem add column ticketInstructions mediumtext"); + $db->write("alter table EventManagementSystem add column tokenInstructions mediumtext"); + $db->write("alter table EventManagementSystem add column registrationStaffGroupId varchar(22) binary not null"); + $db->write("alter table EventManagementSystem_metaField rename EMSEventMetaField"); + $db->write("alter table EMSEventMetaField drop column autoSearch"); + $db->write("alter table EMSEventMetaField drop column name"); + + print "\t\tCreating new tables.\n" unless ($quiet); + $db->write("create table EMSRegistrant ( + badgeId varchar(22) binary not null primary key, + userId varchar(22) binary, + badgeNumber int not null auto_increment unique, + badgeAssetId varchar(22) binary not null, + emsAssetId varchar(22) binary not null, + name varchar(35) binary not null, + address1 varchar(35), + address2 varchar(35), + address3 varchar(35), + city varchar(35), + state varchar(35), + zipcode varchar(35), + country varchar(35), + phoneNumber varchar(35), + organization varchar(35), + email varchar(255), + notes mediumtext, + purchaseComplete boolean, + hasCheckedIn boolean, + transactionItemId varchar(22) binary, + index badgeAssetId_purchaseComplete (badgeAssetId,purchaseComplete) + )"); + $db->write("create table EMSRegistrantTicket ( + badgeId varchar(22) binary not null, + ticketAssetId varchar(22) binary not null, + purchaseComplete boolean, + transactionItemId varchar(22) binary, + primary key (badgeId, ticketAssetId), + index ticketAssetId_purchaseComplete (ticketAssetId,purchaseComplete) + )"); + $db->write("create table EMSRegistrantToken ( + badgeId varchar(22) binary not null, + tokenAssetId varchar(22) binary not null, + quantity int, + transactionItemIds text binary, + primary key (badgeId,tokenAssetId) + )"); + $db->write("create table EMSRegistrantRibbon ( + badgeId varchar(22) binary not null, + ribbonAssetId varchar(22) binary not null, + transactionItemId varchar(22) binary, + primary key (badgeId,ribbonAssetId) + )"); + $db->write("create table EMSBadgeGroup ( + badgeGroupId varchar(22) binary not null primary key, + emsAssetId varchar(22) binary not null, + name varchar(100) + )"); + $db->write("create table EMSBadge ( + assetId varchar(22) binary not null, + revisionDate bigint not null, + price float not null default 0.00, + seatsAvailable int not null default 100, + relatedBadgeGroups mediumtext, + primary key (assetId, revisionDate) + )"); + $db->write("create table EMSTicket ( + assetId varchar(22) binary not null, + revisionDate bigint not null, + price float not null default 0.00, + seatsAvailable int not null default 100, + startDate datetime, + duration float not null default 1.0, + eventNumber int, + location varchar(100), + relatedBadgeGroups mediumtext, + relatedRibbons mediumtext, + eventMetaData mediumtext, + primary key (assetId, revisionDate) + )"); + $db->write("create table EMSToken ( + assetId varchar(22) binary not null, + revisionDate bigint not null, + price float not null default 0.00, + primary key (assetId, revisionDate) + )"); + $db->write("create table EMSRibbon ( + assetId varchar(22) binary not null, + revisionDate bigint not null, + percentageDiscount float not null default 10.0, + price float not null default 0.00, + primary key (assetId, revisionDate) + )"); + $session->config->addToArray("workflowActivities/None","WebGUI::Workflow::Activity::ExpireEmsCartItems"); + + print "\t\tMigrating old EMS data.\n" unless ($quiet); + #$db->write("alter table EventManagementSystem_metaData rename EMSEventMetaData"); + +} + +#------------------------------------------------- +sub convertTransactionLog { + my $session = shift; + print "\tInstalling transaction log.\n" unless ($quiet); + $session->db->write("alter table transaction rename oldtransaction"); + $session->db->write("alter table transactionItem rename oldtransactionitem"); + $session->db->write("create table transaction ( + transactionId varchar(22) binary not null primary key, + isSuccessful bool not null default 0, + orderNumber int not null auto_increment unique, + transactionCode varchar(100), + statusCode varchar(35), + statusMessage varchar(100), + userId varchar(22) binary not null, + username varchar(35) not null, + amount float, + shippingAddressId varchar(22) binary, + shippingAddressName varchar(35), + shippingAddress1 varchar(35), + shippingAddress2 varchar(35), + shippingAddress3 varchar(35), + shippingCity varchar(35), + shippingState varchar(35), + shippingCountry varchar(35), + shippingCode varchar(35), + shippingPhoneNumber varchar(35), + shippingDriverId varchar(22) binary, + shippingDriverLabel varchar(35), + shippingPrice float, + paymentAddressId varchar(22) binary, + paymentAddressName varchar(35), + paymentAddress1 varchar(35), + paymentAddress2 varchar(35), + paymentAddress3 varchar(35), + paymentCity varchar(35), + paymentState varchar(35), + paymentCountry varchar(35), + paymentCode varchar(35), + paymentPhoneNumber varchar(35), + paymentDriverId varchar(22) binary, + paymentDriverLabel varchar(35), + taxes float, + dateOfPurchase datetime + )"); + $session->db->write("create table transactionItem ( + itemId varchar(22) binary not null primary key, + transactionId varchar(22) binary not null, + assetId varchar(22), + configuredTitle varchar(255), + options mediumText, + shippingAddressId varchar(22) binary, + shippingName varchar(35), + shippingAddress1 varchar(35), + shippingAddress2 varchar(35), + shippingAddress3 varchar(35), + shippingCity varchar(35), + shippingState varchar(35), + shippingCountry varchar(35), + shippingCode varchar(35), + shippingPhoneNumber varchar(35), + shippingTrackingNumber varchar(255), + shippingStatus varchar(35) not null default 'NotShipped', + shippingDate datetime, + quantity int not null default 1, + price float, + index transactionId (transactionId) + )"); + $session->setting->add('shopMyPurchasesTemplateId',''); + $session->setting->add('shopMyPurchaseDetailTemplateId',''); +} + +#------------------------------------------------- +sub addAddressBook { + my $session = shift; + print "\tInstalling address book.\n" unless ($quiet); + $session->db->write("create table addressBook ( + addressBookId varchar(22) binary not null primary key, + sessionId varchar(22) binary, + userId varchar(22) binary, + index userId (sessionId), + index sessionId (sessionId) + )"); + $session->db->write("create table address ( + addressId varchar(22) binary not null primary key, + addressBookId varchar(22) binary not null, + label varchar(35), + name varchar(35), + address1 varchar(35), + address2 varchar(35), + address3 varchar(35), + city varchar(35), + state varchar(35), + country varchar(35), + code varchar(35), + phoneNumber varchar(35), + index addressBookId_addressId (addressBookId,addressId) + )"); + $session->setting->add('shopAddressBookTemplateId','3womoo7Teyy2YKFa25-MZg'); + $session->setting->add('shopAddressTemplateId','XNd7a_g_cTvJVYrVHcx2Mw'); +} + +#------------------------------------------------- +sub addShoppingHandler { + my $session = shift; + print "\tInstalling shopping handler.\n" unless ($quiet); + my @changed = (); + foreach my $handler (@{$session->config->get("contentHandlers")}) { + if ($handler eq "WebGUI::Content::Asset") { + push(@changed, "WebGUI::Content::Shop"); + } + push(@changed, $handler); + } + $session->config->set("contentHandlers", \@changed); +} + +#------------------------------------------------- +sub createDonationAsset { + my $session = shift; + print "\tInstall Donation asset.\n" unless ($quiet); + $session->db->write("create table donation ( + assetId varchar(22) binary not null, + revisionDate bigint not null, + defaultPrice float not null default 100.00, + thankYouMessage mediumtext, + templateId varchar(22) binary not null, + primary key (assetId, revisionDate) + )"); + $session->config->addToArray("assets","WebGUI::Asset::Sku::Donation"); +} + +#------------------------------------------------- +sub createSkuAsset { + my $session = shift; + print "\tInstall SKU asset.\n" unless ($quiet); + $session->db->write("create table sku ( + assetId varchar(22) binary not null, + revisionDate bigint not null, + description mediumtext, + sku varchar(35) binary not null, + salesAgentId varchar(22) binary, + displayTitle bool not null default 1, + overrideTaxRate bool not null default 0, + taxRateOverride float not null default 0.00, + primary key (assetId, revisionDate), + index sku (sku), + index salesAgentId (salesAgentId) + )"); +} + +#------------------------------------------------- +sub migrateToNewCart { + my $session = shift; + print "\tInstall new shopping cart.\n" unless ($quiet); + $session->db->write("create table cart ( + cartId varchar(22) binary not null primary key, + sessionId varchar(22) binary not null, + shippingAddressId varchar(22) binary, + shipperId varchar(22) binary, + couponId varchar(22) binary, + index sessionId (sessionId) + )"); + $session->db->write("create table cartItem ( + itemId varchar(22) binary not null primary key, + cartId varchar(22) binary not null, + assetId varchar(22) binary not null, + dateAdded datetime not null, + options mediumtext, + configuredTitle varchar(255), + shippingAddressId varchar(22) binary, + quantity integer not null default 1, + index cartId_assetId_dateAdded (cartId,assetId,dateAdded) + )"); + $session->db->write("drop table shoppingCart"); + $session->setting->add('shopCartTemplateId','aIpCmr9Hi__vgdZnDTz1jw'); + $session->config->addToHash("macros","ViewCart","ViewCart"); +} + +#------------------------------------------------- +sub insertCommerceTaxTable { + my $session = shift; + print "\tInstall the Commerce Tax Table.\n" unless ($quiet); + # and here's our code + $session->db->write(<db->prepare('select * from commerceSalesTax'); + my $newTax = $session->db->prepare('insert into tax (taxId, country, state, city, code, taxRate) VALUES (?,?,?,?,?,?)'); + $oldTax->execute(); + while (my $oldTaxData = $oldTax->hashRef()) { + $newTax->execute([$oldTaxData->{commerceSalesTaxId}, 'USA', $oldTaxData->{regionIdentifier}, '', '', $oldTaxData->{salesTax}]); + } + $oldTax->finish; + $newTax->finish; + $session->db->write('drop table commerceSalesTax'); +} + +#------------------------------------------------- +sub insertCommerceShipDriverTable { + my $session = shift; + print "\tInstall the Commerce ShipperDriver Table.\n" unless ($quiet); + # and here's our code + $session->db->write(<config->delete('paymentPlugins'); + $session->config->addToArray('paymentDrivers', 'WebGUI::Shop::PayDriver::Cash'); +} + +#------------------------------------------------- +sub addShippingDrivers { + my $session = shift; + print "\tSet up the default shipping.\n" unless ($quiet); + # 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}|]); +} + +#------------------------------------------------- +sub migrateOldProduct { + my $session = shift; + print "\tMigrate old Product to new SKU based Products.\n" unless ($quiet); + # and here's our code + ##Grab data from Wobject table, and move it into Sku and Product, as appropriate. + ##Have to change the className's in the db, too + ## Wobject description -> Sku description + ## Wobject displayTitle -> Sku displayTitle + ## Product productNumber -> Sku sku + ## asset className WebGUI::Asset::Wobject::Product -> WebGUI::Asset::Sku::Product + my $fromWobject = $session->db->read('select w.assetId, w.revisionDate, w.description, w.displayTitle, p.productNumber from Product as p JOIN wobject as w on p.assetId=w.assetId and p.revisionDate=w.revisionDate'); + my $toSku = $session->db->prepare('insert into sku (assetId, revisionDate, sku, description, displayTitle) VALUES (?,?,?,?,?)'); + my $rmWobject = $session->db->prepare('delete from wobject where assetId=? and revisionDate=?'); + while (my $product = $fromWobject->hashRef()) { + $toSku->execute([ + $product->{assetId}, + $product->{revisionDate}, + $product->{productNumber}, + $product->{description}, + $product->{displayTitle}, + ]); + $rmWobject->execute([$product->{assetId}, $product->{revisionDate}]); + } + $fromWobject->finish; + $toSku->finish; + $rmWobject->finish; + $session->db->write(q!update asset set className='WebGUI::Asset::Sku::Product' where className='WebGUI::Asset::Wobject::Product'!); + ## Remove productNumber from Product; + $session->db->write("alter table Product drop column productNumber"); + ## Update config file, deleting Wobject::Product and adding Sku::Product + $session->config->deleteFromArray('assets', 'WebGUI::Asset::Wobject::Product'); + $session->config->addToArray('assets', 'WebGUI::Asset::Sku::Product'); + unlink '../../lib/WebGUI/Asset/Wobject/Product.pm'; + return; +} + +#------------------------------------------------- +sub mergeProductsWithCommerce { + my $session = shift; + print "\tMerge old Commerce Products to new SKU based Products.\n" unless ($quiet); + ## Add the parameter and variants columns + $session->db->write("alter table Product add column parameters mediumtext"); + $session->db->write("alter table Product add column variants mediumtext"); + return 1; +} + +#------------------------------------------------- +sub insertCommercePayDriverTable { + my $session = shift; + print "\tInstall the Commerce PayDriver Table.\n" unless ($quiet); + # and here's our code + $session->db->write(<