- added release number to all existing @deprecated tag in php classes, methods and properties (app/code/Magento, lib/internal/Magento, setup/src/Magento/Setup)
- added tag @since to all existing php classes, methods and properties (app/code/Magento, lib/internal/Magento, setup/src/Magento/Setup)
Purpose
==
Make implementing Actions more developer friendly via self-documenting code.
Background
==
The existing method `\Magento\Framework\App\Action\Action::dispatch()` calls
an `execute()` method without actually implementing it.
```php
$result = $this->execute();
```
Any subclass actions simply need to implement that method and it will be
called automatically when the superclass method is `dispatch()` is called.
Without the changes in this PR, the `execute()` method in effect was part
of an implicit interface exposed by the `Action` class.
Because of this the `Action` class could never be instantiated and used (that
is, dispatched), without first subclassing it.
This in turn makes the `Action` class an implicitly abstract class.
All this PR does it that it makes the class interface explicit by adding the
execute method as an abstract method to `\Magento\Framework\App\Action\Action`.
All the other changes in this PR are just follow-up changes to accommodate
for this one update.
Follow up changes
--
Because concrete classes can't have abstract methods, the `Action` class
itself also had to be made abstract.
A number of subclasses of `Action` that did not implement `execute()`,
because they themselves also needed to be extended, had to be declared as
abstract classes now, too, because they inherit the abstract method from
the `Action` superclass.
There where some tests that instantiated these implicitly abstract classes.
This PR adds stub implementations for each of these.
* `Magento\Checkout\Test\Unit\Controller\OnepageTest`
in app/code/Magento/Checkout/Test/Unit/Controller/
* `Magento\Contact\Test\Unit\Controller\IndexTest`
in app/code/Magento/Contact/Test/Unit/Controller/
* `Magento\Tax\Test\Unit\App\Action\ContextPluginTest`
in app/code/Magento/Tax/Test/Unit/App/Action/
* `Magento\Catalog\Helper\Product\ViewTest`
in dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/
* `Magento\Cms\Helper\PageTest`
in dev/tests/integration/testsuite/Magento/Cms/Helper/Stub/
* `Magento\Sales\Controller\Adminhtml\Order\CreateTest`
in dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/
Finally, the `Magento\Ui\Controller\UiActionInterface` class, which was
implemented by an abstract subclass of `Action`, namely
`\Magento\Ui\Controller\Adminhtml\AbstractAction`, contained a
`public function execute();` itself.
This explicit interface contract was in conflict with the implicit interface
of the `Action` class, which did defined the same method, but implicitly.
To resolve this conflict this PR changes the method exposed by the
`UiActionInterface` to `public function executeAjaxRequest();`. This
seemed the most fitting when looking at the code implementing the interface
method. Internally it only calls the now explicit `execute()` method inherited
from the `Action` interface.
Also, it seems as if the `UiActionInterface::execute()` method was only called
by a single test. However, I realize the method might be used a lot more in the
non-public EE code, which will also need to be adjusted to be compatible with
this PR.
Reasons for this PR
==
As stated above, the purpose of this PR is to make the developer experience
better. This is done by making an implicit interface explicit. This has
a whole number of benefits, besides being good OOP practice:
* It is clear which classes should be instantiated and which should not
* It is clear which method needs to be implemented when subclassing `Action`
* The expected return type of `execute()` is documented in the phpdoc block
* When subclassing `Action` the IDE can be used to quickly a method stub
Allover the changes lead to more self-documenting code that tells developers
to they should use it.
Potential issues
==
The explicit abstract `execute()` method added in this PR is declared with
protected visibility.
This basically removes it as a valid extension point for plugins. However,
since the method was not declared as public previously (in fact, is wasn't
declared at all), it should not have been used as an extension point for
plugins anyway.
So the main reason against this PR I can think of is that the EE code will
need to be adjusted (plus, I might be missing many obvious reasons).
Of course I'd be happy to make the required updates, but I realize that is
problematic due to the commercial licenced, non-open code.
I've got a bunch of hacky shell scripts to find and update any controllers
needed to be declared abstract, but I'd rather not share them as they are just
one-time hacks.
All the other changes - updating the ui action interface and the test stubs -
where done manually and didn't take long.
* Service Contracts:
* Implemented Bundle Product API
* Replaced Address Converted model with Address Mapper
* Refactored Customer web service routes and API functional tests to use latest service layer
* Implemented Configurable Product Module API
* Removed obsolete namespace Magento\Catalog\Service
* Price calculation logic:
* Removed complex JS price calculation on the frontend
* Fixed bugs:
* Fixed an issue where the path parameter routes were incorrectly matched in the REST web services
* Fixed an issue where $0.00 was shown as a configurable product price if variation did not add anything to product price
* Fixed an issue where the fatal error occurred when a user with read-only permissions for cart price rules attempted to open an existing cart price rule
* Fixed an issue where the 'An order with subscription items was registered.' message was displayed in an order if it has been placed using an online payment method
* Fixed an issue where the 'Warning: Division by zero' message was displayed when an invoice was opened for an order placed using an online payment method
* Fixed an issue where creating simple product through using API service led to an exception on the frontend
* Fixed an issue where it was impossible to perform advanced search for price range of 0 to 0
* Fixed an issue with the broken Search Terms Report page
* Fixed an issue with the broken Search Terms page
* Fixed an issue with a notice appearing in the Advanced Search when searching by a custom multiselect attribute
* Fixed an issue where Search did not work if word-request contained a hyphen
* Fixed an issue where searching by a title of bundle option returned empty result
* Fixed an issue where Maximum Query Length was not applied to Quick Search
* Fixed an issue where searching by product name did not return suggested search terms
* Fixed an issue with an incorrect dependency of the MySQL search adapter on CatalogSearch
* Fixed an issue with incorrect dependency of the Search library on the MySQL adapter
* Fixed an issue where Advanced Search always returned empty result for multiselect product attributes
* Fixed an issue where an admin user was redirected to the 404 page after deleting search terms through using mass action
* Fixed an issue where a product page was frozen when a configurable attribute was added to a current product template during saving a configurable product
* Fixed an issue where it was impossible to place an order with downloadable product that contained a link
* Fixed an issue where only parent category was displayed in layered navigation on the Search results page
* Fixed an issue where the Price attribute was incorrectly displayed in layered navigation if searching by this attribute
* Fixed an issue where importing configurable products set them out of stock
* Fixed an issue where drop-down lists were closing by themselves in Internet Explorer 9
* Fixed an issue where it was impossible to place an order using PayPal Payment Pro and 3D Secure
* Fixed an issue where bundle items were always marked as 'User Defined'
* Fixed an issue where view management selectors did not work in categories on the frontend
* Fixed an issue where the 'Base' image label was not applied to a first product image uploaded
* Fixed an issue where editing a product led to data loss and broken media links
* Fixed an issue where attributes could not be deleted from the Google Content Attributes page
* Fixed an issue where a product was unassigned from a category after it was edited by an admin user with read/edit permissions for product price only
* Fixed an issue where the fatal error occurred on the RSS page for new products and special products
* Fixed an issue where the fatal error occurred when adding a new Customer Address Attribute
* Fixed an issue where it was impossible to install Magento when specific time zones were set
* Fixed an issue where compiler.php failed not handle inheritance from virtual classes
* Fixed an issue where some locales were absent in the 'Interface Locales' drop-down in the backend
* Fixed an issue where the Offloader header did not work in the backend
* Fixed an issue where autoloader failed to load custom classes
* Fixed an issue where products did not disappear from the shopping cart after checkout
* Fixed an issue where changing quantity of a product in the shopping cart removed product from cart
* Fixed an issue where the Persistent Shopping Cart functionality was not available if Luma theme was applied
* Fixed an issue where the category tree was broken if editing a category name in specific cases
* Fixed an issue where 'Price as Configured' value was not updated for a bundle product after changing the value of the 'Price View' field
* Fixed an issue where the final product price was displayed incorrectly in a category and a product page if price display setting was set to exclude FPT, FPT description, and final price
* Fixed an issue where product price range was displayed incorrectly for bundle products
* Fixed an issue where the HTTP 500 error occurred on the Share Wishlist page
* Fixed an issue with the incorrect order of dispatching event adminhtml_cms_page_edit_tab_content_prepare_form and setting form values in the backend
* Fixed an issue where breadcrumbs were not displaying the fullpath
* Fixed an issue where only two of four widgets added to a CMS page were displayed
* Fixed an issue where it was impossible to save locale for an admin account after changing it
* Fixed an issue where icons were not loaded on a non-secure pages if secure URLs were used in the frontend
* Fixed an issue where overriding layouts did not work after renaming a theme
* Fixed an issue where the Permissions tree was not displayed when activating an integration
* Fixed an issue with duplicated and corrupted page layouts
* Fixed an issue where the 'Number of Products per Page' option did not work for widgets of the 'List' type
* Fixed an issue where HTTP and HTTPS pages shared cache content
* Fixed an issue where the 'Use Billing Address' checkbox did not affect did not affect the checkout experience
* Fixed an issue where it was impossible to create shipping labels
* Fixed an issue where the 'Payment Method' section was empty in billing agreements in the frontend if a billing agreement was created during the checkout
* Fixed an issue with Catalog Rule Product indexer invalidating the price index
* Fixed an issue where one of the price range fields was corrupted in the Advanced Search page
* Fixed an issue where a base product image that was smaller than the gallery image container was scaled up to fill the container on the View Product page in the frontend
* Fixed the layout issue on the Contact Us page
* Fixed an issue where search queries were not submitted when a search suggestion was clicked
* Fixed an issue where page footer overlapped products in categories in Internet Explorer 11
* Fixed UI issues in the Luma theme
* Fixed an issue when the fatal error occurred if a category was moved to another category that already contained category with the same URL key
* Fixed an issue where incorrect products were displayed on the Reviews tab for a configurable product
* Fixed an issue where fatal errors occurred when calling id() on a null store object
* Fixed an issue where navigation through the tabs on the Dashboard did not work properly
* Fixed an issue where prices for bundle products were incorrect on the category view and search view pages
* Fixed an issue where custom Customer attributes and Customer Address attributes were not displayed on the 'Create/Edit Customer' page in thebackend
* Fixed an issue where there were no validation for whether an option of a bundle product was created through the API
* Fixed an issue where bundle products created through using the API were not appearing in the frontend
* Fixed an issue where entity ID was missing for product thumbnail labels values
* Fixed an issue with the bad return from the Indexer launch() method
* Fixed an issue where an attempt to select product SKU in a shopping cart price rule redirected to the Dashboard
* Fixed an issue where the Search Terms Reports and Search Terms list did not work
* Fixed an issue where an error occurred when configuring Google API
* Fixed an issue where it was impossible to add a configurable product variation to an order in the backend
* Fixed an issue where there were no confirmation on deleting CMS pages/Blocks
* Fixed an issue with incorrect behavior of validation in the Quick Search field in the frontend
* Fixed an issue where it was impossible to select a row in the grid of CMS pages and CMS Blocks
* Fixed an issue where validation for minimum and maximum field value length was not performed for Customer attributes and Customer Address attributes when creating or editing a customer in the backend
* Fixed an issue with broken 'validate-digits-range' validation
* Fixed an issue where it was impossible to delete product templates
* Fixed an issue where products were not shown on a second website
* Fixed an issue where customer group was empty when adding group price during creating a product
* Fixed an issue with incorrect interval in LN for small values
* Fixed an issue where product attribute of the Price type was not displayed in layered navigation
* Fixed an issue with testCreateCustomer failing in parallel run
* Fixed an issue with the value of the 'Bill to Name' field always displayed instead of the value of the 'Ship to Name' in all order-related grids
* Fixed an issue where an error occurred when submitting an order int he backend when shipping and billing addresses were different
* Fixed an issue where the navigation menu was absent on product pages with Varnish used
* Fixed an issue where the underscore character was incorrectly handled when used with digits
* Fixed an issue where it was impossible to localize comments in the 'Max Emails Allowed to be Sent' and 'Email Text Length Limit' fields in the Wishlist configuration
* Fixed an issue where there were a logical error in joining the same table two times with different aliases
* Sample data:
* Created Luma Sample Data script
* GitHub requests:
* [#775](https://github.com/magento/magento2/issues/775) -- Can't save changes in configuration in Configuration->Advanced->System
* [#716](https://github.com/magento/magento2/issues/716) -- Wrong mimetype returned by getMimeType from Magento library
* [#681](https://github.com/magento/magento2/issues/681) -- Magento\Framework\Xml\Parser class issues
* [#758](https://github.com/magento/magento2/issues/758) -- Coding standards: arrays
* [#169](https://github.com/magento/magento2/issues/169) -- DDL cache should be tagged
* [#738](https://github.com/magento/magento2/issues/738) -- pub/setup missing in 0.1.0-alpha103
* Various improvements:
* Removed obsolete code from the Tax and Weee modules
* Merged the AdminNotification, Integration, Authorization, and WebAPI SQL scripts
* Removed the Customer Converter model and Address Converter model
* Created AJAX Authentication Endpoint for the frontend
* Removed Customer\Service\V1 service implementation in favor of the Customer\Api service implementation
* Removed the Recurring Billing functionality
* Added the 'suggest' node to composer.json files to mark modules that are optional
* Consolidated SQL install and data scripts for the rest of the modules
* Added static test verifying that README.md file exist in modules
* Removed obsolete code
* Removed license notices in files
* Eliminated invalid dependencies of the CatalogRule module
* Removed @deprecated methods from the code base
* Added test enforcing @covers annotation refers to only existing classes and methods
* Added the PHP Coding Standards Fixer configuration file to the project root
* Added Git hook to automatically correct coding style before actual push
* Added the ability to enforce no error log messages during tests execution
* Removed API interfaces from the Cms module
* Updated jQuery used to version 1.11
* Added wildcard prefix for all search words in search requests for Match query
* Renamed frontend properties for some of the product attributes
* Fixed the Magento\Centinel\CreateOrderTest integration test
* Improved invoking for functional tests
* Refactored StoreManagerInterface to avoid violating the modularity principle
* Improved the logic in the isSubtotal method in Magento\Reports\Model\Resource\Report\Collection\AbstractCollection
* Framework improvements:
* Added a copy of dependencies for Magento components to the root composer.json file
* Setup Tool improvements:
* Moved dependencies from setup/composer.json to the root composer.json and removed the former one
* Removed dependencies on unnecessary ZF2 libraries
* Removed dependency on exec() calls
* Removed tool dev/shell/run_data_fixtures.php in favor of Setup Toolphp setup/index.php install-data
* Removed tool dev/shell/user_config_data.php in favor of Setup Tool php setup/index.php install-user-configuration
* Added validation of the required information on each installation step in the Setup tool:
* Web UI:
* Removed the 'Test Connection' button in web setup UI; checking connection to the database server is now performed when the 'Next' button is clicked
* Added validation of URL format
* Added automatic adding of the trailing slash to the base URL field if a user did not provide one
* Added validation of admin user password
* Added validation of HTTPS configuration
* CLI:
* Added validation of CLI to display missing/extra parameters and missing/unnecessary parameter values
* Service layer updates:
* Created Tax Calculation service
* Implemented search Tax Rates(search criteria) in TaxRate service
* Refactored Tax Helper to use Tax Service
* Validated and ensured that after helper fix, all modules with cross-dependencies use Tax Services
* Refactored Bundle, Catalog, Checkout, Customer, Downloadable, Review, Logging Modules to use Tax Services
* Refactored Internal Tax Module Blocks/Templates to use Tax Services
* GitHub requests:
* [#579] (https://github.com/magento/magento2/pull/579) -- update GA code from ga.js to analytics.js
* [#584] (https://github.com/magento/magento2/issues/584) -- Merge and minify js - Exception
* [#585] (https://github.com/magento/magento2/pull/585) -- Add forgotten return statement
* [#592] (https://github.com/magento/magento2/issues/592) -- Module name pattern
* Tax calculation updates:
* Separate and display Weee line item totals from Tax
* Fixed bugs:
* Fixed an issue when Custom attribute template was not applied to a product during product creation
* Fixed an issue when report grid with no results contained unnecessary empty "total" section
* Fixed an issue where MCRYPT_RIJNDAEL_128 Cipher was set instead of 256 version
* Fixed an issue when inline translate script was always included in the page even if it was not used
* Fixed an issue where URL Generation was affected by previously processed URLs
* Fixed an issue with cross-site scripting vulnerability via cookie exploitation
* Fixed an issue with incorrect success message after system variable was deleted
* Fixed an issue with category page not opening if it had bundle product with fixed price assigned to it
* Fixed an issue when subtotal price in a shopping cart was not updated if the product qty is changed
* Fixed an issue when syntax error appeared while creating new Google Content attribute mapping
* Fixed an issue with JS error when adding associated simple product to the grouped one
* Fixed an issue with incorrect items label for the cases when there are more than one item in the category
* Fixed an issue when configurable product was out of stock in Google Shopping while being in stock in the Magento backend
* Fixed an issue when swipe gesture in menu widget was not supported on mobile
* Fixed an issue when it was impossible to enter alpha-numeric zip code on the stage of estimating shipping and tax rates
* Fixed an issue when it was impossible to edit gift card account
* Fixed an issue when custom price was not applied when editing an order
* Fixed an issue when items were not returned to stock after unsuccessful order was placed
* Fixed an issue when error message appeared "Cannot save the credit memo while creating credit memo
* Fixed an issue when Catalog price rule was not shown for the product if price was less than a discount
* Indexer implementation:
* Implemented a new Stock indexer
* Implemented a new EAV indexer
* Fixed failed L1 plan on phpunit 4.1.0
* Minor updates for integration test framework
* Split action controllers classes into action classes
* Added public MTF repository to the packagist.org
* Added the following functional tests:
* Create Admin User
* Create Category
* Create Custom Url Rewrite
* Create Frontend Product Review
* Delete CMS Page
* Delete Product
* Delete System Variable
* Update Admin User Role
* Update Product Review
* Indexer-less implementation of URL Rewrites functionality in new UrlRedirect module:
* Ported Admin UI from old UrlRewrite module
* Implemented URL Rewrites unified storage
* Covered the following Magento application components with unit tests:
* `Magento/Bundle/Block/Sales/Order/Items/Renderer.php`
* `Magento/Bundle/Helper/Catalog/Product/Configuration.php`
* `Magento/Bundle/Helper/Data.php`
* `Magento/Bundle/Model/Option.php`
* `Magento/Bundle/Model/Plugin/PriceBackend.php`
* `Magento/Bundle/Model/Product/Attribute/Source/Price/View.php`
* `Magento/Bundle/Model/Sales/Order/Pdf/Items/AbstractItems.php`
* `Magento/Catalog/Model/Product/Attribute/Source/Msrp/Type/Enabled.php`
* `Magento/Catalog/Model/Product/Attribute/Source/Msrp/Type/Price.php`
* `Magento/Catalog/Model/Product/Visibility.php`
* `Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php`
* `Magento/Eav/Model/Entity/Attribute/Source/AbstractSource.php`
* `Magento/Eav/Model/Entity/Attribute/Source/Boolean.php`
* `Magento/Eav/Model/Entity/Attribute/Source/Table.php`
* `Magento/Tax/Model/TaxClass/Source/Product.php`
* Covered Magento library with unit tests :
* `lib/internal/Magento/Framework/Simplexml/Config/Cache/AbstractCache.php`
* `lib/internal/Magento/Framework/Simplexml/Config.php`
* `lib/internal/Magento/Framework/Stdlib/DateTime/DateTime.php`
* `lib/internal/Magento/Framework/Stdlib/DateTime/Timezone.php`
* `lib/internal/Magento/Framework/Stdlib/String.php`
* Themes update:
* Blank theme was refactored to implement the mobile-first approach
* Fixed bugs:
* Fixed an issue where it was impossible to place order using store credit
* Fixed an issue where adding products with custom options from a wishlist to shopping cart caused an error
* Fixed an issue where it was impossible to add a product to the shopping cart from the Wishlist sidebar
* Fixed an issue where the Add to Wishlist drop-down arrow was missed on the category page on the frontend
* Fixed an issue where it was impossible to manage multiple wishlists on the frontend if FPC was disabled
* Fixed an issue where prices with taxes were not displayed on the category and product pages on the frontend
* Fixed an issue where it was impossible to store cache when using either Varnish or built-in cache
* Fixed an issue where all refactored indexers were in the REINDEX REQUIRED status after installation
* Fixed an issue where admins with limited access could perform operations not allowed by role permissions
* Fixed an issue where http links were generated instead of https links
* Fixed an issue where it was impossible to use Subcategories when building a condition for a catalog price rule
* Fixed an issue where a registered customer could not place an order using PayPal Payments Advanced
* Fixed an issue where PayPal Settlement report was empty
* Fixed an issue where a newly created subcategory was still active after switching to the Default category
* Fixed an issue where it was impossible to save changes or remove a customer address on the backend
* Fixed an issue where for an admin with restricted permissions previewing a newsletter template caused a fatal error
* Fixed an issue where it was impossible to save a Tax Rate if specified that Zip was a range, and the Zip/Post Code field was left empty
* Fixed an issue where Puerto Rico was listed both as a state and as a country
* Fixed an issue where the Special Price was displayed instead of the place of Original Price in the Items Ordered column if the orders list.
* Fixed an issue in Widget configuration where category check boxes did not stay selected when Anchor Categories were specified in the Display On drop-down list.
* Fixed an issue where admin user password confirmation was not validated on the server side
* Fixed an issue where adding a customer review caused an error
* Fixed an issue where the incorrect error messages were displayed if an invalid email was entered during admin user or customer creation
* Fixed an issue with the Debug section in developer settings, which should only be displayed for the website or store view scope level
* Fixed an issue where the fatal error was displayed after uninstall if during installation it was specified to save session in the database
* Fixed an issue where a wrong error message was displayed when a non-existing database was specified when installing Magento using the console install script
* Fixed an issue where it was impossible to add products from a wishlist to a shopping cart
* Fixed an issue where an error appeared after Magento installation
* Improved the Blank theme UI
* Fixed an issue with a zooming product image overlapped by category design on the frontend
* Fixed an issue where it was impossible to select only billing or only shipping address when editing the user address on the frontend
* Fixed an issue where it was impossible to view a Wishlist in the Wishlist Search widget
* Fixed an issue where partial cache invalidation did not work for built-in caching
* Fixed an issue where it was impossible to find a catalog event using the Countdown Ticker grid filter if the event had been specified to be displayed on both category and product pages
* Fixed incorrect error messages displayed during customer registration
* Fixed an issue where product attributes from other store views were displayed for products in a Wishlist
* Fixed an issue where it was impossible to place an order without the CheckoutAgreements module
* Fixed an issue where the Media Image attribute type was not available when creating the product attribute
* Fixed an issue with incorrect label attribute for the State/Province drop-down list on the Shipping Information tab
* Fixed an issue where using only digits in the SKU field of configurable products led to a confusing behavior
* Fixed an issue where a catalog price rule was not shown on the catalog and product pages on the frontend
* Fixed an issue where Recurring Profiles (payments) were available on the frontend for any registered user who had the URL
* Fixed an issue where a credit card frame was absent on the Payment Information step of Onepage Checkout, if there was only one payment method with a credit card available
* Fixed an issued where it was impossible to use inline translate for the My Account and Register links on the frontend
* Fixed an issue where it was impossible to activate a customer using REST
* Fixed an issue with the undefined version_compate method called in \lib\Magento\Connect\Validator.php
* Fixed an issue with invalid XML formatting of Boolean in REST response
* Fixed an issue where it was impossible to perform installation using index.php from the pub folder (problem with JS and CSS)
* Fixed an issue where the Multiple Wishlist functionality did not work correctly with enabled Full Page Cache in the Chrome browser
* Fixed an issue where it was impossible to change an admin frontname using console installation
* Fixed an exception on the Transaction page when searching by payment method
* Fixed an issue where the "Add to wishlist" link was displayed in catalog even when the Wishlist functionality was disabled
* Fixed an issue where the system was broken if an admin user unassigned his own role
* Fixed an issue with exceptions thrown on attempt to export products for users with store-level restrictions
* Fixed an issue where two loaders were displayed when saving a category
* Fixed an issue where it was impossible to search for a newsletter in the Newsletter grid
* Fixed an issue where the displayed currency and product price were not changed after switching to a new currency
* Fixed an issue with frontend crashing when deleting a product from a mini shopping cart
* Fixed an issue where it was impossible to add a bundle product to a shopping cart
* Fixed an issue where a configurable product base image disappeared when selecting product variations
* Functional tests:
* Functional end-to-end tests publication
* Bundle product
* Category
* Customer
* Configurable product
* Downloadable product
* Newsletter
* Review
* Simple product
* Sitemap
* Store
* Tax Rule
* User
* Virtual product
* Service layer updates:
* Move CurrentCustomerService from Service to Helper
* GitHub requests:
* [#544] (https://github.com/magento/magento2/issues/544) Performance tests not working
* [#554] (https://github.com/magento/magento2/pull/554) Performance tests - Fix jmeter output format
* [#525] (https://github.com/magento/magento2/pull/525) Fix typo in FS Generator help message
* [#563] (https://github.com/magento/magento2/issues/563) Admin Login not working #563
* Modularity improvements:
* Introduced a new CheckoutAgreements module. Moved all "Terms and Conditions" related logic from Magento_Checkout to Magento_CheckoutAgreements
* Moved library related logic from `Magento\Core\Model\App`
* Fixed bugs:
* Fixed an issue where Currency Options were not displayed on the Currency Setup tab
* Fixed an issue where a fatal error appeared during customer registration if mail server was off
* Fixed an issue where customer with middle name did not appear in the Customers grid in the backend
* Fixed an issue where related products were not displayed on the product page in the backend
* Fixed the broken View Files Population tool
* Fixed an issue where Magento broke down if the Main Web Site was deleted
* Fixed potential security issue with orders protect_code
* Fixed an issue where an error appeared when placing an order if cache was turned on
* Fixed an issue where a warning appeared when running system_config.php tool
* Fixed an issue with incorrect reset password link for users on custom websites
* Fixed an issue with invalid error message displayed when trying to save a customer group with existing group name
* Fixed an issue with menu layout non-responsive behavior in the Blank theme
* Framework Improvements:
* Covered Magento library components with unit tests
* `Magento\Framework\Error\*`
* `Magento\Framework\Event\Observer\*`
* `Magento\Framework\Filesystem\*`
* `Magento\Framework\Filesystem\File\*`
* Updated the obsolete_classes list with changes, introduced by Offline Payment Methods Module implementation
* Moved `lib/Magento/*` to `lib/Magento/Framework/*`
* Covered Magento application components with unit tests:
* `Store\Model\*`
* `Sales/Helper/Guest.php`
* `Sales/Helper/Admin.php`
* `Sales/Model/Observer.php`
* `Sales/Model/Payment/Method/Converter.php`
* `Sales/Model/Email/Template.php`
* `Sales/Model/Observer/Backend/CustomerQuote.php`
* `Sales/Model/Status/ListStatus.php`
* Refactored the following modules to use Customer Service:
* Magento_Persistent
* Magento_GoogleShopping
* Magento_ProductAlert
* Magento_SendFriend
* Moved customer-specific logic from the Magento_ImportExport module to the Customer module
* Refactored the rest of Customer Group usages
* Refactored customerAccountService::createAccount to not expose the hashed password input from webapi
* Implemented a delimiter usage for Cache key in Customer Registry
* Customer Service usage:
* Updated exception hierarchy with a new localized exception class
* Updated CRUD APIs to support email and base URL instead of IDs
* JavaScript improvements:
* Implemented the validation widget
* Implemented the tooltip widget
* Implemented the popup/modal window widget
* Implemented the calendar widget
* Implemented the suggest widget
* Added configuration for Travis CI