Release Notes - nopCommerce 3.20 (December 9, 2013)

Highlight features and changes

  • Performance optimization.
  • "Facebook shop" plugin added. It helps store owners to present their store products on Facebook. Note: currently this plugin has just catalog browsing without product details or shopping cart pages. It was done to reduce source code duplicates. If somebody wants to extend this plugin, then he can easily do it.
  • Warehouse support added. Also allow a store owner to decide whether the system should or should not use warehouse location when requesting shipping rates. This is useful when you ship from multiple warehouses.
  • Allow a store owner to configure and specify delivery dates (for products). Specified delivery date will be displayed on the product details page.
  • Better UI for the default theme. Now it has the top menu with categories and a new footer.
  • Multi-vendors. Front-page navigation support added.

Improvements

  • Updated ASP.NET MVC 4 to ASP.NET MVC 5. IMPORTANT NOTE: this MVC version doesn’t support medium trust anymore (decision of ASP.NET team)!
  • Allow developers to deploy or publish nopCommerce right from Visual Studio. Now we can forget about prepare.bat and deploy.bat files. By the way, prepare.bat and deploy.bat files used in versions 2.X-3.10 don’t work when publishing in Visual Studio 2013 without VS 2012 installed.
  • Source code refactoring.
  • Performance optimization. Added CSS bundling and minification support (contributed by www.nop-templates.com).
  • Performance optimization. Cache picture models on the product details page.
  • Performance optimization. Added an option to load all localized properties (such as localized product properties) in memory on application startup. This way we make only one heavy SQL request on application startup rather a lot of simple requests for each of displayed products.
  • Performance optimization. Added an option to load all slugs (search engine friendly names) in memory on application startup. This way we make only one heavy SQL request on application startup rather a lot of simple requests for each of displayed products.
  • Performance optimization. Now "Tax By Country & State & Zip" tax provider caches records between HTTP requests. Hence tax rate records are loaded only once.
  • Performance optimization. Disable "Store last visited page" setting by default.
  • Usability. Admin area. Remember active tab (when saving some entity).
  • Further performance optimization. Cache pictures uploaded in the "Nivo slider" plugin.
  • Further performance optimization. Faster language and currency loading.
  • Added a setting indicating whether we should bypass "select shipping method" page if we have only one shipping method (disabled by default).
  • Allow a store owner to restrict payment methods by countries.
  • Updated all third-party references to the latest version.
  • Use partial customer address to pre-populate new address in checkout. For example, the first name and last name and usually email are always required to register. We should not require a customer to enter the same fields once more during checkout.
  • Now plugins have logos. Just add a logo.jpg file into your payment plugin root directory. Note: the payment gateway logos are automatically picked up and displayed during checkout. Recommended size: 53x36 px.
  • Allow a store owner to specify information which will be displayed in footer of PDF invoices. For example, company or shop information.
  • Allow a store owner to search bestsellers by category or manufacturer.
  • Allow a store owner to search shipments by shipping address (country, state, or city).
  • Allow a store owner to execute a schedule task on demand.
  • Add settings indicating whether "order placed" or "order completed" emails should contain a PDF invoice attached.
  • Better bundle product support. Allow a store owner to specify the default quantity for product attribute values associated to some products. Previously it was hard-coded to 1. Note: you can also set "ShoppingCartSettings.RenderAssociatedAttributeValueQuantity" setting to "true" in order to display quantity on the shopping cart page or during checkout.
  • Now permission names are localizable (admin area > access control list).
  • Now a store owner can decide on which page "terms of service" checkbox should be displayed: on the shopping cart page or on the order confirmation page.
  • Allow a store owner to specify 0 as a number of manufacturers to display in manufacturers block. Previously it threw an exception.
  • Allow a store owner to manage product/category/manufacturer templates in admin area (admin area > system > templates).
  • "Order paid" email notification added (disabled by default). Some customers place orders but leave them suspended to complete payment at a later time. This email can notify a store owner of such payments.
  • Added RTL (right-to-left) support for admin area. Note: also added a setting ("LocalizationSettings.IgnoreRtlPropertyForAdminArea") indicating whether RTL property should be ignored for admin area (disabled by default).
  • Allow a store owner to manually edit an order status. Previously there were some case when you never could get an order status to become 'Completed' (after partial refund, etc). Now a store owner can set any "order status" he wants.
  • Allow customers to edit attributes of existing shopping cart items. Previously they had to click the product, reconfigure, add to cart, then delete the item they don't want.
  • Allow a store owner to specify cost for product attribute values.
  • Allow a store owner to specify an overridden price for attribute combinations. For example, you can give a discount for bundled products this way.
  • Search engine optimization. Allow a store owner to choose "WWW requirement" mode. For example, requests to http://yourStore.com/ could be automatically be redirected to http://www.yourStore.com/ and vice versa.
  • Added "Pre-order availability start date" product property. It's used only with "pre-order available" option enabled. "Pre-order" button will automatically be changed to "Add to cart" at the moment.
  • Added canonical URLs for product tags.
  • Added "Popular search terms" report.
  • Shipping plugins. Removed all “shipped from” properties. But we should use the origin address entered in admin area > configuration > shipping settings. Now on this page you can also specify origin "City" and origin "Address".
  • Added paging support for product and specification attributes.
  • Reporting. Allow a store owner to see a list of orders in which a particular product was purchased.
  • Multi-store. Allow a store owner to upload a favicon per store. Just upload a favicon-{0}.ico file where {0} is your store ID. If such file doesn't exist, then the default one will be used - favicon.ico
  • Multi-store. Allow a store owner to configure "Tax By Country & State & Zip" plugin per store.
  • Store name is now localizable.
  • Display "Free shipping" icon on the product details page. It can be disabled by editing "catalogsettings.showfreeshippingnotification" setting.
  • Generate random encryption private key on install.
  • Allow a store owner to edit an order shipping method.
  • Do not hard-code brackets "(some-text)". Moved all of them to resources: "({0})".
  • Reporting. Display shipping total on the order list page (totals).
  • Allow a store owner to bulk publish/unpublish countries.
  • Allow a store owner to generate PDF invoices in batch.
  • Added "check/uncheck all" functionality to ACL (access control list) page.
  • "Copy product" functionality now also copies associated products.
  • A store owner now will see a warning in admin area if a custom machine key is not specified in web.config
  • Added implementation for Refund, PartialRefund, and Void for Authorize.NET plugin.
  • Authorize.NET plugin. Pass a full order GUID in "x_description" variable because "x_invoice_num" is limited only to 20 chars.
  • Added support for the "Enter" button press on the product details page.
  • When detecting a user IP address we should also consider "X-Forwarded-For" HTTP header (used with proxies and load balancers).
  • Admin area. Now a store owner can see a theme "Preview" picture. Note for theme developers. Now you should supply your themes with a preview file which is specified in the \Themes\YoutThemeName\theme.config file.
  • Add Assume “VAT always valid” tax setting. If enabled no validity check is made when a customer fills out the EU VAT field in their profile: it is automatically assumed valid and will appear on future orders.
  • Forum topic details page. Moved "manage" into "topic header". This is because if a topic name gets too long it may cause some design issues with the "manage" icons.
  • Added a separate locale resources for image titles/alt on the product details page. There's no need to display something like "Show details for product..."
  • Admin area. Now a product details and blog details pages have a user-friendly autocomplete " tags" input.
  • When importing products using Excel file we should validate whether specified picture already exists from a product. Otherwise, we can get several duplicated pictures for the same product.
  • Renamed the "Facebook" plugin name to "Facebook authentication", and "OpenID" to "OpenID authentication".
  • We should set a current store URL (not http://www.yourStore.com/) for "Store" entity when installing nopCommerce.
  • Moved "ordersettings.onepagecheckoutdisplayordertotalsonpaymentinfotab" setting to UI (admin area).
  • Admin area > discount details page. Display order ID on the discount usage history tab.
  • Use language SEO code in sitemap generator.
  • Message queue page (admin area). Display "to" column. Also re-ordered some other columns.
  • Warnings page (admin area). Display a warning if no shipping rate computation methods enabled.
  • PayPal Standard. Added a new setting indicating a customer should be redirected to the order details page when he clicks "return to store" link on PayPal site WITHOUT completing a payment. And on this order details page he can always click "Complete payment" and try one more time.
  • Discount list page (admin area). Display only one of the specified values ("discount percentage" or "discount" amount) based on a "Use percentage" property.
  • Remove the "Google Checkout" plugin from the solution (retired on November 20, 2013).
  • Added a setting ("CommonSettings.RenderXuaCompatible") indicating whether we should render "X-UA-Compatible" tag (disabled by default). It's useful for users who experience issues with IE browser compatibility mode. Then you can also edit its value by editing the "CommonSettings.XuaCompatibleValue" setting.
  • Added several more chars to "ConvertNonWesternChars" method.
  • Renamed "complete payment" button to "retry payment".
  • Some HTML enhancements
  • Developers. Removed some unused fields in the CatalogController.
  • Developers. Extended the payment method plugin interface ("IPaymentMethod") with a new property ("SkipPaymentInfo") indicating whether a payment information page should be skipped.
  • Developers. Allow developers to add any custom data to the HTML tag. For example, now you can open any cshhtml file and add the following code: Html.AddHeadCustomParts("");
  • Developers. Added "virtual" to some methods.
  • Developers. Added a new "CustomUrlRecordEntityNameRequested" event. It allows developers to insert custom "cases" into GenericPathRoute. Hence seo-friendly-names could be used in plugins. More info: https://www.nopcommerce.com/boards/topic/25879/genericurlrouteprovider-form-a-plugin.
  • Developers. Added ShipmentSentEvent and ShipmentDeliveredEvent events.
  • Developers. Allow developers to specify a custom filepath to settings.txt file (DataSettingsManager.LoadSettings).
  • Developers. Extended "ProductDetailsModel" class with two new properties: "IsShipEnabled" and "IsFreeShipping".
  • Developers. Persist CustomValues of the ProcessPaymentRequest class in the "Order" table ("CustomValuesXml" property). You can deserialize values the following way: order.DeserializeCustomValues().

Bugs

  • Tax rates were not properly calculated when we had "entered prices include TAX" enabled and customers were tax exempt.
  • Bundled products. Customer could purchase when associated products (part of a bundle) stock was not enough (we previously always validated "1" quantity).
  • Email & username required messages on customer info page were not localized.
  • PayPal Direct could cause some issue when testing in sandbox mode on localhost. You could get 10747 error.
  • TinyMCE did not fully supported IE 11 (HTML source code pop-up editor did not work). Fixed by updating to the latest 3.X version (3.5.10).
  • Schedule tasks engine issue fixed. Autofac generated distinct ILifetimeScope instances for one task. It caused issues for some developers.
  • Reporting issue. We should reduce shipping total from the profit report.
  • Tier prices did not work when buying a product with different product attributes. For example, you could have several shopping cart items of the same products. In this case tier prices did not work. Now you can set 'shoppingcartsettings.grouptierpricesfordistinctshoppingcartitems' setting to 'true' in order to enable the new logic.
  • Country field was not saved on the UPS configuration page.
  • Mapping records (AclRecord and StoreMapping tables) should be also deleted when deleting a store or a customer role.
  • reCaptcha was deformed on the default mobile theme.
  • Vendors should not be able to edit "Show on homepage" product property (server-side validation added).
  • Scroll bar should not be displayed for some pop-up windows in admin area.
  • Disabled "autocomplete" for "Password" textbox on the customer details page (admin area).
  • Ensure that a non-admin user cannot impersonate as an administrator.
  • "Email a friend" message template should use localized product values.
  • "Copy product" functionality should also copy a custom value of specification attributes.
  • "AvailableForPreOrder" product property was not copied when using "Copy product" functionality and when importing/exporting.
  • Ensure that a generated "search engine friendly name" does not exceed some length. Although a store owner can always manually edit "seo name" and such product names are quite rare, it's better to don't allow so long automatically generated names. This way customers won't get the following error: "the fully qualified file name must be less than 260 characters".
  • "ProductId" property of "DownloadableProductsModel" contained the order item ID and not the product ID (although this property even was not used later).
  • Users could not change language when a store was closed.
  • If you had several gift cards applied and tried to remove the last one (on the shopping cart page), then nopCommerce always removed the first one.
  • Remove checkout steps indicator from the shopping cart page when multi-step checkout is disabled.
  • Australia Post plugin. Removed "Express Parcels Platinum" method because it was discontinued and caused issues.
  • FedEx plugin. If the customer orders on a Saturday, the rate calculation will use Saturday as the shipping date, and the rates will include a Saturday pickup surcharge. It was wrong.
  • Error page. We cannot have UL in P tag.
  • Downloadable products. Vendors could download any "download" object by its identifier. Hence they could download files uploaded by other vendors. Fixed.
  • Thumbnails on the shopping cart page and mini-shopping cart block should display appropriate product variant attribute picture (if it is specified).
  • Currency list page (admin area). Some buttons in the grid disappeared after clicking "Refresh".
  • Dimension and weight list pages (admin area). "Mark as primary" buttons in the grids stopped working after clicking "Refresh".
  • Mapping pictures to product attributes. The image that is set to the default picture is not the full size image and when you enable the default image click to zoom ("mediasettings.defaultpicturezoomenabled" setting) it displays the small image rather than the full image.
  • We should hide "Restart Application" and "Clear Cache" buttons from vendors (admin area). Although they were visible they did not have permission to perform those actions so they just needed to be hidden.
  • When deleting a category we also set reset a "Parent category" of all child categories. Previously we did it only for published (!!!) subcategories. But we should do it for all subcategories.
  • Authorize.net payment plugin. The email address was not passed to the payment gateway and thus could be used when issuing refund or doing a search.
  • CSS issue fixed. Added missing angle brackets for ".order-details-page" style.
  • CSS issue fixed. Unordered or ordered lists in full description of products were not properly displayed.
  • CSS issue fixed. Message errors could be wrongly displayed on the "customer info" and "registration" pages.
  • Product reviews page. Rating radio buttons all had the same ID.
  • The topic list page (admin area) could not be loaded when you had a lot of topics (for example, 200).
  • Forums. Some CSS issues fixed in RTL theme.
  • Issue fixed (EF limitation) on one-page checkout. If a customer entered a new billing address with some country that doesn't allow shipping, then he could see this address on the shipping address tab.
  • Deleted obsolete LinqToTwitter assembly.
  • AdminTabStripCreated event had a "category-edit" strip name instead of "blog-post-edit".
  • Typo fixed in "GetListOfAllowedTokens" method.
  • Developers. Removed "VatNumberStatusNote" property from RegisterModel. Anyway it wasn't used.