diff --git a/docs/gotcha.txt b/docs/gotcha.txt index 9f44ba85b..1415670d6 100644 --- a/docs/gotcha.txt +++ b/docs/gotcha.txt @@ -44,6 +44,13 @@ save you many hours of grief. Wobjects, Templates and Snippets, the Product macro has been replaced with the AssetProxy macro. + * The Product template variables now use the new WebGUI standard of not + using dots in their names. For example, brochure.icon is now brochure_icon + + * All Product Templates that shipped with earlier versions of WebGUI have + been deleted, except for the Default Product Macro. During the upgrade, + all products have been updated to use the Default Product Macro. + 7.5.9 -------------------------------------------------------------------- diff --git a/docs/upgrades/packages-7.5.11/root_import_product.wgpkg b/docs/upgrades/packages-7.5.11/root_import_product.wgpkg index 321178d95..07ab55fb8 100644 Binary files a/docs/upgrades/packages-7.5.11/root_import_product.wgpkg and b/docs/upgrades/packages-7.5.11/root_import_product.wgpkg differ 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 40d67a05f..ebcdc38d3 100644 --- a/docs/upgrades/upgrade_7.5.10-7.5.11.pl +++ b/docs/upgrades/upgrade_7.5.10-7.5.11.pl @@ -52,6 +52,7 @@ upgradeEMS($session); migrateOldProduct($session); mergeProductsWithCommerce($session); updateUsersOfProductMacro($session); +deleteOldProductTemplates($session); addCaptchaToDataForm( $session ); addArchiveEnabledToCollaboration( $session ); addShelf( $session ); @@ -1079,6 +1080,19 @@ sub updateUsersOfProductMacro { } +#------------------------------------------------- +sub deleteOldProductTemplates { + my $session = shift; + print "\tDeleting all Product Templates, except for the Default Product Template.\n" unless ($quiet); + $session->db->write("update Product set templateId='PBtmpl0000000000000056.tmpl'"); + foreach my $templateId (qw/PBtmpl0000000000000095 PBtmpl0000000000000110 PBtmpl0000000000000119/) { + my $template = WebGUI::Asset->newByDynamicClass($session, $templateId); + $template->purge; + } + return 1; +} + + #------------------------------------------------- sub insertCommercePayDriverTable { my $session = shift; diff --git a/lib/WebGUI/Asset/Sku/Product.pm b/lib/WebGUI/Asset/Sku/Product.pm index 3b68fd47c..f1557df40 100644 --- a/lib/WebGUI/Asset/Sku/Product.pm +++ b/lib/WebGUI/Asset/Sku/Product.pm @@ -835,7 +835,10 @@ sub www_buy { my $vid = $self->session->form->process('vid'); my $variant = $self->getCollateral('variantsJSON', 'variantId', $vid); return '' unless keys %{ $variant }; - $self->addToCart($variant); + my $error = $self->addToCart($variant); + if ($error) { + $self->view($error); + } return ''; } @@ -1250,6 +1253,7 @@ sub www_moveVariantUp { #------------------------------------------------------------------- sub view { my $self = shift; + my $error = shift; my $session = $self->session; if (!$session->var->isAdminOn && $self->get("cacheTimeout") > 10) { my $out = WebGUI::Cache->new($self->session,"view_".$self->getId)->get; @@ -1269,23 +1273,23 @@ sub view { my $i18n = WebGUI::International->new($session,'Asset_Product'); if ($brochure) { my $file = WebGUI::Storage->get($session,$brochure); - $var{"brochure.icon"} = $self->getFileIconUrl($file); - $var{"brochure.label"} = $i18n->get(13); - $var{"brochure.URL"} = $self->getFileUrl($file); + $var{"brochure_icon"} = $self->getFileIconUrl($file); + $var{"brochure_label"} = $i18n->get(13); + $var{"brochure_URL"} = $self->getFileUrl($file); } #---manual if ($manual) { my $file = WebGUI::Storage->get($session,$manual); - $var{"manual.icon"} = $self->getFileIconUrl($file); - $var{"manual.label"} = $i18n->get(14); - $var{"manual.URL"} = $self->getFileUrl($file); + $var{"manual_icon"} = $self->getFileIconUrl($file); + $var{"manual_label"} = $i18n->get(14); + $var{"manual_URL"} = $self->getFileUrl($file); } #---warranty if ($warranty) { my $file = WebGUI::Storage->get($session,$warranty); - $var{"warranty.icon"} = $self->getFileIconUrl($file); - $var{"warranty.label"} = $i18n->get(15); - $var{"warranty.URL"} = $self->getFileUrl($file); + $var{"warranty_icon"} = $self->getFileIconUrl($file); + $var{"warranty_label"} = $i18n->get(15); + $var{"warranty_URL"} = $self->getFileUrl($file); } #---image1 if ($image1) { @@ -1307,8 +1311,8 @@ sub view { } #---features - $var{'addFeature.url'} = $self->getUrl('func=editFeature&fid=new'); - $var{'addFeature.label'} = $i18n->get(34); + $var{'addFeature_url'} = $self->getUrl('func=editFeature&fid=new'); + $var{'addFeature_label'} = $i18n->get(34); foreach my $collateral ( @{ $self->getAllCollateral('featureJSON') } ) { my $id = $collateral->{featureId}; $segment = $self->session->icon->delete('func=deleteFeatureConfirm&fid='.$id,$self->get('url'),$i18n->get(3)) @@ -1316,15 +1320,15 @@ sub view { . $self->session->icon->moveUp('func=moveFeatureUp&fid='.$id,$self->get('url')) . $self->session->icon->moveDown('func=moveFeatureDown&fid='.$id,$self->get('url')); push(@featureloop,{ - 'feature.feature' => $collateral->{feature}, - 'feature.controls' => $segment + 'feature_feature' => $collateral->{feature}, + 'feature_controls' => $segment }); } $var{feature_loop} = \@featureloop; #---benefits - $var{"addBenefit.url"} = $self->getUrl('func=editBenefit&bid=new'); - $var{"addBenefit.label"} = $i18n->get(55); + $var{"addBenefit_url"} = $self->getUrl('func=editBenefit&bid=new'); + $var{"addBenefit_label"} = $i18n->get(55); foreach my $collateral ( @{ $self->getAllCollateral('benefitJSON') } ) { my $id = $collateral->{benefitId}; $segment = $self->session->icon->delete('func=deleteBenefitConfirm&bid='.$id,$self->get("url"),$i18n->get(48)) @@ -1332,15 +1336,15 @@ sub view { . $self->session->icon->moveUp('func=moveBenefitUp&bid='.$id,$self->get("url")) . $self->session->icon->moveDown('func=moveBenefitDown&bid='.$id,$self->get("url")); push(@benefitloop,{ - "benefit.benefit"=>$collateral->{benefit}, - "benefit.controls"=>$segment + "benefit_benefit"=>$collateral->{benefit}, + "benefit_controls"=>$segment }); } $var{benefit_loop} = \@benefitloop; #---specifications - $var{'addSpecification.url'} = $self->getUrl('func=editSpecification&sid=new'); - $var{'addSpecification.label'} = $i18n->get(35); + $var{'addSpecification_url'} = $self->getUrl('func=editSpecification&sid=new'); + $var{'addSpecification_label'} = $i18n->get(35); foreach my $collateral ( @{ $self->getAllCollateral('specificationJSON') } ) { my $id = $collateral->{specificationId}; $segment = $self->session->icon->delete('func=deleteSpecificationConfirm&sid='.$id,$self->get('url'),$i18n->get(5)) @@ -1348,17 +1352,17 @@ sub view { . $self->session->icon->moveUp('func=moveSpecificationUp&sid='.$id,$self->get('url')) . $self->session->icon->moveDown('func=moveSpecificationDown&sid='.$id,$self->get('url')); push(@specificationloop,{ - 'specification.controls' => $segment, - 'specification.specification' => $collateral->{value}, - 'specification.units' => $collateral->{units}, - 'specification.label' => $collateral->{name}, + 'specification_controls' => $segment, + 'specification_specification' => $collateral->{value}, + 'specification_units' => $collateral->{units}, + 'specification_label' => $collateral->{name}, }); } $var{specification_loop} = \@specificationloop; #---accessories - $var{'addaccessory.url'} = $self->getUrl('func=addAccessory'); - $var{'addaccessory.label'} = $i18n->get(36); + $var{'addaccessory_url'} = $self->getUrl('func=addAccessory'); + $var{'addaccessory_label'} = $i18n->get(36); ##Need an id for collateral operations, and an assetId for asset instantiation. foreach my $collateral ( @{ $self->getAllCollateral('accessoryJSON') } ) { my $id = $collateral->{accessoryAssetId}; @@ -1367,16 +1371,16 @@ sub view { . $self->session->icon->moveDown('func=moveAccessoryDown&aid='.$id,$self->get('url')); my $accessory = WebGUI::Asset->newByDynamicClass($session, $collateral->{accessoryAssetId}); push(@accessoryloop,{ - 'accessory.URL' => $accessory->getUrl, - 'accessory.title' => $accessory->getTitle, - 'accessory.controls' => $segment, + 'accessory_URL' => $accessory->getUrl, + 'accessory_title' => $accessory->getTitle, + 'accessory_controls' => $segment, }); } $var{accessory_loop} = \@accessoryloop; #---related - $var{'addrelatedproduct.url'} = $self->getUrl('func=addRelated'); - $var{'addrelatedproduct.label'} = $i18n->get(37); + $var{'addrelatedproduct_url'} = $self->getUrl('func=addRelated'); + $var{'addrelatedproduct_label'} = $i18n->get(37); foreach my $collateral ( @{ $self->getAllCollateral('relatedJSON')} ) { my $id = $collateral->{relatedAssetId}; $segment = $self->session->icon->delete('func=deleteRelatedConfirm&rid='.$id, $self->get('url'),$i18n->get(4)) @@ -1384,9 +1388,9 @@ sub view { . $self->session->icon->moveDown('func=moveRelatedDown&rid='.$id, $self->get('url')); my $related = WebGUI::Asset->newByDynamicClass($session, $collateral->{relatedAssetId}); push(@relatedloop,{ - 'relatedproduct.URL' => $related->getUrl, - 'relatedproduct.title' => $related->getTitle, - 'relatedproduct.controls' => $segment, + 'relatedproduct_URL' => $related->getUrl, + 'relatedproduct_title' => $related->getTitle, + 'relatedproduct_controls' => $segment, }); } $var{relatedproduct_loop} = \@relatedloop; @@ -1402,12 +1406,12 @@ sub view { . $self->session->icon->moveUp('func=moveVariantUp&vid='.$id,$self->get('url')) . $self->session->icon->moveDown('func=moveVariantDown&vid='.$id,$self->get('url')); push(@variantLoop,{ - 'variant.controls' => $segment, - 'variant.sku' => $collateral->{varSku}, - 'variant.title' => $collateral->{shortdesc}, - 'variant.price' => $collateral->{price}, - 'variant.weight' => $collateral->{weight}, - 'variant.quantity' => $collateral->{quantity}, + 'variant_controls' => $segment, + 'variant_sku' => $collateral->{varSku}, + 'variant_title' => $collateral->{shortdesc}, + 'variant_price' => $collateral->{price}, + 'variant_weight' => $collateral->{weight}, + 'variant_quantity' => $collateral->{quantity}, }); $variants{$id} = $collateral->{shortdesc}; } @@ -1424,8 +1428,8 @@ sub view { ); $var{buy_button} = WebGUI::Form::submit($session, { value => $i18n->get('add to cart') } ); if ($self->canEdit) { - $var{'addvariant.url'} = $self->getUrl('func=editVariant'); - $var{'addvariant.label'} = $i18n->get('add a variant'); + $var{'addvariant_url'} = $self->getUrl('func=editVariant'); + $var{'addvariant_label'} = $i18n->get('add a variant'); $var{variant_loop} = \@variantLoop; } else { diff --git a/lib/WebGUI/Help/Asset_Product.pm b/lib/WebGUI/Help/Asset_Product.pm index e60c20e46..1129bc7a9 100644 --- a/lib/WebGUI/Help/Asset_Product.pm +++ b/lib/WebGUI/Help/Asset_Product.pm @@ -18,73 +18,73 @@ our $HELP = { ], fields => [], variables => [ - { 'name' => 'brochure.icon' }, - { 'name' => 'brochure.url' }, - { 'name' => 'brochure.label' }, - { 'name' => 'manual.icon' }, - { 'name' => 'manual.url' }, - { 'name' => 'manual.label' }, - { 'name' => 'warranty.icon' }, - { 'name' => 'warranty.url' }, - { 'name' => 'warranty.label' }, + { 'name' => 'brochure_icon' }, + { 'name' => 'brochure_url' }, + { 'name' => 'brochure_label' }, + { 'name' => 'manual_icon' }, + { 'name' => 'manual_url' }, + { 'name' => 'manual_label' }, + { 'name' => 'warranty_icon' }, + { 'name' => 'warranty_url' }, + { 'name' => 'warranty_label' }, { 'name' => 'image1' }, { 'name' => 'thumbnail1' }, { 'name' => 'image2' }, { 'name' => 'thumbnail2' }, { 'name' => 'image3' }, { 'name' => 'thumbnail3' }, - { 'name' => 'addfeature.url' }, - { 'name' => 'addfeature.label' }, + { 'name' => 'addfeature_url' }, + { 'name' => 'addfeature_label' }, { 'name' => 'feature_loop', - 'variables' => [ { 'name' => 'feature.controls' }, { 'name' => 'feature.feature' } ] + 'variables' => [ { 'name' => 'feature_controls' }, { 'name' => 'feature_feature' } ] }, - { 'name' => 'addbenefit.url' }, - { 'name' => 'addbenefit.label' }, + { 'name' => 'addbenefit_url' }, + { 'name' => 'addbenefit_label' }, { 'name' => 'benefit_loop', - 'variables' => [ { 'name' => 'benefit.benefit' }, { 'name' => 'benefit.controls' } ] + 'variables' => [ { 'name' => 'benefit_benefit' }, { 'name' => 'benefit_controls' } ] }, - { 'name' => 'addvariant.url' }, - { 'name' => 'addvariant.label' }, + { 'name' => 'addvariant_url' }, + { 'name' => 'addvariant_label' }, { 'name' => 'variant_loop', 'variables' => [ - { 'name' => 'variant.controls' }, - { 'name' => 'variant.sku' }, - { 'name' => 'variant.title' }, - { 'name' => 'variant.price' }, - { 'name' => 'variant.weight' }, - { 'name' => 'variant.quantity' }, + { 'name' => 'variant_controls' }, + { 'name' => 'variant_sku' }, + { 'name' => 'variant_title' }, + { 'name' => 'variant_price' }, + { 'name' => 'variant_weight' }, + { 'name' => 'variant_quantity' }, ] }, { 'name' => 'buy_form_header' }, { 'name' => 'buy_form_options' }, { 'name' => 'buy_form_button' }, { 'name' => 'buy_form_footer' }, - { 'name' => 'addspecification.url' }, - { 'name' => 'addspecification.label' }, + { 'name' => 'addspecification_url' }, + { 'name' => 'addspecification_label' }, { 'name' => 'specification_loop', 'variables' => [ - { 'name' => 'specification.controls' }, - { 'name' => 'specification.specification' }, - { 'name' => 'specification.units' }, - { 'name' => 'specification.label' } + { 'name' => 'specification_controls' }, + { 'name' => 'specification_specification' }, + { 'name' => 'specification_units' }, + { 'name' => 'specification_label' } ] }, - { 'name' => 'addaccessory.url' }, - { 'name' => 'addaccessory.label' }, + { 'name' => 'addaccessory_url' }, + { 'name' => 'addaccessory_label' }, { 'name' => 'accessory_loop', 'variables' => [ - { 'name' => 'accessory.url' }, - { 'name' => 'accessory.title' }, - { 'name' => 'accessory.controls' } + { 'name' => 'accessory_url' }, + { 'name' => 'accessory_title' }, + { 'name' => 'accessory_controls' } ] }, - { 'name' => 'addRelatedProduct.url' }, - { 'name' => 'addRelatedProduct.label' }, - { 'name' => 'relatedproduct.loop', + { 'name' => 'addRelatedProduct_url' }, + { 'name' => 'addRelatedProduct_label' }, + { 'name' => 'relatedproduct_loop', 'variables' => [ - { 'name' => 'relatedproduct.url' }, - { 'name' => 'relatedproduct.title' }, - { 'name' => 'relatedproduct.controls' } + { 'name' => 'relatedproduct_url' }, + { 'name' => 'relatedproduct_title' }, + { 'name' => 'relatedproduct_controls' } ] } ], diff --git a/lib/WebGUI/i18n/English/Asset_Product.pm b/lib/WebGUI/i18n/English/Asset_Product.pm index 5547efe8a..d73a92167 100644 --- a/lib/WebGUI/i18n/English/Asset_Product.pm +++ b/lib/WebGUI/i18n/English/Asset_Product.pm @@ -22,47 +22,47 @@ our $I18N = { lastUpdated => 1031514049 }, - 'brochure.icon' => { + 'brochure_icon' => { message => q|The URL to the icon for the brochure.|, - lastUpdated => 1149655398, + lastUpdated => 1211659018, }, - 'brochure.url' => { + 'brochure_url' => { message => q|The URL to download the brochure.|, lastUpdated => 1149655398, }, - 'brochure.label' => { + 'brochure_label' => { message => q|The translated label for the brochure URL.|, lastUpdated => 1149655398, }, - 'manual.icon' => { + 'manual_icon' => { message => q|The URL to the icon for the manual.|, lastUpdated => 1149655398, }, - 'manual.url' => { + 'manual_url' => { message => q|The URL to download the manual.|, lastUpdated => 1149655398, }, - 'manual.label' => { + 'manual_label' => { message => q|The translated label for the manual URL.|, lastUpdated => 1149655398, }, - 'warranty.icon' => { + 'warranty_icon' => { message => q|The URL to the icon for the warranty.|, lastUpdated => 1149655398, }, - 'warranty.url' => { + 'warranty_url' => { message => q|The URL to download the warranty.|, lastUpdated => 1149655398, }, - 'warranty.label' => { + 'warranty_label' => { message => q|The label for the warranty URL.|, lastUpdated => 1149655398, }, @@ -97,12 +97,12 @@ our $I18N = { lastUpdated => 1149655398, }, - 'addfeature.url' => { + 'addfeature_url' => { message => q|The URL to add a feature to this product.|, lastUpdated => 1149655398, }, - 'addfeature.label' => { + 'addfeature_label' => { message => q|The translated label for the add feature link.|, lastUpdated => 1149655398, }, @@ -112,22 +112,22 @@ our $I18N = { lastUpdated => 1149655398, }, - 'feature.controls' => { + 'feature_controls' => { message => q|The WebGUI management controls for this feature.|, lastUpdated => 1149655398, }, - 'feature.feature' => { + 'feature_feature' => { message => q|The text of the feature itself.|, lastUpdated => 1149655398, }, - 'addbenefit.url' => { + 'addbenefit_url' => { message => q|The URL to add a benefit to this product.|, lastUpdated => 1149655398, }, - 'addbenefit.label' => { + 'addbenefit_label' => { message => q|The translated label for the add benefit link.|, lastUpdated => 1149655398, }, @@ -137,22 +137,22 @@ our $I18N = { lastUpdated => 1149655398, }, - 'benefit.benefit' => { + 'benefit_benefit' => { message => q|The benefit text itself.|, lastUpdated => 1149655398, }, - 'benefit.controls' => { + 'benefit_controls' => { message => q|The WebGUI management controls for this benefit.|, lastUpdated => 1149655398, }, - 'addspecification.url' => { + 'addspecification_url' => { message => q|The URL to add a specification to this product.|, lastUpdated => 1149655398, }, - 'addspecification.label' => { + 'addspecification_label' => { message => q|The translated label for the add specification link.|, lastUpdated => 1149655398, }, @@ -162,32 +162,32 @@ our $I18N = { lastUpdated => 1149655398, }, - 'specification.controls' => { + 'specification_controls' => { message => q|The WebGUI management controls for this specification.|, lastUpdated => 1149655398, }, - 'specification.specification' => { + 'specification_specification' => { message => q|The text of the specification itself.|, lastUpdated => 1149655398, }, - 'specification.units' => { + 'specification_units' => { message => q|The units for this specification. ex: meters|, lastUpdated => 1149655398, }, - 'specification.label' => { + 'specification_label' => { message => q|The label for this specification. ex: height|, lastUpdated => 1149655398, }, - 'addaccessory.url' => { + 'addaccessory_url' => { message => q|The URL to add an accessory to this product.|, lastUpdated => 1149655398, }, - 'addaccessory.label' => { + 'addaccessory_label' => { message => q|The translated label for the add accessory link.|, lastUpdated => 1149655398, }, @@ -197,47 +197,47 @@ our $I18N = { lastUpdated => 1149655398, }, - 'accessory.url' => { + 'accessory_url' => { message => q|The URL to the linked accessory.|, lastUpdated => 1149655398, }, - 'accessory.title' => { + 'accessory_title' => { message => q|The title of the linked accessory.|, lastUpdated => 1149655398, }, - 'accessory.controls' => { + 'accessory_controls' => { message => q|The WebGUI management controls for this accessory.|, lastUpdated => 1149655398, }, - 'addRelatedProduct.url' => { + 'addRelatedProduct_url' => { message => q|The URL to add a related product to this product.|, lastUpdated => 1149655398, }, - 'addRelatedProduct.label' => { + 'addRelatedProduct_label' => { message => q|The translated label for the add related product link.|, lastUpdated => 1149655398, }, - 'relatedproduct.loop' => { + 'relatedproduct_loop' => { message => q|This loop contains all of the products related to this product.|, lastUpdated => 1149655398, }, - 'relatedproduct.url' => { + 'relatedproduct_url' => { message => q|The URL to the related product.|, lastUpdated => 1149655398, }, - 'relatedproduct.title' => { + 'relatedproduct_title' => { message => q|The title of the related product.|, lastUpdated => 1149655398, }, - 'relatedproduct.controls' => { + 'relatedproduct_controls' => { message => q|The WebGUI management controls for this related product.|, lastUpdated => 1149655398, }, @@ -388,55 +388,55 @@ our $I18N = { lastUpdated => 1031514049 }, - '51 description' => { - message => q|You may enter a new benefit, or select from one you've already entered.|, - lastUpdated => 1120337226, - }, + '51 description' => { + message => q|You may enter a new benefit, or select from one you've already entered.|, + lastUpdated => 1120337226, + }, - '52 description' => { - message => q|If you'd like to add another benefit right away, select "Yes".|, - lastUpdated => 1120337226, - }, + '52 description' => { + message => q|If you'd like to add another benefit right away, select "Yes".|, + lastUpdated => 1120337226, + }, - '62 description' => { - message => q|Select a layout for this product.|, - lastUpdated => 1120332527, - }, + '62 description' => { + message => q|Select a layout for this product.|, + lastUpdated => 1120332527, + }, - '10 description' => { - message => q|The price of this variant.|, - lastUpdated => 1209496419, - }, + '10 description' => { + message => q|The price of this variant.|, + lastUpdated => 1209496419, + }, - '7 description' => { - message => q|An image of this product.|, - lastUpdated => 1120332527, - }, + '7 description' => { + message => q|An image of this product.|, + lastUpdated => 1120332527, + }, - '8 description' => { - message => q|An image of this product.|, - lastUpdated => 1120332527, - }, + '8 description' => { + message => q|An image of this product.|, + lastUpdated => 1120332527, + }, - '9 description' => { - message => q|An image of this product.|, - lastUpdated => 1120332527, - }, + '9 description' => { + message => q|An image of this product.|, + lastUpdated => 1120332527, + }, - '13 description' => { - message => q|The brochure for this product.|, - lastUpdated => 1120332527, - }, + '13 description' => { + message => q|The brochure for this product.|, + lastUpdated => 1120332527, + }, - '14 description' => { - message => q|The product, user, or service manual for this product.|, - lastUpdated => 1120332527, - }, + '14 description' => { + message => q|The product, user, or service manual for this product.|, + lastUpdated => 1120332527, + }, - '15 description' => { - message => q|The warranty for this product.|, - lastUpdated => 1120332527, - }, + '15 description' => { + message => q|The warranty for this product.|, + lastUpdated => 1120332527, + }, '36' => { message => q|Add an accessory.|, @@ -458,30 +458,30 @@ our $I18N = { lastUpdated => 1031514049 }, - '23 description' => { - message => q|You may enter a new feature, or select one you entered for another product in the system.|, - lastUpdated => 1120335791, - }, + '23 description' => { + message => q|You may enter a new feature, or select one you entered for another product in the system.|, + lastUpdated => 1120335791, + }, - '24 description' => { - message => q|If you'd like to add another feature right away, select "Yes".|, - lastUpdated => 1120335791, - }, + '24 description' => { + message => q|If you'd like to add another feature right away, select "Yes".|, + lastUpdated => 1120335791, + }, '58' => { message => q|Edit Product Template|, lastUpdated => 1031514049 }, - '20 description' => { - message => q|Choose from the list of products you've already entered.|, - lastUpdated => 1120337083, - }, + '20 description' => { + message => q|Choose from the list of products you've already entered.|, + lastUpdated => 1120337083, + }, - '21 description' => { - message => q|Select "Yes" if you have another related product to add.|, - lastUpdated => 1120337083, - }, + '21 description' => { + message => q|Select "Yes" if you have another related product to add.|, + lastUpdated => 1120337083, + }, '15' => { message => q|Warranty|, @@ -518,40 +518,40 @@ our $I18N = { lastUpdated => 1031514049 }, - '17 description' => { - message => q|Choose from the list of products you've already entered.|, - lastUpdated => 1120336412, - }, + '17 description' => { + message => q|Choose from the list of products you've already entered.|, + lastUpdated => 1120336412, + }, - '18 description' => { - message => q|Select "Yes" if you have another accessory to add.|, - lastUpdated => 1120336412, - }, + '18 description' => { + message => q|Select "Yes" if you have another accessory to add.|, + lastUpdated => 1120336412, + }, '37' => { message => q|Add a related product.|, lastUpdated => 1031514049 }, - '26 description' => { - message => q|The type of specification. For instance, height, weight, or color. You may select one you've entered for another product, or type in a new specification.|, - lastUpdated => 1120336437, - }, + '26 description' => { + message => q|The type of specification. For instance, height, weight, or color. You may select one you've entered for another product, or type in a new specification.|, + lastUpdated => 1120336437, + }, - '27 description' => { - message => q|The actual specification value. For instance, if you chose height as the Label, then you'd enter a numeric value like "18".|, - lastUpdated => 1120336120, - }, + '27 description' => { + message => q|The actual specification value. For instance, if you chose height as the Label, then you'd enter a numeric value like "18".|, + lastUpdated => 1120336120, + }, - '29 description' => { - message => q|The unit of measurement for this specification. For instance, if you chose height for your label, perhaps the units would be "meters".|, - lastUpdated => 1120336120, - }, + '29 description' => { + message => q|The unit of measurement for this specification. For instance, if you chose height for your label, perhaps the units would be "meters".|, + lastUpdated => 1120336120, + }, - '28 description' => { - message => q|If you'd like to add another specification, select "Yes".|, - lastUpdated => 1120336120, - }, + '28 description' => { + message => q|If you'd like to add another specification, select "Yes".|, + lastUpdated => 1120336120, + }, '19' => { message => q|Add Related Product|, @@ -708,12 +708,12 @@ be useful, others may not.|, lastUpdated => 1210019655, }, - 'addvariant.url' => { + 'addvariant_url' => { message => q|A URL to allow new variants to be added to this product.|, lastUpdated => 1210029266, }, - 'addvariant.label' => { + 'addvariant_label' => { message => q|The translated label for the add variant link.|, lastUpdated => 1210029266, }, @@ -723,32 +723,32 @@ be useful, others may not.|, lastUpdated => 1210029452, }, - 'variant.controls' => { + 'variant_controls' => { message => q|An icon toolbar for editing, deleting, or reordering this variant.|, lastUpdated => 1210029452, }, - 'variant.sku' => { + 'variant_sku' => { message => q|The SKU for this variant.|, lastUpdated => 1210029452, }, - 'variant.title' => { + 'variant_title' => { message => q|The title, or short description, for this variant.|, lastUpdated => 1210029452, }, - 'variant.price' => { + 'variant_price' => { message => q|The price for this variant.|, lastUpdated => 1210029452, }, - 'variant.weight' => { + 'variant_weight' => { message => q|The weight for this variant.|, lastUpdated => 1210029452, }, - 'variant.quantity' => { + 'variant_quantity' => { message => q|The quantity for this variant.|, lastUpdated => 1210029452, },