Release Notes - nopCommerce 2.60 (July 1, 2012)

Highlight features

  • Significant performance optimization.
  • Use AJAX for adding products to the cart.
  • New flyout mini-shopping cart.
  • Auto complete suggestions for product searching.
  • Full-Text support.
  • EU cookie law support.

Improvements

  • Source code refactoring.
  • HTML markup and CSS refactoring.
  • Allow a store owner to limit allowed quantities of a product variant. For example, if you enter "3,7" in the appropriate field a customer will only have a choice of purchasing 3 or 7 at a time. Instead of a quantity textbox that allows him to enter any quantity, he will see a dropdown list of the allowed values.
  • Allow store owner to manage which of the customer form fields are required (as per version 1.90)
  • Phased out Flash (now nopCommerce uses Valum file uploader).
  • Product tags are localizable now.
  • Added new activity log types for public store (such as "Viewed a category details page", "Viewed a manufacturer details page", "Viewed a product details page", "Placed a new order"). They are disabled by default.
  • Added "Public store. Allow navigation" permission to ACL.
  • Now a store owner can create shipments but ship them later (previously newly created shipments were immediately shipped). It'll also allow him to print a packaging slip before going to a post office.
  • Admin area. Added "Shipment list" page.
  • Admin area. Allow a store owner to search categories and manufacturers by name.
  • Admin area. Shipment details page. Display product SKU, product weight, dimensions, and shipment total weight.
  • Admin area. Display product variant SKU on the order details page.
  • Allow customers to view all products tags.
  • Allow a store owner to delete abandoned shopping carts and wishlists.
  • Admin area. Customer details page. Display activity log (a new tab).
  • When a customer shares the link to their wishlist, the person that visits the wishlist should be able to add items from the wishlist directly to the cart.
  • Allow a store owner to configure a "Shipping by Weight" plugin by states and zip.
  • Localized installation page.
  • New widget system implementation.
    • All existing widgets (for versions 2.10-2.50) are not compatible with the new implementation (IPluginWidget interface has been changed.)
    • Update all your custom cshtml files (where widgets are used) according to the new implementation
    • If you had some active widgets before, you have to re-activate and re-configure them (in admin area)
  • Added a lot of new widget zones and renamed several existing ones.
  • Render product SKU in order invoices if "Show product SKU" option is enabled.
  • Added * (required) hints to "customer info" and "edit address" pages.
  • Admin area. Customer details page. Ensure a customer is not assigned to both 'Guests' and 'Registered' customer roles. Ensure that a customer is assigned to at least one role: 'Registered' or 'Guests'.
  • When a customer cancels an order, a store owner should be notified of that cancellation (added a "Recurring payment cancelled" message template).
  • Admin area. Added confirmation boxes for some buttons on the order details page. Did the same for "Change encryption key" and "Change picture storage" buttons.
  • Admin area. Allow a store owner to delete multiple products at the same time (product list page).
  • Mobile device version. Add 'Was this review helpful?' options to product reviews (as per 'desktop' version).
  • We should strip out any white space or dash in the CC number when processing credit card payment methods.
  • Added CAPTCHA support on the news page (comments).
  • Added CAPTCHA support on the blog page (comments).
  • Added CAPTCHA support on the product reviews page.
  • General and Miscellaneous Settings. Display a warning to a store owner if reCAPTCHA is enabled but the appropriate keys are not entered.
  • Allow a store owner to set start and end dates for every news and blog post.
  • Added %Shipment.TrackingNumber% and "%Order.PaymentMethod%" message tokens.
  • Display incompatible plugins on warnigns page (admin area).
  • Discount details page. Display categories and product variants to which a discount is to be applied.
  • Newsletter subscriptions export/import. Use comma instead of tab.
  • Newsletter subscriptions import. Allow a store owner to specify only emails (without "active" field).
  • The build script (deploy.bat) should not generate and deploy PDB files.
  • Some pages (admin area, login, and checkout pages) use HTTPS. Let's force all other pages to use HTTP.
  • Allow guests to email wishlist (configurable).
  • More user-friendly payment method localization (UI). Now you can simply click "Edit" button on the plugin list page (admin area).
  • Added FedEx shipment tracking support.
  • Added options indicating whether to include short and full description in compare products.
  • Added a setting ("commonsettings.displayjavascriptdisabledwarning") indicating whether to display a warning if java-script is disabled.
  • Display customer information on the "Recurring payment list" and "Recurring payment details" pages.
  • SEO improvements. Added product name to "product reviews" and "email a friend" page title.
  • Removed hard-coded "SQL_Latin1_General_CP1_CI_AS" collation during installation. Now a store owner can specify a required collation during nopCommerce installation (optional).
  • Allow a store owner to view a list of all loaded assemblies on the system info page (It can help to debug the application if required).
  • Polls. Allow guests to vote (configurable).
  • We validate write permissions during the installation process. Let's also validate them on the Warnings page (admin area). It can be quite helpful after upgrading to the latest version.
  • Updated third-party assemblies and java-script files to the latest versions.
  • Allow a store owner to change password format settings. But this setting will be applied only to the newly registered customers or customers who would like to change their passwords.
  • Now a store owner can manage a default quality used for image generation ("mediasettings.defaultimagequality" setting).
  • Admin area. Display zip, company, and phone (if enabled) in the grid on the customer list page.
  • Admin area. Added "View" column to the "Bulk edit product variants" page.
  • Admin area. Added "Shipping status" field on the order details page.
  • Allow a store owner to limit the number of manufacturers displayed in "manufacturer navigation" block.
  • Product details and shopping cart pages. Use more user-friendly popup windows instead of window.alert() for customer notifications.
  • Admin area. Customer list page now supports AJAX searching.
  • Admin area. "Edit product variant for product..." title should include variant's name too.
  • Polls. Do not require customers to refresh a page in order to see results. Display them immediately after voting.
  • One-page checkout. Bypass 'select payment method' page if we have only one payment method.
  • Added a tooltip to the password recovery page.
  • Admin page. Product details page. Display small pictures thumbnails on “pictures” tab.
  • "Save" buttons in "Shipping by weight" and "Tax By Country & State & Zip" plugins are AJAX now.
  • Allow filtering of customer uploaded files by extensions (just enter a list of comma-seperated extensions to "catalogsettings.fileuploadallowedextensions" setting).
  • PayPal Direct. When a customer cancels an order for a recurring product, nopCommerce should communicate that cancellation to Pay Pal so that Pay Pal will automatically stop all future charges to that customer. Previously he had to manually cancel a recurring payment in PayPal admin area.
  • Performance optimization. Cache bestsellers displayed on the home page.
  • Performance optmization. Import language packs using a new stored procedure (as per 1.X versions). Now it's much faster.
  • Include PO number in the invoice if "Purchase order" payment method was used.
  • Performance optimization. Faster installation process.
  • Performance optimization. Cache permissions between requests.
  • Performance optimization. Cache more presentation layer models.
  • Performance optimization. Execute less SQL commands when rendering a poll block.
  • Performance optimization. Load all recently viewed products using only one SQL command (previously we loaded each product using separate SQL command).
  • Performance optimization. Faster page loading on the catalog pages (category, manufacturer, products by tag, etc) when you have a lot of products displayed (product page size).
  • Performance optimization. Optimized a procedure of encryption key changing (security settings). Previously we loaded all customers and then filtered the ones with the "Encrypted" password format (application layer). Now we do it on the database layer.
  • Performance optimization. Combined multiple OrderAverageReportLine queries into a single query.
  • Performance optimization. Do not load online shipping rates twice during checkout (first to get all methods to show customer, and then when customer selects a method called again).
  • Performance optimization. Added properties to "NewsItem" entity indicating the total number of comments. So now we do not need to load all comments or make unnecessary database call just to know it.
  • Allow a store owner to manage display order of "Payment" and "Shipping rate computation" plugins on their list pages (previously you could do it only the Plugins page).
  • Removed obsolete Microsoft java-script files (MicrosoftAjax.js, MicrosoftMvcAjax.js, MicrosoftMvcValidation.js). Hence a page size was reduced.
  • Google Product Search plugin. Include shipping_weight attribute if "FroogleSettings.PassShippingInfo" setting is anebled (disabled by default).
  • Performance optimization. Added properties to "BlogPost" entity indicating the total number of comments. So now we do not need to load all comments or make unnecessary database call just to know it.
  • Performance optimization. Added "HasTierPrices" property to "ProductVariant" entity indicating whether a variant has tier prices configured. So now we do not need to load tier prices or make unnecessary database call if it's not required.
  • Performance optimization. Added "HasDiscountsApplied" property to "ProductVariant" and "Category" entities indicating whether it has discounts applied. So now we do not need to load discounts (make unnecessary database call) if it's not required.
  • Performance optimization. Disable sending information about the current request to 51degrees site (mobile device version).
  • Performance optimization. Faster loading of the related products in public store.
  • Performance optimization. Add paging on the "Edit category/manufacturer details" page (admin area).
  • Developers. Renamed name prefix of some inputs and buttons on the product details page ("add to cart", "add to wishlist, "qty", and "customer entered price").
  • Developers. Deleted _ColumnsFluid.cshtml layout.
  • Developers. Use dependency injection for the schedule tasks (ITask interface).
  • Developers. Removed the following methods from "Customer" entity: AddAddress, SetBillingAddress, SetShippingAddress. BTW, these methods caused a Google Checkout callback issue (order could not be saved for guest customers when billing and shipping addresses were identical).
  • Developers. Added generic attribute support (now you can add a new property to any entity without database changes). Previously we could do it only for "Customer" entity (we had "CustomerAttribute" associated entity). Now we have "GenericAttribute" and "IGenericAttributeService".
  • Developers. Now we do not use MvcContrib (grid).
  • Developers. Renamed several java-script file names (accordion.js to public.accordion.js, onepagecheckout.js to public.onepagecheckout.js, public.js to public.common.js, admin.js to admin.common.js)
  • Developers. Divided "ProductModel" class into two new classes: "ProductOverviewModel" and "ProductDetailsModel". Important note for theme designers: do not forget update all your cshtml files related to products (simply replace "ProductModel" model declarations with one of the new classes).
  • Developers. Moved "return request" action methods from OrderController to the new ReturnRequestController.
  • Developers. Replaced some "Url.Action" with "Url.Route" (in views) and "RedirectToAction" with "RedirectToRoute" (in controllers).
  • Developers. More pluggable infrastructure. Added a new event ("AdminTabStripCreated") which allows you to add custom tabs to admin area pages.
  • Developers. Load plugins based on their display order in PluginManager.
  • Developers. Moved Footer.cshtml and Footer.Mobile.cshtml files from /Views/Shared/ to /Views/Common/.
  • Developers. Removed unnecessary "IPromotionFeed" interface and "Promotion feeds" menu item in admin area. Now all feed plugins implement "IMiscPlugin" interface.
  • Developers. Removed unnecessary "ISmsProvider" plugin interface and "SMS Providers" menu item in admin area. Now all SMS plugins implement "IMiscPlugin" interface.
    • You should re-enable SMS providers if you've had them enabled.
  • Developers. Add a new event 'TokensAdded' to allow plugins to manage their own custom tokens. By doing this, plugins can include dynamic content in emails.
  • Developers. Removed order total weight property (we already have it in shipments).
  • Developers. Controllers and model classes as partial now.

Bugs

  • Fixed W3C validation errors.
  • Localized several hard-coded locale resources.
  • ProductLoadAllPaged issue fixed when you have a lot of specification attributes.
  • SSL issue fixed. Sometimes customers could get "Mixed content SSL" warnings.
  • Checkout attributes. If an attribute was required (and not selected/filled), the shopping cart page reloaded but gave no warning message to a customer.
  • Fixed an issue in money converter exchange rate provider plugin. One currency rate could not be parsed.
  • Now we use more user-friendly notification bars instead of jQuery UI dialogs for messages such as "Product added to cart". But you can always move back to jQuery UI dialogs. Simply open Views/Shared/_Root.cshtml file, find AjaxCart.init method and replace the first parameter with "true".
  • Now all admin area pages have titles. Previously all the browser history entries were the same ("NopCommerce Web Administration").
  • Australia Post should return user-friendly shipping option names.
  • Product tag URLs shoud use seo-friendly product tag names instead of standard names (for example, first we should remove wrong chars and extra spaces).
  • Admin area. Product list page. We should hide "Download catalog as PDF" when PDF is disabled.
  • When ACL 'Public store. Enable shopping cart' is disabled, customers shouldn't see 'add to cart' option on the wishlist page.
  • We should disable customer role management on the customer details page if "Manage customer roles" permission is disabled.
  • If a plugin has some settings, they should be deleted when uninstalling this plugin.
  • Blog list page ignored page size setting when filtering posts by tag or dates.
  • Ensure that "MultipleActiveResultSets=True" is specified during installation when a store owner prefers to manually enter a connection string.
  • HTML encoding issue fixed when using product or checkout attributes with "multiline textbox" type.
  • PdfService did not use a passed "language" parameter when generating a document for some rows.
  • Minor issue fixed when using SQL Server CE. “OrderService.GetOrderByAuthorizationTransactionIdAndPaymentMethod" didn't work.
  • External authentication providers didn't work in SQL Server CE.
  • Estimate shipping listed all countries. It should only list those countries where shipping is enabled.
  • Forums could not be deleted (Entity Framework 4.3 issue).
  • "Cannot redirect after HTTP headers have been sent" issue fixed when using RemotePost class in payment methods.
  • Shopping cart totals went off the screen when checking out if you had selected a shipping method name with large length.
  • Cross-sell products should be displayed only on the shopping cart page (not during checkout).
  • Issue fixed. Customers could specify any page size (by modifying a query string) if "Allow customers to select page size" option of a category or manufacturer was disabled.
  • Review helpfulness. Customers should not be allowed to vote for their own product reviews.
  • On the "Shipping Method Restrictions" page, the check box on top of each column toggled all ON, but did not work to toggle all OFF.
  • Pictures were not deleted for categories, manufacturers, and product variants (when updated or removed).
  • Added a couple of missing quotes to HTML code.
  • Fixed an issue with required product variants. We did not took into account required product variants that are not published and thus did not produce a shopping cart warning when an unpublished product variant was required.
  • When applying a discount on the shopping cart page it showed the coupon code as accepted even if it was inactive.
  • Renamed /administration/sitemap.xml file to sitemap.config so it cannot be opened from the outside.
  • UI issue fixed when you have many product pictures (more than 6) displayed on the product detail page.
  • Added a setting indicating whether 'out of stock' products can be added to wishlist.
  • "Notify me when available" should be a button (instead of hyperlink).
  • Enabled the following options by default: "Anonymous checkout", "Use one page checkout", "Display cart after adding product". Disabled the following options by default: "Display wishlist after adding product", "Allow customers to select a theme". Enabled EURO currency by default.
  • Added a missed semicolon in /Administration/Views/ProductVariant/BulkEdit.cshtml file.
  • The validation of the password confirmation happened in reverse. The correct procedure is to validate only after entering the password confirmation.
  • reCAPTCHA issue fixed in RTL theme when using FireFox. The text box was hiding the text.
  • CSS issue fixed in "nopClassic" theme. Login page should be 720px width.
  • Discount minor issue fixed. Associated records from "Discount_AppliedToCategories" and "Discount_AppliedToProductVariants" tables should be deleted when you change a discount type. Actually it's not a real issue because these associated records were not used when calculating a product price.
  • Take into account 'Minimum cart quantity' property when adding a product to the cart from catalog (category, manufacturer, etc) pages.
  • When registering, not checking the newsletter check box should not take an existing email address off of the subscription list.
  • Fixed Fancybox CSS issue with relative paths. Otherwise, you could get a lot of the following log errors when using Internet Explorer: "The controller for path '/fancybox/fancy_shadow_nw.png' was not found or does not implement IController".
  • Tax By Country & State & Zip provider issue fixed. When you use dialog to "Add Tax Rate" and you don't want a specific Zip, you leave Zip blank; the new record above will then appear with "*" in the Zip field. If you then click Edit button on that record, and edit only the Percentage (leaving the Zip as "*"), the record will no longer work, because the underlying field in database table now gets updated with a "*" rather than a null.
  • Glimpse (web debugging tool) didn't work.
  • Made expire month and year required in payment plugins.
  • CSS issue fixed on one-page checkout in DarkOrange theme.
  • Checkout attributes. When a datepicker attribute was selected and we movd back to the cart page, a datepicker control was not pre-filled with a selected datetime.
  • Minor HtmlHelper class issue fixed (typo).
  • 'Edit product variant' activity log should contain full product name (not just product variant name).
  • Payment methods page in admin area. If you clicked the Edit button on any payment method line, the text value in the "Recurring support" column changedto a number. When you then clicked “Update” button, the values in that column for all the other lines also changed.
  • Warnings page (admin area). We should compare the store URL (storeInformationSettings.StoreUrl) with both possible URLs of the current page (HTTP and HTTPS).
  • Password recovery worked even for deleted accounts.
  • "%Order.BillingAddress1%" token was missing from List Of Allowed Tokens - MessageTokenProvider.GetListOfAllowedTokens() method.
  • Javascript and CSS files issue fixed when including from a widget. It was impossible to place them in thetag with the HTML helpers (AddCssParts and AddScriptParts) if the plugin was added to any of the widget zones that were called in the _Root view(AfterBodyStartHtmlTag, BeforeContent, AfterContent, BeforeBodyEndHtmlTag). IMPORTANT NOTE FOR THEME DESIGNERS: Splitted _Root.cshtml layout file to the new two files (_Root.cshtml and _Root.Head.cshtml). We have to do it because of the way how ASP.NET rendering works. For more info see