Refactored original solution, implemented cache keys for layout to be able to generate different unique cache ids also based on possibly added cache keys
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
* GitHub requests:
* [#678] (https://github.com/magento/magento2/issues/678) -- Fixed Travis CI builds
* Functional tests:
* Create Sales Order Backend
* Delete Products from Wishlist
* Download Products Report
* Mass Orders Update
* Sales Tax Report
* Fixed bugs:
* Fixed an issue where success message was not displayed after product review submit
* Fixed an issue where it was impossible to start checkout process using PayPal from the JavaScript pop-up window when the Display Actual Price option was set to On Gesture
* Fixed an issue where a fatal error was thrown after shipping method selection in PayPal Express Checkout
* Fixed an issue with parameters exceptions in SOAP response
* Fixed an issue where testGetRequestTokenOauthTimestampRefused unit test failed in certain cases
* Fixed an issue where TestCreateCustomer test thrown fatal error when making a SOAP request
* Fixed an issue with required parameters in WSDL
* Fixed an issue where Customer Account Service returned void response in the resetPassword method
* Fixed an issue where REST API failed during bundle product creation
* 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`
* 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
* Pricing Improvements:
* Added price calculation component to library
* Eliminated price calculation from blocks and templates and implemented new calculation models for the following product types:
* Bundle
* Simple/Virtual
* Grouped
* Downloadable
* Resolved price calculation dependencies on the Tax and Weee modules
* Themes update:
* Updated the look&feel of the Admin theme
* Fixed bugs:
* Fixed an issue with the inability to save product with grouped price when Price Scope = Website
* Fixed an issue with fatal error on attempt to edit product from wishlist in stores with multiple store views
* Fixed an issue where it was impossible to add to a wishlist a product with custom quantity
* Fixed an issue where JS validation was skipped during CMS page creation
* Fixed an issue with the New Customer Address Attribute page and the New Customer Attribute page having the same title
* Fixed an issue where a form was submitted two times during CMS page creation
* Fixed an issue where a fatal error appeared when trying to edit product in a wishlist in stores with multiple store views
* Fixed an issue with inability to change page layout for categories
* Fixed an issue where the Quantity drop-down list box was disabled for bundle products
* Fixed an issue where inactive Related Products rules were applied
* Fixed a clickjacking vulnerability
* Fixed bugs and added improvements in the Blank theme
* Fixed an issue where the Flat Rate shipping method was not enabled by default
* Fixed an issue with incorrect order of products on the Add Product split button
* Fixed an issue with saving the tier price attribute value
* Fixed an issue with creating integration from config file
* Fixed an issue where the Cookie Restriction Mode = Yes configuration was not applied
* Fixed an issue where it was impossible to perform ajax actions from backend grids in Internet Explorer
* Fixed the improper usage of DIRECTORY_SEPARATOR
* Fixed an issue where it was impossible to add new address on customer's account page if default address had been already set
* Fixed an issue where setting memory_limit to -1 caused installation failure
* Fixed an issue where the configuration of Admin Session Lifetime was not applied correctly
* Fixed an issue where Scheduled Export was not performed if exporting to remote FTP server
* Fixed the wrong default value for PHP memory_limit
* Fixed an issue where frontend messages were not displayed when FPC was turned off
* Fixed the position of page action buttons on the Categories page in the backend
* Improved backend grids UI
* Framework Improvements:
* Simplified Search related Data Objects
* Moved lib/Magento/* to lib/Magento/Framework/*
* Moved lib/Magento/App to lib/Magento/Framework/App
* Refactored the following modules to use Customer service:
* PayPalRecurringPayment
* RecurringPayment
* Multishipping
* Paypal
* Customer Service usage:
* Implemented Service Context Provider
* Restructured webapi.xml
* Renamed createAccount to createCustomer in CustomerAccountService
* Implemented Caching strategy for the Customer service
* GitHub requests:
* [#488] (https://github.com/magento/magento2/issues/488) -- Converted several grids from Magento\Sales module to new layout XML config format
* Fixed bugs:
* Fixed an issue where the schedule of recurring payments was not displayed in the shopping cart
* Fixed an issue with displaying tax class names in the Customer Groups grid
* Fixed an issue with testing Solr connection
* Fixed an issue with using custom module front name
* Fixed an issue with USPS and DHL usage in the production mode
* Modularity improvements:
* Consolidated all logic related to Layered Navigation in one separate module
* Framework Improvements:
* Covered Magento library components with unit tests:
* Magento/Interception
* Magento/ObjectManager
* Magento/Message
* Magento/Module
* Magento/Mail
* Magento/Object
* Magento/Math
* Updated XML files to include a reference to the schema file in a form of a relative path
* Updated code to be PSR-2 compliant
* Themes update:
* LESS styles library added in pub/lib/css/
* A new Blank theme set as default
* GitHub requests:
* [#491](https://github.com/magento/magento2/pull/491) -- Fixed bug, incorrect auto-generation Category URL for some groups of symbols (idish, cirrilic, , , and other).
* [#480](https://github.com/magento/magento2/pull/480) -- Fixing a bug for loading config from local.xml
* [#472](https://github.com/magento/magento2/issues/472) -- Params passed in pub/index.php being overwritten
* [#461](https://github.com/magento/magento2/pull/461) -- Use translates for Quote\Address\Total\Shipping
* [#235](https://github.com/magento/magento2/issues/235) -- Translation escaping
* [#463](https://github.com/magento/magento2/pull/463) -- allow _resolveArguments to do sequential lookups
* [#499](https://github.com/magento/magento2/issues/499) Deleted unclosed comment in calendar.css
* Fixed bugs:
* Fixed a fatal error that occurred with a dependency in pub/errors/report.php
* Fixed an issue where code coverage failed for Magento\SalesRule\Model\Rule\Action\Discount\CartFixedTest
* Fixed an issue where PayPal Express Checkout redirected to the PayPal site even though the Allow Guest Checkout option was set to 'No'
* Fixed an issue where invalid password reset link was sent when resetting customer password from the backend
* Fixed an issue where it was not possible to download a previously created backup
* Fixed a security issue with possibility of a XSS injection in the Integration re-authorization flow
* Fixed an issue where Billing Agreement cancellation from the backend did not work
* Fixed an issue with the debug section in the developer settings
* Fixed the unreliable implementation of the fetching authorization header via SOAP
* Fixed issues with WSDL generation error reporting
* Fixed an issue with incorrect order of the Recurring Profile tab in Account Customer on the frontend
* Fixed an issue when the information about a custom option of the 'File' type was not displayed correctly on the recurring profile page
* Fixed an issue with editing Product template
* Fixed an issue with duplicated shipping method options during checkout
* Fixed an issue where flat indexers were re-indexed in shell when they were disabled
* Fixed an issue where adding a wrong/nonexistent SKU using 'Order by SKU' from My Account caused a fatal error
* Fixed an issue with the JS/CSS merging functionality
* Fixed an issue with static view files publication tool used for the 'production' mode
* Modularity improvements:
* Removed the deprecated GoogleCheckout functionality
* Removed all dependencies on the RecurringPayment module
* Removed the Sales module dependencies on Customer models/blocks
* Renamed the RecurringProfile module to RecurringPayment
* Resolved dependencies between the Email Templates functionality and other modules
* Moved Core module lib-only depended components to library
* Moved CSS URL resolving logic from publisher to the separate CSS pre-processor
* Re-factored the View publisher
* Framework improvements:
* Added restrictions on the data populated to the Service Data Object
* Renamed Data Transfer Object to Service Data Object
* Updated the view files population tool to support LESS
* Customer Service usage:
* Refactored the Tax module to use Customer service layer
* Refactored Customer module Adminhtml internal controllers and helper to use Customer services
* Added and updated the Customer service APIs
* Exposed Customer services as REST APIs
* Indexer implementation:
* Implemented a new optimized Product Price Indexer
* Updated various PHPDoc with the parameter and return types
* Cache:
* Implemented depersonalization of private content generation
* Implemented content invalidation
* Added Edge Side Includes (ESI) support
* Added a built-in caching application
* GitHub requests:
* [#454](https://github.com/magento/magento2/pull/454) -- Allow to specify list of IPs in a body on maintenance.flag which will be granted access even if the flag is on
* [#204](https://github.com/magento/magento2/issues/204) -- Mage_ImportExport: Exporting configurable products ignores multiple configurable options
* [#418](https://github.com/magento/magento2/issues/418) -- Echo vs print
* [#419](https://github.com/magento/magento2/issues/419) -- Some translation keys are not correct.
* [#244](https://github.com/magento/magento2/issues/244) -- Retrieve base host URL without path in error processor
* [#411](https://github.com/magento/magento2/issues/411) -- Missed column 'payment_method' of table 'sales_flat_quote_address'
* [#284](https://github.com/magento/magento2/pull/284) -- Fix for Issue #278 (Import -> Stores with large amount of Configurable Products)
* Fixed bugs:
* Fixed an issue where Mage_Eav_Model_Entity_Type::fetchNewIncrementId() did not rollback on exception
* Fixed an issue where a category containing more than 1000 products could not be saved
* Fixed inappropriate error messages displayed during installation when required extensions were not installed
* Fixed synopsis of the install.php script
* Fixed an issue where the schedule of recurring payments was not displayed in the shopping cart
* Modularity improvements:
* Introduced the OfflinePayments module - a saparate module for offline payment methods
* Added the ability to enable/disable the Paypal module
* Moved the framework part of the Locale functionality from the Core module to library
* The Locale logic was split among appropriate classes in library, according to their responsibilities
* Removed the deprecated DHL functionality
* Introduced the OfflineShipping module for offline shipping carrier functionality: Flatrate, Tablerate, Freeshipping, Pickup
* Introduced a separate module for the DHL shipping carrier
* Introduced a separate module for the Fedex shipping carrier
* Introduced a separate module for the UPS shipping carrier
* Introduced a separate module for the USPS shipping carrier
* Framework Improvements:
* Added the ability to intercept internal public calls
* Added the ability to access public interface of the intercepted object
* Added a static integrity test for plugin interface validation
* Added support for both class addressing approaches in DI: with and without slash ("\") at the beginning of a class name
* Customer Service usage:
* Refactored the Customer module blocks and controllers to use customer service layer
* Security:
* Introduced the ability to hash a password with a random salt of default length (32 chars) by the encryption library
* Utilized a random salt of default length for admin users, and frontend customers
* Fixed bugs:
* Fixed inability to execute System Backup, Database Backup, and Media Backup
* Indexer implementation:
* Implemented a new optimized Catalog Category Flat Indexer
* Cron improvements:
* Added the ability to divide cron tasks into groups
* Added the ability to run cron groups in separate processes
* Caching improvements:
* Added a new mechanism to identify uniquely page content (hash-key for cache storage)
* Added a tab for Page Cache mechanism in System Configuration
* Implemented the ability to configure the Varnish caching server settings and download it as a .vcl file
* LESS pre-processing to CSS
* LESS files in library, theme, module are automatically compiled to CSS during materialization
* LESS files compilation caching mechanism added in Developer mode
* Modularity improvements:
* Moved the Shortcut Buttons abstraction from PayPal to Catalog
* Moved the Recurring Profile functionality to a separate module
* Moved the Billing Agreements functionality to the PayPal module
* Improvements in code coverage calculation:
* Added code coverage calculation in the clover xml format for unit tests
* GitHub requests:
* [#377] (https://github.com/magento/magento2/issues/377) Remove and avoid javascript eval() calls
* [#319] (https://github.com/magento/magento2/issues/319) No message was displayed when product added to shopping cart.
* [#367] (https://github.com/magento/magento2/issues/367) Improve the error message from the contact form
* [#469] (https://github.com/magento/magento2/issues/469) Can't change prices on different websites for custom options
* Updated the Customer service exception handling, and added tests
* Added usage of the Customer service to the Customer module, replacing some direct usage of the Customer model
* Updated various PHPDoc with the parameter and return types
* Modularity improvements:
* Moved abstract shopping cart logic from the Paypal module to the Payments module
* Caching improvements:
* Added a new mechanism to uniquely identify page content (a hash-key for cache storage)
* Replaced the "magentoZoom" plugin with two widgets: the "gallery" and "zoom"
* Fixed bugs:
* Fixed an issue with inserting an image in WYSIWYG editor where the selected folder was stored in session
* Fixed an issue with CMS Page Links not being shown because of the empty text in the link
* Fixed an issue where zooming functionality was not disabled for the responsive design
* Fixed an issue with zooming on a configurable product page where the main product image was shown instead of the selected option images
* Updated various PHPDoc with parameter and return types
* Moved quote-related multishipping logic to the Multishipping module
* Resolved dependencies between the Payment and Multishipping modules
* Moved the framework part of the Translate functionality from modules to the library
* Created the architecture for the email template library
* Introduced a consistent approach for using the Config scope
* Fixed an issue with the dependency static test
* Modularity improvements:
* Consolidated all PayPal-related logic in a separate module
* Resolved dependencies on the Magento_GroupedProduct module
* Added the ability to enable/disable/remove the Magento_GroupedProduct module without impact on the system
* Implemented the Oyejorge Less.php adapter
* Implemented the Less files importing mechanism
* Added the ability to configure certain cache frontend, and associate it to multiple cache types, thus avoiding the duplication of cache configuration
* Implemented the more strict format of array definition in the DI configuration:
* Covered array definitions with XSD, and made the whole DI configuration validated with XSD
* Added the ability to define arrays with keys containing invalid XML characters, that was impossible when keys were represented by the node names
* Fixed bugs:
* Fixed an issue with missed image for a cron job for the abandoned cart emails
* Restored the ability to configure cache storage in `local.xml`
* Fixed an issue with the css\js merging functionality
* Fixed an issue with customer selection on the order creation page
* AppInterface renamed to LauncherInterface
* Removed the reinit logic from the Config object
* Framework part of the "URL" functionality removed from modules
* Framework part of the "Config" functionality removed from modules
* Removed the deprecated EAV structure creation method from the EAV setup model
* Updated various PHPDoc with parameter and return types
* Indexer implementation:
* Implemented a new indexer structure
* Refactored Web API Framework to support the Data Object based service interfaces
* Refactored controllers, blocks and templates of the Sales module to use Customer service
* GitHub requests:
* [#275] (https://github.com/magento/magento2/issues/275) -- XSS Vulnerability in app/code/core/Mage/CatalogSearch/Block/Result.php
* Removed the outdated Customer service