diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index b57f9aeb7..f003e538b 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -2,6 +2,7 @@
- fixed: Payment Methods Hover Help Incomplete
- fixed: Payment Method Titles Don't Match Buttons
- fixed: Gallery: Description Text appearing in Album
+ - Moved product imports to shelves
- fixed: Deleting Ticket from Event Management System Asset
- fixed: Thingy Search Broken
diff --git a/docs/upgrades/upgrade_7.5.16-7.5.17.pl b/docs/upgrades/upgrade_7.5.16-7.5.17.pl
index b1770b015..5d219a0d3 100644
--- a/docs/upgrades/upgrade_7.5.16-7.5.17.pl
+++ b/docs/upgrades/upgrade_7.5.16-7.5.17.pl
@@ -27,20 +27,18 @@ my $quiet; # this line required
my $session = start(); # this line required
-
-# upgrade functions go here
-
+moveProductImportToShelf($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;
-#}
+sub moveProductImportToShelf {
+ my $session = shift;
+ print "\tMoving product import to shelves... " unless $quiet;
+ unlink "../../lib/WebGUI/Shop/Products.pm";
+ $session->db->write("update asset set isSystem=0 where assetId='PBproductimportnode001'");
+ print "DONE!\n" unless $quiet;
+}
# -------------- DO NOT EDIT BELOW THIS LINE --------------------------------
diff --git a/lib/WebGUI/Asset/Sku/Product.pm b/lib/WebGUI/Asset/Sku/Product.pm
index 95e668bc1..f468a1a3e 100644
--- a/lib/WebGUI/Asset/Sku/Product.pm
+++ b/lib/WebGUI/Asset/Sku/Product.pm
@@ -410,23 +410,6 @@ sub getPrice {
}
}
-#-------------------------------------------------------------------
-
-=head2 getProductImportNode ( session )
-
-Constructor. Returns the product import node object. This is where the product import system will create new products.
-
-=head3 session
-
-A reference to the current session.
-
-=cut
-
-sub getProductImportNode {
- my $class = shift;
- my $session = shift;
- return WebGUI::Asset->newByDynamicClass($session, 'PBproductimportnode001');
-}
#-------------------------------------------------------------------
diff --git a/lib/WebGUI/Asset/Wobject/Shelf.pm b/lib/WebGUI/Asset/Wobject/Shelf.pm
index 9af0cee12..37f5ab20b 100644
--- a/lib/WebGUI/Asset/Wobject/Shelf.pm
+++ b/lib/WebGUI/Asset/Wobject/Shelf.pm
@@ -15,6 +15,10 @@ use List::MoreUtils;
use Tie::IxHash;
use WebGUI::International;
use base 'WebGUI::Asset::Wobject';
+use WebGUI::Text;
+use WebGUI::Storage;
+use WebGUI::Exception::Shop;
+use WebGUI::Asset::Sku::Product;
#-------------------------------------------------------------------
@@ -50,6 +54,189 @@ sub definition {
return $class->SUPER::definition($session, $definition);
}
+#-------------------------------------------------------------------
+
+=head2 exportProducts ( )
+
+Export all products from the WebGUI system in a CSV file. For details
+about the file format, see importProducts.
+
+Returns a temporary WebGUI::Storage object containing the file. The
+file will be named siteProductData.csv.
+
+=cut
+
+sub exportProducts {
+ my $self = shift;
+ my $session = $self->session;
+ my @columns = qw{sku shortdescription price weight quantity};
+ my $productData = WebGUI::Text::joinCSV(qw{mastersku title}, @columns) . "\n";
+ @columns = map { $_ eq 'shortdescription' ? 'shortdesc' : $_ } @columns;
+ my $getAProduct = WebGUI::Asset::Sku::Product->getIsa($session);
+ while (my $product = $getAProduct->()) {
+ my $mastersku = $product->get('sku');
+ my $title = $product->getTitle;
+ my $collateri = $product->getAllCollateral('variantsJSON');
+ foreach my $collateral (@{ $collateri }) {
+ my @productFields = @{ $collateral }{ @columns };
+ $productData .= WebGUI::Text::joinCSV($mastersku, $title, @productFields);
+ $productData .= "\n";
+ }
+ }
+ my $storage = WebGUI::Storage->createTemp($session);
+ $storage->addFileFromScalar('siteProductData.csv', $productData);
+ return $storage;
+}
+
+#-------------------------------------------------------------------
+
+=head2 importProducts ( $filePath )
+
+Import products into the WebGUI system. If the master sku of a product
+exists in the system, it will be updated. If master skus do not exist,
+they will be added.
+
+The first line of the file should contain only the name of the columns,
+in any order. It may not contain comments.
+
+These are the column names, each is required:
+
+=over 4
+
+=item *
+
+mastersku
+
+=item *
+
+sku
+
+=item *
+
+title
+
+=item *
+
+shortdescription
+
+=item *
+
+price
+
+=item *
+
+weight
+
+=item *
+
+quantity
+
+=back
+
+The following lines will contain product information. Blank
+lines and anything following a '#' sign will be ignored from
+the second line of the file, on to the end.
+
+Returns 1 if the import has taken place. This is to help you know
+if old data has been deleted and new has been inserted.
+
+=cut
+
+sub importProducts {
+ my $self = shift;
+ my $filePath = shift;
+ my $session = $self->session;
+ WebGUI::Error::InvalidParam->throw(error => q{Must provide the path to a file})
+ unless $filePath;
+ WebGUI::Error::InvalidFile->throw(error => qq{File could not be found}, brokenFile => $filePath)
+ unless -e $filePath;
+ WebGUI::Error::InvalidFile->throw(error => qq{File is not readable}, brokenFile => $filePath)
+ unless -r $filePath;
+ open my $table, '<', $filePath or
+ WebGUI::Error->throw(error => qq{Unable to open $filePath for reading: $!\n});
+
+ my $headers;
+ $headers = <$table>;
+ chomp $headers;
+ my @headers = WebGUI::Text::splitCSV($headers);
+ WebGUI::Error::InvalidFile->throw(error => qq{Bad header found in the CSV file}, brokenFile => $filePath)
+ unless (join(q{-}, sort @headers) eq 'mastersku-price-quantity-shortdescription-sku-title-weight')
+ and (scalar @headers == 7);
+
+ my @productData = ();
+ my $line = 1;
+ while (my $productRow = <$table>) {
+ chomp $productRow;
+ $productRow =~ s/\s*#.+$//;
+ next unless $productRow;
+ local $_;
+ my @productRow = WebGUI::Text::splitCSV($productRow);
+ WebGUI::Error::InvalidFile->throw(error => qq{Error found in the CSV file}, brokenFile => $filePath, brokenLine => $line)
+ unless scalar @productRow == 7;
+ push @productData, [ @productRow ];
+ }
+
+ return unless scalar @productData;
+
+ ##Okay, if we got this far, then the data looks fine.
+ my $fetchProductId = $session->db->prepare('select p.assetId from Product as p join sku as s on p.assetId=s.assetId and p.revisionDate=s.revisionDate where s.sku=? order by p.revisionDate DESC limit 1');
+ my $node = $self;
+ @headers = map { $_ eq 'shortdescription' ? 'shortdesc' : $_ } @headers;
+ my @collateralFields = grep { $_ ne 'title' and $_ ne 'mastersku' } @headers;
+ PRODUCT: foreach my $productRow (@productData) {
+ my %productRow;
+ ##Order the data according to the headers, in whatever order they exist.
+ @productRow{ @headers } = @{ $productRow };
+ ##Isolate just the collateral from the other product information
+ my %productCollateral;
+ @productCollateral{ @collateralFields } = @productRow{ @collateralFields };
+
+ $fetchProductId->execute([$productRow{mastersku}]);
+ my $asset = $fetchProductId->hashRef;
+
+ ##If the assetId exists, we update data for it
+ if ($asset->{assetId}) {
+ $session->log->warn("Modifying an existing product: $productRow{sku} = $asset->{assetId}\n");
+ my $assetId = $asset->{assetId};
+ my $product = WebGUI::Asset->newPending($session, $assetId);
+
+ ##Error handling for locked assets
+ if ($product->isLocked) {
+ $session->log->warn("Product is locked");
+ next PRODUCT if $product->isLocked;
+ }
+
+ if ($productRow{title} ne $product->getTitle) {
+ $product->update({ title => $product->fixTitle($productRow{title}) });
+ }
+
+ my $collaterals = $product->getAllCollateral('variantsJSON');
+ my $collateralSet = 0;
+ ROW: foreach my $collateral (@{ $collaterals }) {
+ next ROW unless $collateral->{sku} eq $productRow{sku};
+ @{ $collateral}{ @collateralFields } = @productCollateral{ @collateralFields }; ##preserve the variant Id field, assign all others
+ $product->setCollateral('variantsJSON', 'variantId', $collateral->{variantId}, $collateral);
+ $collateralSet=1;
+ }
+ if (!$collateralSet) {
+ ##It must be a new variant
+ $product->setCollateral('variantsJSON', 'variantId', 'new', \%productCollateral);
+ }
+ }
+ else {
+ ##Insert a new product;
+ $session->log->warn("Making a new product: $productRow{sku}\n");
+ my $newProduct = $node->addChild({className => 'WebGUI::Asset::Sku::Product'});
+ $newProduct->update({
+ title => $newProduct->fixTitle($productRow{title}),
+ sku => $productRow{mastersku},
+ });
+ $newProduct->setCollateral('variantsJSON', 'variantId', 'new', \%productCollateral);
+ $newProduct->commit;
+ }
+ }
+ return 1;
+}
#-------------------------------------------------------------------
@@ -131,5 +318,102 @@ sub view {
}
+#-------------------------------------------------------------------
+sub www_edit {
+ my $self = shift;
+ my $i18n = WebGUI::International->new($self->session, 'Asset_Shelf');
+ if ($self->getId ne "new") {
+ $self->getAdminConsole->addSubmenuItem($self->getUrl('func=exportProducts'),$i18n->get("export"));
+ $self->getAdminConsole->addSubmenuItem($self->getUrl('func=importProducts'),$i18n->get("import"));
+ }
+ return $self->SUPER::www_edit();
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_exportProducts ( )
+
+Export all product SKUs as a CSV file. Returns a WebGUI::Storage
+object containg the product file, named 'siteProductData.csv'.
+
+=cut
+
+sub www_exportProducts {
+ my $self = shift;
+ my $session = $self->session;
+ return $session->privilege->insufficient
+ unless $self->canEdit;
+ my $storage = $self->exportProducts();
+ $session->http->setRedirect($storage->getUrl($storage->getFiles->[0]));
+ return "redirect";
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_importProducts ( )
+
+Import new product data from a file provided by the user. This will create new products
+or alter existing products.
+
+=cut
+
+sub www_importProducts {
+ my $self = shift;
+ my $session = $self->session;
+ return $session->privilege->insufficient unless $self->canEdit;
+ my $i18n=WebGUI::International->new($session, 'Asset_Shelf');
+ my $status_message;
+ if ( $session->form->get('doit')) {
+ my $storage = WebGUI::Storage->create($session);
+ my $productFile = $storage->addFileFromFormPost('importFile', 1);
+ eval {
+ $self->importProducts($storage->getPath($productFile)) if $productFile;
+ };
+ my $exception;
+ if ($exception = Exception::Class->caught('WebGUI::Error::InvalidFile')) {
+ $status_message = sprintf 'A problem was found with your file: %s',
+ $exception->error;
+ if ($exception->brokenLine) {
+ $status_message .= sprintf ' on line %d', $exception->brokenLine;
+ }
+ }
+ elsif ($exception = Exception::Class->caught()) {
+ $status_message = sprintf 'A problem happened during the import: %s', $exception->error;
+ }
+ else {
+ $status_message = $i18n->get('import successful');
+ ##Copy and paste from Asset.pm, www_editSave
+ if ($self->session->setting->get("autoRequestCommit")) {
+ # Make sure version tag hasn't already been committed by another process
+ my $versionTag = WebGUI::VersionTag->getWorking($self->session, "nocreate");
+
+ if ($versionTag && $self->session->setting->get("skipCommitComments")) {
+ $versionTag->requestCommit;
+ }
+ elsif ($versionTag) {
+ $self->session->http->setRedirect(
+ $self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId)
+ );
+ return undef;
+ }
+ }
+ }
+ }
+
+ my $output;
+ if ($status_message) {
+ $output = '
'.$status_message.'
';
+ }
+
+ $output .= WebGUI::Form::formHeader($session,{action => $self->getUrl})
+ . WebGUI::Form::hidden($session, {name=>"func", value=>"importProducts"})
+ . WebGUI::Form::hidden($session, {name=>"doit", value=>1})
+ . q{}
+ . WebGUI::Form::submit($session,{value=>$i18n->get('import'), extras=>q{style="float: left;"} })
+ . WebGUI::Form::formFooter($session);
+
+ return $self->getAdminConsole->render($output, $i18n->get('import'));
+}
+
1;
diff --git a/lib/WebGUI/Content/Shop.pm b/lib/WebGUI/Content/Shop.pm
index 9ff3e8b92..ed5775f60 100644
--- a/lib/WebGUI/Content/Shop.pm
+++ b/lib/WebGUI/Content/Shop.pm
@@ -21,7 +21,6 @@ use WebGUI::Shop::AddressBook;
use WebGUI::Shop::Cart;
use WebGUI::Shop::Credit;
use WebGUI::Shop::Pay;
-use WebGUI::Shop::Products;
use WebGUI::Shop::Ship;
use WebGUI::Shop::Tax;
use WebGUI::Shop::Transaction;
@@ -190,28 +189,6 @@ sub www_pay {
#-------------------------------------------------------------------
-=head2 www_products ()
-
-Hand off to the tax system.
-
-=cut
-
-sub www_products {
- my $session = shift;
- my $output = undef;
- my $method = "www_".$session->form->get("method");
- my $products = WebGUI::Shop::Products->new($session);
- if ($method ne "www_" && WebGUI::Shop::Products->can($method)) {
- $output = $products->$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.
diff --git a/lib/WebGUI/Macro/PageUrl.pm b/lib/WebGUI/Macro/PageUrl.pm
index 5f4c837d3..61d5f2d3a 100644
--- a/lib/WebGUI/Macro/PageUrl.pm
+++ b/lib/WebGUI/Macro/PageUrl.pm
@@ -33,13 +33,18 @@ The current WebGUI session object.
A URL to safely append to the end of the page URL.
+=head3 $query
+
+The post query (?) parameters you'd like to add to the URL.
+
=cut
#-------------------------------------------------------------------
sub process {
my $session = shift;
my $url = shift;
- my $pageUrl = $session->url->page();
+ my $query = shift;
+ my $pageUrl = $session->url->page($query);
if ($url) {
my $uri = URI->new($pageUrl);
##Append the requested URL to the path part of the URL
diff --git a/lib/WebGUI/Shop/Products.pm b/lib/WebGUI/Shop/Products.pm
deleted file mode 100644
index 530f32966..000000000
--- a/lib/WebGUI/Shop/Products.pm
+++ /dev/null
@@ -1,357 +0,0 @@
-package WebGUI::Shop::Products;
-
-use strict;
-
-use Class::InsideOut qw{ :std };
-
-use WebGUI::Text;
-use WebGUI::Storage;
-use WebGUI::Exception::Shop;
-use WebGUI::Shop::Admin;
-use WebGUI::Asset::Sku::Product;
-
-=head1 NAME
-
-Package WebGUI::Shop::Products
-
-=head1 DESCRIPTION
-
-This package handles importing and exporting products into the Shop system, mainly
-to be compatible with third-party systems, such as inventory control. If you want to
-export your Products into another WebGUI site, please use the Asset Export system
-instead.
-
-=head1 METHODS
-
-These subroutines are available from this package:
-
-=cut
-
-readonly session => my %session;
-
-#-------------------------------------------------------------------
-
-=head2 exportProducts ( )
-
-Export all products from the WebGUI system in a CSV file. For details
-about the file format, see importProducts.
-
-Returns a temporary WebGUI::Storage object containing the file. The
-file will be named siteProductData.csv.
-
-=cut
-
-sub exportProducts {
- my $self = shift;
- my $session = $self->session;
- my @columns = qw{sku shortdescription price weight quantity};
- my $productData = WebGUI::Text::joinCSV(qw{mastersku title}, @columns) . "\n";
- @columns = map { $_ eq 'shortdescription' ? 'shortdesc' : $_ } @columns;
- my $getAProduct = WebGUI::Asset::Sku::Product->getIsa($session);
- while (my $product = $getAProduct->()) {
- my $mastersku = $product->get('sku');
- my $title = $product->getTitle;
- my $collateri = $product->getAllCollateral('variantsJSON');
- foreach my $collateral (@{ $collateri }) {
- my @productFields = @{ $collateral }{ @columns };
- $productData .= WebGUI::Text::joinCSV($mastersku, $title, @productFields);
- $productData .= "\n";
- }
- }
- my $storage = WebGUI::Storage->createTemp($session);
- $storage->addFileFromScalar('siteProductData.csv', $productData);
- return $storage;
-}
-
-#-------------------------------------------------------------------
-
-=head2 importProducts ( $filePath )
-
-Import products into the WebGUI system. If the master sku of a product
-exists in the system, it will be updated. If master skus do not exist,
-they will be added.
-
-The first line of the file should contain only the name of the columns,
-in any order. It may not contain comments.
-
-These are the column names, each is required:
-
-=over 4
-
-=item *
-
-mastersku
-
-=item *
-
-sku
-
-=item *
-
-title
-
-=item *
-
-shortdescription
-
-=item *
-
-price
-
-=item *
-
-weight
-
-=item *
-
-quantity
-
-=back
-
-The following lines will contain product information. Blank
-lines and anything following a '#' sign will be ignored from
-the second line of the file, on to the end.
-
-Returns 1 if the import has taken place. This is to help you know
-if old data has been deleted and new has been inserted.
-
-=cut
-
-sub importProducts {
- my $self = shift;
- my $filePath = shift;
- my $session = $self->session;
- WebGUI::Error::InvalidParam->throw(error => q{Must provide the path to a file})
- unless $filePath;
- WebGUI::Error::InvalidFile->throw(error => qq{File could not be found}, brokenFile => $filePath)
- unless -e $filePath;
- WebGUI::Error::InvalidFile->throw(error => qq{File is not readable}, brokenFile => $filePath)
- unless -r $filePath;
- open my $table, '<', $filePath or
- WebGUI::Error->throw(error => qq{Unable to open $filePath for reading: $!\n});
-
- my $headers;
- $headers = <$table>;
- chomp $headers;
- my @headers = WebGUI::Text::splitCSV($headers);
- WebGUI::Error::InvalidFile->throw(error => qq{Bad header found in the CSV file}, brokenFile => $filePath)
- unless (join(q{-}, sort @headers) eq 'mastersku-price-quantity-shortdescription-sku-title-weight')
- and (scalar @headers == 7);
-
- my @productData = ();
- my $line = 1;
- while (my $productRow = <$table>) {
- chomp $productRow;
- $productRow =~ s/\s*#.+$//;
- next unless $productRow;
- local $_;
- my @productRow = WebGUI::Text::splitCSV($productRow);
- WebGUI::Error::InvalidFile->throw(error => qq{Error found in the CSV file}, brokenFile => $filePath, brokenLine => $line)
- unless scalar @productRow == 7;
- push @productData, [ @productRow ];
- }
-
- return unless scalar @productData;
-
- ##Okay, if we got this far, then the data looks fine.
- my $fetchProductId = $session->db->prepare('select p.assetId from Product as p join sku as s on p.assetId=s.assetId and p.revisionDate=s.revisionDate where s.sku=? order by p.revisionDate DESC limit 1');
- my $node = WebGUI::Asset::Sku::Product->getProductImportNode($session);
- @headers = map { $_ eq 'shortdescription' ? 'shortdesc' : $_ } @headers;
- my @collateralFields = grep { $_ ne 'title' and $_ ne 'mastersku' } @headers;
- PRODUCT: foreach my $productRow (@productData) {
- my %productRow;
- ##Order the data according to the headers, in whatever order they exist.
- @productRow{ @headers } = @{ $productRow };
- ##Isolate just the collateral from the other product information
- my %productCollateral;
- @productCollateral{ @collateralFields } = @productRow{ @collateralFields };
-
- $fetchProductId->execute([$productRow{mastersku}]);
- my $asset = $fetchProductId->hashRef;
-
- ##If the assetId exists, we update data for it
- if ($asset->{assetId}) {
- $session->log->warn("Modifying an existing product: $productRow{sku} = $asset->{assetId}\n");
- my $assetId = $asset->{assetId};
- my $product = WebGUI::Asset->newPending($session, $assetId);
-
- ##Error handling for locked assets
- if ($product->isLocked) {
- $session->log->warn("Product is locked");
- next PRODUCT if $product->isLocked;
- }
-
- if ($productRow{title} ne $product->getTitle) {
- $product->update({ title => $product->fixTitle($productRow{title}) });
- }
-
- my $collaterals = $product->getAllCollateral('variantsJSON');
- my $collateralSet = 0;
- ROW: foreach my $collateral (@{ $collaterals }) {
- next ROW unless $collateral->{sku} eq $productRow{sku};
- @{ $collateral}{ @collateralFields } = @productCollateral{ @collateralFields }; ##preserve the variant Id field, assign all others
- $product->setCollateral('variantsJSON', 'variantId', $collateral->{variantId}, $collateral);
- $collateralSet=1;
- }
- if (!$collateralSet) {
- ##It must be a new variant
- $product->setCollateral('variantsJSON', 'variantId', 'new', \%productCollateral);
- }
- }
- else {
- ##Insert a new product;
- $session->log->warn("Making a new product: $productRow{sku}\n");
- my $newProduct = $node->addChild({className => 'WebGUI::Asset::Sku::Product'});
- $newProduct->update({
- title => $newProduct->fixTitle($productRow{title}),
- sku => $productRow{mastersku},
- });
- $newProduct->setCollateral('variantsJSON', 'variantId', 'new', \%productCollateral);
- $newProduct->commit;
- }
- }
- return 1;
-}
-
-#-------------------------------------------------------------------
-
-=head2 new ( $session )
-
-Constructor for the WebGUI::Shop::Products. Returns a WebGUI::Shop::Products object.
-
-=cut
-
-sub new {
- my $class = shift;
- my $session = shift;
- my $self = {};
- bless $self, $class;
- register $self;
- $session{ id $self } = $session;
- return $self;
-}
-
-#-------------------------------------------------------------------
-
-=head2 www_exportProducts ( )
-
-Export all product SKUs as a CSV file. Returns a WebGUI::Storage
-object containg the product file, named 'siteProductData.csv'.
-
-=cut
-
-sub www_exportProducts {
- my $self = shift;
- my $session = $self->session;
- my $admin = WebGUI::Shop::Admin->new($session);
- return $session->privilege->insufficient
- unless $admin->canManage;
- my $storage = $self->exportProducts();
- $session->http->setRedirect($storage->getUrl($storage->getFiles->[0]));
- return "redirect";
-}
-
-#-------------------------------------------------------------------
-
-=head2 www_importProducts ( )
-
-Import new product data from a file provided by the user. This will create new products
-or alter existing products.
-
-=cut
-
-sub www_importProducts {
- my $self = shift;
- my $session = $self->session;
- my $admin = WebGUI::Shop::Admin->new($session);
- return $session->privilege->insufficient
- unless $admin->canManage;
- my $storage = WebGUI::Storage->create($session);
- my $productFile = $storage->addFileFromFormPost('importFile', 1);
- eval {
- $self->importProducts($storage->getPath($productFile)) if $productFile;
- };
- my ($exception, $status_message);
- if ($exception = Exception::Class->caught('WebGUI::Error::InvalidFile')) {
- $status_message = sprintf 'A problem was found with your file: %s',
- $exception->error;
- if ($exception->brokenLine) {
- $status_message .= sprintf ' on line %d', $exception->brokenLine;
- }
- }
- elsif ($exception = Exception::Class->caught()) {
- $status_message = sprintf 'A problem happened during the import: %s', $exception->error;
- }
- else {
- my $i18n = WebGUI::International->new($session, 'Shop');
- $status_message = $i18n->get('import successful');
- ##Copy and paste from Asset.pm, www_editSave
- if ($self->session->setting->get("autoRequestCommit")) {
- # Make sure version tag hasn't already been committed by another process
- my $versionTag = WebGUI::VersionTag->getWorking($self->session, "nocreate");
-
- if ($versionTag && $self->session->setting->get("skipCommitComments")) {
- $versionTag->requestCommit;
- }
- elsif ($versionTag) {
- $self->session->http->setRedirect(
- $self->getUrl("op=commitVersionTag;tagId=".WebGUI::VersionTag->getWorking($self->session)->getId)
- );
- return undef;
- }
- }
- }
- return $self->www_manage($status_message);
-}
-
-#-------------------------------------------------------------------
-
-=head2 www_manage ( $status_message )
-
-User interface to synchronize product data. Provides an interface for
-exporting all products on the site, and importing sets of products.
-
-=head3 $status_message
-
-An status message generated when import or export is called that needs to be
-displayed back to the user.
-
-=cut
-
-sub www_manage {
- my $self = shift;
- my $status_message = shift;
- my $session = $self->session;
- my $admin = WebGUI::Shop::Admin->new($session);
- return $session->privilege->insufficient
- unless $admin->canManage;
- ##YUI specific datatable CSS
- my ($style, $url) = $session->quick(qw(style url));
- ##Default CSS
- $style->setRawHeadTags('');
- my $i18n=WebGUI::International->new($session, 'Shop');
-
- my $exportForm = WebGUI::Form::formHeader($session,{action => $url->page('shop=products;method=exportProducts')})
- . WebGUI::Form::submit($session,{value=>$i18n->get('export'), extras=>q{style="float: left;"} })
- . WebGUI::Form::formFooter($session);
- my $importForm = WebGUI::Form::formHeader($session,{action => $url->page('shop=products;method=importProducts')})
- . WebGUI::Form::submit($session,{value=>$i18n->get('import'), extras=>q{style="float: left;"} })
- . q{}
- . WebGUI::Form::formFooter($session);
-
- my $output;
- if ($status_message) {
- $output = sprintf <%s
-EODIV
- }
-
- $output .= sprintf <url->append(WebGUI::Asset::Sku::Product->getProductImportNode($session)->getUrl, 'op=assetManager'), $i18n->get('view products');
-