diff --git a/.github/.htaccess b/.github/.htaccess new file mode 100644 index 0000000000000..707c26b075e16 --- /dev/null +++ b/.github/.htaccess @@ -0,0 +1,8 @@ + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000..4e82725a7fb08 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at engcom@magento.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000000000..dae954a0970b7 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# Contributing to Magento 2 code + +Contributions to the Magento 2 codebase are done using the fork & pull model. +This contribution model has contributors maintaining their own copy of the forked codebase (which can easily be synced with the main copy). The forked repository is then used to submit a request to the base repository to “pull” a set of changes. For more information on pull requests please refer to [GitHub Help](https://help.github.com/articles/about-pull-requests/). + +Contributions can take the form of new components or features, changes to existing features, tests, documentation (such as developer guides, user guides, examples, or specifications), bug fixes or optimizations. + +The Magento 2 development team will review all issues and contributions submitted by the community of developers in the first in, first out order. During the review we might require clarifications from the contributor. If there is no response from the contributor within two weeks, the pull request will be closed. + + +## Contribution requirements + +1. Contributions must adhere to the [Magento coding standards](https://devdocs.magento.com/guides/v2.2/coding-standards/bk-coding-standards.html). +2. Pull requests (PRs) must be accompanied by a meaningful description of their purpose. Comprehensive descriptions increase the chances of a pull request being merged quickly and without additional clarification requests. +3. Commits must be accompanied by meaningful commit messages. Please see the [Magento Pull Request Template](https://github.com/magento/magento2/blob/2.2-develop/.github/PULL_REQUEST_TEMPLATE.md) for more information. +4. PRs which include bug fixes must be accompanied with a step-by-step description of how to reproduce the bug. +3. PRs which include new logic or new features must be submitted along with: +* Unit/integration test coverage +* Proposed [documentation](http://devdocs.magento.com) updates. Documentation contributions can be submitted via the [devdocs GitHub](https://github.com/magento/devdocs). +4. For larger features or changes, please [open an issue](https://github.com/magento/magento2/issues) to discuss the proposed changes prior to development. This may prevent duplicate or unnecessary effort and allow other contributors to provide input. +5. All automated tests must pass (all builds on [Travis CI](https://travis-ci.org/magento/magento2) must be green). + +## Contribution process + +If you are a new GitHub user, we recommend that you create your own [free github account](https://github.com/signup/free). This will allow you to collaborate with the Magento 2 development team, fork the Magento 2 project and send pull requests. + +1. Search current [listed issues](https://github.com/magento/magento2/issues) (open or closed) for similar proposals of intended contribution before starting work on a new contribution. +2. Review the [Contributor License Agreement](https://magento.com/legaldocuments/mca) if this is your first time contributing. +3. Create and test your work. +4. Fork the Magento 2 repository according to the [Fork A Repository instructions](http://devdocs.magento.com/guides/v2.2/contributor-guide/contributing.html#fork) and when you are ready to send us a pull request – follow the [Create A Pull Request instructions](http://devdocs.magento.com/guides/v2.2/contributor-guide/contributing.html#pull_request). +5. Once your contribution is received the Magento 2 development team will review the contribution and collaborate with you as needed. + +## Code of Conduct + +Please note that this project is released with a Contributor Code of Conduct. We expect you to agree to its terms when participating in this project. +The full text is available in the repository [Wiki](https://github.com/magento/magento2/wiki/Magento-Code-of-Conduct). diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000000..2b1720ccaabae --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,36 @@ + + +### Preconditions (*) + +1. +2. + +### Steps to reproduce (*) + +1. +2. +3. + +### Expected result (*) + +1. [Screenshots, logs or description] + +### Actual result (*) + +1. [Screenshots, logs or description] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000000..33a6ef02ace11 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: Bug report +about: Technical issue with the Magento 2 core components + +--- + + + +### Preconditions (*) + +1. +2. + +### Steps to reproduce (*) + +1. +2. + +### Expected result (*) + +1. [Screenshots, logs or description] +2. + +### Actual result (*) + +1. [Screenshots, logs or description] +2. diff --git a/.github/ISSUE_TEMPLATE/developer-experience-issue.md b/.github/ISSUE_TEMPLATE/developer-experience-issue.md new file mode 100644 index 0000000000000..423d4818fb31c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/developer-experience-issue.md @@ -0,0 +1,19 @@ +--- +name: Developer experience issue +about: Issues related to customization, extensibility, modularity + +--- + + + +### Summary (*) + + +### Examples (*) + + +### Proposed solution + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000000..f64185773cab4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,21 @@ +--- +name: Feature request +about: Please consider reporting directly to https://github.com/magento/community-features + +--- + + + +### Description (*) + + +### Expected behavior (*) + + +### Benefits + + +### Additional information + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000000..f191bd9aaba67 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,38 @@ + + + + +### Description (*) + + +### Fixed Issues (if relevant) + +1. magento/magento2#: Issue title +2. ... + +### Manual testing scenarios (*) + +1. ... +2. ... + +### Contribution checklist (*) + - [ ] Pull request has a meaningful description of its purpose + - [ ] All commits are accompanied by meaningful commit messages + - [ ] All new or changed code is covered with unit/integration tests (if applicable) + - [ ] All automated tests passed successfully (all builds on Travis CI are green) diff --git a/.htaccess b/.htaccess index f824f0b7bbc59..4298b10d9ca7a 100644 --- a/.htaccess +++ b/.htaccess @@ -274,15 +274,6 @@ Require all denied - - - order allow,deny - deny from all - - = 2.4> - Require all denied - - order allow,deny @@ -355,6 +346,15 @@ Require all denied + + + order allow,deny + deny from all + + = 2.4> + Require all denied + + order allow,deny diff --git a/.htaccess.sample b/.htaccess.sample index f3a4474aec949..a521a347232f5 100644 --- a/.htaccess.sample +++ b/.htaccess.sample @@ -251,15 +251,6 @@ Require all denied - - - order allow,deny - deny from all - - = 2.4> - Require all denied - - order allow,deny @@ -332,6 +323,15 @@ Require all denied + + + order allow,deny + deny from all + + = 2.4> + Require all denied + + order allow,deny diff --git a/.php_cs.dist b/.php_cs.dist index 0f254c63283bd..87483d5b33a15 100644 --- a/.php_cs.dist +++ b/.php_cs.dist @@ -4,10 +4,6 @@ * See COPYING.txt for license details. */ -/** - * Pre-commit hook installation: - * vendor/bin/static-review.php hook:install dev/tools/Magento/Tools/StaticReview/pre-commit .git/hooks/pre-commit - */ $finder = PhpCsFixer\Finder::create() ->name('*.phtml') ->exclude('dev/tests/functional/generated') diff --git a/.travis.yml b/.travis.yml index 3265cc575cdca..6e6f3359767b2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,11 +15,13 @@ language: php php: - 7.0 - 7.1 +git: + depth: 5 env: global: - COMPOSER_BIN_DIR=~/bin - INTEGRATION_SETS=3 - - NODE_JS_VERSION=6 + - NODE_JS_VERSION=8 - MAGENTO_HOST_NAME="magento2.travis" matrix: - TEST_SUITE=unit diff --git a/CHANGELOG.md b/CHANGELOG.md index 8270f8908a3c7..95772083f3a76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,1326 @@ +2.2.6 +============= +* GitHub issues: + * [#13296](https://github.com/magento/magento2/issues/13296) -- Category name with special characters brakes in url rewrites category tree (fixed in [magento/magento2#13397](https://github.com/magento/magento2/pull/13397)) + * [#4788](https://github.com/magento/magento2/issues/4788) -- Wrong sitemap product url (fixed in [magento/magento2#14338](https://github.com/magento/magento2/pull/14338)) + * [#14669](https://github.com/magento/magento2/issues/14669) -- Css class "empty" is always present on minicart dropdown (fixed in [magento/magento2#14715](https://github.com/magento/magento2/pull/14715)) + * [#4389](https://github.com/magento/magento2/issues/4389) -- Widget cache error (fixed in [magento/magento2#12764](https://github.com/magento/magento2/pull/12764)) + * [#13765](https://github.com/magento/magento2/issues/13765) -- "cart" section data gets loaded 3 times on cart page (2.2.2) (fixed in [magento/magento2#14314](https://github.com/magento/magento2/pull/14314)) + * [#1821](https://github.com/magento/magento2/issues/1821) -- CSS load order incorrect using default_head_blocks.xml (fixed in [magento/magento2#14290](https://github.com/magento/magento2/pull/14290)) + * [#14692](https://github.com/magento/magento2/issues/14692) -- 'validate-grouped-qty' validation is meaningless (fixed in [magento/magento2#14752](https://github.com/magento/magento2/pull/14752)) + * [#11396](https://github.com/magento/magento2/issues/11396) -- app:config:dump locks every configuration setting no alternative to dump specific setting only (fixed in [magento/magento2#12410](https://github.com/magento/magento2/pull/12410)) + * [#9580](https://github.com/magento/magento2/issues/9580) -- Quote Attribute trigger_recollect causes a timeout (fixed in [magento/magento2#14719](https://github.com/magento/magento2/pull/14719)) + * [#13944](https://github.com/magento/magento2/issues/13944) -- Stores -> Terms and Conditions - No Store View shown (fixed in [magento/magento2#14546](https://github.com/magento/magento2/pull/14546)) + * [#5726](https://github.com/magento/magento2/issues/5726) -- Reset Password Email Issue on Multi Store from Admin (fixed in [magento/magento2#14800](https://github.com/magento/magento2/pull/14800)) + * [#14274](https://github.com/magento/magento2/issues/14274) -- Quick search fires error (fixed in [magento/magento2#14839](https://github.com/magento/magento2/pull/14839)) + * [#7861](https://github.com/magento/magento2/issues/7861) -- Using search in Admin panel, and choosing "% in Products" returns full catalog (fixed in [magento/magento2#12735](https://github.com/magento/magento2/pull/12735)) + * [#12193](https://github.com/magento/magento2/issues/12193) -- Catalog not filtered by admin search bar (fixed in [magento/magento2#12735](https://github.com/magento/magento2/pull/12735)) + * [#5768](https://github.com/magento/magento2/issues/5768) -- Magento 2.0.7 XML sitemap is not generated by schedule (fixed in [magento/magento2#14822](https://github.com/magento/magento2/pull/14822)) + * [#14855](https://github.com/magento/magento2/issues/14855) -- Adding an * to do a customer search. (fixed in [magento/magento2#14905](https://github.com/magento/magento2/pull/14905)) + * [#14869](https://github.com/magento/magento2/issues/14869) -- M 2.2.3 price per website - wrong price at backend by a create order after update (fixed in [magento/magento2#14904](https://github.com/magento/magento2/pull/14904)) + * [#10395](https://github.com/magento/magento2/issues/10395) -- REMOTE_IP gets saved partially when using IPV6 (fixed in [magento/magento2#14976](https://github.com/magento/magento2/pull/14976)) + * [#12285](https://github.com/magento/magento2/issues/12285) -- The option false for mobile device don't work in product view page gallery (fixed in [magento/magento2#15020](https://github.com/magento/magento2/pull/15020)) + * [#15009](https://github.com/magento/magento2/issues/15009) -- [2.2.4] Gallery theme variables being ignored (fixed in [magento/magento2#15020](https://github.com/magento/magento2/pull/15020)) + * [#13460](https://github.com/magento/magento2/issues/13460) -- Allmethods config source model does not always report the full list of payment methods (fixed in [magento/magento2#15032](https://github.com/magento/magento2/pull/15032)) + * [#4301](https://github.com/magento/magento2/issues/4301) -- Hit fast twice F5 on checout page, customer loggs out automatically (fixed in [magento/magento2#14428](https://github.com/magento/magento2/pull/14428)) + * [#12362](https://github.com/magento/magento2/issues/12362) -- Concurrent (quick reload) requests on checkout cause cart to empty - related to session_regenerate_id (fixed in [magento/magento2#14428](https://github.com/magento/magento2/pull/14428)) + * [#13427](https://github.com/magento/magento2/issues/13427) -- [2.1.11] Add to cart, try to checkout, cart is empty but mini-cart has items. (fixed in [magento/magento2#14428](https://github.com/magento/magento2/pull/14428)) + * [#11354](https://github.com/magento/magento2/issues/11354) -- Merged CSS file name generation (fixed in [magento/magento2#15144](https://github.com/magento/magento2/pull/15144)) + * [#14104](https://github.com/magento/magento2/issues/14104) -- Admin Section is not visible in backend on production mode (fixed in [magento/magento2#15174](https://github.com/magento/magento2/pull/15174)) + * [#7399](https://github.com/magento/magento2/issues/7399) -- Modal UI: clickableOverlay option doesn't work (fixed in [magento/magento2#15172](https://github.com/magento/magento2/pull/15172)) + * [#14987](https://github.com/magento/magento2/issues/14987) -- Invisible breadcrumbs at product page when mageMenu widget is not used (fixed in [magento/magento2#15178](https://github.com/magento/magento2/pull/15178)) + * [#13530](https://github.com/magento/magento2/issues/13530) -- "Template file 'header.html' is not found" error while trying to save Design Configuration. (fixed in [magento/magento2#15137](https://github.com/magento/magento2/pull/15137)) + * [#14968](https://github.com/magento/magento2/issues/14968) -- Can't change the applied theme in 2.2.4 (fixed in [magento/magento2#15137](https://github.com/magento/magento2/pull/15137)) + * [#15121](https://github.com/magento/magento2/issues/15121) -- Magento 2.2.4 - Condition Category Chooser Crashes Page if Store has Several Nested Categories (fixed in [magento/magento2#15265](https://github.com/magento/magento2/pull/15265)) + * [#15334](https://github.com/magento/magento2/issues/15334) -- Purchased Order Form button should visible properly (fixed in [magento/magento2#15331](https://github.com/magento/magento2/pull/15331) and [magento/magento2#15372](https://github.com/magento/magento2/pull/15372)) + * [#15352](https://github.com/magento/magento2/issues/15352) -- Reformat the javascript code as per magento standards. (fixed in [magento/magento2#15343](https://github.com/magento/magento2/pull/15343)) + * [#15355](https://github.com/magento/magento2/issues/15355) -- Function is unnecessarily called multiple time (fixed in [magento/magento2#15346](https://github.com/magento/magento2/pull/15346)) + * [#15319](https://github.com/magento/magento2/issues/15319) -- misleading data-container in product list (fixed in [magento/magento2#15350](https://github.com/magento/magento2/pull/15350)) + * [#15354](https://github.com/magento/magento2/issues/15354) -- Refactor javascript code of button split widget call js component (fixed in [magento/magento2#15351](https://github.com/magento/magento2/pull/15351)) + * [#14941](https://github.com/magento/magento2/issues/14941) -- Unnecessary recalculation of product list pricing causes huge slowdowns (fixed in [magento/magento2#15089](https://github.com/magento/magento2/pull/15089)) + * [#14747](https://github.com/magento/magento2/issues/14747) -- Newsletter subscription confirmation message does not display after clicking link in email (fixed in [magento/magento2#15247](https://github.com/magento/magento2/pull/15247)) + * [#15037](https://github.com/magento/magento2/issues/15037) -- Product Details Page breadcrumbs cause syntax error on products containing quotes (fixed in [magento/magento2#15347](https://github.com/magento/magento2/pull/15347)) + * [#15118](https://github.com/magento/magento2/issues/15118) -- Responsive Design, Footers do not snap to bottom of screen on mobile devices (fixed in [magento/magento2#15353](https://github.com/magento/magento2/pull/15353) and [magento/magento2#17006](https://github.com/magento/magento2/pull/17006)) + * [#15192](https://github.com/magento/magento2/issues/15192) -- Module Manager module grid is not working Magento 2.2.4 (fixed in [magento/magento2#15211](https://github.com/magento/magento2/pull/15211)) + * [#13793](https://github.com/magento/magento2/issues/13793) -- Submitting search form (mini) with enter key fires event handlers bound by jquery twice (fixed in [magento/magento2#15340](https://github.com/magento/magento2/pull/15340)) + * [#15361](https://github.com/magento/magento2/issues/15361) -- Comments are not translated for Signifyd module. (fixed in [magento/magento2#15364](https://github.com/magento/magento2/pull/15364)) + * [#15356](https://github.com/magento/magento2/issues/15356) -- Refactore javascript for module URL rewrite (fixed in [magento/magento2#15422](https://github.com/magento/magento2/pull/15422)) + * [#10210](https://github.com/magento/magento2/issues/10210) -- Transport variable can not be altered in email_invoice_set_template_vars_before Event (fixed in [magento/magento2#15040](https://github.com/magento/magento2/pull/15040) and [magento/magento2#16599](https://github.com/magento/magento2/pull/16599)) + * [#4977](https://github.com/magento/magento2/issues/4977) -- Magnifier doesn't work with mode set to inner (fixed in [magento/magento2#15382](https://github.com/magento/magento2/pull/15382)) + * [#15469](https://github.com/magento/magento2/issues/15469) -- lib/web/mage/dropdowns.js fails when autoclose is set to true (fixed in [magento/magento2#15499](https://github.com/magento/magento2/pull/15499)) + * [#14153](https://github.com/magento/magento2/issues/14153) -- UI Component listing action column outside of screen when too many columns (fixed in [magento/magento2#15459](https://github.com/magento/magento2/pull/15459)) + * [#15467](https://github.com/magento/magento2/issues/15467) -- Cart does not load when Configuration product option is deleted and that option is in the cart (fixed in [magento/magento2#15468](https://github.com/magento/magento2/pull/15468)) + * [#15564](https://github.com/magento/magento2/issues/15564) -- 2.2.4 Created admin token has no access (fixed in [magento/magento2#15598](https://github.com/magento/magento2/pull/15598)) + * [#10346](https://github.com/magento/magento2/issues/10346) -- Deadlock occurs using REST API & OAuth 1.0a under high concurrency (fixed in [magento/magento2#13328](https://github.com/magento/magento2/pull/13328)) + * [#15348](https://github.com/magento/magento2/issues/15348) -- Multiple Payment Methods Enabled is giving error in console "Found 3 Elements with non - unique Id" (fixed in [magento/magento2#15349](https://github.com/magento/magento2/pull/15349)) + * [#13415](https://github.com/magento/magento2/issues/13415) -- Duplicated elements id in checkout page (fixed in [magento/magento2#15585](https://github.com/magento/magento2/pull/15585)) + * [#15590](https://github.com/magento/magento2/issues/15590) -- Typo in tests / setCateroryIds([]) (fixed in [magento/magento2#15621](https://github.com/magento/magento2/pull/15621)) + * [#7897](https://github.com/magento/magento2/issues/7897) -- Menu widget submenu alignment (fixed in [magento/magento2#15645](https://github.com/magento/magento2/pull/15645)) + * [#15565](https://github.com/magento/magento2/issues/15565) -- Getting wrong frontend-controller, when using storecodes in urls (fixed in [magento/magento2#15566](https://github.com/magento/magento2/pull/15566)) + * [#6058](https://github.com/magento/magento2/issues/6058) -- IE11 user login email validation fails if field has leading or trailing space (fixed in [magento/magento2#15365](https://github.com/magento/magento2/pull/15365) and [magento/magento2#16192](https://github.com/magento/magento2/pull/16192) and [magento/magento2#16564](https://github.com/magento/magento2/pull/16564) and [magento/magento2#16595](https://github.com/magento/magento2/pull/16595)) + * [#15210](https://github.com/magento/magento2/issues/15210) -- Advanced pricing pagination issue (fixed in [magento/magento2#15614](https://github.com/magento/magento2/pull/15614)) + * [#12221](https://github.com/magento/magento2/issues/12221) -- Google analytics pageview being triggered twice (fixed in [magento/magento2#15765](https://github.com/magento/magento2/pull/15765)) + * [#15510](https://github.com/magento/magento2/issues/15510) -- First PDF download / export after login (fixed in [magento/magento2#15539](https://github.com/magento/magento2/pull/15539)) + * [#15608](https://github.com/magento/magento2/issues/15608) -- Styling select by changing less variables in Luma theme doesn't work as expected (fixed in [magento/magento2#15734](https://github.com/magento/magento2/pull/15734)) + * [#14966](https://github.com/magento/magento2/issues/14966) -- Disabling product does not remove it from the flat index (fixed in [magento/magento2#15019](https://github.com/magento/magento2/pull/15019)) + * [#11477](https://github.com/magento/magento2/issues/11477) -- Magento REST API Schema (Swagger) is not compatible with Search Criteria (fixed in [magento/magento2#15322](https://github.com/magento/magento2/pull/15322)) + * [#14056](https://github.com/magento/magento2/issues/14056) -- Coupon API not working for guest user (fixed in [magento/magento2#15320](https://github.com/magento/magento2/pull/15320)) + * [#15660](https://github.com/magento/magento2/issues/15660) -- Wrong order amount on dashboard on Last orders listing when having more than one website with different currencies (fixed in [magento/magento2#15661](https://github.com/magento/magento2/pull/15661)) + * [#15588](https://github.com/magento/magento2/issues/15588) -- Images in XML sitemap are always linked to base store in multistore (fixed in [magento/magento2#15689](https://github.com/magento/magento2/pull/15689)) + * [#15822](https://github.com/magento/magento2/issues/15822) -- SQL Error: ambiguous column 'customer_group_id' in 'All customers' page in admin when extension attribute table is joined (fixed in [magento/magento2#15826](https://github.com/magento/magento2/pull/15826)) + * [#15323](https://github.com/magento/magento2/issues/15323) -- limiter float too generic (fixed in [magento/magento2#15878](https://github.com/magento/magento2/pull/15878)) + * [#14999](https://github.com/magento/magento2/issues/14999) -- Changing @tab-content__border variable has no effect in Blank theme (fixed in [magento/magento2#15914](https://github.com/magento/magento2/pull/15914)) + * [#15308](https://github.com/magento/magento2/issues/15308) -- extraneous margins on product list and product list items (fixed in [magento/magento2#15936](https://github.com/magento/magento2/pull/15936)) + * [#16047](https://github.com/magento/magento2/issues/16047) -- inline-block issue in name form (fixed in [magento/magento2#16048](https://github.com/magento/magento2/pull/16048)) + * [#15213](https://github.com/magento/magento2/issues/15213) -- Alignment & overlapping Issue on every Home page & category page of Hot Seller section (fixed in [magento/magento2#15893](https://github.com/magento/magento2/pull/15893)) + * [#15832](https://github.com/magento/magento2/issues/15832) -- No button-primary__font-weight (fixed in [magento/magento2#16012](https://github.com/magento/magento2/pull/16012)) + * [#13692](https://github.com/magento/magento2/issues/13692) -- In payment step of checkout I cannot unselect #billing-save-in-address-book checkbox in non-first payment method (fixed in [magento/magento2#15344](https://github.com/magento/magento2/pull/15344)) + * [#15255](https://github.com/magento/magento2/issues/15255) -- Customer who exceeded max login failures not able to login even after reset password (fixed in [magento/magento2#15534](https://github.com/magento/magento2/pull/15534)) + * [#15220](https://github.com/magento/magento2/issues/15220) -- 2.2.4: navigation dropdown caret icon missing (jQuery UI) (fixed in [magento/magento2#16082](https://github.com/magento/magento2/pull/16082)) + * [#16079](https://github.com/magento/magento2/issues/16079) -- Need information about translating issue (Magento Swatches Js) (fixed in [magento/magento2#16190](https://github.com/magento/magento2/pull/16190)) + * [#16184](https://github.com/magento/magento2/issues/16184) -- Argument 1 passed to Magento\Sales\Model\Order\Payment must be an instance of Magento\Framework\DataObject, none given (fixed in [magento/magento2#16194](https://github.com/magento/magento2/pull/16194)) + * [#8222](https://github.com/magento/magento2/issues/8222) -- Estimate Shipping and Tax Form not works due to js error in collapsible.js [proposed fix] (fixed in [magento/magento2#16213](https://github.com/magento/magento2/pull/16213)) + * [#15501](https://github.com/magento/magento2/issues/15501) -- M2.2.4 missing meta title tag and doesn't show product name if meta title is empty (fixed in [magento/magento2#15532](https://github.com/magento/magento2/pull/15532)) + * [#15627](https://github.com/magento/magento2/issues/15627) -- Product order in category changed after update to Magento 2.2.4 (fixed in [magento/magento2#15629](https://github.com/magento/magento2/pull/15629)) + * [#9307](https://github.com/magento/magento2/issues/9307) -- Color attribute taking swatch instead of Drop down option for configurable options, (fixed in [magento/magento2#12771](https://github.com/magento/magento2/pull/12771)) + * [#9923](https://github.com/magento/magento2/issues/9923) -- Upgrading to 2.1.7 changed dropdown attributes to swatches (fixed in [magento/magento2#12771](https://github.com/magento/magento2/pull/12771)) + * [#11403](https://github.com/magento/magento2/issues/11403) -- Product Attributes Not Updating on Frontend (fixed in [magento/magento2#12771](https://github.com/magento/magento2/pull/12771)) + * [#11703](https://github.com/magento/magento2/issues/11703) -- Changing Swatches to Drop-down does not remove swatches from existing products (fixed in [magento/magento2#12771](https://github.com/magento/magento2/pull/12771)) + * [#12695](https://github.com/magento/magento2/issues/12695) -- Unable to change attribute type from swatch to dropdown (fixed in [magento/magento2#12771](https://github.com/magento/magento2/pull/12771)) + * [#14895](https://github.com/magento/magento2/issues/14895) -- Change Password warning message appear two times (fixed in [magento/magento2#15774](https://github.com/magento/magento2/pull/15774)) + * [#15205](https://github.com/magento/magento2/issues/15205) -- Upgraded to Magento 2.2.4 from Magento 2.1.9 - Locale and Store Configuration issues 'Store View' Locale not being used on frontend, 'Default Config' Locale being used instead (fixed in [magento/magento2#15929](https://github.com/magento/magento2/pull/15929)) + * [#15245](https://github.com/magento/magento2/issues/15245) -- 2.2.4: Wrong home page loaded in multi store setup (fixed in [magento/magento2#15929](https://github.com/magento/magento2/pull/15929)) + * [#15345](https://github.com/magento/magento2/issues/15345) -- Template syntax in block file (fixed in [magento/magento2#15339](https://github.com/magento/magento2/pull/15339)) + * [#7379](https://github.com/magento/magento2/issues/7379) -- Calendar widget (jQuery UI DatePicker) with numberOfMonths = 2 or more (fixed in [magento/magento2#16279](https://github.com/magento/magento2/pull/16279)) + * [#16378](https://github.com/magento/magento2/issues/16378) -- Wrong placeholder for password field in the checkout page (fixed in [magento/magento2#16379](https://github.com/magento/magento2/pull/16379)) + * [#15218](https://github.com/magento/magento2/issues/15218) -- "Confirmation request" email is sent on customer's newsletter unsubscription (fixed in [magento/magento2#15464](https://github.com/magento/magento2/pull/15464)) + * [#14593](https://github.com/magento/magento2/issues/14593) -- Press Esc Key on modal generate a jquery UI error (fixed in [magento/magento2#16477](https://github.com/magento/magento2/pull/16477)) + * [#11717](https://github.com/magento/magento2/issues/11717) -- Wrong price amount on product page (fixed in [magento/magento2#15909](https://github.com/magento/magento2/pull/15909) and [magento/magento2#16590](https://github.com/magento/magento2/pull/16590)) + * [#16529](https://github.com/magento/magento2/issues/16529) -- Rewriting product listing widget block breaks its template rendering. (fixed in [magento/magento2#16530](https://github.com/magento/magento2/pull/16530)) + * [#15940](https://github.com/magento/magento2/issues/15940) -- Wrong end of month at Reports for Europe/Berlin time zone if month contains 31 day (fixed in [magento/magento2#16584](https://github.com/magento/magento2/pull/16584)) + * [#16174](https://github.com/magento/magento2/issues/16174) -- Admin tabs order not working properly (fixed in [magento/magento2#16175](https://github.com/magento/magento2/pull/16175)) + * [#16703](https://github.com/magento/magento2/issues/16703) -- User Agent Rules table headers do match content of rows. (fixed in [magento/magento2#16704](https://github.com/magento/magento2/pull/16704)) + * [#15848](https://github.com/magento/magento2/issues/15848) -- no navigation-level0-item__hover__color (fixed in [magento/magento2#16732](https://github.com/magento/magento2/pull/16732)) + * [#5067](https://github.com/magento/magento2/issues/5067) -- Custom option values do not save correctly (fixed in [magento/magento2#13569](https://github.com/magento/magento2/pull/13569)) + * [#14351](https://github.com/magento/magento2/issues/14351) -- Product import doesn't change `Enable Qty Increments` field (fixed in [magento/magento2#14379](https://github.com/magento/magento2/pull/14379)) + * [#16764](https://github.com/magento/magento2/issues/16764) -- Rating Star issue on Product detail Page. (fixed in [magento/magento2#16766](https://github.com/magento/magento2/pull/16766)) + * [#5316](https://github.com/magento/magento2/issues/5316) -- [2.1.0] HTML minification problem with php tag with a comment and no space at the end (fixed in [magento/magento2#16916](https://github.com/magento/magento2/pull/16916)) + * [#6264](https://github.com/magento/magento2/issues/6264) -- Error in Admin > products when module Reviews is disabled (fixed in [magento-partners/magento2ee#70](https://github.com/magento-partners/magento2ee/pull/70)) + * [#6504](https://github.com/magento/magento2/issues/6504) -- Magento 2.1 CE: Breadcrumbs on homepage and 404 in multistore (fixed in [magento-partners/magento2ee#72](https://github.com/magento-partners/magento2ee/pull/72)) + * [#16843](https://github.com/magento/magento2/issues/16843) -- Magento 2.2.5: Configurable Product with Only Size Options (No Color Options) Shows No Image in Cart (fixed in [magento/magento2#16863](https://github.com/magento/magento2/pull/16863)) + * [#8131](https://github.com/magento/magento2/issues/8131) -- Magento 2.1.3 - There is a bug in advanced search form regarding validation messages (fixed in [magento/magento2#16952](https://github.com/magento/magento2/pull/16952)) + * [#14476](https://github.com/magento/magento2/issues/14476) -- Mobile device style groups incorrect order in _responsive.less (fixed in [magento/magento2#16959](https://github.com/magento/magento2/pull/16959)) + * [#15393](https://github.com/magento/magento2/issues/15393) -- "Multiple Select" product attributes do not render HTML tags on the storefront view (fixed in [magento/magento2#15687](https://github.com/magento/magento2/pull/15687)) + * [#3535](https://github.com/magento/magento2/issues/3535) -- Print pdf don't delete file in var folder (fixed in [magento/magento2#16401](https://github.com/magento/magento2/pull/16401)) + * [#14517](https://github.com/magento/magento2/issues/14517) -- PDF invoices in /var folder (fixed in [magento/magento2#16401](https://github.com/magento/magento2/pull/16401)) + * [#16273](https://github.com/magento/magento2/issues/16273) -- Method $product->getUrlInStore() returning extremely long URLs, could be a bug (fixed in [magento/magento2#16468](https://github.com/magento/magento2/pull/16468)) +* GitHub pull requests: + * [magento/magento2#13397](https://github.com/magento/magento2/pull/13397) -- magento/magento2#13296: Category name with special characters brakes … (by @vinayshah) + * [magento/magento2#14338](https://github.com/magento/magento2/pull/14338) -- Fixing wrong sitemap product url #4788 (by @DenisSaltanahmedov) + * [magento/magento2#14715](https://github.com/magento/magento2/pull/14715) -- #14669 Css class "empty" is always present on minicart dropdown (by @Karlasa) + * [magento/magento2#14716](https://github.com/magento/magento2/pull/14716) -- [2.2] Fix - minicart label fixed size issue (by @Karlasa) + * [magento/magento2#12764](https://github.com/magento/magento2/pull/12764) -- magento/magento2#4389 Widget cache error (by @AlexandrKozyr) + * [magento/magento2#14314](https://github.com/magento/magento2/pull/14314) -- magento/magento2#13765 Excess requests 'customer data' on checkout cart page were fixed (by @andrewbess) + * [magento/magento2#14538](https://github.com/magento/magento2/pull/14538) -- [Forwardport] Fix HTML tags in meta description (by @davidwindell) + * [magento/magento2#14742](https://github.com/magento/magento2/pull/14742) -- Allow multiple tabs ui_components on a page (by @FreekVandeursen) + * [magento/magento2#14751](https://github.com/magento/magento2/pull/14751) -- Deleting CMS page via webapi/cron should remove related URL rewrites (by @unicoder88) + * [magento/magento2#14290](https://github.com/magento/magento2/pull/14290) -- CSS load order incorrect using default_head_blocks.xml #1821 (by @SergeyDmitruk) + * [magento/magento2#14707](https://github.com/magento/magento2/pull/14707) -- Catalog price rule save is too slow #13378 (by @chrom) + * [magento/magento2#14752](https://github.com/magento/magento2/pull/14752) -- Fix to allow use decimals less then 1 in subproducts qty. (by @likemusic) + * [magento/magento2#14769](https://github.com/magento/magento2/pull/14769) -- [Backport] Add expanded documentation to AdapterInterface::update (by @navarr) + * [magento/magento2#14790](https://github.com/magento/magento2/pull/14790) -- Update Readme file for magento2 repository (by @sidolov) + * [magento/magento2#12410](https://github.com/magento/magento2/pull/12410) -- Add argument on app:config:dump to skip dumping all system settings. (by @jalogut) + * [magento/magento2#14719](https://github.com/magento/magento2/pull/14719) -- Fixed setting of triggerRecollection flag (by @philippsander) + * [magento/magento2#14753](https://github.com/magento/magento2/pull/14753) -- [Backport] Fix bug with retry connect and custom db port (by @julienanquetil) + * [magento/magento2#14765](https://github.com/magento/magento2/pull/14765) -- Display Wrong Data On Cart Update Page (by @nit-it) + * [magento/magento2#14546](https://github.com/magento/magento2/pull/14546) -- Fix issue #13944. Show Store Views in Terms and Conditions grid. (by @afirlejczyk) + * [magento/magento2#14726](https://github.com/magento/magento2/pull/14726) -- Fix/navigation order function (by @luke-denton-aligent) + * [magento/magento2#14800](https://github.com/magento/magento2/pull/14800) -- #5726 - Fix reset password link with appropriate customer store (by @rodrigowebjump) + * [magento/magento2#14844](https://github.com/magento/magento2/pull/14844) -- Updated readme.md file 2.2-develop (by @sidolov) + * [magento/magento2#14795](https://github.com/magento/magento2/pull/14795) -- Invoice grid shows wrong shipping & handling for partial items invoice. It shows order's shipping & handling instead if invoiced shipping& handling charge (by @ankurvr) + * [magento/magento2#14833](https://github.com/magento/magento2/pull/14833) -- Fix a non well formed numeric value encountered on Magento/Directory/… (by @bmxmale) + * [magento/magento2#14627](https://github.com/magento/magento2/pull/14627) -- Fix: Datepicker problem when using non en-US locale. (by @tao-s) + * [magento/magento2#14836](https://github.com/magento/magento2/pull/14836) -- Use index sitemap name as prefix in split sitemaps (by @jameshalsall) + * [magento/magento2#14839](https://github.com/magento/magento2/pull/14839) -- Back port pull 14301 (by @julienanquetil) + * [magento/magento2#12566](https://github.com/magento/magento2/pull/12566) -- Move isAllowed method from AccessChangeQuoteControl to separate service (by @JeroenVanLeusden) + * [magento/magento2#14699](https://github.com/magento/magento2/pull/14699) -- [2.2] Optimize ID to SKU lookup of tier prices (by @toddbc) + * [magento/magento2#14829](https://github.com/magento/magento2/pull/14829) -- Add statement to 'beforeSave' method to allow app:config:import (by @bmxmale) + * [magento/magento2#12735](https://github.com/magento/magento2/pull/12735) -- magento/magento2#12193 Catalog not filtered by admin search bar (by @hannassy) + * [magento/magento2#14822](https://github.com/magento/magento2/pull/14822) -- Add default schedule config for sitemap_generate job (by @jameshalsall) + * [magento/magento2#14876](https://github.com/magento/magento2/pull/14876) -- Changed return type of addToCartPostParams to array (by @LordZardeck) + * [magento/magento2#14892](https://github.com/magento/magento2/pull/14892) -- Corrected @param in comment block (by @Yogeshks) + * [magento/magento2#14609](https://github.com/magento/magento2/pull/14609) -- Code cleanup, add more visibility (by @thomas-blackbird) + * [magento/magento2#14891](https://github.com/magento/magento2/pull/14891) -- Fix typo in doc for updateSpecificCoupons (by @sjb9774) + * [magento/magento2#14893](https://github.com/magento/magento2/pull/14893) -- [Backport] Fix aggregations use statements and return values (by @rogyar) + * [magento/magento2#14896](https://github.com/magento/magento2/pull/14896) -- Removed extra spaces from language file (by @Yogeshks) + * [magento/magento2#14905](https://github.com/magento/magento2/pull/14905) -- FIX for issue#14855 - Adding an * to do a customer search (by @phoenix128) + * [magento/magento2#14820](https://github.com/magento/magento2/pull/14820) -- Duplicate Order Confirmation Emails for PayPal Express checkout order (by @rocketweb) + * [magento/magento2#14904](https://github.com/magento/magento2/pull/14904) -- FIX for issue#14869 - Wrong price at backend after update (by @phoenix128) + * [magento/magento2#14928](https://github.com/magento/magento2/pull/14928) -- Removed extra close tag (by @Yogeshks) + * [magento/magento2#14886](https://github.com/magento/magento2/pull/14886) -- Fixed issue products grid operations in admin cart price rule edit page for user which has no access to CatalogRule module (by @Neos2007) + * [magento/magento2#14874](https://github.com/magento/magento2/pull/14874) -- Fix infinite checkout loader when some script wasn't loaded correctly because of network error (by @vovayatsyuk) + * [magento/magento2#14923](https://github.com/magento/magento2/pull/14923) -- Move customer.account.dashboard.info.extra block to contact information (by @JeroenVanLeusden) + * [magento/magento2#14939](https://github.com/magento/magento2/pull/14939) -- Renamed "Add Block Names to Hints" config setting to represent what it actually does (by @chris-pook) + * [magento/magento2#14935](https://github.com/magento/magento2/pull/14935) -- Change 'Update'-button visibility on change qty event. (by @likemusic) + * [magento/magento2#14963](https://github.com/magento/magento2/pull/14963) -- Fixed Overlay Problems (by @ArtiDjeims) + * [magento/magento2#14946](https://github.com/magento/magento2/pull/14946) -- use "Module_Name::template/path" format instead of using template/path i… (by @Jakhotiya) + * [magento/magento2#14976](https://github.com/magento/magento2/pull/14976) -- Changed the length of the remote_ip field to store ipv6 addresses (by @georgeschiopu) + * [magento/magento2#15015](https://github.com/magento/magento2/pull/15015) -- Fix typo in less button definition (by @shochdoerfer) + * [magento/magento2#15018](https://github.com/magento/magento2/pull/15018) -- chore: upgrade Node.js to 8 (by @DanielRuf) + * [magento/magento2#15023](https://github.com/magento/magento2/pull/15023) -- Fixed typos in .less files (by @kalpmehta) + * [magento/magento2#15002](https://github.com/magento/magento2/pull/15002) -- small optimization in if-condition (by @likemusic) + * [magento/magento2#15012](https://github.com/magento/magento2/pull/15012) -- fix: set message-success in setup if we already have the latest version (by @DanielRuf) + * [magento/magento2#15017](https://github.com/magento/magento2/pull/15017) -- chore: use random_int() in some places (by @DanielRuf) + * [magento/magento2#15016](https://github.com/magento/magento2/pull/15016) -- chore: checkout last 5 commits (by @DanielRuf) + * [magento/magento2#15020](https://github.com/magento/magento2/pull/15020) -- [2.2-develop] Update Gallery Template to handle boolean config Variables (by @gwharton) + * [magento/magento2#15032](https://github.com/magento/magento2/pull/15032) -- [TASK] Fix overriding of payment methods in getPaymentMethodList (by @mash1t) + * [magento/magento2#15053](https://github.com/magento/magento2/pull/15053) -- Fixes typo (by @jee1mr) + * [magento/magento2#14967](https://github.com/magento/magento2/pull/14967) -- Format the javascript code (by @Yogeshks) + * [magento/magento2#15067](https://github.com/magento/magento2/pull/15067) -- fixed documentation about viewModels. The key in xml should be view_m… (by @Jakhotiya) + * [magento/magento2#13904](https://github.com/magento/magento2/pull/13904) -- Add a link to the cart to the success message when adding a product (by @avstudnitz) + * [magento/magento2#14428](https://github.com/magento/magento2/pull/14428) -- Fix \Magento\Checkout\Controller\Index\Index::isSecureRequest method to take care of current request being secure and also from referer, as stated in phpdoc block (by @adrian-martinez-interactiv4) + * [magento/magento2#15129](https://github.com/magento/magento2/pull/15129) -- Add missing false-check to the ConfiguredRegularPrice price-model (by @tkotosz) + * [magento/magento2#15136](https://github.com/magento/magento2/pull/15136) -- [Backport] Add concrete type hints for product and category resources (by @rogyar) + * [magento/magento2#15162](https://github.com/magento/magento2/pull/15162) -- Fixed js error when product has double quote in its name (by @vovayatsyuk) + * [magento/magento2#15173](https://github.com/magento/magento2/pull/15173) -- Removed unused class declaration & code in comment (by @Yogeshks) + * [magento/magento2#15144](https://github.com/magento/magento2/pull/15144) -- Fixed Issue #11354 Merged CSS file name generation (by @sashas777) + * [magento/magento2#15174](https://github.com/magento/magento2/pull/15174) -- Restored app:config:status command after it was accidentally removed. (by @hostep) + * [magento/magento2#12324](https://github.com/magento/magento2/pull/12324) -- Simplified \Magento\Framework\Reflection\TypeProcessor (by @joni-jones) + * [magento/magento2#13185](https://github.com/magento/magento2/pull/13185) -- Fix negative basket total due to shipping tax residue (by @torreytsui) + * [magento/magento2#14614](https://github.com/magento/magento2/pull/14614) -- Add Parent Item to order item in repository (by @JeroenVanLeusden) + * [magento/magento2#15172](https://github.com/magento/magento2/pull/15172) -- 7399-clickableOverlay-less-fix - added pointer-events rule to .modal-… (by @virtua-pmakowski) + * [magento/magento2#15178](https://github.com/magento/magento2/pull/15178) -- Removed mageMenu widget dependency from breadcrumbs component (by @vovayatsyuk) + * [magento/magento2#15197](https://github.com/magento/magento2/pull/15197) -- Fix Magento_ImportExport not supporting unicode characters in column names (by @tdgroot) + * [magento/magento2#15202](https://github.com/magento/magento2/pull/15202) -- [Backport 2.2] Fix for displaying a negative price for a custom option. (by @dverkade) + * [magento/magento2#15137](https://github.com/magento/magento2/pull/15137) -- fix: do not forcefully set area in template if it is already set, fixes #14968, fixes #13530 (by @DanielRuf) + * [magento/magento2#15256](https://github.com/magento/magento2/pull/15256) -- Fixed typo in method name (by @olmer) + * [magento/magento2#14994](https://github.com/magento/magento2/pull/14994) -- Prevent not category links in breadcrumbs at product page (by @vovayatsyuk) + * [magento/magento2#15194](https://github.com/magento/magento2/pull/15194) -- Move buttons definition to separate file (by @jissereitsma) + * [magento/magento2#15249](https://github.com/magento/magento2/pull/15249) -- Removed non-existing argument (by @Yogeshks) + * [magento/magento2#15262](https://github.com/magento/magento2/pull/15262) -- Fix \Magento\Customer\Model\Customer\NotificationStorage class (by @adrian-martinez-interactiv4) + * [magento/magento2#15058](https://github.com/magento/magento2/pull/15058) -- Add 'const' type support to layout arguments (by @IgorVitol) + * [magento/magento2#15133](https://github.com/magento/magento2/pull/15133) -- Fix outdated address data when using Braintree's "Pay with PayPal" button (by @vovayatsyuk) + * [magento/magento2#15269](https://github.com/magento/magento2/pull/15269) -- Fix typo in Image::open exception message (by @t-richards) + * [magento/magento2#15282](https://github.com/magento/magento2/pull/15282) -- [fix] typo in private method name getUniq[ue]ImageIndex (by @mhauri) + * [magento/magento2#15291](https://github.com/magento/magento2/pull/15291) -- [Backport] Fix typo in database column comment (by @VitaliyBoyko) + * [magento/magento2#15292](https://github.com/magento/magento2/pull/15292) -- Fix typo in property name (by @dmytro-ch) + * [magento/magento2#15276](https://github.com/magento/magento2/pull/15276) -- [fix] typo in method name _getCharg[e]ableOptionPrice (by @mhauri) + * [magento/magento2#15293](https://github.com/magento/magento2/pull/15293) -- Fix typos in PHPDocs and comments (by @dmytro-ch) + * [magento/magento2#15302](https://github.com/magento/magento2/pull/15302) -- Fixed typo mistake in function comment (by @NamrataChangani) + * [magento/magento2#15294](https://github.com/magento/magento2/pull/15294) -- Fix typos in variable names (by @dmytro-ch) + * [magento/magento2#15386](https://github.com/magento/magento2/pull/15386) -- [Backport-2.2] Unused variable removed (by @VitaliyBoyko) + * [magento/magento2#15265](https://github.com/magento/magento2/pull/15265) -- declare var to fix scope error (by @keithbentrup) + * [magento/magento2#15333](https://github.com/magento/magento2/pull/15333) -- Added language translation for message string (by @Yogeshks) + * [magento/magento2#15331](https://github.com/magento/magento2/pull/15331) -- set alignment purchase order form and place order button (by @neeta-wagento) + * [magento/magento2#15341](https://github.com/magento/magento2/pull/15341) -- Refactored javascript code of admin notification modal popup (by @rahul-kachhadiya) + * [magento/magento2#15343](https://github.com/magento/magento2/pull/15343) -- Format the javascript code in Tax module (by @vgelani) + * [magento/magento2#15346](https://github.com/magento/magento2/pull/15346) -- Function is unnecessarily called multiple time (by @saurabh-aureate) + * [magento/magento2#15350](https://github.com/magento/magento2/pull/15350) -- 15319 : misleading data-container in product list (by @sunilit42) + * [magento/magento2#15351](https://github.com/magento/magento2/pull/15351) -- Refactor javascript code of button split widget (by @amittiwari024) + * [magento/magento2#15362](https://github.com/magento/magento2/pull/15362) -- Removed duplicate line and added comment on variable (by @vgelani) + * [magento/magento2#15411](https://github.com/magento/magento2/pull/15411) -- [Backport-2.2] Fixed abstract.js typo (by @VitaliyBoyko) + * [magento/magento2#15089](https://github.com/magento/magento2/pull/15089) -- Fix unnecessary recalculation of product list pricing (by @JeroenVanLeusden) + * [magento/magento2#15247](https://github.com/magento/magento2/pull/15247) -- ISSUE-14747 Newsletter subscription confirmation message does not dis… (by @KaushikChavda) + * [magento/magento2#15275](https://github.com/magento/magento2/pull/15275) -- [fix] typo in method name _exportAddress[s]es (by @mhauri) + * [magento/magento2#15332](https://github.com/magento/magento2/pull/15332) -- #14063 - Wrong invoice prefix in multistore setup due to default stor… (by @sanjay-wagento) + * [magento/magento2#15336](https://github.com/magento/magento2/pull/15336) -- #12820 - Wrong annotation in _toOptionArray - magento/framework/Data/… (by @sanjay-wagento) + * [magento/magento2#15347](https://github.com/magento/magento2/pull/15347) -- Fixed breadcrumb quote issue in product page #15037 (by @jignesh-baldha) + * [magento/magento2#15372](https://github.com/magento/magento2/pull/15372) -- Fixed Purchased Order Form button should visible properly (by @vgelani) + * [magento/magento2#15353](https://github.com/magento/magento2/pull/15353) -- Responsive Design Footers bottom of screen on mobile devices #15118 (by @chirag-wagento) + * [magento/magento2#15398](https://github.com/magento/magento2/pull/15398) -- Fixed set template syntax issue (by @vgelani) + * [magento/magento2#15431](https://github.com/magento/magento2/pull/15431) -- typo correction (by @AnshuMishra17) + * [magento/magento2#15010](https://github.com/magento/magento2/pull/15010) -- [BUGFIX] Added row_id to the flat action indexer so the value isn't s… (by @lewisvoncken) + * [magento/magento2#15211](https://github.com/magento/magento2/pull/15211) -- Error 500 in Module Manager (by @flancer64) + * [magento/magento2#15258](https://github.com/magento/magento2/pull/15258) -- [backport] fixes for instant purchase module from #15257 (by @mhauri) + * [magento/magento2#15340](https://github.com/magento/magento2/pull/15340) -- Submitting search form (mini) with enter key fires event handlers bound by jquery twice (by @amjadm61) + * [magento/magento2#15364](https://github.com/magento/magento2/pull/15364) -- Added language translation for comment tag (by @Yogeshks) + * [magento/magento2#15371](https://github.com/magento/magento2/pull/15371) -- Added language translation in template files (by @rahul-kachhadiya) + * [magento/magento2#15409](https://github.com/magento/magento2/pull/15409) -- Prevent multiple add-to-cart initializations in case of ajax loaded product listing (by @vovayatsyuk) + * [magento/magento2#15422](https://github.com/magento/magento2/pull/15422) -- Refactor JavsScript for UrlRewrite module edit page (by @patelnimesh1988) + * [magento/magento2#15421](https://github.com/magento/magento2/pull/15421) -- Updated font-size variable and standardize #ToDo UI (by @vgelani) + * [magento/magento2#15435](https://github.com/magento/magento2/pull/15435) -- [Backport] Removed redundant else statement (by @rogyar) + * [magento/magento2#15460](https://github.com/magento/magento2/pull/15460) -- Improvements to the CONTRIBUTING.md document (by @RebeccaBrocton) + * [magento/magento2#15040](https://github.com/magento/magento2/pull/15040) -- [2.2-develop] Transport variable can not be altered in email_invoice_set_template_vars_before Event (by @gwharton) + * [magento/magento2#15312](https://github.com/magento/magento2/pull/15312) -- [Fix] forgot to add lowercase conversion on grouped product assignation (by @jalogut) + * [magento/magento2#15454](https://github.com/magento/magento2/pull/15454) -- Fix HTML syntax in report.phtml error template (by @abcpremium) + * [magento/magento2#15416](https://github.com/magento/magento2/pull/15416) -- Moved css from media #TODO (by @vgelani) + * [magento/magento2#15462](https://github.com/magento/magento2/pull/15462) -- Adding manners to GitHub templates 2.2 (by @dmanners) + * [magento/magento2#15511](https://github.com/magento/magento2/pull/15511) -- Fixes in config module (by @mhauri) + * [magento/magento2#15513](https://github.com/magento/magento2/pull/15513) -- Fix typos in Multishipping and User module (by @avoelkl) + * [magento/magento2#15301](https://github.com/magento/magento2/pull/15301) -- Refactor JavsScript for customer logout (by @patelnimesh1988) + * [magento/magento2#15382](https://github.com/magento/magento2/pull/15382) -- Fix for Magnifier in inside mode (by @kacperchara) + * [magento/magento2#15499](https://github.com/magento/magento2/pull/15499) -- Issue 15469: Javascript error dropdowns.js (by @brian-labelle) + * [magento/magento2#15512](https://github.com/magento/magento2/pull/15512) -- Fixes in ui module (by @mhauri) + * [magento/magento2#15515](https://github.com/magento/magento2/pull/15515) -- [fix] dynamical assigned property in webapi (by @mhauri) + * [magento/magento2#15459](https://github.com/magento/magento2/pull/15459) -- [Resolved : UI Component listing action column outside of screen when… (by @hitesh-wagento) + * [magento/magento2#15468](https://github.com/magento/magento2/pull/15468) -- Issue 15467 where a configuration sku gets deleted but is still saved… (by @jonshipman) + * [magento/magento2#15514](https://github.com/magento/magento2/pull/15514) -- Fix method name (typo) (by @avoelkl) + * [magento/magento2#15517](https://github.com/magento/magento2/pull/15517) -- Use stored value of method instead of calling same method again. (by @saurabh-aureate) + * [magento/magento2#15519](https://github.com/magento/magento2/pull/15519) -- Typo correction (by @saurabh-aureate) + * [magento/magento2#15552](https://github.com/magento/magento2/pull/15552) -- Remove extra space and format the code in translation file (by @saurabh-aureate) + * [magento/magento2#15549](https://github.com/magento/magento2/pull/15549) -- Fixed typo error (by @vgelani) + * [magento/magento2#15097](https://github.com/magento/magento2/pull/15097) -- Add field to filter to collection (by @dverkade) + * [magento/magento2#15305](https://github.com/magento/magento2/pull/15305) -- chore: remove extraneous cursor property (by @DanielRuf) + * [magento/magento2#15477](https://github.com/magento/magento2/pull/15477) -- Variant product image in sidebar wishlist block (by @kishanpatadia) + * [magento/magento2#15598](https://github.com/magento/magento2/pull/15598) -- [BUGFIX] #15564 Generated admin API token expires immediately (by @krukas) + * [magento/magento2#15602](https://github.com/magento/magento2/pull/15602) -- set correct annotation (by @sanjay-wagento) + * [magento/magento2#13328](https://github.com/magento/magento2/pull/13328) -- Add indexes to timestamp field in oauth_nonce (by @KarlDeux) + * [magento/magento2#15349](https://github.com/magento/magento2/pull/15349) -- Resolve Knockout non-unique elements id in console error (by @neeta-wagento) + * [magento/magento2#15594](https://github.com/magento/magento2/pull/15594) -- Remove extra semicolon from the files (by @saurabh-aureate) + * [magento/magento2#15585](https://github.com/magento/magento2/pull/15585) -- Fix #13415 : Duplicated elements id (by @julienanquetil) + * [magento/magento2#15615](https://github.com/magento/magento2/pull/15615) -- [Backport] Removed comma(,) from translate attribute (by @dmytro-ch) + * [magento/magento2#15621](https://github.com/magento/magento2/pull/15621) -- fix typo for setCateroryIds (by @neeta-wagento) + * [magento/magento2#15645](https://github.com/magento/magento2/pull/15645) -- [Resolved : Menu widget submenu alignment #7897] (by @hitesh-wagento) + * [magento/magento2#15566](https://github.com/magento/magento2/pull/15566) -- Fixxes #15565 (by @EliasKotlyar) + * [magento/magento2#15715](https://github.com/magento/magento2/pull/15715) -- [BACKPORT 2.2 #15695] Fixed a couple of typos (by @dverkade) + * [magento/magento2#15718](https://github.com/magento/magento2/pull/15718) -- [Backport 2.2] Fixed return type of wishlist's getImageData in DocBlock (by @rogyar) + * [magento/magento2#15365](https://github.com/magento/magento2/pull/15365) -- Trim username on customer account login page (by @dankhrapiyush) + * [magento/magento2#15485](https://github.com/magento/magento2/pull/15485) -- fix: support multiple minisearch widget instances (by @DanielRuf) + * [magento/magento2#15614](https://github.com/magento/magento2/pull/15614) -- [Backport] Fixed product tier pricing pagination issue in admin (by @dmytro-ch) + * [magento/magento2#15765](https://github.com/magento/magento2/pull/15765) -- check if order data is available to incl ec (by @torhoehn) + * [magento/magento2#12314](https://github.com/magento/magento2/pull/12314) -- Prevent layout cache corruption in edge case (by @scottsb) + * [magento/magento2#15539](https://github.com/magento/magento2/pull/15539) -- FIX fo rissue #15510 - First PDF download / export after login (by @phoenix128) + * [magento/magento2#15694](https://github.com/magento/magento2/pull/15694) -- [Backport 2.2] Fix minor issues in ui export converter classes (by @dmytro-ch) + * [magento/magento2#15734](https://github.com/magento/magento2/pull/15734) -- [Resolved : Styling select by changing less variables in Luma theme (by @hitesh-wagento) + * [magento/magento2#15782](https://github.com/magento/magento2/pull/15782) -- [Backport 2.2]Fix translations (by @VitaliyBoyko) + * [magento/magento2#15791](https://github.com/magento/magento2/pull/15791) -- Removed unused class from forms less file. (by @chirag-wagento) + * [magento/magento2#15789](https://github.com/magento/magento2/pull/15789) -- Removed unnecessary css. (by @chirag-wagento) + * [magento/magento2#15795](https://github.com/magento/magento2/pull/15795) -- Remove double semicolon from the style sheets. (by @NamrataChangani) + * [magento/magento2#15825](https://github.com/magento/magento2/pull/15825) -- Fixed set template syntax issue (by @NamrataChangani) + * [magento/magento2#15840](https://github.com/magento/magento2/pull/15840) -- [Backport] Fix for issue 911 found on MSI project - Cannot read property source_… #14 (by @chirag-wagento) + * [magento/magento2#15854](https://github.com/magento/magento2/pull/15854) -- [Backport 2.2] Fixed return type hinting in DocBlocks for Wishlist module (by @rogyar) + * [magento/magento2#15871](https://github.com/magento/magento2/pull/15871) -- chore: remove unused less import (by @DanielRuf) + * [magento/magento2#12626](https://github.com/magento/magento2/pull/12626) -- Fixed condition with usage "hack" isPostRequest method (by @pusachev) + * [magento/magento2#12935](https://github.com/magento/magento2/pull/12935) -- Add Ability To Separate Frontend / Adminhtml in New Relic (by @mpchadwick) + * [magento/magento2#15019](https://github.com/magento/magento2/pull/15019) -- [TASK] Solve issue #14966 - Disabling product does not remove it from… (by @lewisvoncken) + * [magento/magento2#15297](https://github.com/magento/magento2/pull/15297) -- Fix typo in test method's name and test result (by @dmytro-ch) + * [magento/magento2#15320](https://github.com/magento/magento2/pull/15320) -- issue/14056 - Coupon API not working for guest user (by @Hypo386) + * [magento/magento2#15322](https://github.com/magento/magento2/pull/15322) -- ISSUE-11477 - fixed Swagger response for searchCriteria (by @idziakjakub) + * [magento/magento2#15661](https://github.com/magento/magento2/pull/15661) -- Fixed Wrong order amount on dashboard on Last orders listing when having more than one website with different currencies (by @ankurvr) + * [magento/magento2#15689](https://github.com/magento/magento2/pull/15689) -- #15588 Fixed incorrect image urls in multistore xml sitemap (by @StevenGuapaBV) + * [magento/magento2#15826](https://github.com/magento/magento2/pull/15826) -- Add missing table aliases to fields mapping for Customer Group filter… (by @Radio) + * [magento/magento2#13862](https://github.com/magento/magento2/pull/13862) -- Add compare list link to success message after adding a product (by @avstudnitz) + * [magento/magento2#15888](https://github.com/magento/magento2/pull/15888) -- Correct typo correction js files (by @saurabh-aureate) + * [magento/magento2#15892](https://github.com/magento/magento2/pull/15892) -- Wrong annotation in _toOptionArray : lib\internal\Magento\Framework\D… (by @NamrataChangani) + * [magento/magento2#15891](https://github.com/magento/magento2/pull/15891) -- Remove parameter from method calling (by @saurabh-aureate) + * [magento/magento2#15878](https://github.com/magento/magento2/pull/15878) -- [Resolved : limiter float too generic] (by @hitesh-wagento) + * [magento/magento2#15907](https://github.com/magento/magento2/pull/15907) -- fixed word typo (by @ledian-hymetllari) + * [magento/magento2#15914](https://github.com/magento/magento2/pull/15914) -- [Resolved : Changing @tab-content__border variable has no effect in B… (by @hitesh-wagento) + * [magento/magento2#15936](https://github.com/magento/magento2/pull/15936) -- #15308 removed extraneous margin (by @StevenGuapaBV) + * [magento/magento2#15991](https://github.com/magento/magento2/pull/15991) -- fix for dropdown toggle icon in cart (by @Karlasa) + * [magento/magento2#16001](https://github.com/magento/magento2/pull/16001) -- Extend default config instead overwrite (by @likemusic) + * [magento/magento2#16002](https://github.com/magento/magento2/pull/16002) -- bugfix checkout page cart icon color (by @Karlasa) + * [magento/magento2#16023](https://github.com/magento/magento2/pull/16023) -- [Backport 2.2] Wishlist: Remove unnecessary parameter from invoking toHtml() method (by @rogyar) + * [magento/magento2#16048](https://github.com/magento/magento2/pull/16048) -- fix: prevent inline-block issue in name form due to space and font-size (by @DanielRuf) + * [magento/magento2#15647](https://github.com/magento/magento2/pull/15647) -- [Backport] Fixes in widget component (by @mhauri) + * [magento/magento2#15811](https://github.com/magento/magento2/pull/15811) -- [Correct code formatting] (by @hitesh-wagento) + * [magento/magento2#15893](https://github.com/magento/magento2/pull/15893) -- Solve overlapping Issue on every Home page & category page of Hot Sel… (by @chirag-wagento) + * [magento/magento2#15902](https://github.com/magento/magento2/pull/15902) -- Complete the fix for cache issue due to the currencies with no symbol (by @dmytro-ch) + * [magento/magento2#15913](https://github.com/magento/magento2/pull/15913) -- [Backport] Fixes in catalog component blocks [2.3-develop] (by @chirag-wagento) + * [magento/magento2#16012](https://github.com/magento/magento2/pull/16012) -- Fix issue #15832 (by @Karlasa) + * [magento/magento2#16010](https://github.com/magento/magento2/pull/16010) -- Small refactoring to better code readability (by @likemusic) + * [magento/magento2#16053](https://github.com/magento/magento2/pull/16053) -- Improve retrieval of first array element (by @thomas-blackbird) + * [magento/magento2#16052](https://github.com/magento/magento2/pull/16052) -- Disabling sorting in glob and scandir functions for better performance (by @lfluvisotto) + * [magento/magento2#16065](https://github.com/magento/magento2/pull/16065) -- [Backport 2.2] Added unit test for captcha string resolver (by @rogyar) + * [magento/magento2#16080](https://github.com/magento/magento2/pull/16080) -- Adding support for variadic arguments fro method in generated proxy c… (by @vgelani) + * [magento/magento2#15344](https://github.com/magento/magento2/pull/15344) -- FIXED - appended payment code to ID field to make it unique (by @rakesh-gangani) + * [magento/magento2#15534](https://github.com/magento/magento2/pull/15534) -- magento/magento2#15255 unlock customer after password reset (by @andreagaspardo) + * [magento/magento2#15604](https://github.com/magento/magento2/pull/15604) -- [Backport] Removed unused translation for comment tag (by @rogyar) + * [magento/magento2#15870](https://github.com/magento/magento2/pull/15870) -- chore: prefer woff and woff2 (by @DanielRuf) + * [magento/magento2#15272](https://github.com/magento/magento2/pull/15272) -- DOBISSUE date format changed after customer tries to register with sa… (by @KaushikChavda) + * [magento/magento2#15993](https://github.com/magento/magento2/pull/15993) -- Correct return type of methods and typo correction. (by @saurabh-aureate) + * [magento/magento2#16082](https://github.com/magento/magento2/pull/16082) -- Navigation dropdown caret icon. (by @tejash-wagento) + * [magento/magento2#16091](https://github.com/magento/magento2/pull/16091) -- Replaced @escapeNotVerified annotations (by @istiahailo) + * [magento/magento2#16144](https://github.com/magento/magento2/pull/16144) -- array_push(...) calls behaving as '$array[] = ...', $array[] = works faster than invoking functions in PHP (by @lfluvisotto) + * [magento/magento2#16160](https://github.com/magento/magento2/pull/16160) -- [Backport 2.2] Captcha: Added unit test for CheckRegisterCheckoutObserver (by @rogyar) + * [magento/magento2#16181](https://github.com/magento/magento2/pull/16181) -- Fixed syntax for before-after operators in less files. (by @NamrataChangani) + * [magento/magento2#16182](https://github.com/magento/magento2/pull/16182) -- Removed double occurrence of keywords from sentences. (by @NamrataChangani) + * [magento/magento2#16183](https://github.com/magento/magento2/pull/16183) -- Correct sentence in comment section in class file. (by @NamrataChangani) + * [magento/magento2#16190](https://github.com/magento/magento2/pull/16190) -- #16079 translation possibility for moreButtonText (by @Karlasa) + * [magento/magento2#16194](https://github.com/magento/magento2/pull/16194) -- magento/magento2#16184: Fix type error in payment void method (by @xpoback) + * [magento/magento2#16192](https://github.com/magento/magento2/pull/16192) -- Trim email address in customer account create and login form (by @dankhrapiyush) + * [magento/magento2#16206](https://github.com/magento/magento2/pull/16206) -- Declare module namespace before template path name(Magento_Sales::order/info.phtml). (by @ronak2ram) + * [magento/magento2#16211](https://github.com/magento/magento2/pull/16211) -- Setting deploy mode to production with --skip-compilation flag should not clear generated code (by @platformvaimo) + * [magento/magento2#16213](https://github.com/magento/magento2/pull/16213) -- Fix for #8222 (by @0m3r) + * [magento/magento2#16216](https://github.com/magento/magento2/pull/16216) -- 15863: [Forwardport] Refactored javascript code of admin notification modal popup (by @IvanPletnyov) + * [magento/magento2#16220](https://github.com/magento/magento2/pull/16220) -- Incorrect value NULL was passed to DataObject constructor. It caused … (by @Jakhotiya) + * [magento/magento2#16230](https://github.com/magento/magento2/pull/16230) -- Correct spelling mistakes in Model and library files. (by @NamrataChangani) + * [magento/magento2#15521](https://github.com/magento/magento2/pull/15521) -- Move breadcrumb json configuration to viewmodel (by @diedburn) + * [magento/magento2#15532](https://github.com/magento/magento2/pull/15532) -- FIX for issue #15501 - M2.2.4 missing meta title tag and doesn't show… (by @phoenix128) + * [magento/magento2#15629](https://github.com/magento/magento2/pull/15629) -- Fix #15627: Product order in category changed in Magento 2.2.4 (by @dverkade) + * [magento/magento2#15637](https://github.com/magento/magento2/pull/15637) -- Create ability to set is_visible_on_front to order status history comment (by @markoshust) + * [magento/magento2#16141](https://github.com/magento/magento2/pull/16141) -- Fix case mismatch call (class/method) (by @lfluvisotto) + * [magento/magento2#16215](https://github.com/magento/magento2/pull/16215) -- PHPDoc (by @lfluvisotto) + * [magento/magento2#16247](https://github.com/magento/magento2/pull/16247) -- Fixed typo error (by @vgelani) + * [magento/magento2#16240](https://github.com/magento/magento2/pull/16240) -- Removed double occurrence of 'it' from sentences. (by @NamrataChangani) + * [magento/magento2#16250](https://github.com/magento/magento2/pull/16250) -- Update Israeli ZIP code mask: 7 digits instead of 5 (by @itaymesh) + * [magento/magento2#12771](https://github.com/magento/magento2/pull/12771) -- magento/magento2#12695: Unable to change attribute type from swatch (by @eugene-shab) + * [magento/magento2#15774](https://github.com/magento/magento2/pull/15774) -- [Backport] Fix issue #14895 - Change Password warning message appear two times (by @sanjay-wagento) + * [magento/magento2#15872](https://github.com/magento/magento2/pull/15872) -- Fix missing PHPDocs hinting for AdvancedPricingImportExport module (by @dmytro-ch) + * [magento/magento2#15845](https://github.com/magento/magento2/pull/15845) -- Update webapi.xml to fix typo (by @mhaack) + * [magento/magento2#15929](https://github.com/magento/magento2/pull/15929) -- Postpone instantiation of session config by using a proxy (by @fmarangi) + * [magento/magento2#16286](https://github.com/magento/magento2/pull/16286) -- Add UpdatedAtListProvider to NotSyncedDataProvider for invoice grid (by @JeroenVanLeusden) + * [magento/magento2#16300](https://github.com/magento/magento2/pull/16300) -- Captcha: Added integration test for checking admin login attempts cleanup (by @rogyar) + * [magento/magento2#16306](https://github.com/magento/magento2/pull/16306) -- Captcha: Added integration tests for checking customer login attempts cleanup (by @rogyar) + * [magento/magento2#13509](https://github.com/magento/magento2/pull/13509) -- Use constant time string comparison in FormKey validator (by @p0pr0ck5) + * [magento/magento2#15339](https://github.com/magento/magento2/pull/15339) -- Fixed set template syntax in block file (by @NamrataChangani) + * [magento/magento2#16093](https://github.com/magento/magento2/pull/16093) -- When searching for the title if search for all the segments that has … (by @rsantellan) + * [magento/magento2#16217](https://github.com/magento/magento2/pull/16217) -- Admin controller product set save refactor (by @AnshuMishra17) + * [magento/magento2#16279](https://github.com/magento/magento2/pull/16279) -- MAGETWO-61209: Backport - Fixed issue #7379 with mage/calendar when setting `numberOfM… (by @vasilii-b) + * [magento/magento2#16333](https://github.com/magento/magento2/pull/16333) -- Add metadata title in unit test (by @slackerzz) + * [magento/magento2#16379](https://github.com/magento/magento2/pull/16379) -- [Changed password placeholder text in checkout page] (by @hitesh-wagento) + * [magento/magento2#16389](https://github.com/magento/magento2/pull/16389) -- [Backport 2.2] Use correct error message for duplicate error key in product import (by @gelanivishal) + * [magento/magento2#15464](https://github.com/magento/magento2/pull/15464) -- Fix "Confirmation request" email is sent on customer's newsletter unsubscribe action (by @nuzil) + * [magento/magento2#16009](https://github.com/magento/magento2/pull/16009) -- fix: change "My Dashboard" to "My Account", fixes #16007 (by @DanielRuf) + * [magento/magento2#16086](https://github.com/magento/magento2/pull/16086) -- Fix false cache_lifetime usage in xml layouts (by @yuriyDne) + * [magento/magento2#16372](https://github.com/magento/magento2/pull/16372) -- Wishlist update item issue (by @eduard13) + * [magento/magento2#16386](https://github.com/magento/magento2/pull/16386) -- Login with wishlist raise report after logout. (by @swnsma) + * [magento/magento2#16438](https://github.com/magento/magento2/pull/16438) -- Credit memo email template file: fixing incorrect object type error (by @JosephMaxwell) + * [magento/magento2#16458](https://github.com/magento/magento2/pull/16458) -- Add missing showInStore attributes (by @aschrammel) + * [magento/magento2#16477](https://github.com/magento/magento2/pull/16477) -- Fix for #14593 (second try #16431) (by @0m3r) + * [magento/magento2#15543](https://github.com/magento/magento2/pull/15543) -- Enhancements to module:status command (by @jissereitsma) + * [magento/magento2#16472](https://github.com/magento/magento2/pull/16472) -- Improve comment message (by @gelanivishal) + * [magento/magento2#16489](https://github.com/magento/magento2/pull/16489) -- Properly hyphenate "third-party" (by @erikhansen) + * [magento/magento2#16495](https://github.com/magento/magento2/pull/16495) -- Fixed spell issue in library (by @sanganinamrata) + * [magento/magento2#15909](https://github.com/magento/magento2/pull/15909) -- [Backport] Fix for Wrong price amount on product page (by @gelanivishal) + * [magento/magento2#16090](https://github.com/magento/magento2/pull/16090) -- Added and removed unnecessary translation for label/comment tags (by @Yogeshks) + * [magento/magento2#16393](https://github.com/magento/magento2/pull/16393) -- Rework for PR #16222 . (by @phoenix128) + * [magento/magento2#16517](https://github.com/magento/magento2/pull/16517) -- Fix responsive tables showing broken heading (by @LordZardeck) + * [magento/magento2#16524](https://github.com/magento/magento2/pull/16524) -- Clear converted file data (by @gelanivishal) + * [magento/magento2#16549](https://github.com/magento/magento2/pull/16549) -- Corrected function comment (by @sanganinamrata) + * [magento/magento2#16553](https://github.com/magento/magento2/pull/16553) -- Update mini-cart checkout translations (by @JeroenVanLeusden) + * [magento/magento2#16557](https://github.com/magento/magento2/pull/16557) -- Updated SynonymGroup.xml (by @sanganinamrata) + * [magento/magento2#16576](https://github.com/magento/magento2/pull/16576) -- [Backport] Declare module namespace before template path name (by @mageprince) + * [magento/magento2#16581](https://github.com/magento/magento2/pull/16581) -- Removed double occurrences from files. (by @sanganinamrata) + * [magento/magento2#16143](https://github.com/magento/magento2/pull/16143) -- Variable as a method parameter might be overridden by the loop (by @lfluvisotto) + * [magento/magento2#16254](https://github.com/magento/magento2/pull/16254) -- Customer group extension attributes not carried over on save (by @JosephMaxwell) + * [magento/magento2#16474](https://github.com/magento/magento2/pull/16474) -- [FIX] dev:di:info duplicates plugin info (by @Coderimus) + * [magento/magento2#16564](https://github.com/magento/magento2/pull/16564) -- Trim email address in newsletter, forgot password, checkout login and email to a friend form (by @dankhrapiyush) + * [magento/magento2#11554](https://github.com/magento/magento2/pull/11554) -- Improve attribute checking (by @FreekVandeursen) + * [magento/magento2#16271](https://github.com/magento/magento2/pull/16271) -- Covered Magento\Checkout\Model\Cart\CollectQuote by Unit Test (by @eduard13) + * [magento/magento2#16540](https://github.com/magento/magento2/pull/16540) -- Fix zero price simple failed to resolve as default (by @torreytsui) + * [magento/magento2#16530](https://github.com/magento/magento2/pull/16530) -- Fixed widget template rendering issue while rewriting widget block. (by @sanganinamrata) + * [magento/magento2#16559](https://github.com/magento/magento2/pull/16559) -- fix icon color variable naming (by @Karlasa) + * [magento/magento2#16584](https://github.com/magento/magento2/pull/16584) -- [Backport] Remove the timezone from the date when retrieving the current month from a UTC timestamp. (by @mageprince) + * [magento/magento2#16590](https://github.com/magento/magento2/pull/16590) -- Fix of invalid price for integer currencies when amount less than group size (by @vkublytskyi) + * [magento/magento2#16626](https://github.com/magento/magento2/pull/16626) -- [Backport] Fix type hints and add undefined property in Webapi [2.3-develop] (by @mageprince) + * [magento/magento2#16644](https://github.com/magento/magento2/pull/16644) -- Removed double occurrences from Magento modules. (by @sanganinamrata) + * [magento/magento2#16645](https://github.com/magento/magento2/pull/16645) -- Updated Magento_Newsletter's block file. (by @sanganinamrata) + * [magento/magento2#16646](https://github.com/magento/magento2/pull/16646) -- Corrected Magento_Framework's test xml file. (by @sanganinamrata) + * [magento/magento2#16669](https://github.com/magento/magento2/pull/16669) -- Prevent servers being slammed from many search suggestion requests (by @LordZardeck) + * [magento/magento2#16678](https://github.com/magento/magento2/pull/16678) -- Improved code and remove unnecessary space (by @ronak2ram) + * [magento/magento2#16675](https://github.com/magento/magento2/pull/16675) -- Prevent running SQL query on every item in the database when the quote is empty (by @LordZardeck) + * [magento/magento2#16689](https://github.com/magento/magento2/pull/16689) -- Added 'title' attribute to 'a' link. (by @sanganinamrata) + * [magento/magento2#16690](https://github.com/magento/magento2/pull/16690) -- Added translation function for Magento_Braintree module's template file. (by @sanganinamrata) + * [magento/magento2#16691](https://github.com/magento/magento2/pull/16691) -- Added 'title' attribute to 'img' tag in knockout template files. (by @sanganinamrata) + * [magento/magento2#16711](https://github.com/magento/magento2/pull/16711) -- Fixed typo in SynonymGroupRepositoryInterface (by @AnshuMishra17) + * [magento/magento2#15479](https://github.com/magento/magento2/pull/15479) -- Fix newsletter subscription behaviour for registered customer. (by @nuzil) + * [magento/magento2#16175](https://github.com/magento/magento2/pull/16175) -- Admin tabs order not working properly (by @tiagosampaio) + * [magento/magento2#16408](https://github.com/magento/magento2/pull/16408) -- Fixed type hints and docs for Downloadable Samples block (by @phoenix-bjoern) + * [magento/magento2#16414](https://github.com/magento/magento2/pull/16414) -- Fixing a Mistype Error (by @tiagosampaio) + * [magento/magento2#16554](https://github.com/magento/magento2/pull/16554) -- Fix docBlock for hasInvoices(), hasShipments(), hasCreditmemos() (by @nuzil) + * [magento/magento2#16566](https://github.com/magento/magento2/pull/16566) -- Smallest codestyle fix in Option/Type/Text.php (by @likemusic) + * [magento/magento2#16680](https://github.com/magento/magento2/pull/16680) -- Captcha: Added unit test for CheckGuestCheckoutObserver (by @rogyar) + * [magento/magento2#16693](https://github.com/magento/magento2/pull/16693) -- 'Allowed Countries' - get countries for scope 'default'. (by @swnsma) + * [magento/magento2#16685](https://github.com/magento/magento2/pull/16685) -- Updated security issues details (by @quisse) + * [magento/magento2#16704](https://github.com/magento/magento2/pull/16704) -- Add sort order to user agent rules table headers (by @JRhyne) + * [magento/magento2#16717](https://github.com/magento/magento2/pull/16717) -- Removed space before ending sentence. (by @sanganinamrata) + * [magento/magento2#16716](https://github.com/magento/magento2/pull/16716) -- fix _utilities.less font-size issue (by @Karlasa) + * [magento/magento2#16721](https://github.com/magento/magento2/pull/16721) -- Corrected return message from ProductRuleTest.php (by @sanganinamrata) + * [magento/magento2#16732](https://github.com/magento/magento2/pull/16732) -- Resolved : no navigation-level0-item__hover__color #15848 (by @hitesh-wagento) + * [magento/magento2#16726](https://github.com/magento/magento2/pull/16726) -- [Backport 2.3] Add spelling correction: formatedPrice to formattedPrice (by @arnoudhgz) + * [magento/magento2#13569](https://github.com/magento/magento2/pull/13569) -- Correctly save Product Custom Option values (by @JeroenVanLeusden) + * [magento/magento2#14379](https://github.com/magento/magento2/pull/14379) -- [Backport 2.2] Issue 14351: Product import doesn't change `Enable Qty Increments` field (by @simpleadm) + * [magento/magento2#16599](https://github.com/magento/magento2/pull/16599) -- Fixed backwards incompatible change to Transport variable event parameters (by @gwharton) + * [magento/magento2#16748](https://github.com/magento/magento2/pull/16748) -- Remove commented code & remove space (by @ronak2ram) + * [magento/magento2#16766](https://github.com/magento/magento2/pull/16766) -- fix #16764 Rating Star issue on Product detail Page. (by @Karlasa) + * [magento/magento2#16821](https://github.com/magento/magento2/pull/16821) -- Code improvement (by @mage2pratik) + * [magento/magento2#16831](https://github.com/magento/magento2/pull/16831) -- [Backport] Magento_Sales integration tests: fix invoice_list fixture var tags (by @ronak2ram) + * [magento/magento2#16435](https://github.com/magento/magento2/pull/16435) -- Add generated code to the psr-0 autoloader section so when optimizing… (by @hostep) + * [magento/magento2#16595](https://github.com/magento/magento2/pull/16595) -- Trim issue on customer confirmation form (by @gelanivishal) + * [magento/magento2#16845](https://github.com/magento/magento2/pull/16845) -- [Backport] Add @api annotation to Filter Group & Sort Order (by @ronak2ram) + * [magento/magento2#16861](https://github.com/magento/magento2/pull/16861) -- Add Confirm Modal Width (by @hryvinskyi) + * [magento/magento2#16872](https://github.com/magento/magento2/pull/16872) -- Remove extra spaces from Magento/Ui (by @ronak2ram) + * [magento/magento2#16873](https://github.com/magento/magento2/pull/16873) -- Improve "Invalid country code" error message on tax import (by @adampmoss) + * [magento/magento2#16916](https://github.com/magento/magento2/pull/16916) -- [Backport] Issue 5316 (by @ronak2ram) + * [magento/magento2#16579](https://github.com/magento/magento2/pull/16579) -- removed _responsive.less import from gallery.less (by @Karlasa) + * [magento/magento2#16707](https://github.com/magento/magento2/pull/16707) -- Update regex in ControllerAclTest (by @aleron75) + * [magento/magento2#16785](https://github.com/magento/magento2/pull/16785) -- Avoid undefined index warning when using uppercase reserved word (by @FreekVandeursen) + * [magento/magento2#16841](https://github.com/magento/magento2/pull/16841) -- Clean code (by @GraysonChiang) + * [magento/magento2#16840](https://github.com/magento/magento2/pull/16840) -- Log when Magento is in maintenance mode (by @Ethan3600) + * [magento/magento2#16851](https://github.com/magento/magento2/pull/16851) -- Remove direct use of object manager (by @AnshuMishra17) + * [magento/magento2#16882](https://github.com/magento/magento2/pull/16882) -- Remove duplicated string. (by @likemusic) + * [magento/magento2#16880](https://github.com/magento/magento2/pull/16880) -- Array short syntax (by @lfluvisotto) + * [magento/magento2#16889](https://github.com/magento/magento2/pull/16889) -- Microrefactoring in product gallery block helper (by @likemusic) + * [magento/magento2#16891](https://github.com/magento/magento2/pull/16891) -- Remove commented code (by @mage2pratik) + * [magento/magento2#16890](https://github.com/magento/magento2/pull/16890) -- hide cookie notice instead of reloading site (by @torhoehn) + * [magento/magento2#16899](https://github.com/magento/magento2/pull/16899) -- Fixing annotations for some methods. (by @tiagosampaio) + * [magento/magento2#16903](https://github.com/magento/magento2/pull/16903) -- Fixes white color coding standard. (by @chirag-wagento) + * [magento/magento2#16924](https://github.com/magento/magento2/pull/16924) -- Replacing Usage of Deprecated Methods for Message Manager. (by @tiagosampaio) + * [magento/magento2#16937](https://github.com/magento/magento2/pull/16937) -- Revert changing file permissions in #15144 (by @ihor-sviziev) + * [magento/magento2#16928](https://github.com/magento/magento2/pull/16928) -- Reduce lengthy code of LoginPost (by @GlennCheng) + * [magento/magento2#16978](https://github.com/magento/magento2/pull/16978) -- Wrong namespace defined in compare.phtml (by @ronak2ram) + * [magento/magento2#16977](https://github.com/magento/magento2/pull/16977) -- Removed double occurrences from Magento modules (by @mage2pratik) + * [magento/magento2#16980](https://github.com/magento/magento2/pull/16980) -- Fixed a couple of spelling mistakes (by @mage2pratik) + * [magento/magento2#17002](https://github.com/magento/magento2/pull/17002) -- [Backport] Remove unused comments from _initDiscount() function (by @mageprince) + * [magento/magento2#16560](https://github.com/magento/magento2/pull/16560) -- Admin user auth controller refactor (by @AnshuMishra17) + * [magento/magento2#16863](https://github.com/magento/magento2/pull/16863) -- Configurable Product with Only Size Options (No Color Options) Shows … (by @ronak2ram) + * [magento/magento2#16883](https://github.com/magento/magento2/pull/16883) -- Update nginx.config.sample to exclude php5-fpm (by @sean-wcb) + * [magento/magento2#16900](https://github.com/magento/magento2/pull/16900) -- Add Clean Code (by @hryvinskyi) + * [magento/magento2#16921](https://github.com/magento/magento2/pull/16921) -- Slight Changes to Code (by @tiagosampaio) + * [magento/magento2#16946](https://github.com/magento/magento2/pull/16946) -- Delete all unused imports of lib/internal/Magento (by @osrecio) + * [magento/magento2#16965](https://github.com/magento/magento2/pull/16965) -- fix: add hasrequired notice for create account form and password forg… (by @DanielRuf) + * [magento/magento2#17019](https://github.com/magento/magento2/pull/17019) -- Fixes Black color coding standard. (by @chirag-wagento) + * [magento/magento2#16952](https://github.com/magento/magento2/pull/16952) -- Issue 8131 - Use Redirect Factory to Allow Error Message Display on Advanced Search (by @brobie) + * [magento/magento2#16959](https://github.com/magento/magento2/pull/16959) -- Resolved : Mobile device style groups incorrect order (by @tejash-wagento) + * [magento/magento2#16971](https://github.com/magento/magento2/pull/16971) -- Fix misprint ('_requesetd' > '_requested') (by @likemusic) + * [magento/magento2#16988](https://github.com/magento/magento2/pull/16988) -- Correct return type of methods (by @mage2pratik) + * [magento/magento2#16984](https://github.com/magento/magento2/pull/16984) -- Categories > Left menu > Item title space fix (by @rafaelstz) + * [magento/magento2#17006](https://github.com/magento/magento2/pull/17006) -- Adjust page-main container height for sticky footer; fixes #15118 (by @denistrator) + * [magento/magento2#17027](https://github.com/magento/magento2/pull/17027) -- Remove spaces around amount span. (by @likemusic) + * [magento/magento2#17063](https://github.com/magento/magento2/pull/17063) -- Added unit test for DB model in backup module (by @rogyar) + * [magento/magento2#17077](https://github.com/magento/magento2/pull/17077) -- Remove commented code (by @mage2pratik) + * [magento/magento2#17097](https://github.com/magento/magento2/pull/17097) -- [Backport] Magento UI - Cleanup of undefined mixins parameters and usage of "leaking" variables scope (by @mageprince) + * [magento/magento2#17099](https://github.com/magento/magento2/pull/17099) -- [Backport] Fix app/code/Magento/Backend/Block/Media/Uploader.php getConfigJson() method (by @mageprince) + * [magento/magento2#17098](https://github.com/magento/magento2/pull/17098) -- [Backport] testGetIgnoresFirstSlash method in ObjectManagerTest has lost its purpose (dummy test) (by @mageprince) + * [magento/magento2#17114](https://github.com/magento/magento2/pull/17114) -- Disable autocomplete for captcha inputs (by @denistrator) + * [magento/magento2#17129](https://github.com/magento/magento2/pull/17129) -- Update template.js (by @angelomaragna) + * [magento/magento2#17137](https://github.com/magento/magento2/pull/17137) -- GoogleAnalytics: Added unit test for order success observer (by @rogyar) + * [magento/magento2#17151](https://github.com/magento/magento2/pull/17151) -- Fixed a grammatical error on the vault tooltip (by @kreativedev) + * [magento/magento2#15687](https://github.com/magento/magento2/pull/15687) -- Fixes for #15393 (by @simonjanguapa) + * [magento/magento2#16401](https://github.com/magento/magento2/pull/16401) -- Remove PDF files after generation (by @rogyar) + * [magento/magento2#16468](https://github.com/magento/magento2/pull/16468) -- #16273: Fix bug in method getUrlInStore() of product model (by @vasilii-b) + * [magento/magento2#17124](https://github.com/magento/magento2/pull/17124) -- Using interface instead of model directly (by @woutersamaey) + * [magento/magento2#17163](https://github.com/magento/magento2/pull/17163) -- Add meta NOINDEX,NOFOLLOW to admin scope to avoid accidental crawling (by @cmtickle) + * [magento/magento2#17035](https://github.com/magento/magento2/pull/17035) -- Replaced deprecated methods. (by @tiagosampaio) + * [magento/magento2#17227](https://github.com/magento/magento2/pull/17227) -- Replaced deprecated methods. (by @tiagosampaio) + +2.2.5 +============= +* GitHub issues: + * [#7720](https://github.com/magento/magento2/issues/7720) -- Product Repository saves attribute values for existing product always on "Default Store Level" (fixed in [magento-engcom/magento2ce#967](https://github.com/magento-engcom/magento2ce/pull/967)) + * [#12186](https://github.com/magento/magento2/issues/12186) -- Custom attributes values not updated (fixed in [magento-engcom/magento2ce#967](https://github.com/magento-engcom/magento2ce/pull/967)) + * [#12395](https://github.com/magento/magento2/issues/12395) -- Custom Magento CLI command has incorrect current store id. (fixed in [magento-engcom/magento2ce#967](https://github.com/magento-engcom/magento2ce/pull/967)) + * [#12792](https://github.com/magento/magento2/issues/12792) -- [2.1.10] No order confirmation email after paying with PayPal Express (fixed in [magento/magento2#13898](https://github.com/magento/magento2/pull/13898)) + * [#13778](https://github.com/magento/magento2/issues/13778) -- Braintree Paypal Method No Order Confirmation Email Sent (fixed in [magento/magento2#13898](https://github.com/magento/magento2/pull/13898)) + * [#13556](https://github.com/magento/magento2/issues/13556) -- Sorting in Product Listing via Quantity not work (fixed in [magento/magento2#13691](https://github.com/magento/magento2/pull/13691)) + * [#13769](https://github.com/magento/magento2/issues/13769) -- Order Email Sender (fixed in [magento/magento2#13878](https://github.com/magento/magento2/pull/13878)) + * [#12405](https://github.com/magento/magento2/issues/12405) -- Magento 2.2.1 - Impossible to create a new storeview (fixed in [magento/magento2#13943](https://github.com/magento/magento2/pull/13943)) + * [#12421](https://github.com/magento/magento2/issues/12421) -- 'Requested store is not found' when trying to create a store view in the back end (fixed in [magento/magento2#13943](https://github.com/magento/magento2/pull/13943)) + * [#13804](https://github.com/magento/magento2/issues/13804) -- Invoice grid shows wrong subtotal for partial items invoice. It shows order's subtotal instead if invoiced item's subtotal (fixed in [magento/magento2#13855](https://github.com/magento/magento2/pull/13855)) + * [#7372](https://github.com/magento/magento2/issues/7372) -- Product images gets removed from "Images And Videos" after validation alert. (fixed in [magento-engcom/magento2ce#1140](https://github.com/magento-engcom/magento2ce/pull/1140)) + * [#13385](https://github.com/magento/magento2/issues/13385) -- SQL query is printed into browser in case of exception (fixed in [magento/magento2#13607](https://github.com/magento/magento2/pull/13607)) + * [#13117](https://github.com/magento/magento2/issues/13117) -- Swatch Attribute is not getting save while deleting a swatch row with empty admin scope text (fixed in [magento/magento2#13717](https://github.com/magento/magento2/pull/13717)) + * [#3483](https://github.com/magento/magento2/issues/3483) -- Default country selection issue while creating new customer from backend (fixed in [magento/magento2#13024](https://github.com/magento/magento2/pull/13024)) + * [#13231](https://github.com/magento/magento2/issues/13231) -- Default State or Province is not pre-selected in the Estimate Shipping and Tax (fixed in [magento-engcom/magento2ce#1258](https://github.com/magento-engcom/magento2ce/pull/1258)) + * [#10559](https://github.com/magento/magento2/issues/10559) -- Extending swatch functionality using javascript mixins does not work in Safari and MS Edge (fixed in [magento/magento2#12929](https://github.com/magento/magento2/pull/12929)) + * [#5463](https://github.com/magento/magento2/issues/5463) -- The ability to store passwords using different hashing algorithms is limited (fixed in [magento/magento2#13884](https://github.com/magento/magento2/pull/13884)) + * [#13988](https://github.com/magento/magento2/issues/13988) -- Mini search field looses focus after its JavaScript is initialized (fixed in [magento/magento2#13989](https://github.com/magento/magento2/pull/13989)) + * [#13820](https://github.com/magento/magento2/issues/13820) -- IE11 minicart not updating on configurable product page (ES6) (fixed in [magento/magento2#14105](https://github.com/magento/magento2/pull/14105)) + * [#14010](https://github.com/magento/magento2/issues/14010) -- Why Report Bugs link not open in new tab? (fixed in [magento/magento2#14121](https://github.com/magento/magento2/pull/14121)) + * [#12205](https://github.com/magento/magento2/issues/12205) -- Stock inventory reindex bug (fixed in [magento-engcom/magento2ce#1134](https://github.com/magento-engcom/magento2ce/pull/1134)) + * [#8168](https://github.com/magento/magento2/issues/8168) -- Configurable product on wishlist shows parent image instead variation image (fixed in [magento-engcom/magento2ce#1031](https://github.com/magento-engcom/magento2ce/pull/1031)) + * [#14138](https://github.com/magento/magento2/issues/14138) -- Outdated package after upgrade sjparkinson/static-review is abandoned (fixed in [magento/magento2#14091](https://github.com/magento/magento2/pull/14091)) + * [#14109](https://github.com/magento/magento2/issues/14109) -- `MAX_NUM_COOKIES` doesn't follow the open-closed principle (fixed in [magento/magento2#14128](https://github.com/magento/magento2/pull/14128)) + * [#13704](https://github.com/magento/magento2/issues/13704) -- Category\Collection::joinUrlRewrite should use the store set on the collection (fixed in [magento/magento2#13716](https://github.com/magento/magento2/pull/13716)) + * [#13992](https://github.com/magento/magento2/issues/13992) -- Incorrect phpdoc should be Shipment\Item not Invoice\Item (fixed in [magento/magento2#14303](https://github.com/magento/magento2/pull/14303)) + * [#14089](https://github.com/magento/magento2/issues/14089) -- Malaysian (Malaysia) missing from locale list (fixed in [magento/magento2#14306](https://github.com/magento/magento2/pull/14306)) + * [#7428](https://github.com/magento/magento2/issues/7428) -- Multiline fields in forms have no visible label (fixed in [magento/magento2#14317](https://github.com/magento/magento2/pull/14317)) + * [#10057](https://github.com/magento/magento2/issues/10057) -- Editing order with backordered items results in new order not correctly marking order items as backordered (fixed in [magento/magento2#14327](https://github.com/magento/magento2/pull/14327)) + * [#10700](https://github.com/magento/magento2/issues/10700) -- Magento 2 Admin panel show loading on each page (fixed in [magento/magento2#14361](https://github.com/magento/magento2/pull/14361)) + * [#11930](https://github.com/magento/magento2/issues/11930) -- setup:di:compile's generated cache files inaccessible by the web-server user (fixed in [magento/magento2#14361](https://github.com/magento/magento2/pull/14361)) + * [#14072](https://github.com/magento/magento2/issues/14072) -- Change zip code validation pattern for Japan (fixed in [magento/magento2#14299](https://github.com/magento/magento2/pull/14299)) + * [#7816](https://github.com/magento/magento2/issues/7816) -- Customer_account.xml file abused (fixed in [magento/magento2#14325](https://github.com/magento/magento2/pull/14325)) + * [#10650](https://github.com/magento/magento2/issues/10650) -- Cron starts when it's already running (fixed in [magento/magento2#12497](https://github.com/magento/magento2/pull/12497)) + * [#14307](https://github.com/magento/magento2/issues/14307) -- Possible to press the "Previous" button while in the first step of the installation (fixed in [magento/magento2#14309](https://github.com/magento/magento2/pull/14309)) + * [#14249](https://github.com/magento/magento2/issues/14249) -- Priduct page price is using the hardcoded digits in js (fixed in [magento/magento2#14350](https://github.com/magento/magento2/pull/14350)) + * [#13582](https://github.com/magento/magento2/issues/13582) -- Magento 2.1.11 minimum quantity validation message not showing (fixed in [magento/magento2#13942](https://github.com/magento/magento2/pull/13942)) + * [#8837](https://github.com/magento/magento2/issues/8837) -- Google Analytics code being placed in body instead of head (fixed in [magento/magento2#14293](https://github.com/magento/magento2/pull/14293)) + * [#13010](https://github.com/magento/magento2/issues/13010) -- Write a Review page works on multistore for products that are not assigned to that store (fixed in [magento/magento2#14360](https://github.com/magento/magento2/pull/14360)) + * [#14049](https://github.com/magento/magento2/issues/14049) -- Retrieve session information from another customer under /customer/section/load/sections=&update_section_id=true (fixed in [magento/magento2#14176](https://github.com/magento/magento2/pull/14176)) + * [#6879](https://github.com/magento/magento2/issues/6879) -- Unable to change country of manufacture default label value (fixed in [magento/magento2#14319](https://github.com/magento/magento2/pull/14319)) + * [#14572](https://github.com/magento/magento2/issues/14572) -- Specify the table when adding field to filter for the collection Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php (fixed in [magento/magento2#14599](https://github.com/magento/magento2/pull/14599)) + * [#9666](https://github.com/magento/magento2/issues/9666) -- Magento 2.1.6 - Invoice PDF doesn't support Thai (fixed in [magento/magento2#13016](https://github.com/magento/magento2/pull/13016)) + * [#12323](https://github.com/magento/magento2/issues/12323) -- Magento 2.1.3 - Invoice and shipment PDF doesn't support Arabic (fixed in [magento/magento2#13016](https://github.com/magento/magento2/pull/13016)) + * [#14035](https://github.com/magento/magento2/issues/14035) -- Magento REST API, wrong condition for product list category filter (fixed in [magento/magento2#14048](https://github.com/magento/magento2/pull/14048)) + * [#14465](https://github.com/magento/magento2/issues/14465) -- [Indexes] Product 'version_id' lost last 'auro_increment' value after MySQL restart. (fixed in [magento/magento2#14635](https://github.com/magento/magento2/pull/14635)) + * [#13652](https://github.com/magento/magento2/issues/13652) -- Issue in product title with special chars in mini cart (fixed in [magento/magento2#14681](https://github.com/magento/magento2/pull/14681)) +* GitHub pull requests: + * [magento/magento2#13898](https://github.com/magento/magento2/pull/13898) -- Send order email for Braintree Paypal orders (by @pmclain) + * [magento/magento2#13956](https://github.com/magento/magento2/pull/13956) -- Use event object in 'ajax:addToCart' trigger when adding a product to the cart (by @koenner01) + * [magento/magento2#13691](https://github.com/magento/magento2/pull/13691) -- Fix for Issue-13556 - Sorting in Product Listing via Quantity not work (by @nuzil) + * [magento/magento2#13878](https://github.com/magento/magento2/pull/13878) -- Issues 13769. Fix wrong info about sent email in order sender. (by @pawcioma) + * [magento/magento2#13943](https://github.com/magento/magento2/pull/13943) -- magento/magento2#12405: Impossible to create a new storeview (by @hostep) + * [magento/magento2#13173](https://github.com/magento/magento2/pull/13173) -- Performance: remove count() form the condition section of a loop (by @Coderimus) + * [magento/magento2#13855](https://github.com/magento/magento2/pull/13855) -- Invoice grid shows wrong subtotal for partial items invoice. It shows order's subtotal instead if invoiced item's subtotal (by @ankurvr) + * [magento/magento2#14011](https://github.com/magento/magento2/pull/14011) -- Added alias to block 'product.info.description' (by @chedaroo) + * [magento/magento2#14013](https://github.com/magento/magento2/pull/14013) -- Use `^1.4` for `composer/composer` (by @sandermangel) + * [magento/magento2#14026](https://github.com/magento/magento2/pull/14026) -- [FIX] Remove not used variable in template (by @Coderimus) + * [magento/magento2#14030](https://github.com/magento/magento2/pull/14030) -- [FIX] Remove not used and empty template (by @Coderimus) + * [magento/magento2#11376](https://github.com/magento/magento2/pull/11376) -- [Backport 2.2-develop] PHP Livecodetest testCodeStyle() method does not use whitelist files (by @adrian-martinez-interactiv4) + * [magento/magento2#13977](https://github.com/magento/magento2/pull/13977) -- Backport of PR-10748 for Magento 2.2: Always use https for Vimeo vide… (by @hostep) + * [magento/magento2#14028](https://github.com/magento/magento2/pull/14028) -- [FIX] small refactoring and removing not using variable from templates (by @Coderimus) + * [magento/magento2#13607](https://github.com/magento/magento2/pull/13607) -- SQL query is printed into browser in case of exception (by @shyamranpara) + * [magento/magento2#13717](https://github.com/magento/magento2/pull/13717) -- [Backport 2.2] Solve problem saving empty swatches in admin (by @enriquei4) + * [magento/magento2#13807](https://github.com/magento/magento2/pull/13807) -- [Backport 2.2] Add quoting for base path in DI compile command (by @simpleadm) + * [magento/magento2#13024](https://github.com/magento/magento2/pull/13024) -- resolved default country selection issue while creating new customer … (by @pradeep-wagento) + * [magento/magento2#14044](https://github.com/magento/magento2/pull/14044) -- Make scope parameters of methods to save/delete config optional (by @avstudnitz) + * [magento/magento2#12929](https://github.com/magento/magento2/pull/12929) -- Issues #10559 - Extend swatch using mixins (M2.2) (by @srenon) + * [magento/magento2#13884](https://github.com/magento/magento2/pull/13884) -- #5463 - Use specified hashing algo in \Magento\Framework\Encryption\Encryptor::getHash (by @k4emic) + * [magento/magento2#13894](https://github.com/magento/magento2/pull/13894) -- Fix cache issue for currencies with no symbol (by @evgk) + * [magento/magento2#13989](https://github.com/magento/magento2/pull/13989) -- Act better on existing input focus instead of removing it (by @krzksz) + * [magento/magento2#14029](https://github.com/magento/magento2/pull/14029) -- Fix $useCache for container child blocks (by @tdgroot) + * [magento/magento2#14042](https://github.com/magento/magento2/pull/14042) -- Improve array output format for etc.php and config.php (by @avstudnitz) + * [magento/magento2#14062](https://github.com/magento/magento2/pull/14062) -- Typo in SSL port number (by @jasperzeinstra) + * [magento/magento2#14083](https://github.com/magento/magento2/pull/14083) -- Fix product attribute ordering when more than 10 attributes. (by @RandeKnight) + * [magento/magento2#14105](https://github.com/magento/magento2/pull/14105) -- magento/magento2#13820: IE11 minicart not updating on configurable pr… (by @Frodigo) + * [magento/magento2#14121](https://github.com/magento/magento2/pull/14121) -- [Backport] Open link "Report an Issue" in a new tab (by @sidolov) + * [magento/magento2#14041](https://github.com/magento/magento2/pull/14041) -- Removed unnecessary protected member variables. (by @Yogeshks) + * [magento/magento2#14106](https://github.com/magento/magento2/pull/14106) -- [FIX] several fixes for sales and tax module: not used imports, variables and legacy code (by @Coderimus) + * [magento/magento2#14136](https://github.com/magento/magento2/pull/14136) -- Added mage/translate component to customers's ajax login (by @ccasciotti) + * [magento/magento2#14154](https://github.com/magento/magento2/pull/14154) -- catalog:images:resize CLI command fix (by @nfourteen) + * [magento/magento2#14189](https://github.com/magento/magento2/pull/14189) -- fix incorrect phpdoc return type (by @EliasZ) + * [magento/magento2#11707](https://github.com/magento/magento2/pull/11707) -- UPS Option to include TAX in rate (by @gwharton) + * [magento/magento2#14156](https://github.com/magento/magento2/pull/14156) -- Add website- and storeview-code in stores admin grid (by @aschrammel) + * [magento/magento2#12893](https://github.com/magento/magento2/pull/12893) -- Improvement: Magento\Sales\Helper\Guest refactoring and bugfix (by @Coderimus) + * [magento/magento2#13653](https://github.com/magento/magento2/pull/13653) -- Update Store getConfig() to respect valid false return value (by @JeroenVanLeusden) + * [magento/magento2#14091](https://github.com/magento/magento2/pull/14091) -- Remove sjparkinson/static-review and other obsolete tools (by @orlangur) + * [magento/magento2#14128](https://github.com/magento/magento2/pull/14128) -- ISSUE-14109: Allow modification of cookies via extension (by @brideo) + * [magento/magento2#13716](https://github.com/magento/magento2/pull/13716) -- Category\Collection::joinUrlRewrite should use the store set on the collection (by @alepane21) + * [magento/magento2#14230](https://github.com/magento/magento2/pull/14230) -- Fix for broken navigation menu on IE11 (by @cstergianos) + * [magento/magento2#14306](https://github.com/magento/magento2/pull/14306) -- [#14089] Add Malaysian Locale Code (by @osrecio) + * [magento/magento2#14303](https://github.com/magento/magento2/pull/14303) -- Resolves PHPdoc issue in ticket #13992 (by @cream-julian) + * [magento/magento2#14317](https://github.com/magento/magento2/pull/14317) -- FR#7428 - Multiline fields in forms have no visible label (by @crisdiaz) + * [magento/magento2#14358](https://github.com/magento/magento2/pull/14358) -- Format code (by @mageprince) + * [magento/magento2#13414](https://github.com/magento/magento2/pull/13414) -- Add getters to product image builder (by @VincentMarmiesse) + * [magento/magento2#14308](https://github.com/magento/magento2/pull/14308) -- Added language translation, make proper sentence and removed unused delete html container (by @Yogeshks) + * [magento/magento2#14327](https://github.com/magento/magento2/pull/14327) -- magento/magento2#10057 (by @swnsma) + * [magento/magento2#14347](https://github.com/magento/magento2/pull/14347) -- [Backport 2.2] Add json and xml support to the post method in socket client (by @simpleadm) + * [magento/magento2#14361](https://github.com/magento/magento2/pull/14361) -- Removed cache backend option which explicitly set file permissions (by @xtremeperf) + * [magento/magento2#14388](https://github.com/magento/magento2/pull/14388) -- [FIX] Remove duplicated case statement (by @Coderimus) + * [magento/magento2#14060](https://github.com/magento/magento2/pull/14060) -- Disable add to cart button when redirect to cart enabled (by @ihor-sviziev) + * [magento/magento2#14299](https://github.com/magento/magento2/pull/14299) -- [#14072 2.2] Add Zip Pattern for Japan JP (by @osrecio) + * [magento/magento2#14325](https://github.com/magento/magento2/pull/14325) -- #7816: Customer_account.xml file abused (2.2) (by @mikewhitby) + * [magento/magento2#12497](https://github.com/magento/magento2/pull/12497) -- Prevent running again already running cron group (by @paveq) + * [magento/magento2#14288](https://github.com/magento/magento2/pull/14288) -- Fill visibility in AdminCreateConfigurableProductTest.xml (by @tdgroot) + * [magento/magento2#14385](https://github.com/magento/magento2/pull/14385) -- Remove improper unit test (by @orlangur) + * [magento/magento2#14309](https://github.com/magento/magento2/pull/14309) -- Disable "Back" button on the first step of the setup (by @ArjenMiedema) + * [magento/magento2#14350](https://github.com/magento/magento2/pull/14350) -- precision for price overriding by js (by @cdiacon) + * [magento/magento2#14403](https://github.com/magento/magento2/pull/14403) -- test command inside if/then clause broke before install script (by @edie-pasek) + * [magento/magento2#14440](https://github.com/magento/magento2/pull/14440) -- Removed extra backslash from comment block (by @Yogeshks) + * [magento/magento2#13942](https://github.com/magento/magento2/pull/13942) -- Issue #13582 show message for qty minAllowed, maxAllowed, qtyIncremen… (by @bordeo) + * [magento/magento2#14293](https://github.com/magento/magento2/pull/14293) -- Moved Google Analytics block code to head tag #8837 (by @KravetsAndriy) + * [magento/magento2#14439](https://github.com/magento/magento2/pull/14439) -- Update process-reviews.js (by @sanderjongsma) + * [magento/magento2#14445](https://github.com/magento/magento2/pull/14445) -- [FIX] Simplify ternary operators for catalog module (by @Coderimus) + * [magento/magento2#14455](https://github.com/magento/magento2/pull/14455) -- Fix button color on hover in email template (by @Karlasa) + * [magento/magento2#14452](https://github.com/magento/magento2/pull/14452) -- Remove else statements from \Magento\Framework\Session\SessionManager (by @adrian-martinez-interactiv4) + * [magento/magento2#14466](https://github.com/magento/magento2/pull/14466) -- Correct function return statement. (by @NamrataChangani) + * [magento/magento2#14473](https://github.com/magento/magento2/pull/14473) -- Added spanish Bolivia locale to allowedLocales list (by @JDavidVR) + * [magento/magento2#13808](https://github.com/magento/magento2/pull/13808) -- [Backport 2.2] Configurable product price options by store (by @simpleadm) + * [magento/magento2#14360](https://github.com/magento/magento2/pull/14360) -- Fix issue #13010. Check if product is assigned to current website. (by @afirlejczyk) + * [magento/magento2#14457](https://github.com/magento/magento2/pull/14457) -- [Backport 2.2] Return status in console commands (by @simpleadm) + * [magento/magento2#14498](https://github.com/magento/magento2/pull/14498) -- fix translation issue with rating stars (by @Karlasa) + * [magento/magento2#14504](https://github.com/magento/magento2/pull/14504) -- Check if store id is not null instead of empty (by @quisse) + * [magento/magento2#13629](https://github.com/magento/magento2/pull/13629) -- Fix translate issue (by @Corefix) + * [magento/magento2#13831](https://github.com/magento/magento2/pull/13831) -- Fixed comparison with 0 bug for TableRate shipping carrier (by @irs) + * [magento/magento2#14176](https://github.com/magento/magento2/pull/14176) -- Replace the existing headers with the no cache headers (by @joost-florijn-kega) + * [magento/magento2#14319](https://github.com/magento/magento2/pull/14319) -- 6879 - Unable to change country of manufacture default label value (by @MateuszChrapek) + * [magento/magento2#13257](https://github.com/magento/magento2/pull/13257) -- [FIX]: Recent orders are not filtered per store at the customer account page (by @Coderimus) + * [magento/magento2#14559](https://github.com/magento/magento2/pull/14559) -- Fix for Issue #13950 - Cache issue with configurable products related to currency-conversions (by @nuzil) + * [magento/magento2#14552](https://github.com/magento/magento2/pull/14552) -- Allow to configure min and max dates for date picker component (by @tkotosz) + * [magento/magento2#14599](https://github.com/magento/magento2/pull/14599) -- Specify the table when adding field to filter (by @PierreLeMaguer) + * [magento/magento2#13016](https://github.com/magento/magento2/pull/13016) -- Fix for sales PDFs to support more characters (by @rossmc) + * [magento/magento2#14048](https://github.com/magento/magento2/pull/14048) -- Fix for GitHub issue #14035. (by @kamilszewczyk) + * [magento/magento2#14629](https://github.com/magento/magento2/pull/14629) -- Refactor Code for Mass Order Unhold (by @AnshuMishra17) + * [magento/magento2#14635](https://github.com/magento/magento2/pull/14635) -- [Forwardport] magento/magento2#14465 Fix empty changelog tables after MySQL restart. (by @ihor-sviziev) + * [magento/magento2#14668](https://github.com/magento/magento2/pull/14668) -- Added hyphenation, cutting edge to cutting-edge. (by @surya07081995) + * [magento/magento2#14678](https://github.com/magento/magento2/pull/14678) -- Checkout page - Fix tooltip position on mobile devices (by @ihor-sviziev) + * [magento/magento2#14681](https://github.com/magento/magento2/pull/14681) -- [Backport] Fix #13652. Mini cart - fix issue in product title with special chars. (by @ihor-sviziev) + * [magento/magento2#14688](https://github.com/magento/magento2/pull/14688) -- Translate Action Label (by @net32) + * [magento/magento2#14696](https://github.com/magento/magento2/pull/14696) -- [Backport] Eliminate usage of "else" statements (by @ihor-sviziev) + +2.2.4 +============= +* GitHub issues: + * [#7691](https://github.com/magento/magento2/issues/7691) -- address with saveInAddressBook 0 are still being added to the address book for new customers (fixed in [magento/magento2#12171](https://github.com/magento/magento2/pull/12171)) + * [#9277](https://github.com/magento/magento2/issues/9277) -- Create new CLI command: enable/disable Magento Profiler (fixed in [magento/magento2#11407](https://github.com/magento/magento2/pull/11407)) + * [#11941](https://github.com/magento/magento2/issues/11941) -- Invoice for products that use qty decimal rounds down to whole number (fixed in [magento/magento2#11997](https://github.com/magento/magento2/pull/11997)) + * [#12083](https://github.com/magento/magento2/issues/12083) -- Cannot import zero (0) value into custom attribute (fixed in [magento/magento2#12283](https://github.com/magento/magento2/pull/12283)) + * [#3596](https://github.com/magento/magento2/issues/3596) -- Notice: Undefined index: value in /app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Select.php on line 72 (fixed in [magento/magento2#12296](https://github.com/magento/magento2/pull/12296)) + * [#9764](https://github.com/magento/magento2/issues/9764) -- exception message is wrong and misleading in findAccessorMethodName() of Magento\Framework\Reflection\NameFinder (fixed in [magento/magento2#12303](https://github.com/magento/magento2/pull/12303)) + * [#13214](https://github.com/magento/magento2/issues/13214) -- Not a correct displaying for Robots.txt (fixed in [magento/magento2#12310](https://github.com/magento/magento2/pull/12310)) + * [#9684](https://github.com/magento/magento2/issues/9684) -- No ACL set for integrations (fixed in [magento/magento2#12332](https://github.com/magento/magento2/pull/12332)) + * [#10438](https://github.com/magento/magento2/issues/10438) -- Potential error on order edit page when address has extension attributes (fixed in [magento/magento2#11787](https://github.com/magento/magento2/pull/11787)) + * [#11691](https://github.com/magento/magento2/issues/11691) -- Wrong return type for getAttributeText($attributeCode) (fixed in [magento/magento2#12003](https://github.com/magento/magento2/pull/12003)) + * [#12261](https://github.com/magento/magento2/issues/12261) -- Order confirmation email contains non functioning links (fixed in [magento/magento2#12308](https://github.com/magento/magento2/pull/12308)) + * [#12146](https://github.com/magento/magento2/issues/12146) -- Customer with empty "Date of Birth" cannot be saved (fixed in [magento/magento2#12302](https://github.com/magento/magento2/pull/12302)) + * [#10502](https://github.com/magento/magento2/issues/10502) -- Fatal error: Call getTranslateInline of null when generating some sitemap with errors (fixed in [magento/magento2#11320](https://github.com/magento/magento2/pull/11320)) + * [#11139](https://github.com/magento/magento2/issues/11139) -- Product Repeat Isuue after filter on category listing page. (fixed in [magento/magento2#11429](https://github.com/magento/magento2/pull/11429)) + * [#8003](https://github.com/magento/magento2/issues/8003) -- Using System Value for Base Currency Results in Config Error (fixed in [magento/magento2#11809](https://github.com/magento/magento2/pull/11809)) + * [#10347](https://github.com/magento/magento2/issues/10347) -- Wrong order tax amounts displayed when using specific tax configuration (fixed in [magento/magento2#11592](https://github.com/magento/magento2/pull/11592)) + * [#9360](https://github.com/magento/magento2/issues/9360) -- field doesn't work in system.xml for "radios" fields (fixed in [magento/magento2#11539](https://github.com/magento/magento2/pull/11539)) + * [#11792](https://github.com/magento/magento2/issues/11792) -- Can't add customizable options to product (fixed in [magento/magento2#11965](https://github.com/magento/magento2/pull/11965)) + * [#11528](https://github.com/magento/magento2/issues/11528) -- Validation prevents form closing (fixed in [magento/magento2#12048](https://github.com/magento/magento2/pull/12048)) + * [#12064](https://github.com/magento/magento2/issues/12064) -- Database Rollback not working with magento 2.1.9? (fixed in [magento/magento2#12108](https://github.com/magento/magento2/pull/12108)) + * [#9413](https://github.com/magento/magento2/issues/9413) -- Cannot remove product_list_toolbar in XML (fixed in [magento/magento2#11473](https://github.com/magento/magento2/pull/11473)) + * [#11669](https://github.com/magento/magento2/issues/11669) -- API salesRefundInvoiceV1 does no save invoice ID on credit memo (fixed in [magento/magento2#11670](https://github.com/magento/magento2/pull/11670)) + * [#11740](https://github.com/magento/magento2/issues/11740) -- Sending emails from Admin in Multi-Store Environment defaults to Primary Store (fixed in [magento/magento2#11992](https://github.com/magento/magento2/pull/11992)) + * [#9410](https://github.com/magento/magento2/issues/9410) -- Impossible to add swatch options via Service Contracts if there is no existing swatch option for attribute (fixed in [magento/magento2#12036](https://github.com/magento/magento2/pull/12036)) + * [#10707](https://github.com/magento/magento2/issues/10707) -- Create attribute option via API for swatch attribute fails (fixed in [magento/magento2#12036](https://github.com/magento/magento2/pull/12036)) + * [#10737](https://github.com/magento/magento2/issues/10737) -- Can't import attribute option over API if option is 'visual swatch' (fixed in [magento/magento2#12036](https://github.com/magento/magento2/pull/12036)) + * [#11032](https://github.com/magento/magento2/issues/11032) -- Unable to add new options to swatch attribute (fixed in [magento/magento2#12036](https://github.com/magento/magento2/pull/12036)) + * [#10128](https://github.com/magento/magento2/issues/10128) -- New Orders not being saved to order grid (fixed in [magento/magento2#12241](https://github.com/magento/magento2/pull/12241)) + * [#9515](https://github.com/magento/magento2/issues/9515) -- South Korea Zip Code Validation incorrect (fixed in [magento-engcom/magento2ce#903](https://github.com/magento-engcom/magento2ce/pull/903)) + * [#10210](https://github.com/magento/magento2/issues/10210) -- Transport variable can not be altered in email_invoice_set_template_vars_before Event (fixed in [magento/magento2#12132](https://github.com/magento/magento2/pull/12132)) + * [#11341](https://github.com/magento/magento2/issues/11341) -- Attribute category_ids issue (fixed in [magento/magento2#11389](https://github.com/magento/magento2/pull/11389)) + * [#12127](https://github.com/magento/magento2/issues/12127) -- Apostrophe in attribute option value in admin is not handled properly (fixed in [magento/magento2#12133](https://github.com/magento/magento2/pull/12133)) + * [#12058](https://github.com/magento/magento2/issues/12058) -- Can't save emoji in custom product options (fixed in [magento/magento2#12253](https://github.com/magento/magento2/pull/12253)) + * [#9742](https://github.com/magento/magento2/issues/9742) -- Default welcome message returns after being deleted (fixed in [magento/magento2#12328](https://github.com/magento/magento2/pull/12328)) + * [#9468](https://github.com/magento/magento2/issues/9468) -- REST API bundle-products/:sku/options/all always return is not authorized (fixed in [magento-engcom/magento2ce#904](https://github.com/magento-engcom/magento2ce/pull/904)) + * [#6634](https://github.com/magento/magento2/issues/6634) -- Yes/No attribute value is not shown on a product details page (fixed in [magento/magento2#12057](https://github.com/magento/magento2/pull/12057)) + * [#9961](https://github.com/magento/magento2/issues/9961) -- Unused product attributes display with value N/A or NO on storefront (fixed in [magento/magento2#12057](https://github.com/magento/magento2/pull/12057)) + * [#9931](https://github.com/magento/magento2/issues/9931) -- Empty image alt-text & missing alt attribute on product detail page (fixed in [magento/magento2#11323](https://github.com/magento/magento2/pull/11323)) + * [#11236](https://github.com/magento/magento2/issues/11236) -- Web Setup Wizard Icon Inconsistency (fixed in [magento/magento2#11388](https://github.com/magento/magento2/pull/11388)) + * [#11484](https://github.com/magento/magento2/issues/11484) -- Visual Merchandiser show prices of out of stock simple products for the associated configurable product. (fixed in [magento/magento2#11485](https://github.com/magento/magento2/pull/11485)) + * [#8255](https://github.com/magento/magento2/issues/8255) -- Export Products action doesn't consider hide_for_product_page value (fixed in [magento/magento2#11926](https://github.com/magento/magento2/pull/11926)) + * [#11509](https://github.com/magento/magento2/issues/11509) -- Psr logger debug method does not work by the default in developer mode (fixed in [magento/magento2#12207](https://github.com/magento/magento2/pull/12207)) + * [#11882](https://github.com/magento/magento2/issues/11882) -- It's not possible to enable "log to file" (debugging) in production mode (fixed in [magento/magento2#12207](https://github.com/magento/magento2/pull/12207)) + * [#9918](https://github.com/magento/magento2/issues/9918) -- Magento 2 automatically disables maintenance mode after certain actions (fixed in [magento/magento2#11052](https://github.com/magento/magento2/pull/11052)) + * [#11825](https://github.com/magento/magento2/issues/11825) -- 2.1.9 Item not added to the Wishlist if the user is not logged at the moment he click on the button to add it. (fixed in [magento/magento2#12038](https://github.com/magento/magento2/pull/12038)) + * [#11908](https://github.com/magento/magento2/issues/11908) -- Adding to wishlist doesn't work when not logged in (fixed in [magento/magento2#12038](https://github.com/magento/magento2/pull/12038)) + * [#758](https://github.com/magento/magento2/issues/758) -- Coding standards: arrays (fixed in [magento/magento2#12499](https://github.com/magento/magento2/pull/12499)) + * [#11324](https://github.com/magento/magento2/issues/11324) -- Updating a product via the REST API assigns it to all websites automatically. (fixed in [magento/magento2#11444](https://github.com/magento/magento2/pull/11444)) + * [#9633](https://github.com/magento/magento2/issues/9633) -- Web Setup Wizard 500 error when session storage is configured to use memcache (fixed in [magento/magento2#11608](https://github.com/magento/magento2/pull/11608)) + * [#6770](https://github.com/magento/magento2/issues/6770) -- M2.1.1 : Re-saving a product attribute with a different name than it's code results in an error (fixed in [magento/magento2#11617](https://github.com/magento/magento2/pull/11617)) + * [#11059](https://github.com/magento/magento2/issues/11059) -- 92 usages of expectException() with ignored $message parameter (fixed in [magento/magento2#11099](https://github.com/magento/magento2/pull/11099)) + * [#11409](https://github.com/magento/magento2/issues/11409) -- Too many password reset requests even when disabled in settings (fixed in [magento/magento2#11435](https://github.com/magento/magento2/pull/11435)) + * [#12110](https://github.com/magento/magento2/issues/12110) -- Missing cascade into attribute set deletion (fixed in [magento/magento2#12167](https://github.com/magento/magento2/pull/12167)) + * [#12268](https://github.com/magento/magento2/issues/12268) -- Gallery issues on configurable product page (fixed in [magento/magento2#12469](https://github.com/magento/magento2/pull/12469) and [magento-engcom/magento2ce#991](https://github.com/magento-engcom/magento2ce/pull/991)) + * [#12506](https://github.com/magento/magento2/issues/12506) -- Fixup typo getDispretionPath -> getDispersionPath (fixed in [magento/magento2#12507](https://github.com/magento/magento2/pull/12507)) + * [#12482](https://github.com/magento/magento2/issues/12482) -- Sitemap image links in MultiStore (fixed in [magento-engcom/magento2ce#935](https://github.com/magento-engcom/magento2ce/pull/935)) + * [#8437](https://github.com/magento/magento2/issues/8437) -- Silent error when an email template is not found (fixed in [magento-engcom/magento2ce#970](https://github.com/magento-engcom/magento2ce/pull/970)) + * [#8176](https://github.com/magento/magento2/issues/8176) -- LinkManagement::getChildren() does not include product ID's (and visibility) (fixed in [magento-engcom/magento2ce#986](https://github.com/magento-engcom/magento2ce/pull/986)) + * [#12613](https://github.com/magento/magento2/issues/12613) -- Verbiage Update Required: Product Image Watermark size Validation Message (fixed in [magento-engcom/magento2ce#985](https://github.com/magento-engcom/magento2ce/pull/985)) + * [#12180](https://github.com/magento/magento2/issues/12180) -- M2.2.1 Unable to open Address book after account creation (fixed in [magento/magento2#12220](https://github.com/magento/magento2/pull/12220)) + * [#12450](https://github.com/magento/magento2/issues/12450) -- Store not found when adding a ? to site URL. (fixed in [magento/magento2#12529](https://github.com/magento/magento2/pull/12529)) + * [#12468](https://github.com/magento/magento2/issues/12468) -- Sort by Price not working on CatalogSearch Page in Magento 2 (fixed in [magento-engcom/magento2ce#929](https://github.com/magento-engcom/magento2ce/pull/929)) + * [#7467](https://github.com/magento/magento2/issues/7467) -- File Put Contents file with empty content (fixed in [magento-engcom/magento2ce#962](https://github.com/magento-engcom/magento2ce/pull/962)) + * [#8410](https://github.com/magento/magento2/issues/8410) -- Custom Checkout Step and Shipping Step are Highlighted and Combined upon Checkout page load (fixed in [magento-engcom/magento2ce#975](https://github.com/magento-engcom/magento2ce/pull/975)) + * [#12582](https://github.com/magento/magento2/issues/12582) -- Can't remove item description from wishlist (fixed in [magento-engcom/magento2ce#981](https://github.com/magento-engcom/magento2ce/pull/981)) + * [#8862](https://github.com/magento/magento2/issues/8862) -- Can't emptying values by magento 2 api (fixed in [magento-engcom/magento2ce#916](https://github.com/magento-engcom/magento2ce/pull/916)) + * [#8011](https://github.com/magento/magento2/issues/8011) -- Strip Tags from attribute (fixed in [magento-engcom/magento2ce#968](https://github.com/magento-engcom/magento2ce/pull/968)) + * [#12526](https://github.com/magento/magento2/issues/12526) -- Currency change, Bank Transfer but checkout page shows "Your credit card will be charged for" (fixed in [magento-engcom/magento2ce#993](https://github.com/magento-engcom/magento2ce/pull/993)) + * [#12535](https://github.com/magento/magento2/issues/12535) -- Product change sku via repository (fixed in [magento-engcom/magento2ce#984](https://github.com/magento-engcom/magento2ce/pull/984)) + * [#8507](https://github.com/magento/magento2/issues/8507) -- There is invalid type in PHPDoc block of \Magento\Framework\Data\Tree::getNodeById() (fixed in [magento-engcom/magento2ce#964](https://github.com/magento-engcom/magento2ce/pull/964)) + * [#10123](https://github.com/magento/magento2/issues/10123) -- Invoice entity_model in table eav_entity_type (fixed in [magento-engcom/magento2ce#980](https://github.com/magento-engcom/magento2ce/pull/980)) + * [#9055](https://github.com/magento/magento2/issues/9055) -- Default Store is always used when retrieving sequence value's for sales entity's. (fixed in [magento/magento2#11702](https://github.com/magento/magento2/pull/11702)) + * [#8601](https://github.com/magento/magento2/issues/8601) -- Can bypass Minimum Order Amount Logic (fixed in [magento-engcom/magento2ce#963](https://github.com/magento-engcom/magento2ce/pull/963)) + * [#10797](https://github.com/magento/magento2/issues/10797) -- catalogProductTierPriceManagementV1 DELETE and POST operation wipes out media gallery selections when used on store code "all". (fixed in [magento-engcom/magento2ce#977](https://github.com/magento-engcom/magento2ce/pull/977)) + * [#12560](https://github.com/magento/magento2/issues/12560) -- Back-End issue for multi-store website: when editing Order shipping/billing address - allowed countries are selected from wrong Store View (fixed in [magento-engcom/magento2ce#982](https://github.com/magento-engcom/magento2ce/pull/982)) + * [#2907](https://github.com/magento/magento2/issues/2907) -- Integration Test Annotation magentoAppArea breaks with some valid values (fixed in [magento-engcom/magento2ce#996](https://github.com/magento-engcom/magento2ce/pull/996)) + * [#5738](https://github.com/magento/magento2/issues/5738) -- SearchCriteriaBuilder builds wrong criteria (ORDER BY part) (fixed in [magento-engcom/magento2ce#1003](https://github.com/magento-engcom/magento2ce/pull/1003)) + * [#12259](https://github.com/magento/magento2/issues/12259) -- Save and Duplicated product not working (fixed in [magento-engcom/magento2ce#983](https://github.com/magento-engcom/magento2ce/pull/983)) + * [#8204](https://github.com/magento/magento2/issues/8204) -- catalog:images:resize = getimagesize(): Read error! in vendor/magento/module-catalog/Model/Product/Image.php on line 410 if an image is 0 bytes (fixed in [magento-engcom/magento2ce#1000](https://github.com/magento-engcom/magento2ce/pull/1000)) + * [#12285](https://github.com/magento/magento2/issues/12285) -- The option false for mobile device don't work in product view page gallery (fixed in [magento-engcom/magento2ce#1006](https://github.com/magento-engcom/magento2ce/pull/1006)) + * [#12490](https://github.com/magento/magento2/issues/12490) -- I can't disable full screen gallery on mobile on magento 2.2.1 (fixed in [magento-engcom/magento2ce#1006](https://github.com/magento-engcom/magento2ce/pull/1006)) + * [#10814](https://github.com/magento/magento2/issues/10814) -- Attribute repository resets sourceModel for new attributes (fixed in [magento-engcom/magento2ce#1012](https://github.com/magento-engcom/magento2ce/pull/1012)) + * [#12632](https://github.com/magento/magento2/issues/12632) -- Magento Connect no longer exist (fixed in [magento/magento2#12633](https://github.com/magento/magento2/pull/12633)) + * [#8647](https://github.com/magento/magento2/issues/8647) -- Order of how arguments are merged in multiple di.xml-files causes unexpected results (fixed in [magento-engcom/magento2ce#995](https://github.com/magento-engcom/magento2ce/pull/995)) + * [#12378](https://github.com/magento/magento2/issues/12378) -- Regions list in Directory module for India (fixed in [magento-engcom/magento2ce#1007](https://github.com/magento-engcom/magento2ce/pull/1007)) + * [#11946](https://github.com/magento/magento2/issues/11946) -- Layer navigation showing wrong product count (fixed in [magento/magento2#12063](https://github.com/magento/magento2/pull/12063)) + * [#12452](https://github.com/magento/magento2/issues/12452) -- ACL permissions issue (fixed in [magento/magento2#12661](https://github.com/magento/magento2/pull/12661)) + * [#12660](https://github.com/magento/magento2/issues/12660) -- Invalid parameter configuration provided for $block argument upon no ACL permissions to the block (fixed in [magento/magento2#12661](https://github.com/magento/magento2/pull/12661)) + * [#12084](https://github.com/magento/magento2/issues/12084) -- Product csv import > fail on round brackets in image filename (fixed in [magento-engcom/magento2ce#1017](https://github.com/magento-engcom/magento2ce/pull/1017)) + * [#12656](https://github.com/magento/magento2/issues/12656) -- Checkout: Whitespace in front of coupon code causes "Coupon code is not valid" (fixed in [magento-engcom/magento2ce#1021](https://github.com/magento-engcom/magento2ce/pull/1021)) + * [#12667](https://github.com/magento/magento2/issues/12667) -- Incorrect partial attribute (EAV) reindex (Update by Schedule) for configurable product with childs visibility "Not Visible Individually" (fixed in [magento-engcom/magento2ce#1023](https://github.com/magento-engcom/magento2ce/pull/1023)) + * [#10743](https://github.com/magento/magento2/issues/10743) -- Magento 2 is not showing Popular Search Terms (fixed in [magento-engcom/magento2ce#1024](https://github.com/magento-engcom/magento2ce/pull/1024)) + * [#5774](https://github.com/magento/magento2/issues/5774) -- Tier price and custom options give bad results (fixed in [magento/magento2#11563](https://github.com/magento/magento2/pull/11563)) + * [#8615](https://github.com/magento/magento2/issues/8615) -- REST API unable to make requests with slash (/) in SKU (fixed in [magento-engcom/magento2ce#949](https://github.com/magento-engcom/magento2ce/pull/949)) + * [#10133](https://github.com/magento/magento2/issues/10133) -- Please add your expectations for @deprecated annotations (fixed in [magento/magento2#11070](https://github.com/magento/magento2/pull/11070)) + * [#12713](https://github.com/magento/magento2/issues/12713) -- Currency symbol overlaps entered attribute option's price while creating Configurable Product (fixed in [magento/magento2#12730](https://github.com/magento/magento2/pull/12730)) + * [#9453](https://github.com/magento/magento2/issues/9453) -- Reopened: '?SID' in URL even if disabled (fixed in [magento/magento2#12743](https://github.com/magento/magento2/pull/12743)) + * [#9720](https://github.com/magento/magento2/issues/9720) -- Menu item dependencies (dependsOnModule, dependsOnConfig) are broken (fixed in [magento/magento2#12747](https://github.com/magento/magento2/pull/12747)) + * [#6965](https://github.com/magento/magento2/issues/6965) -- \Magento\Directory\Model\PriceCurrency::format() fails without conversion rate (fixed in [magento-engcom/magento2ce#1022](https://github.com/magento-engcom/magento2ce/pull/1022)) + * [#12627](https://github.com/magento/magento2/issues/12627) -- Referer is not added to login url in checkout config (fixed in [magento/magento2#12630](https://github.com/magento/magento2/pull/12630)) + * [#12206](https://github.com/magento/magento2/issues/12206) -- Tracking link returns 404 page in admin panel (fixed in [magento/magento2#12732](https://github.com/magento/magento2/pull/12732)) + * [#6113](https://github.com/magento/magento2/issues/6113) -- Validate range-words in Form component (UI Component) (fixed in [magento/magento2#12739](https://github.com/magento/magento2/pull/12739)) + * [#12719](https://github.com/magento/magento2/issues/12719) -- Welcome message is shown with customer's first and last names after confirming account (fixed in [magento/magento2#12738](https://github.com/magento/magento2/pull/12738)) + * [#5035](https://github.com/magento/magento2/issues/5035) -- I can not to subscribe on change of all sections in Stores ->Configuration using event admin_system_config_changed_section (fixed in [magento/magento2#12758](https://github.com/magento/magento2/pull/12758)) + * [#12715](https://github.com/magento/magento2/issues/12715) -- Storefront Back to Sign in button does not work as expected (fixed in [magento/magento2#12759](https://github.com/magento/magento2/pull/12759)) + * [#11743](https://github.com/magento/magento2/issues/11743) -- AbstractPdf - ZendException font is not set (fixed in [magento-engcom/magento2ce#1016](https://github.com/magento-engcom/magento2ce/pull/1016)) + * [#7241](https://github.com/magento/magento2/issues/7241) -- No option to start with blank option for prefix and suffix in checkout. (fixed in [magento/magento2#11462](https://github.com/magento/magento2/pull/11462)) + * [#5188](https://github.com/magento/magento2/issues/5188) -- Error generating URN-catalog when blank one exists (fixed in [magento/magento2#11686](https://github.com/magento/magento2/pull/11686)) + * [#11936](https://github.com/magento/magento2/issues/11936) -- required attribute set id filter on attribute group repository getList (fixed in [magento/magento2#12105](https://github.com/magento/magento2/pull/12105)) + * [#12625](https://github.com/magento/magento2/issues/12625) -- when saving a page in magento 2.2.1, 'Modified' date field is not getting updated (fixed in [magento/magento2#12636](https://github.com/magento/magento2/pull/12636)) + * [#11953](https://github.com/magento/magento2/issues/11953) -- Product configuration creator does not warn about invalid SKUs (fixed in [magento/magento2#12737](https://github.com/magento/magento2/pull/12737)) + * [#12439](https://github.com/magento/magento2/issues/12439) -- Newsletter subscription success email not sent after confirmation (fixed in [magento/magento2#12751](https://github.com/magento/magento2/pull/12751)) + * [#8830](https://github.com/magento/magento2/issues/8830) -- Can`t delete row in dynamicRows component (fixed in [magento-engcom/magento2ce#921](https://github.com/magento-engcom/magento2ce/pull/921)) + * [#12712](https://github.com/magento/magento2/issues/12712) -- Latest Google Chrome Browser issue with duplicate #email (fixed in [magento-engcom/magento2ce#1036](https://github.com/magento-engcom/magento2ce/pull/1036)) + * [#6916](https://github.com/magento/magento2/issues/6916) -- Update Bundle Product without changes in bundle items (fixed in [magento/magento2#12734](https://github.com/magento/magento2/pull/12734)) + * [#12374](https://github.com/magento/magento2/issues/12374) -- Model hasDataChanges always true (fixed in [magento/magento2#12736](https://github.com/magento/magento2/pull/12736)) + * [#11885](https://github.com/magento/magento2/issues/11885) -- Magento 2.2 Paypal Can't Accept Checkout Agreements Before Routing to PayPal (fixed in [magento/magento2#12401](https://github.com/magento/magento2/pull/12401)) + * [#12844](https://github.com/magento/magento2/issues/12844) -- "Cannot instantiate interface Magento\Framework\Interception\ObjectManager\ConfigInterface" error in integration tests (fixed in [magento/magento2#12845](https://github.com/magento/magento2/pull/12845)) + * [#12294](https://github.com/magento/magento2/issues/12294) -- Bug: Adding Custom Attribute - The value of Admin scope can't be empty (fixed in [magento/magento2#12755](https://github.com/magento/magento2/pull/12755)) + * [#12900](https://github.com/magento/magento2/issues/12900) -- Braintree "Place Order" button is disabled after failed validation (fixed in [magento/magento2#12902](https://github.com/magento/magento2/pull/12902)) + * [#12555](https://github.com/magento/magento2/issues/12555) -- Naming collision in Javascript ui registry (backend) (fixed in [magento/magento2#12945](https://github.com/magento/magento2/pull/12945)) + * [#4292](https://github.com/magento/magento2/issues/4292) -- Why can't one switch back to default mode ? (fixed in [magento/magento2#12752](https://github.com/magento/magento2/pull/12752)) + * [#2156](https://github.com/magento/magento2/issues/2156) -- Why does \Magento\Translation\Model\Js\DataProvider use \Magento\Framework\Phrase\Renderer\Translate, not \Magento\Framework\Phrase\Renderer\Composite? (fixed in [magento/magento2#12953](https://github.com/magento/magento2/pull/12953)) + * [#7441](https://github.com/magento/magento2/issues/7441) -- Configurable attribute options are not sorted (fixed in [magento/magento2#12963](https://github.com/magento/magento2/pull/12963)) + * [#10869](https://github.com/magento/magento2/issues/10869) -- field lengths differ across many tables (fixed in [magento/magento2#13015](https://github.com/magento/magento2/pull/13015)) + * [#12446](https://github.com/magento/magento2/issues/12446) -- Remove /home from the sitemap.xml (fixed in [magento/magento2#12649](https://github.com/magento/magento2/pull/12649)) + * [#12894](https://github.com/magento/magento2/issues/12894) -- Can't remove State is required for all countries (fixed in [magento/magento2#12917](https://github.com/magento/magento2/pull/12917)) + * [#12393](https://github.com/magento/magento2/issues/12393) -- Attribute with "Catalog Input Type for Store Owner" equal "Fixed Product Tax" for Multi-store (fixed in [magento/magento2#13019](https://github.com/magento/magento2/pull/13019)) + * [#9036](https://github.com/magento/magento2/issues/9036) -- Database backup doesn't include triggers (fixed in [magento/magento2#11369](https://github.com/magento/magento2/pull/11369)) + * [#12209](https://github.com/magento/magento2/issues/12209) -- Substitution payment method - Incorrect message (fixed in [magento/magento2#12731](https://github.com/magento/magento2/pull/12731)) + * [#10415](https://github.com/magento/magento2/issues/10415) -- Customer First and Last names not being trimmed of leading and trailing spaces on save. (fixed in [magento/magento2#12964](https://github.com/magento/magento2/pull/12964)) + * [#12601](https://github.com/magento/magento2/issues/12601) -- A space between the category page and the main footer when applying specific settings (fixed in [magento/magento2#13026](https://github.com/magento/magento2/pull/13026)) + * [#12320](https://github.com/magento/magento2/issues/12320) -- Newsletter subscribe button title wrapped (fixed in [magento/magento2#13041](https://github.com/magento/magento2/pull/13041) and [magento/magento2#13029](https://github.com/magento/magento2/pull/13029)) + * [#11796](https://github.com/magento/magento2/issues/11796) -- Magento2.2.0 home page product grid issues (fixed in [magento/magento2#13081](https://github.com/magento/magento2/pull/13081)) + * [#12828](https://github.com/magento/magento2/issues/12828) -- Uncaught Error: Script error for: trackingCode error on every frontend page (fixed in [magento/magento2#13061](https://github.com/magento/magento2/pull/13061)) + * [#5129](https://github.com/magento/magento2/issues/5129) -- Product details page zoom issue when dropdown menu have overlap area with it. (fixed in [magento/magento2#13084](https://github.com/magento/magento2/pull/13084)) + * [#6486](https://github.com/magento/magento2/issues/6486) -- Unable to save certain product properties via Rest API (fixed in [magento-engcom/magento2ce#1018](https://github.com/magento-engcom/magento2ce/pull/1018)) + * [#9969](https://github.com/magento/magento2/issues/9969) -- Cancel order and restore quote methods increase stocks twice (fixed in [magento/magento2#12668](https://github.com/magento/magento2/pull/12668)) + * [#12221](https://github.com/magento/magento2/issues/12221) -- Google analytics pageview being triggered twice (fixed in [magento/magento2#13034](https://github.com/magento/magento2/pull/13034)) + * [#12705](https://github.com/magento/magento2/issues/12705) -- Integrity constraint violation error after reordering product with custom options (fixed in [magento/magento2#13036](https://github.com/magento/magento2/pull/13036)) + * [#12876](https://github.com/magento/magento2/issues/12876) -- Multiple newsletter confirmation emails sent (fixed in [magento/magento2#13044](https://github.com/magento/magento2/pull/13044)) + * [#8114](https://github.com/magento/magento2/issues/8114) -- "Save Block"-button on Add New Block silently ignores clicks if the content is empty. (fixed in [magento-engcom/magento2ce#1032](https://github.com/magento-engcom/magento2ce/pull/1032)) + * [#8453](https://github.com/magento/magento2/issues/8453) -- Price outlining in Invoice PDF (fixed in [magento-engcom/magento2ce#1216](https://github.com/magento-engcom/magento2ce/pull/1216)) + * [#12967](https://github.com/magento/magento2/issues/12967) -- Undeclared dependency magento/zendframework1 by magento/framework (fixed in [magento/magento2#12990](https://github.com/magento/magento2/pull/12990)) + * [#12787](https://github.com/magento/magento2/issues/12787) -- Newsletter\Model\Subscriber::loadByEmail() does not use MySQL index (fixed in [magento/magento2#13033](https://github.com/magento/magento2/pull/13033)) + * [#12877](https://github.com/magento/magento2/issues/12877) -- [2.2.1] Magento Database Backup Command Fails (Fix included) (fixed in [magento/magento2#13066](https://github.com/magento/magento2/pull/13066)) + * [#5550](https://github.com/magento/magento2/issues/5550) -- Incorrect language on swatch error (fixed in [magento-engcom/magento2ce#1117](https://github.com/magento-engcom/magento2ce/pull/1117)) + * [#11828](https://github.com/magento/magento2/issues/11828) -- Visual Swatches not showing swatch color in admin (fixed in [magento/magento2#13101](https://github.com/magento/magento2/pull/13101)) + * [#13095](https://github.com/magento/magento2/issues/13095) -- No locale for Swedish (Finland) (fixed in [magento-engcom/magento2ce#1207](https://github.com/magento-engcom/magento2ce/pull/1207)) + * [#11428](https://github.com/magento/magento2/issues/11428) -- Cart Price Rule Label is not working (fixed in [magento/magento2#13141](https://github.com/magento/magento2/pull/13141)) + * [#11497](https://github.com/magento/magento2/issues/11497) -- Discount Rule does not show Default Rule Label (fixed in [magento/magento2#13141](https://github.com/magento/magento2/pull/13141)) + * [#12430](https://github.com/magento/magento2/issues/12430) -- While assigning prices to configurable products, prices aren's readable when using custom price symbol. (fixed in [magento/magento2#13025](https://github.com/magento/magento2/pull/13025)) + * [#12322](https://github.com/magento/magento2/issues/12322) -- Bug with CDATA in XML layout update (fixed in [magento-engcom/magento2ce#1163](https://github.com/magento-engcom/magento2ce/pull/1163)) + * [#12714](https://github.com/magento/magento2/issues/12714) -- Extra records are in exported CSV file for order (fixed in [magento/magento2#13208](https://github.com/magento/magento2/pull/13208)) + * [#8624](https://github.com/magento/magento2/issues/8624) -- Stock status not coming back after qty update (fixed in [magento-engcom/magento2ce#955](https://github.com/magento-engcom/magento2ce/pull/955)) + * [#11897](https://github.com/magento/magento2/issues/11897) -- Catalog product list widget not working with multiple sku (fixed in [magento-engcom/magento2ce#1050](https://github.com/magento-engcom/magento2ce/pull/1050)) + * [#12147](https://github.com/magento/magento2/issues/12147) -- The function "isUsingStaticUrlsAllowed" (configuration setting "cms/wysiwyg/use_static_urls_in_catalog") doesn't have any effect with the WYSIWYG editor image insertion (fixed in [magento-engcom/magento2ce#1215](https://github.com/magento-engcom/magento2ce/pull/1215)) + * [#12819](https://github.com/magento/magento2/issues/12819) -- CartTotalRepository cannot handle extension attributes in quote addresses in 2.2.2 (fixed in [magento-engcom/magento2ce#1186](https://github.com/magento-engcom/magento2ce/pull/1186)) + * [#12993](https://github.com/magento/magento2/issues/12993) -- Type error in Cart/Totals (fixed in [magento-engcom/magento2ce#1186](https://github.com/magento-engcom/magento2ce/pull/1186)) + * [#12342](https://github.com/magento/magento2/issues/12342) -- JSTestDriver removal (fixed in [magento/magento2#12406](https://github.com/magento/magento2/pull/12406)) + * [#13126](https://github.com/magento/magento2/issues/13126) -- 2.2.2 - Duplicating Bundle Product Removes Bundle Options From Original Product (fixed in [magento-engcom/magento2ce#1217](https://github.com/magento-engcom/magento2ce/pull/1217)) + * [#7768](https://github.com/magento/magento2/issues/7768) -- Adding 'is_saleable' attribute to sort of product collection causes exception and adding 'is_salable' has no effect (fixed in [magento-engcom/magento2ce#1045](https://github.com/magento-engcom/magento2ce/pull/1045)) + * [#12231](https://github.com/magento/magento2/issues/12231) -- New Cart Rule : Small styles issue because of styles-old.css (fixed in [magento-engcom/magento2ce#1146](https://github.com/magento-engcom/magento2ce/pull/1146)) + * [#5697](https://github.com/magento/magento2/issues/5697) -- [2.1.0] Misleading feedback when sending tracking information email (fixed in [magento-engcom/magento2ce#1245](https://github.com/magento-engcom/magento2ce/pull/1245)) + * [#7213](https://github.com/magento/magento2/issues/7213) -- WEBAPI: PHP session is always started 2.1.2 (fixed in [magento-engcom/magento2ce#1247](https://github.com/magento-engcom/magento2ce/pull/1247)) + * [#5948](https://github.com/magento/magento2/issues/5948) -- Magento 2 configurable product selection stock issue (fixed in [magento/magento2#12936](https://github.com/magento/magento2/pull/12936)) + * [#10661](https://github.com/magento/magento2/issues/10661) -- Opacity png watermark became white box on product images (fixed in [magento/magento2#11060](https://github.com/magento/magento2/pull/11060)) + * [#13327](https://github.com/magento/magento2/issues/13327) -- Menu ui-state-active not removed from previous opened menu item (fixed in [magento/magento2#13341](https://github.com/magento/magento2/pull/13341)) + * [#8621](https://github.com/magento/magento2/issues/8621) -- M2.1 Multishipping Checkout step New Address - Old State is saved when country is changed (fixed in [magento/magento2#13364](https://github.com/magento/magento2/pull/13364)) + * [#7760](https://github.com/magento/magento2/issues/7760) -- M2.1.2 : Shipment Tracking REST API should throw an error if order doesn't exist. (fixed in [magento-engcom/magento2ce#1162](https://github.com/magento-engcom/magento2ce/pull/1162)) + * [#7849](https://github.com/magento/magento2/issues/7849) -- M2.x.x Translation Missing in Checkout for Tax (fixed in [magento-engcom/magento2ce#1147](https://github.com/magento-engcom/magento2ce/pull/1147)) + * [#12860](https://github.com/magento/magento2/issues/12860) -- Sort by Product Name doesn't work with Ancor and available filters (fixed in [magento-engcom/magento2ce#1192](https://github.com/magento-engcom/magento2ce/pull/1192)) + * [#7848](https://github.com/magento/magento2/issues/7848) -- M2.1.x : Require Customer To Be Logged In To Checkout (fixed in [magento-engcom/magento2ce#1148](https://github.com/magento-engcom/magento2ce/pull/1148)) + * [#11527](https://github.com/magento/magento2/issues/11527) -- Notification messages not disappearing after being displayed (fixed in [magento-engcom/magento2ce#1111](https://github.com/magento-engcom/magento2ce/pull/1111)) + * [#7698](https://github.com/magento/magento2/issues/7698) -- Admin Global Search was build in a hurry (fixed in [magento-engcom/magento2ce#1167](https://github.com/magento-engcom/magento2ce/pull/1167)) + * [#12574](https://github.com/magento/magento2/issues/12574) -- ConfigurationTest fails when installing via composer (fixed in [magento-engcom/magento2ce#1161](https://github.com/magento-engcom/magento2ce/pull/1161)) + * [#11798](https://github.com/magento/magento2/issues/11798) -- Magento 2.1.9 - Refunding / Credit Memo Total Value is not updated (fixed in [magento-engcom/magento2ce#1185](https://github.com/magento-engcom/magento2ce/pull/1185)) + * [#13497](https://github.com/magento/magento2/issues/13497) -- Method getUrl in Magento\Catalog\Model\Product\Attribute\Frontend returns image url with double slash (fixed in [magento/magento2#13498](https://github.com/magento/magento2/pull/13498)) + * [#12081](https://github.com/magento/magento2/issues/12081) -- Magento 2.2.0: Translations for 'Item in Cart' missing in mini cart. (fixed in [magento/magento2#13528](https://github.com/magento/magento2/pull/13528)) + * [#11252](https://github.com/magento/magento2/issues/11252) -- Custom attribute - File not allowing uploads (fixed in [magento/magento2#13563](https://github.com/magento/magento2/pull/13563)) + * [#12817](https://github.com/magento/magento2/issues/12817) -- Coupon code with canceled order (fixed in [magento-engcom/magento2ce#1095](https://github.com/magento-engcom/magento2ce/pull/1095)) + * [#11963](https://github.com/magento/magento2/issues/11963) -- Magento 2.2 language switching not working on catalog and Product Pages (fixed in [magento-engcom/magento2ce#1143](https://github.com/magento-engcom/magento2ce/pull/1143)) + * [#12791](https://github.com/magento/magento2/issues/12791) -- Customer & Product Tax class wrongly styled (fixed in [magento/magento2#13643](https://github.com/magento/magento2/pull/13643)) + * [#13429](https://github.com/magento/magento2/issues/13429) -- Magento 2.2.2 password reset strength meter (fixed in [magento/magento2#13761](https://github.com/magento/magento2/pull/13761)) + * [#13760](https://github.com/magento/magento2/issues/13760) -- Remove deprecated Brazilian currencies in the setup process (fixed in [magento/magento2#13770](https://github.com/magento/magento2/pull/13770)) + * [#5451](https://github.com/magento/magento2/issues/5451) -- Rating titles with whitespace results in broken ID attributes (fixed in [magento-engcom/magento2ce#1119](https://github.com/magento-engcom/magento2ce/pull/1119)) + * [#8035](https://github.com/magento/magento2/issues/8035) -- Join extension attributes are not added to Order results (REST api) (fixed in [magento-engcom/magento2ce#1168](https://github.com/magento-engcom/magento2ce/pull/1168)) + * [#13595](https://github.com/magento/magento2/issues/13595) -- loadCache for Block Magento\Theme\Block\Html\Footer dont work (fixed in [magento/magento2#13762](https://github.com/magento/magento2/pull/13762)) + * [#10595](https://github.com/magento/magento2/issues/10595) -- Low Stock Report Grid Empty (fixed in [magento/magento2#13682](https://github.com/magento/magento2/pull/13682)) + * [#13315](https://github.com/magento/magento2/issues/13315) -- Mobile "Payment Methods" step looks bad on mobile (fixed in [magento/magento2#13777](https://github.com/magento/magento2/pull/13777)) + * [#13791](https://github.com/magento/magento2/issues/13791) -- Submitting search form (mini) with empty value throws error on preventDefault (fixed in [magento/magento2#13811](https://github.com/magento/magento2/pull/13811)) + * [#12711](https://github.com/magento/magento2/issues/12711) -- Default Welcome message is broken on storefront with enabled translate-inline (fixed in [magento/magento2#13038](https://github.com/magento/magento2/pull/13038)) + * [#5863](https://github.com/magento/magento2/issues/5863) -- URL Rewrite issues occur very often /catalog/product/view/id/711/s/product-name/category/16/ (fixed in [magento/magento2#13567](https://github.com/magento/magento2/pull/13567)) + * [#8227](https://github.com/magento/magento2/issues/8227) -- After upgrade to 2.1.3 url rewrite problem multi store (fixed in [magento/magento2#13567](https://github.com/magento/magento2/pull/13567)) + * [#8957](https://github.com/magento/magento2/issues/8957) -- Permanent Redirect for old URL missing via API (fixed in [magento/magento2#13567](https://github.com/magento/magento2/pull/13567)) + * [#10073](https://github.com/magento/magento2/issues/10073) -- Magento don't create product redirect if URL key on store view level was changed. (fixed in [magento/magento2#13567](https://github.com/magento/magento2/pull/13567)) + * [#13240](https://github.com/magento/magento2/issues/13240) -- Permanent 301 redirect is not generated when product url changes on storeview scope (fixed in [magento/magento2#13567](https://github.com/magento/magento2/pull/13567)) + * [#13768](https://github.com/magento/magento2/issues/13768) -- Expired backend password - Attention: Something went wrong (fixed in [magento/magento2#13787](https://github.com/magento/magento2/pull/13787)) + * [#4454](https://github.com/magento/magento2/issues/4454) -- CMS Page with in layout update xml (fixed in [magento/magento2#13817](https://github.com/magento/magento2/pull/13817)) + * [#13350](https://github.com/magento/magento2/issues/13350) -- Magento 2.2 Encoding Issue -> Google Analytics (fixed in [magento/magento2#13844](https://github.com/magento/magento2/pull/13844)) + * [#13827](https://github.com/magento/magento2/issues/13827) -- Google Analytics character encoding issue ( \u0020 ) (fixed in [magento/magento2#13844](https://github.com/magento/magento2/pull/13844)) + * [#7765](https://github.com/magento/magento2/issues/7765) -- Filter block on category is still present also mode is to just show "static block" (fixed in [magento-engcom/magento2ce#1159](https://github.com/magento-engcom/magento2ce/pull/1159)) + * [#11512](https://github.com/magento/magento2/issues/11512) -- Incorrect use of 503 status code (fixed in [magento/magento2#11513](https://github.com/magento/magento2/pull/11513)) + * [#12889](https://github.com/magento/magento2/issues/12889) -- Wrong shipping fee in backend with multiple store views (fixed in [magento-engcom/magento2ce#1132](https://github.com/magento-engcom/magento2ce/pull/1132)) + * [#13216](https://github.com/magento/magento2/issues/13216) -- `quoteAddressToFormAddressData` mutates the argument (fixed in [magento/magento2#13217](https://github.com/magento/magento2/pull/13217)) + * [#13631](https://github.com/magento/magento2/issues/13631) -- Totals sort order is not respected in customer account order view (fixed in [magento/magento2#13641](https://github.com/magento/magento2/pull/13641)) + * [#7515](https://github.com/magento/magento2/issues/7515) -- Error when submit customer/account/editPost form and session expired (fixed in [magento-engcom/magento2ce#1187](https://github.com/magento-engcom/magento2ce/pull/1187)) + * [#12404](https://github.com/magento/magento2/issues/12404) -- Output of setup:static-content:deploy contains red color, should be a friendlier color (fixed in [magento/magento2#13709](https://github.com/magento/magento2/pull/13709)) + * [#13006](https://github.com/magento/magento2/issues/13006) -- Drop down values are not showing in catalog product grid magento2 (fixed in [magento/magento2#13861](https://github.com/magento/magento2/pull/13861)) + * [#13899](https://github.com/magento/magento2/issues/13899) -- Postal code (zip code) for Canada should allow postal codes without space (fixed in [magento/magento2#13930](https://github.com/magento/magento2/pull/13930)) +* GitHub pull requests: + * [magento/magento2#12171](https://github.com/magento/magento2/pull/12171) -- 7691: address with saveInAddressBook 0 are still being added to the address book for new customers(backport to 2.2) (by @RomaKis) + * [magento/magento2#12239](https://github.com/magento/magento2/pull/12239) -- Fixed php notice when invalid ui_component config is used (by @vovayatsyuk) + * [magento/magento2#11407](https://github.com/magento/magento2/pull/11407) -- Added CLI command to enable and disable the Profiler (by @peterjaap) + * [magento/magento2#12257](https://github.com/magento/magento2/pull/12257) -- Phpdoc improvements (by @KarlDeux) + * [magento/magento2#11997](https://github.com/magento/magento2/pull/11997) -- 11941: Invoice for products that use qty decimal rounds down to whole number. (by @nmalevanec) + * [magento/magento2#12283](https://github.com/magento/magento2/pull/12283) -- magento/magento2#12083: Cannot import zero (0) value into custom attribute (by @p-bystritsky) + * [magento/magento2#12296](https://github.com/magento/magento2/pull/12296) -- Issue: 3596. Resolve Notice with undefined index 'value' (by @madonzy) + * [magento/magento2#12303](https://github.com/magento/magento2/pull/12303) -- 9764: exception message is wrong and misleading in findAccessorMethodName() of Magento\Framework\Reflection\NameFinder (by @RomaKis) + * [magento/magento2#12304](https://github.com/magento/magento2/pull/12304) -- Handle empty or incorrect lines in a language CSV (by @FreekVandeursen) + * [magento/magento2#12276](https://github.com/magento/magento2/pull/12276) -- Webshop throws an exception when sharing wishlist with RSS enabled (by @mediactbv) + * [magento/magento2#12310](https://github.com/magento/magento2/pull/12310) -- Fix robots.txt content type to 'text/plain' (by @tufahu) + * [magento/magento2#12332](https://github.com/magento/magento2/pull/12332) -- 9684: No ACL set for integrations (by @RomaKis) + * [magento/magento2#11787](https://github.com/magento/magento2/pull/11787) -- Fix #10438: Potential error on order edit page when address has extension attributes (by @joni-jones) + * [magento/magento2#12003](https://github.com/magento/magento2/pull/12003) -- magento/magento2#11691: Wrong return type for getAttributeText($attributeCode) (by @p-bystritsky) + * [magento/magento2#12308](https://github.com/magento/magento2/pull/12308) -- 12261: Order confirmation email contains non functioning links #12261 (by @RomaKis) + * [magento/magento2#12302](https://github.com/magento/magento2/pull/12302) -- Fixed 'Non-numeric value' warning on account create/save when DOB field is visible (by @vovayatsyuk) + * [magento/magento2#11320](https://github.com/magento/magento2/pull/11320) -- Fix email not sent when sitemap generation has errors (by @marinagociu) + * [magento/magento2#11429](https://github.com/magento/magento2/pull/11429) -- Magento 2.2.0 A solution for Product Repeat Issue after filter on category listing page. (by @mayankzalavadia) + * [magento/magento2#11550](https://github.com/magento/magento2/pull/11550) -- Even existing credit memos should be refundable if their state is open (by @ajpevers) + * [magento/magento2#11809](https://github.com/magento/magento2/pull/11809) -- 8003: Using System Value for Base Currency Results in Config Error. (by @nmalevanec) + * [magento/magento2#11592](https://github.com/magento/magento2/pull/11592) -- Fix issue #10347 - Wrong order tax amounts displayed when using specific tax configuration (2.2-develop) (by @PieterCappelle) + * [magento/magento2#11539](https://github.com/magento/magento2/pull/11539) -- Fix depends field not working for radio elements (by @jahvi) + * [magento/magento2#11846](https://github.com/magento/magento2/pull/11846) -- Fixed a js bug where ui_component labels have the wrong sort order. (by @deiserh) + * [magento/magento2#11965](https://github.com/magento/magento2/pull/11965) -- 11792: Can't add customizable options to product (by @RomaKis) + * [magento/magento2#12048](https://github.com/magento/magento2/pull/12048) -- #11528 can't save customizable options (by @luismiguelyangehuaman) + * [magento/magento2#12108](https://github.com/magento/magento2/pull/12108) -- 12064: Database Rollback not working with magento 2.1.9? (by @RomaKis) + * [magento/magento2#12387](https://github.com/magento/magento2/pull/12387) -- Update CAPTCHA labels to reflect the symbols in the CAPTCHA image (by @RhodriOwainDavies) + * [magento/magento2#12120](https://github.com/magento/magento2/pull/12120) -- Update AbstractBackend.php (by @hewersonfreitas) + * [magento/magento2#12154](https://github.com/magento/magento2/pull/12154) -- Add link to issue gates wiki page in the labels section of the readme (by @dmanners) + * [magento/magento2#11422](https://github.com/magento/magento2/pull/11422) -- [Backport 2.2] Translate order getCreatedAtFormatted() to store locale (by @JeroenVanLeusden) + * [magento/magento2#11473](https://github.com/magento/magento2/pull/11473) -- Fix for remove 'product_list_toolbar' block from layout in XML #9413 (by @mariuscris) + * [magento/magento2#11670](https://github.com/magento/magento2/pull/11670) -- save invoice ID on credit memo when using API method salesRefundInvoiceV1 (by @ajpevers) + * [magento/magento2#11992](https://github.com/magento/magento2/pull/11992) -- 11740: Sending emails from Admin in Multi-Store Environment defaults to Primary Store (by @RomaKis) + * [magento/magento2#12036](https://github.com/magento/magento2/pull/12036) -- Add swatch option: Prevent loosing data and default value if data is not populated via adminhtml (by @gomencal) + * [magento/magento2#12227](https://github.com/magento/magento2/pull/12227) -- Shipping method fixtures not compatible with getShippingMethod(true) in OrderCreateTest (by @andrew-garside-temando) + * [magento/magento2#12241](https://github.com/magento/magento2/pull/12241) -- 10128: New Orders not being saved to order grid (by @RomaKis) + * [magento/magento2#12132](https://github.com/magento/magento2/pull/12132) -- 10210: Transport variable can not be altered in email_invoice_set_template_vars_before Event (backport MAGETWO-69482 to 2.2) (by @RomaKis) + * [magento/magento2#11389](https://github.com/magento/magento2/pull/11389) -- Attribute category_ids issue (by @manuelson) + * [magento/magento2#12133](https://github.com/magento/magento2/pull/12133) -- Fix for issue 12127: Single quotation marks are now decoded properly in admin attribute option input fields (by @erfanimani) + * [magento/magento2#12253](https://github.com/magento/magento2/pull/12253) -- New validation: 3bytes characters filter (4 bytes characters cannot be stored using UTF8) (by @KarlDeux) + * [magento/magento2#12328](https://github.com/magento/magento2/pull/12328) -- 9742: Default welcome message returns after being deleted #9742 (by @RomaKis) + * [magento/magento2#12057](https://github.com/magento/magento2/pull/12057) -- [Backport] magento/magento2#9961: Unused product attributes display with value N/A or NO on storefront. (by @p-bystritsky) + * [magento/magento2#12441](https://github.com/magento/magento2/pull/12441) -- Add command "app:config:status" to check if "app:config:import" needed (by @jalogut) + * [magento/magento2#12443](https://github.com/magento/magento2/pull/12443) -- Fixed missing 'size' and 'type' props on a third-party category images [Backport 2.2] (by @vovayatsyuk) + * [magento/magento2#12495](https://github.com/magento/magento2/pull/12495) -- Fixed invalid parameter type in phpdoc block in Topmenu class (by @vovayatsyuk) + * [magento/magento2#11323](https://github.com/magento/magento2/pull/11323) -- Defaulting missing alt-text for a product to use the product name. (by @brobie) + * [magento/magento2#11388](https://github.com/magento/magento2/pull/11388) -- Fix #11236: Web Setup Wizard Icon Inconsistency (by @dverkade) + * [magento/magento2#11485](https://github.com/magento/magento2/pull/11485) -- do the stock check on default level because the stock on website leve… (by @joost-florijn-kega) + * [magento/magento2#11926](https://github.com/magento/magento2/pull/11926) -- 8255: Export Products action doesn't consider hide_for_product_page value. (by @nmalevanec) + * [magento/magento2#12207](https://github.com/magento/magento2/pull/12207) -- 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode. (by @nmalevanec) + * [magento/magento2#11052](https://github.com/magento/magento2/pull/11052) -- Keep maintenance mode on if it was previously enabled (by @jokeputs) + * [magento/magento2#12038](https://github.com/magento/magento2/pull/12038) -- #11825: Generate new FormKey and replace for oldRequestParams Wishlist (by @osrecio) + * [magento/magento2#12161](https://github.com/magento/magento2/pull/12161) -- Fix delay initialization options for customized JQuery UI menu widget (by @scazz010) + * [magento/magento2#12466](https://github.com/magento/magento2/pull/12466) -- Category page X-Magento-Tags headers contains product cache identities even which category display mode is set to "Static block only" (by @atishgoswami) + * [magento/magento2#12515](https://github.com/magento/magento2/pull/12515) -- The left and the right parts of assignment are equal (by @lfluvisotto) + * [magento/magento2#12499](https://github.com/magento/magento2/pull/12499) -- Format generated config files using the short array syntax (by @cykirsch) + * [magento/magento2#12513](https://github.com/magento/magento2/pull/12513) -- Duplicate array key (by @lfluvisotto) + * [magento/magento2#12516](https://github.com/magento/magento2/pull/12516) -- Case mismatch (by @lfluvisotto) + * [magento/magento2#11444](https://github.com/magento/magento2/pull/11444) -- [Backport 2.2-develop] #11324 REST API - Only associate automatically product with all websites when creating product in All Store Views scope (by @adrian-martinez-interactiv4) + * [magento/magento2#11608](https://github.com/magento/magento2/pull/11608) -- Fix for issue 9633 500 error on setup wizard with memcache (by @sylink) + * [magento/magento2#11617](https://github.com/magento/magento2/pull/11617) -- Re saving product attribute (by @raumatbel) + * [magento/magento2#12359](https://github.com/magento/magento2/pull/12359) -- Add a --no-update option to sampledata:deploy and sampledata:remove commands (by @schmengler) + * [magento/magento2#12530](https://github.com/magento/magento2/pull/12530) -- Added correction for og:type content value (by @atishgoswami) + * [magento/magento2#11099](https://github.com/magento/magento2/pull/11099) -- Fix syntax of expectException() calls (by @schmengler) + * [magento/magento2#11435](https://github.com/magento/magento2/pull/11435) -- [Backport 2.2-develop] #11409: Too many password reset requests even when disabled in settings (by @adrian-martinez-interactiv4) + * [magento/magento2#12122](https://github.com/magento/magento2/pull/12122) -- [2.2] - Add command to view mview state and queue (by @convenient) + * [magento/magento2#12167](https://github.com/magento/magento2/pull/12167) -- 12110: Missing cascade into attribute set deletion. (by @nmalevanec) + * [magento/magento2#12469](https://github.com/magento/magento2/pull/12469) -- Added namespace to product videos fotorama events (by @roma84) + * [magento/magento2#12507](https://github.com/magento/magento2/pull/12507) -- Issue 12506: Fixup typo getDispretionPath -> getDispersionPath (by @PascalBrouwers) + * [magento/magento2#12539](https://github.com/magento/magento2/pull/12539) -- Trying to get data from non existent products (by @angelo983) + * [magento/magento2#12541](https://github.com/magento/magento2/pull/12541) -- [Backport 2.2-develop] Fix swagger-ui on instances of Magento running on a non-standard port (by @JeroenVanLeusden) + * [magento/magento2#12220](https://github.com/magento/magento2/pull/12220) -- 12180 Remove unnecessary use operator for Context, causes 503 error i… (by @chris-pook) + * [magento/magento2#12477](https://github.com/magento/magento2/pull/12477) -- NewRelic: Disables Module Deployments, Creates new Deploy Marker Command (by @fooman) + * [magento/magento2#12529](https://github.com/magento/magento2/pull/12529) -- #12450: Set Current Store from Store Code if isUseStoreInUrl (by @osrecio) + * [magento/magento2#12606](https://github.com/magento/magento2/pull/12606) -- Fix error loading theme configuration on PHP 7.2 (by @Alanaktion) + * [magento/magento2#12610](https://github.com/magento/magento2/pull/12610) -- Update CrontabManager.php (by @WaPoNe) + * [magento/magento2#12639](https://github.com/magento/magento2/pull/12639) -- Remove @escapeNotVerified from documentation (by @mzeis) + * [magento/magento2#11702](https://github.com/magento/magento2/pull/11702) -- Fix getReservedOrderId() to use current store instead of default store (by @tdgroot) + * [magento/magento2#12633](https://github.com/magento/magento2/pull/12633) -- Magento Connect no longer exist (by @miguelbalparda) + * [magento/magento2#12063](https://github.com/magento/magento2/pull/12063) -- 11946: Layer navigation showing wrong product count (by @RomaKis) + * [magento/magento2#12661](https://github.com/magento/magento2/pull/12661) -- [2.2-develop] Fixes #12660 invalid parameter configuration provided for argument (by @Tomasz-Silpion) + * [magento/magento2#11563](https://github.com/magento/magento2/pull/11563) -- Add price calculation improvement for product option value price (by @marinagociu) + * [magento/magento2#12666](https://github.com/magento/magento2/pull/12666) -- Fix incorrect DHL Product codes (by @gwharton) + * [magento/magento2#12723](https://github.com/magento/magento2/pull/12723) -- [2.2 Backport] Create CODE_OF_CONDUCT.md (by @ishakhsuvarov) + * [magento/magento2#11070](https://github.com/magento/magento2/pull/11070) -- Remove deprecation without alternative (by @schmengler) + * [magento/magento2#12730](https://github.com/magento/magento2/pull/12730) -- 12713 (by @EfremovaVI) + * [magento/magento2#12743](https://github.com/magento/magento2/pull/12743) -- #9453 - ported down c2e5d77a9516c8305585e819c2f0a0629648cc14 (by @strell) + * [magento/magento2#12747](https://github.com/magento/magento2/pull/12747) -- magento/magento2#9720 Menu item dependencies (dependsOnModule, depend… (by @hannassy) + * [magento/magento2#12767](https://github.com/magento/magento2/pull/12767) -- magento/magento2#12699: Multiselect Attribute is not saved (by @awarche) + * [magento/magento2#12786](https://github.com/magento/magento2/pull/12786) -- Fix typo in SINGLE_PRODUCT_LAYOUT_HANLDE (by @aschrammel) + * [magento/magento2#12630](https://github.com/magento/magento2/pull/12630) -- Add customer login url from Customer Url model to checkout config so … (by @quisse) + * [magento/magento2#12732](https://github.com/magento/magento2/pull/12732) -- Fix issue when tracking link returns 404 page in admin panel (by @ihor-sviziev) + * [magento/magento2#12739](https://github.com/magento/magento2/pull/12739) -- magento/magento2#6113: Validate range-words in Form component (UI Component) (by @Zamoroka) + * [magento/magento2#12738](https://github.com/magento/magento2/pull/12738) -- magento/magento2#12719: Use full name in welcome message (by @xpoback) + * [magento/magento2#12758](https://github.com/magento/magento2/pull/12758) -- magento/magento2#5035 Cannot subscribe to events with a number in name (by @Mobecls) + * [magento/magento2#12759](https://github.com/magento/magento2/pull/12759) -- Fix Back to Sign in url on confirmation form (by @StasKozar) + * [magento/magento2#12810](https://github.com/magento/magento2/pull/12810) -- Stop the profiler when returning early in \Magento\Eav\Model\Config::getAttribute (by @nicka101) + * [magento/magento2#12826](https://github.com/magento/magento2/pull/12826) -- Fix PhpDoc to show correct parameter types (by @FreekVandeursen) + * [magento/magento2#11462](https://github.com/magento/magento2/pull/11462) -- #7241: Always add empty option for prefix and/or suffix if optional (by @avstudnitz) + * [magento/magento2#11686](https://github.com/magento/magento2/pull/11686) -- Fix error when generating urn catalog for empty misc.xml (by @tdgroot) + * [magento/magento2#11878](https://github.com/magento/magento2/pull/11878) -- [BUGFIX] Made method public so a plugin is possible. (by @dheesbeen) + * [magento/magento2#12105](https://github.com/magento/magento2/pull/12105) -- #11936:required attribute set id filter on attribute group repository getList (by @tzyganu) + * [magento/magento2#12636](https://github.com/magento/magento2/pull/12636) -- #12625: Add Current Date to update_time Field for Block and Pages (by @osrecio) + * [magento/magento2#12737](https://github.com/magento/magento2/pull/12737) -- magento/magento2#11953: Product configuration creator does not warn about invalid SKUs (by @Zamoroka) + * [magento/magento2#12751](https://github.com/magento/magento2/pull/12751) -- magento/magento2#12439 Newsletter subscription success email not sent… (by @Styopchik) + * [magento/magento2#12884](https://github.com/magento/magento2/pull/12884) -- [Backport 2.2] Update functional.suite.dist.yml to handle a custom backend name (by @scribam) + * [magento/magento2#12734](https://github.com/magento/magento2/pull/12734) -- #6916 Fix notice during Update Bundle Product without changes (by @dzianis-yurevich) + * [magento/magento2#12859](https://github.com/magento/magento2/pull/12859) -- Throw ValidationException for invalid xml (by @pmclain) + * [magento/magento2#12875](https://github.com/magento/magento2/pull/12875) -- Add more parameters to ajax:addToCart (by @srenon) + * [magento/magento2#12736](https://github.com/magento/magento2/pull/12736) -- Issues/12374 (by @virtual97) + * [magento/magento2#12401](https://github.com/magento/magento2/pull/12401) -- Correctly set payment information when using paypal (by @therool) + * [magento/magento2#12768](https://github.com/magento/magento2/pull/12768) -- magento/magento2: Missing ext-bcmath dependency added (by @Mobecls) + * [magento/magento2#12845](https://github.com/magento/magento2/pull/12845) -- Add missing preference for ObjectManager\ConfigInterface in integrati… (by @schmengler) + * [magento/magento2#12857](https://github.com/magento/magento2/pull/12857) -- Update progress.phtml (by @jonashrem) + * [magento/magento2#12887](https://github.com/magento/magento2/pull/12887) -- Remove unused if statement in order invoice save (by @JeroenVanLeusden) + * [magento/magento2#12931](https://github.com/magento/magento2/pull/12931) -- Display scroll bar of admin store switcher in OSX computers. (by @jalogut) + * [magento/magento2#12946](https://github.com/magento/magento2/pull/12946) -- Respect "Learn More Link" in Recently Viewed Products widget options (by @JeroenVanLeusden) + * [magento/magento2#12951](https://github.com/magento/magento2/pull/12951) -- [Bug] Correctly construct Magento\Framework\Phrase (by @punkstar) + * [magento/magento2#12755](https://github.com/magento/magento2/pull/12755) -- magento/magento2#12294: Bug: Adding Custom Attribute - The value of A… (by @virtual97) + * [magento/magento2#12902](https://github.com/magento/magento2/pull/12902) -- Fix #12900: Braintree "Place Order" button is disabled after failed validation (by @joni-jones) + * [magento/magento2#12945](https://github.com/magento/magento2/pull/12945) -- Naming collision in Javascript ui registry (backend) to 2.2 (by @VladimirZaets) + * [magento/magento2#12521](https://github.com/magento/magento2/pull/12521) -- Match flexible static file version in nginx sample config (by @scottsb) + * [magento/magento2#12752](https://github.com/magento/magento2/pull/12752) -- magento/magento2#4292: Ability to sitch to default mode (by @Etty) + * [magento/magento2#12953](https://github.com/magento/magento2/pull/12953) -- [Backport to 2.2-develop] Fix #2156 Js\Dataprovider uses the RendererInterface. (by @dverkade) + * [magento/magento2#12963](https://github.com/magento/magento2/pull/12963) -- Sort configurable attribute options by sort_order (by @wardcapp) + * [magento/magento2#12862](https://github.com/magento/magento2/pull/12862) -- Change _getHtml to append class rather than overwrite for children (by @jonshipman) + * [magento/magento2#13015](https://github.com/magento/magento2/pull/13015) -- [Backport to 2.2-develop] The quote address fields length expanded in the database (by @dverkade) + * [magento/magento2#13027](https://github.com/magento/magento2/pull/13027) -- Change of copyright year from 2017 to 2018. (by @bhargavmehta) + * [magento/magento2#12649](https://github.com/magento/magento2/pull/12649) -- #12446: Add GetUtilityPageIdentifiers for Manage Custom Pages to be excluded … (by @osrecio) + * [magento/magento2#12917](https://github.com/magento/magento2/pull/12917) -- Fix issue 12894: Can't remove State is required for all countries (by @vasilii-b) + * [magento/magento2#12922](https://github.com/magento/magento2/pull/12922) -- Handle multiple errors in customer address validation when shown in adminhtml customer edit page (by @adrian-martinez-interactiv4) + * [magento/magento2#13019](https://github.com/magento/magento2/pull/13019) -- [Backport to 2.2-develop] Attribute with "Catalog Input Type for Store Owner" equal "Fixed Product Tax" for Multi-store (by @dverkade) + * [magento/magento2#13052](https://github.com/magento/magento2/pull/13052) -- Make "top destinations" config field configurable on store level (by @avstudnitz) + * [magento/magento2#12901](https://github.com/magento/magento2/pull/12901) -- FIX: remove not used count() from templates (by @Coderimus) + * [magento/magento2#13050](https://github.com/magento/magento2/pull/13050) -- Updated cron documentation URL to 2.2 (by @robbie-thompson) + * [magento/magento2#11369](https://github.com/magento/magento2/pull/11369) -- Database backup doesn't include triggers #9036 (by @denisristic) + * [magento/magento2#12731](https://github.com/magento/magento2/pull/12731) -- magento/magento2#12209: Substitution payment method - Incorrect message (by @Zamoroka) + * [magento/magento2#12964](https://github.com/magento/magento2/pull/12964) -- Add trim filter to first, middle and lastname. (by @wardcapp) + * [magento/magento2#12985](https://github.com/magento/magento2/pull/12985) -- Fix jumping content on page reload in admin area (by @avoelkl) + * [magento/magento2#13026](https://github.com/magento/magento2/pull/13026) -- Feature space between category page (by @sanjay-wagento) + * [magento/magento2#13041](https://github.com/magento/magento2/pull/13041) -- Solution For Newsletter subscribe button title wrapped (by @monaemipro) + * [magento/magento2#13051](https://github.com/magento/magento2/pull/13051) -- Fix JS error on cart from postcode validation when 'US' is deselected as an allowed country (by @codekipple) + * [magento/magento2#13076](https://github.com/magento/magento2/pull/13076) -- Fix issues caused by using continue in loops (by @ihor-sviziev) + * [magento/magento2#13029](https://github.com/magento/magento2/pull/13029) -- Newsletter Label is broking on chinese Language like 订阅 (by @dasharath-wagento) + * [magento/magento2#12965](https://github.com/magento/magento2/pull/12965) -- Fix vault_payment_token install script type where column defaults were not set (by @helloitsluke) + * [magento/magento2#13030](https://github.com/magento/magento2/pull/13030) -- Resolved Checkout-Payment-Wrong promo code cancelled issue (by @chiragp-wagento) + * [magento/magento2#13039](https://github.com/magento/magento2/pull/13039) -- Feature minimum order amount notice issue (by @neeta-wagento) + * [magento/magento2#13061](https://github.com/magento/magento2/pull/13061) -- Fix for requireJS loading issues (for ad blockers) (by @Yonn-Trimoreau) + * [magento/magento2#13081](https://github.com/magento/magento2/pull/13081) -- Fix for #11796 Magento2.2.0 home page product grid issues (by @punitv) + * [magento/magento2#13084](https://github.com/magento/magento2/pull/13084) -- Fixed magnifier issue. (by @mayankzalavadia) + * [magento/magento2#12668](https://github.com/magento/magento2/pull/12668) -- Fix for reverting stock twice for cancelled orders (by @dverkade) + * [magento/magento2#13034](https://github.com/magento/magento2/pull/13034) -- Magento 2.2 Develop fix for #12221 Google Analytics Pageview Triggered twice (by @bhargavmehta) + * [magento/magento2#13036](https://github.com/magento/magento2/pull/13036) -- magento/magento2#12705: Integrity constraint violation error after re… (by @vinayshah) + * [magento/magento2#13044](https://github.com/magento/magento2/pull/13044) -- Fix Newsletter Subscribe Workflow (by @torhoehn) + * [magento/magento2#13161](https://github.com/magento/magento2/pull/13161) -- Updated README file to take resources from 2.2 instead of 2.0. (by @bhargavmehta) + * [magento/magento2#12990](https://github.com/magento/magento2/pull/12990) -- [2.2.x] Fix undeclared dependency magento/zendframework1 by magento/framework (by @ihor-sviziev) + * [magento/magento2#12998](https://github.com/magento/magento2/pull/12998) -- Make customer name link to customer dashboard (by @srenon) + * [magento/magento2#13033](https://github.com/magento/magento2/pull/13033) -- Newsletter\Model\Subscriber::loadByEmail() does not use MySQL index (by @devamitbera) + * [magento/magento2#13066](https://github.com/magento/magento2/pull/13066) -- Fix for #12877 as per @azeemism (by @jagritijoshi) + * [magento/magento2#13086](https://github.com/magento/magento2/pull/13086) -- Add failsafe to items.phtml (by @samgranger) + * [magento/magento2#13169](https://github.com/magento/magento2/pull/13169) -- Optimization: magento/module-eav is_null change to strict comparison … (by @Coderimus) + * [magento/magento2#13170](https://github.com/magento/magento2/pull/13170) -- Optimization: magento/module-tax is_null change to strict comparison (by @Coderimus) + * [magento/magento2#13155](https://github.com/magento/magento2/pull/13155) -- Optimization: module-sales is_null change to strict comparison instead (by @Coderimus) + * [magento/magento2#13171](https://github.com/magento/magento2/pull/13171) -- Optimization: magento/module-catalog is_null change to strict comparison (by @Coderimus) + * [magento/magento2#13174](https://github.com/magento/magento2/pull/13174) -- Fix: remove TestObserver class (by @Coderimus) + * [magento/magento2#12807](https://github.com/magento/magento2/pull/12807) -- Reorder adding of page layout handles (by @aschrammel) + * [magento/magento2#13101](https://github.com/magento/magento2/pull/13101) -- 11828 Fix issue with swatch colour block not showing in admin panel once colour selected (PHP7.1.x issue). (by @chris-pook) + * [magento/magento2#13082](https://github.com/magento/magento2/pull/13082) -- Fix Magento_Checkout address formatting (by @nfourteen) + * [magento/magento2#13141](https://github.com/magento/magento2/pull/13141) -- Fix missing discount label in checkout (by @ihor-sviziev) + * [magento/magento2#13025](https://github.com/magento/magento2/pull/13025) -- fixed issue prices aren't readable when using custom price symbol (by @pradeep-wagento) + * [magento/magento2#13208](https://github.com/magento/magento2/pull/13208) -- #12714 - pass parameter for export button url (by @sanjay-wagento) + * [magento/magento2#12406](https://github.com/magento/magento2/pull/12406) -- Issue/12342/js test driver removal (by @KarlDeux) + * [magento/magento2#13310](https://github.com/magento/magento2/pull/13310) -- Add the domReady! statement (by @arnoudhgz) + * [magento/magento2#13324](https://github.com/magento/magento2/pull/13324) -- Alignement Array assignement (by @Nolwennig) + * [magento/magento2#12936](https://github.com/magento/magento2/pull/12936) -- FIX: out-of-stock options for configurable product visible on frontend as sellable (by @Coderimus) + * [magento/magento2#11060](https://github.com/magento/magento2/pull/11060) -- Handle transparncy correctly for watermark (by @elzekool) + * [magento/magento2#13408](https://github.com/magento/magento2/pull/13408) -- Translate time zone label according to current locale in Stores > Configuration > Advanced Reporting (by @adrian-martinez-interactiv4) + * [magento/magento2#12650](https://github.com/magento/magento2/pull/12650) -- Add fallback for Product_links position attribute if not set in request (by @mohammedsalem) + * [magento/magento2#13341](https://github.com/magento/magento2/pull/13341) -- Bugfix/13327 ui active state not removed from previous menu item (by @arnoudhgz) + * [magento/magento2#13364](https://github.com/magento/magento2/pull/13364) -- [Backport 2.2] In checkout->multishipping-> new addres clean region when select country without dropdown for states (by @enriquei4) + * [magento/magento2#13373](https://github.com/magento/magento2/pull/13373) -- Edited doc block of the walk method in a Collection (by @ByteCreation) + * [magento/magento2#13436](https://github.com/magento/magento2/pull/13436) -- Product Link Save Handler - Remove not used constructor dependency (by @ihor-sviziev) + * [magento/magento2#13449](https://github.com/magento/magento2/pull/13449) -- Fix default discount tax calculation in double (by @VincentMarmiesse) + * [magento/magento2#13450](https://github.com/magento/magento2/pull/13450) -- Removed each function usage (by @ihor-sviziev) + * [magento/magento2#13485](https://github.com/magento/magento2/pull/13485) -- Update code formatting in Swagger Block (by @JeroenVanLeusden) + * [magento/magento2#13132](https://github.com/magento/magento2/pull/13132) -- Update the Emogrifier dependency to ^2.0.0 (by @oliverklee) + * [magento/magento2#13494](https://github.com/magento/magento2/pull/13494) -- Fixing of Problem with updating stock item qty and stock status (by @nuzil) + * [magento/magento2#13498](https://github.com/magento/magento2/pull/13498) -- issue #13497 - Method getUrl in Magento\Catalog\Model\Product\Attribu… (by @igortregub) + * [magento/magento2#13040](https://github.com/magento/magento2/pull/13040) -- magento/magento2#: Customer Login/Logout Issue (by @vinayshah) + * [magento/magento2#13462](https://github.com/magento/magento2/pull/13462) -- Switch updatecart qty input validators to dynamic instead of hardcoding (by @gil--) + * [magento/magento2#13528](https://github.com/magento/magento2/pull/13528) -- Fix for #12081: missing translations in the js-translations.json (by @mattijv) + * [magento/magento2#13563](https://github.com/magento/magento2/pull/13563) -- magento/magento2#11252: fix adminhtml file attribute edit form (by @Mkennethsmith) + * [magento/magento2#13551](https://github.com/magento/magento2/pull/13551) -- Fix json encoded attribute backend type to not encode attribute value multiple times (by @tkotosz) + * [magento/magento2#12843](https://github.com/magento/magento2/pull/12843) -- Display a more meaningful error message in case of misspelt module name (by @JanisE) + * [magento/magento2#13438](https://github.com/magento/magento2/pull/13438) -- Product image builder - Override attributes when builder used multiple times (by @ihor-sviziev) + * [magento/magento2#13596](https://github.com/magento/magento2/pull/13596) -- Fix adding values to system variable collection (by @mszydlo) + * [magento/magento2#13614](https://github.com/magento/magento2/pull/13614) -- Show redirect_to_base config in store scope (by @JeroenVanLeusden) + * [magento/magento2#11504](https://github.com/magento/magento2/pull/11504) -- Add MagentoStyle as Console Input/output helper object... (by @wesleywmd) + * [magento/magento2#13587](https://github.com/magento/magento2/pull/13587) -- Show maintenance IP-address without commas (by @barryvdh) + * [magento/magento2#13679](https://github.com/magento/magento2/pull/13679) -- Update StorageInterface.php (by @davidangel) + * [magento/magento2#13663](https://github.com/magento/magento2/pull/13663) -- Refactoring: remove unuseful temporary variable (by @real34) + * [magento/magento2#13698](https://github.com/magento/magento2/pull/13698) -- [Travis Test Fix] Add MagentoStyle as Console Input/output (by @magento-engcom-team) + * [magento/magento2#13586](https://github.com/magento/magento2/pull/13586) -- Add option to add IP address to existing list (by @barryvdh) + * [magento/magento2#13643](https://github.com/magento/magento2/pull/13643) -- Fixes #12791 - Use a selector to only select the correct tax rate sel… (by @hostep) + * [magento/magento2#13661](https://github.com/magento/magento2/pull/13661) -- Typo (address not addres) (by @srenon) + * [magento/magento2#13678](https://github.com/magento/magento2/pull/13678) -- Add RewriteBase directive template in .htaccess file into pub/static folder (by @ccasciotti) + * [magento/magento2#13740](https://github.com/magento/magento2/pull/13740) -- Display a more meaningful error message in case of misspelt module name unit test. (by @nmalevanec) + * [magento/magento2#13742](https://github.com/magento/magento2/pull/13742) -- Fix adding values to system variable collection unit test. (by @nmalevanec) + * [magento/magento2#13761](https://github.com/magento/magento2/pull/13761) -- Fix bug Magento 2.2.2 password reset strength meter #13429 (by @aoldoni) + * [magento/magento2#13759](https://github.com/magento/magento2/pull/13759) -- Add ObserverInterface to the api (by @fooman) + * [magento/magento2#13770](https://github.com/magento/magento2/pull/13770) -- Remove not-allowed currencies from the currencies dropdown in Setup (by @r-martins) + * [magento/magento2#12749](https://github.com/magento/magento2/pull/12749) -- Grid filtration doesn't work for mysql special characters (by @laconica-sergey) + * [magento/magento2#13280](https://github.com/magento/magento2/pull/13280) -- Add option "lock-config" for shell command "config:set" (by @avstudnitz) + * [magento/magento2#13584](https://github.com/magento/magento2/pull/13584) -- Ensure DeploymentConfig Reader always returns an array (by @barryvdh) + * [magento/magento2#13680](https://github.com/magento/magento2/pull/13680) -- Cast handling fee to float (by @schmengler) + * [magento/magento2#13762](https://github.com/magento/magento2/pull/13762) -- Remove forced setting of cache_lifetime to false in constructor and set default cache_lifetime to 3600 (by @zolat) + * [magento/magento2#12564](https://github.com/magento/magento2/pull/12564) -- Add visibility and status filter to category product grid (by @peterjaap) + * [magento/magento2#13682](https://github.com/magento/magento2/pull/13682) -- [Backport-2.2] of PR-#10935 Fix LowStock report in All Websites view (by @gwharton) + * [magento/magento2#13700](https://github.com/magento/magento2/pull/13700) -- Fix faulty admin spinner animation (by @RNanoware) + * [magento/magento2#13777](https://github.com/magento/magento2/pull/13777) -- Fix #13315. Mobile 'Payments methods' step looks bad on mobile (by @Frodigo) + * [magento/magento2#13811](https://github.com/magento/magento2/pull/13811) -- Added missing event parameter for proxy function on the search form submit (by @koenner01) + * [magento/magento2#13816](https://github.com/magento/magento2/pull/13816) -- Add @api annotation to block argument marker interface (by @Vinai) + * [magento/magento2#13830](https://github.com/magento/magento2/pull/13830) -- Minicart should require dropdownDialog (by @amenk) + * [magento/magento2#13038](https://github.com/magento/magento2/pull/13038) -- Default Welcome message is broken on storefront with enabled translate-inline (by @pareshpansuriya) + * [magento/magento2#13567](https://github.com/magento/magento2/pull/13567) -- Add integration tests for product urls rewrite generation (by @adrien-louis-r) + * [magento/magento2#13787](https://github.com/magento/magento2/pull/13787) -- Issue-13768 Fixed error messages on admin user account page after redirect for force password change (by @nuzil) + * [magento/magento2#13817](https://github.com/magento/magento2/pull/13817) -- Allow changing head and body element through xml layout updates (by @cedricziel) + * [magento/magento2#13828](https://github.com/magento/magento2/pull/13828) -- Inconsistent Redirect in Admin Notification Controller (by @chickenland) + * [magento/magento2#13844](https://github.com/magento/magento2/pull/13844) -- Fix issue 13827 (by @julienanquetil) + * [magento/magento2#13897](https://github.com/magento/magento2/pull/13897) -- Fix typo in securityCheckers array (by @pmclain) + * [magento/magento2#13796](https://github.com/magento/magento2/pull/13796) -- Save CMS Block using repository (by @JeroenVanLeusden) + * [magento/magento2#13814](https://github.com/magento/magento2/pull/13814) -- Load CMS Page using repository in save action (by @JeroenVanLeusden) + * [magento/magento2#11513](https://github.com/magento/magento2/pull/11513) -- Modify Report processor to return 500 (by @andrewhowdencom) + * [magento/magento2#13914](https://github.com/magento/magento2/pull/13914) -- Pass Expected Data Type in backgroundColor Call (2.2) (by @northernco) + * [magento/magento2#13217](https://github.com/magento/magento2/pull/13217) -- Fix JS address converter function from mutating its argument (by @vaaralav) + * [magento/magento2#13641](https://github.com/magento/magento2/pull/13641) -- Add missing implementation for applySortOrder() (by @schmengler) + * [magento/magento2#13709](https://github.com/magento/magento2/pull/13709) -- Changes static content deploy log levels verbosity (by @hostep) + * [magento/magento2#13750](https://github.com/magento/magento2/pull/13750) -- Less clean up (by @Karlasa) + * [magento/magento2#13861](https://github.com/magento/magento2/pull/13861) -- Solved this issue : Drop down values are not showing in catalog produ… (by @hiren-wagento) + * [magento/magento2#13930](https://github.com/magento/magento2/pull/13930) -- #13899 Solve Canada Zip Code pattern (by @tadeobarranco) + * [magento/magento2#13966](https://github.com/magento/magento2/pull/13966) -- Setup Lists - Make allowedCurrencies property private (by @ihor-sviziev) + +2.2.2 +============= +* GitHub issues: + * [#9968](https://github.com/magento/magento2/issues/9968) -- Canceled invoice can be canceled again (fixed in [#11261](https://github.com/magento/magento2/pull/11261)) + * [#11310](https://github.com/magento/magento2/issues/11310) -- Method "getChildren" sort ordering (fixed in [#11342](https://github.com/magento/magento2/pull/11342)) + * [#11332](https://github.com/magento/magento2/issues/11332) -- How to Fix the wrong input format of Customer date of birth (fixed in [#11351](https://github.com/magento/magento2/pull/11351)) + * [#11207](https://github.com/magento/magento2/issues/11207) -- Shipment API won't append comment to email (fixed in [#11383](https://github.com/magento/magento2/pull/11383)) + * [#10795](https://github.com/magento/magento2/issues/10795) -- Shipping method radios have duplicate IDs on cart page (fixed in [#11406](https://github.com/magento/magento2/pull/11406)) + * [#10941](https://github.com/magento/magento2/issues/10941) -- Responsive Design Issue on Mobile with Magento 2.1.9 (fixed in [#11430](https://github.com/magento/magento2/pull/11430)) + * [#10007](https://github.com/magento/magento2/issues/10007) -- ProductAlert: Product alerts not showing in admin side product edit page (fixed in [#11445](https://github.com/magento/magento2/pull/11445)) + * [#10231](https://github.com/magento/magento2/issues/10231) -- Custom URL Rewrite Not working (fixed in [#11470](https://github.com/magento/magento2/pull/11470)) + * [#11176](https://github.com/magento/magento2/issues/11176) -- Configured table prefix is not recognized in CLI admin:user:create (fixed in [#11199](https://github.com/magento/magento2/pull/11199)) + * [#11275](https://github.com/magento/magento2/issues/11275) -- Call to a member function addCrumb() (fixed in [#11299](https://github.com/magento/magento2/pull/11299)) + * [#10441](https://github.com/magento/magento2/issues/10441) -- State/Province Not displayed after edit Billing Address on Sales Orders - Backend Admin. (fixed in [#11381](https://github.com/magento/magento2/pull/11381)) + * [#11140](https://github.com/magento/magento2/issues/11140) -- Going to '/admin' while using storecodes in url and a different adminhtml url will throw exception (fixed in [#11460](https://github.com/magento/magento2/pull/11460)) + * [#10765](https://github.com/magento/magento2/issues/10765) -- Export data from grid not adding custom rendered data magento2 (fixed in [#11437](https://github.com/magento/magento2/pull/11437)) + * [#7678](https://github.com/magento/magento2/issues/7678) -- StockItemCriteria::setProductsFilter doesn't work with array of ids (fixed in [#11500](https://github.com/magento/magento2/pull/11500)) + * [#9783](https://github.com/magento/magento2/issues/9783) -- Multiple parameters in widget.xml not allowed (fixed in [#11495](https://github.com/magento/magento2/pull/11495)) + * [#10824](https://github.com/magento/magento2/issues/10824) -- Cannot add new columns to item grid in admin sales_order_view layout (fixed in [#11235](https://github.com/magento/magento2/pull/11235)) + * [#9919](https://github.com/magento/magento2/issues/9919) -- Pattern Validation via UI Component Fails to Interpret String as RegEx Pattern (fixed in [#11565](https://github.com/magento/magento2/pull/11565)) + * [#5439](https://github.com/magento/magento2/issues/5439) -- Newsletter subscription (fixed in [#11317](https://github.com/magento/magento2/pull/11317)) + * [#10856](https://github.com/magento/magento2/issues/10856) -- Sync billing with shipping address on Admin Reorder and Admin Customer Create Order page does not work for Existing address selected (fixed in [#11385](https://github.com/magento/magento2/pull/11385)) + * [#10025](https://github.com/magento/magento2/issues/10025) -- Integration tests don't reset the database (fixed in [#11499](https://github.com/magento/magento2/pull/11499)) + * [#10301](https://github.com/magento/magento2/issues/10301) -- Customer review report search Bug in 2.1.x, 2.2 (fixed in [#11522](https://github.com/magento/magento2/pull/11522)) + * [#11540](https://github.com/magento/magento2/issues/11540) -- Magento sets iso invalid language code in html header (fixed in [#11561](https://github.com/magento/magento2/pull/11561)) + * [#11586](https://github.com/magento/magento2/issues/11586) -- Cron install / remove via command messes up stderr 2>&1 entries (fixed in [#11591](https://github.com/magento/magento2/pull/11591)) + * [#6350](https://github.com/magento/magento2/issues/6350) -- Frontend: Datepicker/calendar control does not use the store locale (fixed in [#11057](https://github.com/magento/magento2/pull/11057)) + * [#11328](https://github.com/magento/magento2/issues/11328) -- app:config:dump adds extra space every time in multiline array value (fixed in [#11439](https://github.com/magento/magento2/pull/11439)) + * [#7591](https://github.com/magento/magento2/issues/7591) -- PayPal module, "didgit" misspelling (fixed in [#11673](https://github.com/magento/magento2/pull/11673)) + * [#7767](https://github.com/magento/magento2/issues/7767) -- in system.xml translate phrase not work (fixed in [#11675](https://github.com/magento/magento2/pull/11675)) + * [#7915](https://github.com/magento/magento2/issues/7915) -- customer objects are equal to eachother after observing event customer_save_after_data_object (fixed in [#11676](https://github.com/magento/magento2/pull/11676)) + * [#10275](https://github.com/magento/magento2/issues/10275) -- Admin global search - submit by enter doesn't work (fixed in [#11250](https://github.com/magento/magento2/pull/11250)) + * [#11022](https://github.com/magento/magento2/issues/11022) -- GET v1/products/attribute-sets/sets/list inconsistent return result (fixed in [#11421](https://github.com/magento/magento2/pull/11421)) + * [#5956](https://github.com/magento/magento2/issues/5956) -- Untranslatable string "Please enter the same value again." (fixed in [#11440](https://github.com/magento/magento2/pull/11440)) + * [#9944](https://github.com/magento/magento2/issues/9944) -- Name attribute shows empty when creating custom fields on product creation form (fixed in [#11637](https://github.com/magento/magento2/pull/11637)) + * [#10168](https://github.com/magento/magento2/issues/10168) -- Coupon codes not showing in invoice (fixed in [#11635](https://github.com/magento/magento2/pull/11635)) + * [#9763](https://github.com/magento/magento2/issues/9763) -- When go checkout,Cart Price Rules 25%test coupon code can go wrong (fixed in [#11710](https://github.com/magento/magento2/pull/11710)) + * [#11157](https://github.com/magento/magento2/issues/11157) -- nginx.sample.conf missing heath_check.php? (fixed in [#11690](https://github.com/magento/magento2/pull/11690)) + * [#11322](https://github.com/magento/magento2/issues/11322) -- User.ini files specify 768M - Docs recommend at least 1G (fixed in [#11734](https://github.com/magento/magento2/pull/11734)) + * [#7927](https://github.com/magento/magento2/issues/7927) -- Dashboard graph has broken y-axis range (fixed in [#11751](https://github.com/magento/magento2/pull/11751)) + * [#7099](https://github.com/magento/magento2/issues/7099) -- Admin: field labels wrapping poorly (fixed in [#11745](https://github.com/magento/magento2/pull/11745)) + * [#9869](https://github.com/magento/magento2/issues/9869) -- datetime type product attribute showing current date (fixed in [#11749](https://github.com/magento/magento2/pull/11749)) + * [#11365](https://github.com/magento/magento2/issues/11365) -- "Ignore this notification" isn't working (fixed in [#11410](https://github.com/magento/magento2/pull/11410)) + * [#6891](https://github.com/magento/magento2/issues/6891) -- Add-to-cart checkbox still visible when $canItemsAddToCart = false (fixed in [#11610](https://github.com/magento/magento2/pull/11610)) + * [#11729](https://github.com/magento/magento2/issues/11729) -- Exported Excel with negative number can't be opened by MS Office (fixed in [#11757](https://github.com/magento/magento2/pull/11757)) + * [#6924](https://github.com/magento/magento2/issues/6924) -- Magento 2.1.0 - "General system exception happened" on Import .csv (fixed in [#11363](https://github.com/magento/magento2/pull/11363)) + * [#7640](https://github.com/magento/magento2/issues/7640) -- X-Magento-Tags header containing whitespaces causes exception (fixed in [#11767](https://github.com/magento/magento2/pull/11767)) + * [#4711](https://github.com/magento/magento2/issues/4711) -- Improve error reporting for products images import (fixed in [#11779](https://github.com/magento/magento2/pull/11779)) + * [#4696](https://github.com/magento/magento2/issues/4696) -- Admin product search - Pressing enter does not submit (fixed in [#11827](https://github.com/magento/magento2/pull/11827)) + * [#11581](https://github.com/magento/magento2/issues/11581) -- Reference to wrong / non-existing class (fixed in [#11830](https://github.com/magento/magento2/pull/11830)) + * [#10908](https://github.com/magento/magento2/issues/10908) -- [2.2.0-rc3.0] Language switcher is broken when using multiple times (fixed in [#11337](https://github.com/magento/magento2/pull/11337)) + * [#11211](https://github.com/magento/magento2/issues/11211) -- Store View switcher not working on front-end and it throws an error (fixed in [#11337](https://github.com/magento/magento2/pull/11337)) + * [#2991](https://github.com/magento/magento2/issues/2991) -- Products added to cart with REST API give total prices equal to zero (fixed in [#11458](https://github.com/magento/magento2/pull/11458)) + * [#10032](https://github.com/magento/magento2/issues/10032) -- Download back-up .tgz always takes the latest that's created (fixed in [#11595](https://github.com/magento/magento2/pull/11595)) + * [#11534](https://github.com/magento/magento2/issues/11534) -- Values of Visual Swatch Attribute drop down is not work correct (fixed in [#11747](https://github.com/magento/magento2/pull/11747)) + * [#10291](https://github.com/magento/magento2/issues/10291) -- Magento 2 Loading custom option dropdown issue (fixed in [#11824](https://github.com/magento/magento2/pull/11824)) + * [#11095](https://github.com/magento/magento2/issues/11095) -- Magento_Tax "postcode is a required field" when upgrading from 2.1.9 to 2.2 (fixed in [#11651](https://github.com/magento/magento2/pull/11651)) + * [#8236](https://github.com/magento/magento2/issues/8236) -- CMS blocks are not validated against having same store and identifier (fixed in [#11802](https://github.com/magento/magento2/pull/11802)) + * [#4808](https://github.com/magento/magento2/issues/4808) -- The price of product custom option can't be set to 0. (fixed in [#11843](https://github.com/magento/magento2/pull/11843)) + * [#9566](https://github.com/magento/magento2/issues/9566) -- Status label is wrong in admin (fixed in [#11397](https://github.com/magento/magento2/pull/11397)) + * [#5015](https://github.com/magento/magento2/issues/5015) -- Report error csv doesn't work when trying to import a csv file with semicolon delimiter (fixed in [#11732](https://github.com/magento/magento2/pull/11732)) + * [#10682](https://github.com/magento/magento2/issues/10682) -- Meta description and keywords transform to html entities for non latin/cyrilic characters in category and product pages (fixed in [#11829](https://github.com/magento/magento2/pull/11829)) + * [#10185](https://github.com/magento/magento2/issues/10185) -- New Orders are not in Order grid after data migration from M 1.7.0.2 to M 2.1.7 (fixed in [#11911](https://github.com/magento/magento2/pull/11911)) + * [#8970](https://github.com/magento/magento2/issues/8970) -- Cannot assign products to categories not under tree root (fixed in [#11817](https://github.com/magento/magento2/pull/11817)) + * [#9028](https://github.com/magento/magento2/issues/9028) -- You cannot set a 303 redirect response using a result factory (fixed in [#11405](https://github.com/magento/magento2/pull/11405)) + * [#11697](https://github.com/magento/magento2/issues/11697) -- Theme: Added html node to page xml root, cause validation error (fixed in [#11858](https://github.com/magento/magento2/pull/11858)) + * [#8954](https://github.com/magento/magento2/issues/8954) -- Error While Trying To Load Quote Item Collection Using Magento\Quote\Model\ResourceModel\QuoteItem\Collection::getItems() (fixed in [#11869](https://github.com/magento/magento2/pull/11869)) + * [#8799](https://github.com/magento/magento2/issues/8799) -- Image brackground (fixed in [#11889](https://github.com/magento/magento2/pull/11889)) + * [#11868](https://github.com/magento/magento2/issues/11868) -- "Add Products" button has been duplicated after the customer group was changed (fixed in [#11949](https://github.com/magento/magento2/pull/11949)) + * [#11898](https://github.com/magento/magento2/issues/11898) -- Zip code Netherlands should allow zipcode without space (fixed in [#11959](https://github.com/magento/magento2/pull/11959)) + * [#11996](https://github.com/magento/magento2/issues/11996) -- Magento 2 Store Code validation regex: doesn't support uppercase letters in store code (fixed in [#12011](https://github.com/magento/magento2/pull/12011)) + * [#7995](https://github.com/magento/magento2/issues/7995) -- If you leave as default, shipping lines disappear (fixed in [#12013](https://github.com/magento/magento2/pull/12013)) + * [#8846](https://github.com/magento/magento2/issues/8846) -- Attribute option value uniqueness is not checked if created via REST Api (fixed in [#11785](https://github.com/magento/magento2/pull/11785)) + * [#11700](https://github.com/magento/magento2/issues/11700) -- "Something Went Wrong" error for limited access admin user (fixed in [#11993](https://github.com/magento/magento2/pull/11993)) + * [#12017](https://github.com/magento/magento2/issues/12017) -- Cross-sell product placeholder image size issue (fixed in [#12018](https://github.com/magento/magento2/pull/12018)) + * [#10583](https://github.com/magento/magento2/issues/10583) -- Checkout place order exception when using a new address (fixed in [#11556](https://github.com/magento/magento2/pull/11556)) + * [#4004](https://github.com/magento/magento2/issues/4004) -- Newsletter Subscriber create-date not set, and change_status_at broken (fixed in [#11879](https://github.com/magento/magento2/pull/11879)) + * [#7225](https://github.com/magento/magento2/issues/7225) -- [BUG] [Magento 2.1.2] Programmatically creating an empty dropdown attribute, "apply_to" is set to NULL (from "simple") after adding options through store admin (fixed in [#11588](https://github.com/magento/magento2/pull/11588)) + * [#11197](https://github.com/magento/magento2/issues/11197) -- Blank page at the checkout 'shipping' step (fixed in [#11958](https://github.com/magento/magento2/pull/11958)) + * [#11880](https://github.com/magento/magento2/issues/11880) -- Magento 2.1.9 Configurable::getUsedProducts returns a different array after product collections is cached (fixed in [#12107](https://github.com/magento/magento2/pull/12107)) + * [#10811](https://github.com/magento/magento2/issues/10811) -- Replace FollowSymLinks with SymLinksIfOwnerMatch (fixed in [#11461](https://github.com/magento/magento2/pull/11461)) + * [#10920](https://github.com/magento/magento2/issues/10920) -- Sku => Entity_id relations are fetched inefficiently when inserting attributes values during product import (fixed in [#11719](https://github.com/magento/magento2/pull/11719)) + * [#6802](https://github.com/magento/magento2/issues/6802) -- Magento\Search\Helper\getSuggestUrl() not used in search template (fixed in [#11722](https://github.com/magento/magento2/pull/11722)) + * [#9151](https://github.com/magento/magento2/issues/9151) -- Sitemap.xml: lastmod timestamp can contain invalid dates (fixed in [#11902](https://github.com/magento/magento2/pull/11902)) + * [#10195](https://github.com/magento/magento2/issues/10195) -- Order relation child is not set during edit operation. (fixed in [#11988](https://github.com/magento/magento2/pull/11988)) + * [#11793](https://github.com/magento/magento2/issues/11793) -- Magento2.1.5 admin shipping report shows wrong currency code (fixed in [#11962](https://github.com/magento/magento2/pull/11962)) + * [#6661](https://github.com/magento/magento2/issues/6661) -- XHTML templates Don't Use Schema URNs (fixed in [#12031](https://github.com/magento/magento2/pull/12031)) + * [#12079](https://github.com/magento/magento2/issues/12079) -- Products in cart report error when we have grouped or bundle product (fixed in [#12082](https://github.com/magento/magento2/pull/12082)) + * [#9768](https://github.com/magento/magento2/issues/9768) -- Admin dashboard Most Viewed Products Tab only gives default attribute set's products (fixed in [#12139](https://github.com/magento/magento2/pull/12139)) + * [#6238](https://github.com/magento/magento2/issues/6238) -- Meta description allows too many characters (fixed in [#11914](https://github.com/magento/magento2/pull/11914)) + * [#11230](https://github.com/magento/magento2/issues/11230) -- Unit test fails after fresh installation (fixed in [#12144](https://github.com/magento/magento2/pull/12144)) + * [#10810](https://github.com/magento/magento2/issues/10810) -- Add support of apache2.4 commands in htaccess (fixed in [#11459](https://github.com/magento/magento2/pull/11459)) + * [#10834](https://github.com/magento/magento2/issues/10834) -- signing in after selecting checkout button, will not end up to checkout page! (fixed in [#11876](https://github.com/magento/magento2/pull/11876)) + * [#10477](https://github.com/magento/magento2/issues/10477) -- Cart price rule has failed if use dropdown attribute (fixed in [#11274](https://github.com/magento/magento2/pull/11274)) + * [#11832](https://github.com/magento/magento2/issues/11832) -- Create order (on Customer edit page) - not working from admin environment (fixed in [#11952](https://github.com/magento/magento2/pull/11952)) + * [#10014](https://github.com/magento/magento2/issues/10014) -- Newsletter subscriptions status not isolated between multi stores (fixed in [#12035](https://github.com/magento/magento2/pull/12035)) + * [#11532](https://github.com/magento/magento2/issues/11532) -- Duplicate Simple Product Throws Error: Undefined offset: 0 in SaveHandler.php on line 122 (fixed in [#12001](https://github.com/magento/magento2/pull/12001)) + * [#10628](https://github.com/magento/magento2/issues/10628) -- Color attribute swatches are not visible if sorting is enabled (fixed in [#12077](https://github.com/magento/magento2/pull/12077)) + * [#8022](https://github.com/magento/magento2/issues/8022) -- Uncaught Error: Call to a member function addItem() on array in app/code/Magento/Sales/Model/Order/Shipment.php (fixed in [#12173](https://github.com/magento/magento2/pull/12173)) +* GitHub pull requests: + * [#11240](https://github.com/magento/magento2/pull/11240) -- Virtual Theme load: Check for null to actually reach the code that handles this case to t… (by @leptoquark1) + * [#11261](https://github.com/magento/magento2/pull/11261) -- Prevent invoice cancelation multiple times 2.2-develop [Backport] (by @osrecio) + * [#11342](https://github.com/magento/magento2/pull/11342) -- ADDED $sortByPostion flag to getChildren() (by @denisristic) + * [#11351](https://github.com/magento/magento2/pull/11351) -- Fix the wrong input format of Customer date of birth (by @manuelson) + * [#11359](https://github.com/magento/magento2/pull/11359) -- [Backport 2.2-develop] Unable to manage (install/uninstall) cron via bin/magento cron:install / cron:remove with multiple installations against same crontab (by @adrian-martinez-interactiv4) + * [#11383](https://github.com/magento/magento2/pull/11383) -- Append shipment comment to shipment if appendComment is true (by @JeroenVanLeusden) + * [#11406](https://github.com/magento/magento2/pull/11406) -- Added carrier code to ID to distinguish shipping methods (by @peterjaap) + * [#11430](https://github.com/magento/magento2/pull/11430) -- Fix toolbar-amount placing in mobile device (by @slackerzz) + * [#11445](https://github.com/magento/magento2/pull/11445) -- Show product alerts in admin product detail [backport 2.2] (by @raumatbel) + * [#11470](https://github.com/magento/magento2/pull/11470) -- FR#10231_22 Custom URL Rewrite Not working [backport 2.2] (by @mrodespin) + * [#11493](https://github.com/magento/magento2/pull/11493) -- Add "optional" translation in checkout password field (by @JeroenVanLeusden) + * [#11199](https://github.com/magento/magento2/pull/11199) -- Add db-prefix from env conf when command admin:user:create is executed (by @osrecio) + * [#11299](https://github.com/magento/magento2/pull/11299) -- Update Guest.php (by @lano-vargas) + * [#11381](https://github.com/magento/magento2/pull/11381) -- Save region correctly to save sales address from admin (by @raumatbel) + * [#11460](https://github.com/magento/magento2/pull/11460) -- [ISSUE-11140][BUGFIX] Skip store code admin from being detected in ca… (by @diglin) + * [#11505](https://github.com/magento/magento2/pull/11505) -- [Backport-2.2] Retain additional cron history by default (by @mpchadwick) + * [#11437](https://github.com/magento/magento2/pull/11437) -- Add `confirmation` and `lock_expires ` to customer export csv - Fix issue 10765 (by @convenient) + * [#11486](https://github.com/magento/magento2/pull/11486) -- [Backport 2.2]Add VAT number to email source variables (by @JeroenVanLeusden) + * [#11495](https://github.com/magento/magento2/pull/11495) -- MAGETWO-75743: Fix for #9783 Multiple parameters in widget.… (by @diazwatson) + * [#11500](https://github.com/magento/magento2/pull/11500) -- MAGETWO-81245: Handling all setProductsFilter items in array as arguments (by @kirmorozov) + * [#11555](https://github.com/magento/magento2/pull/11555) -- Travis CI functional tests maintenance for 2.2-develop (by @ishakhsuvarov) + * [#11235](https://github.com/magento/magento2/pull/11235) -- [2.2-develop] Add static test to detect blocks without name attribute (by @ihor-sviziev) + * [#11569](https://github.com/magento/magento2/pull/11569) -- Fixed double space typo (by @dverkade) + * [#11565](https://github.com/magento/magento2/pull/11565) -- Fix "pattern" UI Component validation (by @bap14) + * [#11317](https://github.com/magento/magento2/pull/11317) -- [Backport 2.2-develop] Send email to subscribers only when are new (by @osrecio) + * [#11385](https://github.com/magento/magento2/pull/11385) -- Fix #10856: Sync billing with shipping address on Admin Order Page (by @joni-jones) + * [#11499](https://github.com/magento/magento2/pull/11499) -- Ensure database is cleared/Magento reinstalled when TESTS_CLEANUP is enabled (by @joshuaswarren) + * [#11510](https://github.com/magento/magento2/pull/11510) -- Add interaction to admin:user:create command (by @cmuench) + * [#11522](https://github.com/magento/magento2/pull/11522) -- [Backport 2.2-develop] Fix Filter Customer Report Review (by @osrecio) + * [#11553](https://github.com/magento/magento2/pull/11553) -- [2.2 Backport] ProductRepository sku cache is corrupted when cacheLimit is reached (by @heldchen) + * [#11561](https://github.com/magento/magento2/pull/11561) -- Magento sets ISO invalid language code (by @crissanclick) + * [#11591](https://github.com/magento/magento2/pull/11591) -- [Backport 2.2-develop] #11586 Fix duplicated crontab 2>&1 expression (by @adrian-martinez-interactiv4) + * [#11439](https://github.com/magento/magento2/pull/11439) -- [Backport 2.2-develop] #11328 : app:config:dump adds extra space every time in multiline array value (by @adrian-martinez-interactiv4) + * [#11675](https://github.com/magento/magento2/pull/11675) -- MAGETWO-77672: in system.xml translate phrase not work, if comment starts from new line. (by @nmalevanec) + * [#11673](https://github.com/magento/magento2/pull/11673) -- [BACKPORT 2.2] [TASK] Removed Typo in Paypal TestCase didgit => digit (by @lewisvoncken) + * [#11704](https://github.com/magento/magento2/pull/11704) -- [Backport 2.2-develop] Travis: surround variable TRAVIS_BRANCH with double-quotes instead of single-quotes (by @adrian-martinez-interactiv4) + * [#11677](https://github.com/magento/magento2/pull/11677) -- [BACKPORT 2.2] [TASK] Moved Customer Groups Menu Item from Other sett… (by @lewisvoncken) + * [#11676](https://github.com/magento/magento2/pull/11676) -- #7915: customer objects are equal to eachother after observing event customer_save_after_data_object (by @RomaKis) + * [#11250](https://github.com/magento/magento2/pull/11250) -- Fixing #10275 keyboard submit of adminhtml suggest form. (by @romainruaud) + * [#11421](https://github.com/magento/magento2/pull/11421) -- FIX #11022 in 2.2-develop: Filter Groups of search criteria parameter have not been included for further processing (by @davidverholen) + * [#11440](https://github.com/magento/magento2/pull/11440) -- Add missing translations in Magento_UI (by @JeroenVanLeusden) + * [#11643](https://github.com/magento/magento2/pull/11643) -- Fixed ability to set field config from layout xml #11302 [backport 2.2] (by @vovayatsyuk) + * [#11637](https://github.com/magento/magento2/pull/11637) -- MAGETWO-81311: Check the length of the array before attempting to sli… (by @briscoda) + * [#11635](https://github.com/magento/magento2/pull/11635) -- Coupon codes not showing in invoice (by @crissanclick) + * [#11690](https://github.com/magento/magento2/pull/11690) -- Add a health check to the NGINX configuration sample (by @andrewhowdencom) + * [#11710](https://github.com/magento/magento2/pull/11710) -- Allow coupon code with special charater to be applied to order in checkout (by @gabrielqs-redstage) + * [#11720](https://github.com/magento/magento2/pull/11720) -- Fix Notice: freePackageValue is undefined (by @amenk) + * [#11734](https://github.com/magento/magento2/pull/11734) -- [TASK] Updated user.ini according to Magento DevDocs (by @lewisvoncken) + * [#11751](https://github.com/magento/magento2/pull/11751) -- [Backport 2.2-develop] Dashboard Fix Y Axis for range (by @osrecio) + * [#11749](https://github.com/magento/magento2/pull/11749) -- [Backport 2.2-develop] Fix datetime type product that show current date when is empty in grids (by @enriquei4) + * [#11745](https://github.com/magento/magento2/pull/11745) -- [Backport 2.2-develop] Fix label to avoid wrapping poorly,now break by word (by @enriquei4) + * [#11765](https://github.com/magento/magento2/pull/11765) -- Allows modules with underscores in name to add blocks to layout via XML (by @bentideswell) + * [#11410](https://github.com/magento/magento2/pull/11410) -- "Ignore this notification" isn't working (by @crissanclick) + * [#11607](https://github.com/magento/magento2/pull/11607) -- [Backport 2.2-develop] Fix AcountManagementTest unit test fail randomly (by @adrian-martinez-interactiv4) + * [#11610](https://github.com/magento/magento2/pull/11610) -- FR#6891_22 Add-to-cart checkbox still visible when = false (by @mrodespin) + * [#11757](https://github.com/magento/magento2/pull/11757) -- Fix #11729 - negative value in excel export [M2.2] (by @hauso) + * [#11363](https://github.com/magento/magento2/pull/11363) -- Issue #6924: Unmask exception message during product import (by @tim-bezhashvyly) + * [#11425](https://github.com/magento/magento2/pull/11425) -- Magento setup:install interactive shell (by @denisristic) + * [#11767](https://github.com/magento/magento2/pull/11767) -- 7640: X-Magento-Tags header containing whitespaces causes exception (by @nmalevanec) + * [#11779](https://github.com/magento/magento2/pull/11779) -- MAGETWO-4711: Improve error reporting for products images import. (by @p-bystritsky) + * [#11830](https://github.com/magento/magento2/pull/11830) -- Fix #11581: Reference to wrong / non-existing class (by @dverkade) + * [#11827](https://github.com/magento/magento2/pull/11827) -- Admin product search - Pressing enter does not submit #4696 (by @bohemiorulo) + * [#11337](https://github.com/magento/magento2/pull/11337) -- #11211 Fix Store View switcher (by @thiagolima-bm) + * [#11458](https://github.com/magento/magento2/pull/11458) -- Products added to cart with REST API give total prices equal to zero (by @peterjaap) + * [#11595](https://github.com/magento/magento2/pull/11595) -- Fix issue #10032 - Download back-up .tgz always takes the latest that's created (2.2-develop) (by @PieterCappelle) + * [#11747](https://github.com/magento/magento2/pull/11747) -- [Backport 2.2-develop] FIX show visual swatches in admin - product attribute (by @enriquei4) + * [#11824](https://github.com/magento/magento2/pull/11824) -- Magetwo 70954: Remove the component.clear from the custom options type. This causes the 'elem' array to become out of sync with the recordData (by @briscoda) + * [#11651](https://github.com/magento/magento2/pull/11651) -- [BUGFIX] Solved error while upgrading from 2.1 to 2.2 (by @lewisvoncken) + * [#11802](https://github.com/magento/magento2/pull/11802) -- #8236 FIX CMS blocks (by @thiagolima-bm) + * [#11843](https://github.com/magento/magento2/pull/11843) -- Save the price 0 as price in custom options [backport 2.2] (by @raumatbel) + * [#11854](https://github.com/magento/magento2/pull/11854) -- FilterBuilder Doc Block Update (by @ByteCreation) + * [#11397](https://github.com/magento/magento2/pull/11397) -- Fix for #9566: Show the correct label in the admin (by @michielgerritsen) + * [#11732](https://github.com/magento/magento2/pull/11732) -- MAGETWO-5015: Report error csv doesn't work when trying to import a csv file with semicolon delimiter. (by @p-bystritsky) + * [#11829](https://github.com/magento/magento2/pull/11829) -- Fix #10682: Meta description and keywords transform to html entities (by @dverkade) + * [#11933](https://github.com/magento/magento2/pull/11933) -- Changed constructor typo in Javascript class (by @dverkade) + * [#11911](https://github.com/magento/magento2/pull/11911) -- Order grid - Sort by Purchase Date Desc by default (by @ihor-sviziev) + * [#11817](https://github.com/magento/magento2/pull/11817) -- GITHUB-8970: Cannot assign products to categories not under tree root. (by @p-bystritsky) + * [#11405](https://github.com/magento/magento2/pull/11405) -- Allow setting of http response status code in a Redirection (by @gabrielqs-redstage) + * [#11858](https://github.com/magento/magento2/pull/11858) -- #11697 Theme: Added html node to page xml root, cause validation error (by @adrian-martinez-interactiv4) + * [#11869](https://github.com/magento/magento2/pull/11869) -- Resolve Error While Trying To Load Quote Item Collection Using Magent… (by @neeta-wagento) + * [#11889](https://github.com/magento/magento2/pull/11889) -- Save background color correctly in images. [backport 2.2] (by @raumatbel) + * [#11917](https://github.com/magento/magento2/pull/11917) -- [BACKPORT 2.2] [TASK] Add resetPassword call to the webapi (by @lewisvoncken) + * [#11949](https://github.com/magento/magento2/pull/11949) -- 11868: "Add Products" button has been duplicated after the customer group was changed. (by @nmalevanec) + * [#11959](https://github.com/magento/magento2/pull/11959) -- #11898 - Change NL PostCode Pattern (by @osrecio) + * [#11620](https://github.com/magento/magento2/pull/11620) -- Check attribute unique between same fields in magento commerce (by @raumatbel) + * [#11770](https://github.com/magento/magento2/pull/11770) -- Product attribute creation page handles Storefront tab visibility wrong (by @euronetzrt) + * [#11863](https://github.com/magento/magento2/pull/11863) -- Update wrong layout update xml handle installed in CMS Home Page by default (by @adrian-martinez-interactiv4) + * [#12011](https://github.com/magento/magento2/pull/12011) -- [backport 2.2] Magento 2 Store Code validation regex: doesn't support uppercase letters in store code (by @manuelson) + * [#12013](https://github.com/magento/magento2/pull/12013) -- Add validation for number of street lines (by @crissanclick) + * [#11785](https://github.com/magento/magento2/pull/11785) -- fix #8846: avoid duplicated attribute option values (by @gomencal) + * [#11993](https://github.com/magento/magento2/pull/11993) -- 11700: "Something Went Wrong" error for limited access admin user (by @RomaKis) + * [#12018](https://github.com/magento/magento2/pull/12018) -- Magento 2.2.0 Solution for Cross-sell product placeholder image size … (by @emiprotech) + * [#11556](https://github.com/magento/magento2/pull/11556) -- Fix #10583: Checkout place order exception when using a new address (by @joni-jones) + * [#11879](https://github.com/magento/magento2/pull/11879) -- #4004: Newsletter Subscriber create-date not set, and change_status_at broken (by @nemesis-back) + * [#11588](https://github.com/magento/magento2/pull/11588) -- Fix Issue #7225 - Remove hardcoding of apply_to when saving attributes (by @MartinPeverelli) + * [#11958](https://github.com/magento/magento2/pull/11958) -- 11197: Blank page at the checkout 'shipping' step[backport]. (by @nmalevanec) + * [#12091](https://github.com/magento/magento2/pull/12091) -- Fix "Undefined variable: responseAjax" notice when trying to save a shipment package (by @lazyguru) + * [#11461](https://github.com/magento/magento2/pull/11461) -- [ISSUE-10811][BUGFIX] Update .htaccess.sample to replace FollowSymLin… (by @diglin) + * [#11719](https://github.com/magento/magento2/pull/11719) -- 10920: Sku => Entity_id relations are fetched inefficiently when inserting attributes values during product import. (by @nmalevanec) + * [#11722](https://github.com/magento/magento2/pull/11722) -- 6802: Magento\Search\Helper\getSuggestUrl() not used in search template. (by @nmalevanec) + * [#11857](https://github.com/magento/magento2/pull/11857) -- CMS Page - CMS Page - Force validate layout update xml in production mode when saving CMS Page - Handle layout update xml validation exceptions (by @adrian-martinez-interactiv4) + * [#11902](https://github.com/magento/magento2/pull/11902) -- #9151: [Github] Sitemap.xml: lastmod timestamp can contain invalid dates (by @serhii-balko) + * [#11947](https://github.com/magento/magento2/pull/11947) -- Fix json encoded attribute backend type when attribute value is null (by @tkotosz) + * [#11962](https://github.com/magento/magento2/pull/11962) -- 11793: Magento2.1.5 admin shipping report shows wrong currency code (by @RomaKis) + * [#11988](https://github.com/magento/magento2/pull/11988) -- 10195: Order relation child is not set during edit operation(backport from 2.3 to 2.2) (by @RomaKis) + * [#12031](https://github.com/magento/magento2/pull/12031) -- Improve urn in xhtml (by @enriquei4) + * [#12082](https://github.com/magento/magento2/pull/12082) -- Products in cart report error when we have grouped or bundle product (by @mihaifaget) + * [#12131](https://github.com/magento/magento2/pull/12131) -- [Backport 2.2] Close PayPal popup window in case of rejected request #10820 (by @vovayatsyuk) + * [#12139](https://github.com/magento/magento2/pull/12139) -- 9768: Admin dashboard Most Viewed Products Tab only gives default attribute set's products(backport for 2.2) (by @RomaKis) + * [#11914](https://github.com/magento/magento2/pull/11914) -- [BACKPORT 2.2] [BUGFIX] All UI input fields should have maxlength of 255 because of V… (by @lewisvoncken) + * [#11944](https://github.com/magento/magento2/pull/11944) -- Report Handled Exceptions To New Relic (by @mpchadwick) + * [#12144](https://github.com/magento/magento2/pull/12144) -- Removed FileClassScannerTest dependency to "Magento_Catalog" (by @wexo-team) + * [#11459](https://github.com/magento/magento2/pull/11459) -- close #10810 Migrates Apache Access Syntax to 2.4 on Apache >= 2.4 (by @jonashrem) + * [#11968](https://github.com/magento/magento2/pull/11968) -- Fix bug: Customer import deletes exiting customer entity Fields (by @jalogut) + * [#12061](https://github.com/magento/magento2/pull/12061) -- Cleanup for object manager references and depricated method (by @atishgoswami) + * [#12136](https://github.com/magento/magento2/pull/12136) -- update button.phtml overcomplicated translation phrase. 2.2 (by @ChuckyK) + * [#11876](https://github.com/magento/magento2/pull/11876) -- After logging in customer is now not redirecting to Customer Dashboard by default (by @p-bystritsky) + * [#11274](https://github.com/magento/magento2/pull/11274) -- Fix #10477 Check cart rule subselect conditions against quote item children too (by @marinagociu) + * [#11952](https://github.com/magento/magento2/pull/11952) -- 11832: Create order (on Customer edit page) - not working from admin environment (by @RomaKis) + * [#12035](https://github.com/magento/magento2/pull/12035) -- Fix newsletter subscriptions between stores (by @sbaixauli) + * [#12001](https://github.com/magento/magento2/pull/12001) -- 11532: Duplicate Simple Product Throws Error: Undefined offset: 0 in SaveHandler.php on line 122 (by @RomaKis) + * [#12077](https://github.com/magento/magento2/pull/12077) -- 10628: Color attribute swatches are not visible if sorting is enabled (by @RomaKis) + * [#12130](https://github.com/magento/magento2/pull/12130) -- [Backport 2.2] MAGETWO-71697: Fix possible bug when saving address with empty street line #10582 (by @vovayatsyuk) + * [#12141](https://github.com/magento/magento2/pull/12141) -- Fix js error when disable/enable wysiwyg editor (by @vovayatsyuk) + * [#12173](https://github.com/magento/magento2/pull/12173) -- 8022: Uncaught Error: Call to a member function addItem() on array in app/code/Magento/Sales/Model/Order/Shipment.php(backport to 2.2) (by @RomaKis) + 2.2.1 ============= * GitHub issues: @@ -2667,7 +3990,7 @@ Tests: * [#686](https://github.com/magento/magento2/issues/686) -- Product save validation errors in the admin don't hide the overlay * [#702](https://github.com/magento/magento2/issues/702) -- Base table or view not found * [#652](https://github.com/magento/magento2/issues/652) -- Multishipping checkout not to change the Billing address js issue - * [#648](https://github.com/magento/magento2/issues/648) -- An equal (=) sign in the hash of the product page to to break the tabs functionality + * [#648](https://github.com/magento/magento2/issues/648) -- An equal (=) sign in the hash of the product page to break the tabs functionality * Service Contracts: * Refactored usage of new API of the Customer module * Implemented Service Contracts for the Sales module diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 2839ac5ee9d32..0000000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,36 +0,0 @@ -# Contributing to Magento 2 code - -Contributions to the Magento 2 codebase are done using the fork & pull model. -This contribution model has contributors maintaining their own copy of the forked codebase (which can easily be synced with the main copy). The forked repository is then used to submit a request to the base repository to “pull” a set of changes (hence the phrase “pull request”). - -Contributions can take the form of new components/features, changes to existing features, tests, documentation (such as developer guides, user guides, examples, or specifications), bug fixes, optimizations or just good suggestions. - -The Magento 2 development team will review all issues and contributions submitted by the community of developers in the first in, first out order. During the review we might require clarifications from the contributor. If there is no response from the contributor for two weeks, the issue is closed. - - -## Contribution requirements - -1. Contributions must adhere to [Magento coding standards](http://devdocs.magento.com/guides/v2.0/coding-standards/bk-coding-standards.html). -2. Pull requests (PRs) must be accompanied by a meaningful description of their purpose. Comprehensive descriptions increase the chances of a pull request to be merged quickly and without additional clarification requests. -3. Commits must be accompanied by meaningful commit messages. -4. PRs which include bug fixing, must be accompanied with step-by-step description of how to reproduce the bug. -3. PRs which include new logic or new features must be submitted along with: -* Unit/integration test coverage (we will be releasing more information on writing test coverage in the near future). -* Proposed [documentation](http://devdocs.magento.com) update. Documentation contributions can be submitted [here](https://github.com/magento/devdocs). -4. For large features or changes, please [open an issue](https://github.com/magento/magento2/issues) and discuss first. This may prevent duplicate or unnecessary effort, and it may gain you some additional contributors. -5. All automated tests are passed successfully (all builds on [Travis CI](https://travis-ci.org/magento/magento2) must be green). - -## Contribution process - -If you are a new GitHub user, we recommend that you create your own [free github account](https://github.com/signup/free). By doing that, you will be able to collaborate with the Magento 2 development team, “fork” the Magento 2 project and be able to easily send “pull requests”. - -1. Search current [listed issues](https://github.com/magento/magento2/issues) (open or closed) for similar proposals of intended contribution before starting work on a new contribution. -2. Review the [Contributor License Agreement](https://magento.com/legaldocuments/mca) if this is your first time contributing. -3. Create and test your work. -4. Fork the Magento 2 repository according to [Fork a repository instructions](http://devdocs.magento.com/guides/v2.0/contributor-guide/contributing.html#fork) and when you are ready to send us a pull request – follow [Create a pull request instructions](http://devdocs.magento.com/guides/v2.0/contributor-guide/contributing.html#pull_request). -5. Once your contribution is received, Magento 2 development team will review the contribution and collaborate with you as needed to improve the quality of the contribution. - -## Code of Conduct - -Please note that this project is released with a Contributor Code of Conduct. We expect you to agree to its terms when participating in this project. -The full text is available in the repository [Wiki](https://github.com/magento/magento2/wiki/Magento-Code-of-Conduct). diff --git a/COPYING.txt b/COPYING.txt index d2cbcd01539dd..040bdd5f3ce72 100644 --- a/COPYING.txt +++ b/COPYING.txt @@ -1,4 +1,4 @@ -Copyright © 2013-2017 Magento, Inc. +Copyright © 2013-present Magento, Inc. Each Magento source file included in this distribution is licensed under OSL 3.0 or the Magento Enterprise Edition (MEE) license diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md deleted file mode 100644 index 3ac68076d4353..0000000000000 --- a/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,24 +0,0 @@ - - - -### Preconditions - - -1. -2. - -### Steps to reproduce - -1. -2. -3. - -### Expected result - -1. - -### Actual result - -1. [Screenshot, logs] - - diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index d1f01ba9f2640..0000000000000 --- a/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,20 +0,0 @@ - - -### Description - - -### Fixed Issues (if relevant) - -1. magento/magento2#: Issue title -2. ... - -### Manual testing scenarios - -1. ... -2. ... - -### Contribution checklist - - [ ] Pull request has a meaningful description of its purpose - - [ ] All commits are accompanied by meaningful commit messages - - [ ] All new or changed code is covered with unit/integration tests (if applicable) - - [ ] All automated tests passed successfully (all builds on Travis CI are green) diff --git a/README.md b/README.md index 9b1aa1b7b3e28..d64ac8061528f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ -[![Build Status](https://travis-ci.org/magento/magento2.svg?branch=develop)](https://travis-ci.org/magento/magento2) +[![Build Status](https://travis-ci.org/magento/magento2.svg?branch=2.2-develop)](https://travis-ci.org/magento/magento2) +[![Open Source Helpers](https://www.codetriage.com/magento/magento2/badges/users.svg)](https://www.codetriage.com/magento/magento2) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/magento/magento2?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/magento-2/localized.png)](https://crowdin.com/project/magento-2)

Welcome

-Welcome to Magento 2 installation! We're glad you chose to install Magento 2, a cutting edge, feature-rich eCommerce solution that gets results. +Welcome to Magento 2 installation! We're glad you chose to install Magento 2, a cutting-edge, feature-rich eCommerce solution that gets results. ## Magento system requirements -[Magento system requirements](http://devdocs.magento.com/magento-system-requirements.html) +[Magento system requirements](http://devdocs.magento.com/guides/v2.2/install-gde/system-requirements2.html) ## Install Magento To install Magento, see either: -* [Magento DevBox](https://magento.com/tech-resources/download), the easiest way to get started with Magento. -* [Installation guide](http://devdocs.magento.com/guides/v2.0/install-gde/bk-install-guide.html) +* [Installation guide](http://devdocs.magento.com/guides/v2.2/install-gde/bk-install-guide.html)

Contributing to the Magento 2 code base

Contributions can take the form of new components or features, changes to existing features, tests, documentation (such as developer guides, user guides, examples, or specifications), bug fixes, optimizations, or just good suggestions. @@ -22,28 +22,31 @@ To learn about issues, click [here][2]. To open an issue, click [here][3]. To suggest documentation improvements, click [here][4]. -[1]: -[2]: +[1]: +[2]: [3]: [4]: -

Labels applied by the Magento team

+

Community Maintainers

+The members of this team have been recognized for their outstanding commitment to maintaining and improving Magento. Magento has granted them permission to accept, merge, and reject pull requests, as well as review issues, and thanks these Community Maintainers for their valuable contributions. + + + + -| Label | Description | -| ------------- |-------------| -| ![DOC](http://devdocs.magento.com/common/images/github_DOC.png) | Affects Documentation domain. | -| ![PROD](http://devdocs.magento.com/common/images/github_PROD.png) | Affects the Product team (mostly feature requests or business logic change). | -| ![TECH](http://devdocs.magento.com/common/images/github_TECH.png) | Affects Architect Group (mostly to make decisions around technology changes). | -| ![accept](http://devdocs.magento.com/common/images/github_accept.png) | The pull request has been accepted and will be merged into mainline code. | -| ![reject](http://devdocs.magento.com/common/images/github_reject.png) | The pull request has been rejected and will not be merged into mainline code. Possible reasons can include but are not limited to: issue has already been fixed in another code contribution, or there is an issue with the code contribution. | -| ![bug report](http://devdocs.magento.com/common/images/github_bug.png) | The Magento Team has confirmed that this issue contains the minimum required information to reproduce. | -| ![acknowledged](http://devdocs.magento.com/common/images/gitHub_acknowledged.png) | The Magento Team has validated the issue and an internal ticket has been created. | -| ![acknowledged](http://devdocs.magento.com/common/images/github_inProgress.png) | The internal ticket is currently in progress, fix is scheduled to be delivered. | -| ![acknowledged](http://devdocs.magento.com/common/images/github_needsUpdate.png) | The Magento Team needs additional information from the reporter to properly prioritize and process the issue or pull request. | +

Top Contributors

+Magento is thankful for any contribution that can improve our code base, documentation or increase test coverage. We always recognize our most active members, as their contributions are the foundation of the Magento Open Source platform. + + + + +

Labels applied by the Magento team

+We apply labels to public Pull Requests and Issues to help other participants retrieve additional information about current progress, component assignments, Magento release lines, and much more. +Please review the Code Contributions guide for detailed information on labels used in Magento 2 repositories.

Reporting security issues

-To report security vulnerabilities in Magento software or web sites, please e-mail security@magento.com. Please do not report security issues using GitHub. Be sure to encrypt your e-mail with our encryption key if it includes sensitive information. Learn more about reporting security issues here. +To report security vulnerabilities in Magento software or web sites, please create a Bugcrowd researcher account there to submit and follow-up your issue. Learn more about reporting security issues here. Stay up-to-date on the latest security news and patches for Magento by signing up for Security Alert Notifications. diff --git a/app/bootstrap.php b/app/bootstrap.php index 3d474cea45432..8e901cac9bfb8 100644 --- a/app/bootstrap.php +++ b/app/bootstrap.php @@ -14,12 +14,12 @@ if (!defined('PHP_VERSION_ID') || !(PHP_VERSION_ID === 70002 || PHP_VERSION_ID === 70004 || PHP_VERSION_ID >= 70006)) { if (PHP_SAPI == 'cli') { echo 'Magento supports 7.0.2, 7.0.4, and 7.0.6 or later. ' . - 'Please read http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html'; + 'Please read http://devdocs.magento.com/guides/v2.2/install-gde/system-requirements.html'; } else { echo <<

Magento supports PHP 7.0.2, 7.0.4, and 7.0.6 or later. Please read - + Magento System Requirements. HTML; @@ -31,8 +31,6 @@ // Sets default autoload mappings, may be overridden in Bootstrap::create \Magento\Framework\App\Bootstrap::populateAutoloader(BP, []); -require_once BP . '/app/functions.php'; - /* Custom umask value may be provided in optional mage_umask file in root */ $umaskFile = BP . '/magento_umask'; $mask = file_exists($umaskFile) ? octdec(file_get_contents($umaskFile)) : 002; @@ -54,12 +52,16 @@ && isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'text/html') !== false ) { - $profilerFlag = isset($_SERVER['MAGE_PROFILER']) && strlen($_SERVER['MAGE_PROFILER']) + $profilerConfig = isset($_SERVER['MAGE_PROFILER']) && strlen($_SERVER['MAGE_PROFILER']) ? $_SERVER['MAGE_PROFILER'] : trim(file_get_contents(BP . '/var/profiler.flag')); - \Magento\Framework\Profiler::applyConfig( - $profilerFlag, + if ($profilerConfig) { + $profilerConfig = json_decode($profilerConfig, true) ?: $profilerConfig; + } + + Magento\Framework\Profiler::applyConfig( + $profilerConfig, BP, !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ); diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php index 79f69ab5da88d..6b5e0681139cf 100644 --- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php +++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php @@ -28,11 +28,11 @@ public function execute() )->markAsRead( $notificationId ); - $this->messageManager->addSuccess(__('The message has been marked as Read.')); + $this->messageManager->addSuccessMessage(__('The message has been marked as Read.')); } catch (\Magento\Framework\Exception\LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + $this->messageManager->addErrorMessage($e->getMessage()); } catch (\Exception $e) { - $this->messageManager->addException( + $this->messageManager->addExceptionMessage( $e, __("We couldn't mark the notification as Read because of an error.") ); diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php index 9e61b8ff4b83c..9ae4a7cdac0b9 100644 --- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php +++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php @@ -23,7 +23,7 @@ public function execute() { $ids = $this->getRequest()->getParam('notification'); if (!is_array($ids)) { - $this->messageManager->addError(__('Please select messages.')); + $this->messageManager->addErrorMessage(__('Please select messages.')); } else { try { foreach ($ids as $id) { @@ -32,13 +32,13 @@ public function execute() $model->setIsRead(1)->save(); } } - $this->messageManager->addSuccess( + $this->messageManager->addSuccessMessage( __('A total of %1 record(s) have been marked as Read.', count($ids)) ); } catch (\Magento\Framework\Exception\LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + $this->messageManager->addErrorMessage($e->getMessage()); } catch (\Exception $e) { - $this->messageManager->addException( + $this->messageManager->addExceptionMessage( $e, __("We couldn't mark the notification as Read because of an error.") ); diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php index 6c0dfd1db7d16..f4cafa09c7e45 100644 --- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php +++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php @@ -23,7 +23,7 @@ public function execute() { $ids = $this->getRequest()->getParam('notification'); if (!is_array($ids)) { - $this->messageManager->addError(__('Please select messages.')); + $this->messageManager->addErrorMessage(__('Please select messages.')); } else { try { foreach ($ids as $id) { @@ -32,13 +32,14 @@ public function execute() $model->setIsRemove(1)->save(); } } - $this->messageManager->addSuccess(__('Total of %1 record(s) have been removed.', count($ids))); + $this->messageManager->addSuccessMessage(__('Total of %1 record(s) have been removed.', count($ids))); } catch (\Magento\Framework\Exception\LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + $this->messageManager->addErrorMessage($e->getMessage()); } catch (\Exception $e) { - $this->messageManager->addException($e, __("We couldn't remove the messages because of an error.")); + $this->messageManager + ->addExceptionMessage($e, __("We couldn't remove the messages because of an error.")); } } - $this->getResponse()->setRedirect($this->_redirect->getRedirectUrl($this->getUrl('*'))); + $this->_redirect('adminhtml/*/'); } } diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php index 17f911339cb61..bec101fc27d48 100644 --- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php +++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php @@ -31,11 +31,12 @@ public function execute() try { $model->setIsRemove(1)->save(); - $this->messageManager->addSuccess(__('The message has been removed.')); + $this->messageManager->addSuccessMessage(__('The message has been removed.')); } catch (\Magento\Framework\Exception\LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + $this->messageManager->addErrorMessage($e->getMessage()); } catch (\Exception $e) { - $this->messageManager->addException($e, __("We couldn't remove the messages because of an error.")); + $this->messageManager + ->addExceptionMessage($e, __("We couldn't remove the messages because of an error.")); } $this->_redirect('adminhtml/*/'); diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php index c332440276083..6088afbc2e1a4 100644 --- a/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php +++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php @@ -59,8 +59,10 @@ public function execute() if (empty($result)) { $result[] = [ 'severity' => (string)\Magento\Framework\Notification\MessageInterface::SEVERITY_NOTICE, - 'text' => 'You have viewed and resolved all recent system notices. ' - . 'Please refresh the web page to clear the notice alert.', + 'text' => __( + 'You have viewed and resolved all recent system notices. ' + . 'Please refresh the web page to clear the notice alert.' + ) ]; } $this->getResponse()->representJson($this->jsonHelper->jsonEncode($result)); diff --git a/app/code/Magento/AdminNotification/Test/Mftf/LICENSE.txt b/app/code/Magento/AdminNotification/Test/Mftf/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/app/code/Magento/AdminNotification/Test/Mftf/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/app/code/Magento/AdminNotification/Test/Mftf/LICENSE_AFL.txt b/app/code/Magento/AdminNotification/Test/Mftf/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/app/code/Magento/AdminNotification/Test/Mftf/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/app/code/Magento/AdminNotification/Test/Mftf/README.md b/app/code/Magento/AdminNotification/Test/Mftf/README.md new file mode 100644 index 0000000000000..33f88ba74200a --- /dev/null +++ b/app/code/Magento/AdminNotification/Test/Mftf/README.md @@ -0,0 +1,3 @@ +# Admin Notification Functional Tests + +The Functional Test Module for **Magento Admin Notification** module. diff --git a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/CacheOutdatedTest.php b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/CacheOutdatedTest.php index 2fbfc43aa8775..f49911c3e7a93 100644 --- a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/CacheOutdatedTest.php +++ b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/CacheOutdatedTest.php @@ -62,6 +62,9 @@ public function testGetIdentity($expectedSum, $cacheTypes) $this->assertEquals($expectedSum, $this->_messageModel->getIdentity()); } + /** + * @return array + */ public function getIdentityDataProvider() { $cacheTypeMock1 = $this->createPartialMock(\stdClass::class, ['getCacheType']); @@ -95,6 +98,9 @@ public function testIsDisplayed($expected, $allowed, $cacheTypes) $this->assertEquals($expected, $this->_messageModel->isDisplayed()); } + /** + * @return array + */ public function isDisplayedDataProvider() { $cacheTypesMock = $this->createPartialMock(\stdClass::class, ['getCacheType']); diff --git a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/ErrorTest.php b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/ErrorTest.php index 2c259db868851..b490efd8e9683 100644 --- a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/ErrorTest.php +++ b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/ErrorTest.php @@ -72,6 +72,9 @@ public function testIsDisplayed($expectedFirstRun, $data) $this->assertEquals($expectedFirstRun, $model->isDisplayed()); } + /** + * @return array + */ public function isDisplayedDataProvider() { return [ diff --git a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/SecurityTest.php b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/SecurityTest.php index 1e71570a5e30b..c6f61fee862ba 100644 --- a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/SecurityTest.php +++ b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/SecurityTest.php @@ -76,6 +76,9 @@ public function testIsDisplayed($expectedResult, $cached, $response) $this->assertEquals($expectedResult, $this->_messageModel->isDisplayed()); } + /** + * @return array + */ public function isDisplayedDataProvider() { return [ diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json index a3371c702c729..ae1b8dc7d14ff 100644 --- a/app/code/Magento/AdminNotification/composer.json +++ b/app/code/Magento/AdminNotification/composer.json @@ -2,7 +2,7 @@ "name": "magento/module-admin-notification", "description": "N/A", "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "php": "~7.0.13|~7.1.0", "magento/module-store": "100.2.*", "magento/module-backend": "100.2.*", "magento/module-media-storage": "100.2.*", @@ -11,7 +11,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/AdminNotification/etc/adminhtml/menu.xml b/app/code/Magento/AdminNotification/etc/adminhtml/menu.xml index fbed5c0960b73..04d700b9f90ce 100644 --- a/app/code/Magento/AdminNotification/etc/adminhtml/menu.xml +++ b/app/code/Magento/AdminNotification/etc/adminhtml/menu.xml @@ -7,6 +7,6 @@ -->

- + diff --git a/app/code/Magento/AdminNotification/i18n/en_US.csv b/app/code/Magento/AdminNotification/i18n/en_US.csv index 16c5abb9db0d2..db5a4c9254814 100644 --- a/app/code/Magento/AdminNotification/i18n/en_US.csv +++ b/app/code/Magento/AdminNotification/i18n/en_US.csv @@ -48,3 +48,4 @@ Severity,Severity "Date Added","Date Added" Message,Message Actions,Actions +"You have viewed and resolved all recent system notices. Please refresh the web page to clear the notice alert.","You have viewed and resolved all recent system notices. Please refresh the web page to clear the notice alert." diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml index a97293547e132..0448daaf17644 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml +++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml @@ -19,20 +19,12 @@ - + \ No newline at end of file diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js new file mode 100644 index 0000000000000..39c61d6e07d29 --- /dev/null +++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js @@ -0,0 +1,26 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'Magento_Ui/js/modal/modal' +], function ($, modal) { + 'use strict'; + + return function (data, element) { + + if (modal.modal) { + modal.modal.html($(element).html()); + } else { + modal.modal = $(element).modal({ + modalClass: data.class, + type: 'popup', + buttons: [] + }); + } + + modal.modal.modal('openModal'); + }; +}); diff --git a/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php b/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php index 02413a1899cd7..818bcda1da65f 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php +++ b/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php @@ -37,10 +37,10 @@ public function execute() ); return $resultLayout; } catch (\Exception $e) { - $this->messageManager->addError($e->getMessage()); + $this->messageManager->addErrorMessage($e->getMessage()); } } else { - $this->messageManager->addError(__('Please correct the data sent.')); + $this->messageManager->addErrorMessage(__('Please correct the data sent.')); } /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT); diff --git a/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php b/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php index 62a7aefa77550..3122a0a7ee648 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php +++ b/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php @@ -103,7 +103,6 @@ class AdvancedPricing extends \Magento\CatalogImportExport\Model\Export\Product * @param \Magento\CatalogImportExport\Model\Export\RowCustomizerInterface $rowCustomizer * @param ImportProduct\StoreResolver $storeResolver * @param \Magento\Customer\Api\GroupRepositoryInterface $groupRepository - * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -192,6 +191,7 @@ protected function initTypeModels() * Export process * * @return string + * @throws \Magento\Framework\Exception\LocalizedException */ public function export() { @@ -461,6 +461,7 @@ protected function getTierPrices(array $productLinksIds, $table) * * @param int $websiteId * @return string + * @throws \Magento\Framework\Exception\LocalizedException */ protected function _getWebsiteCode(int $websiteId): string { @@ -491,6 +492,8 @@ protected function _getWebsiteCode(int $websiteId): string * @param int $customerGroupId * @param int $allGroups * @return string + * @throws \Magento\Framework\Exception\LocalizedException + * @throws \Magento\Framework\Exception\NoSuchEntityException */ protected function _getCustomerGroupById( int $customerGroupId, diff --git a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php index 23829d3725119..754f5fd6c8c20 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php +++ b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php @@ -8,7 +8,6 @@ use Magento\CatalogImportExport\Model\Import\Product as ImportProduct; use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface; -use Magento\Framework\App\ResourceConnection; /** * Class AdvancedPricing @@ -394,7 +393,7 @@ protected function saveAndReplaceAdvancedPrices() ? $rowData[self::COL_TIER_PRICE] : 0, 'percentage_value' => $rowData[self::COL_TIER_PRICE_TYPE] === self::TIER_PRICE_TYPE_PERCENT ? $rowData[self::COL_TIER_PRICE] : null, - 'website_id' => $this->getWebsiteId($rowData[self::COL_TIER_PRICE_WEBSITE]) + 'website_id' => $this->getWebSiteId($rowData[self::COL_TIER_PRICE_WEBSITE]) ]; } } @@ -619,6 +618,7 @@ protected function processCountNewPrices(array $tierPrices) * Get product entity link field * * @return string + * @throws \Exception */ private function getProductEntityLinkField() { diff --git a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing/Validator.php b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing/Validator.php index 25a9fc244fe51..d939a3f7c392e 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing/Validator.php +++ b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing/Validator.php @@ -28,6 +28,7 @@ public function __construct($validators = []) * * @param array $value * @return bool + * @throws \Zend_Validate_Exception */ public function isValid($value) { diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/LICENSE.txt b/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/LICENSE.txt new file mode 100644 index 0000000000000..2b7359b7dfcb4 --- /dev/null +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/LICENSE_AFL.txt b/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/README.md b/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/README.md new file mode 100644 index 0000000000000..7b4d0f3f0b12b --- /dev/null +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Mftf/README.md @@ -0,0 +1,3 @@ +# Advanced Pricing Import Export Functional Tests + +The Functional Test Module for **Magento Advanced Pricing Import Export** module. diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php index 48b4c58918740..c927aad6ac714 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php @@ -213,7 +213,7 @@ protected function setUp() '_getCustomerGroupById', 'correctExportData' ]); - $this->advancedPricing = $this->getMockbuilder( + $this->advancedPricing = $this->getMockBuilder( \Magento\AdvancedPricingImportExport\Model\Export\AdvancedPricing::class ) ->setMethods($mockMethods) @@ -347,6 +347,7 @@ protected function tearDown() * @param $object * @param $property * @return mixed + * @throws \ReflectionException */ protected function getPropertyValue($object, $property) { @@ -362,6 +363,8 @@ protected function getPropertyValue($object, $property) * @param $object * @param $property * @param $value + * @return mixed + * @throws \ReflectionException */ protected function setPropertyValue(&$object, $property, $value) { diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php index bb64acb558320..2c930237da831 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php @@ -181,6 +181,9 @@ public function testIsValidAddMessagesCall($value, $hasEmptyColumns, $customerGr $this->tierPrice->isValid($value); } + /** + * @return array + */ public function isValidResultFalseDataProvider() { return [ @@ -286,6 +289,9 @@ public function isValidResultFalseDataProvider() ]; } + /** + * @return array + */ public function isValidAddMessagesCallDataProvider() { return [ @@ -340,6 +346,7 @@ public function isValidAddMessagesCallDataProvider() * @param object $object * @param string $property * @return mixed + * @throws \ReflectionException */ protected function getPropertyValue($object, $property) { @@ -357,6 +364,7 @@ protected function getPropertyValue($object, $property) * @param string $property * @param mixed $value * @return object + * @throws \ReflectionException */ protected function setPropertyValue(&$object, $property, $value) { diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php index 5111b4932d7a8..b46e286e75007 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php @@ -27,7 +27,7 @@ class WebsiteTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->webSiteModel = $this->getMockBuilder(\Magento\Store\Model\WebSite::class) + $this->webSiteModel = $this->getMockBuilder(\Magento\Store\Model\Website::class) ->setMethods(['getBaseCurrency']) ->disableOriginalConstructor() ->getMock(); @@ -114,6 +114,9 @@ public function testGetAllWebsitesValue() $this->assertEquals($expectedResult, $result); } + /** + * @return array + */ public function isValidReturnDataProvider() { return [ diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/ValidatorTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/ValidatorTest.php index d9fce98826105..5ca534284a48d 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/ValidatorTest.php +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/ValidatorTest.php @@ -77,6 +77,9 @@ public function testInit() $this->validator->init(null); } + /** + * @return array + */ public function isValidDataProvider() { return [ diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php index 6d130d93ee6a5..15a3ae3a22d4a 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php @@ -209,6 +209,10 @@ public function testGetEntityTypeCode() * Test method validateRow against its result. * * @dataProvider validateRowResultDataProvider + * @param array $rowData + * @param string|null $behavior + * @param bool $expectedResult + * @throws \ReflectionException */ public function testValidateRowResult($rowData, $behavior, $expectedResult) { @@ -234,6 +238,10 @@ public function testValidateRowResult($rowData, $behavior, $expectedResult) * Test method validateRow whether AddRowError is called. * * @dataProvider validateRowAddRowErrorCallDataProvider + * @param array $rowData + * @param string|null $behavior + * @param string $error + * @throws \ReflectionException */ public function testValidateRowAddRowErrorCall($rowData, $behavior, $error) { @@ -324,6 +332,13 @@ public function testSaveAdvancedPricing() * Take into consideration different data and check relative internal calls. * * @dataProvider saveAndReplaceAdvancedPricesAppendBehaviourDataProvider + * @param array $data + * @param string $tierCustomerGroupId + * @param string $groupCustomerGroupId + * @param string $tierWebsiteId + * @param string $groupWebsiteId + * @param array $expectedTierPrices + * @throws \ReflectionException */ public function testSaveAndReplaceAdvancedPricesAppendBehaviourDataAndCalls( $data, @@ -768,6 +783,9 @@ public function testSaveProductPrices($priceData, $oldSkus, $priceIn, $callNum) $this->invokeMethod($this->advancedPricing, 'saveProductPrices', [$priceData, 'table']); } + /** + * @return array + */ public function saveProductPricesDataProvider() { return [ @@ -839,6 +857,9 @@ public function testDeleteProductTierPrices( ); } + /** + * @return array + */ public function deleteProductTierPricesDataProvider() { return [ @@ -921,6 +942,9 @@ public function testProcessCountExistingPrices( $this->invokeMethod($this->advancedPricing, 'processCountExistingPrices', [$prices, 'table']); } + /** + * @return array + */ public function processCountExistingPricesDataProvider() { return [ @@ -947,6 +971,7 @@ public function processCountExistingPricesDataProvider() * @param $object * @param $property * @return mixed + * @throws \ReflectionException */ protected function getPropertyValue($object, $property) { @@ -963,6 +988,8 @@ protected function getPropertyValue($object, $property) * @param $object * @param $property * @param $value + * @return mixed + * @throws \ReflectionException */ protected function setPropertyValue(&$object, $property, $value) { @@ -981,7 +1008,8 @@ protected function setPropertyValue(&$object, $property, $value) * @param string $method * @param array $args * - * @return mixed the method result. + * @return mixed + * @throws \ReflectionException */ private function invokeMethod($object, $method, $args = []) { @@ -998,6 +1026,7 @@ private function invokeMethod($object, $method, $args = []) * @param array $methods * * @return \PHPUnit_Framework_MockObject_MockObject + * @throws \ReflectionException */ private function getAdvancedPricingMock($methods = []) { diff --git a/app/code/Magento/AdvancedPricingImportExport/composer.json b/app/code/Magento/AdvancedPricingImportExport/composer.json index 79e6e2d368736..458827b9ab18a 100644 --- a/app/code/Magento/AdvancedPricingImportExport/composer.json +++ b/app/code/Magento/AdvancedPricingImportExport/composer.json @@ -2,7 +2,7 @@ "name": "magento/module-advanced-pricing-import-export", "description": "N/A", "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "php": "~7.0.13|~7.1.0", "magento/module-catalog": "102.0.*", "magento/module-catalog-inventory": "100.2.*", "magento/module-eav": "101.0.*", @@ -13,7 +13,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Analytics/Block/Adminhtml/System/Config/CollectionTimeLabel.php b/app/code/Magento/Analytics/Block/Adminhtml/System/Config/CollectionTimeLabel.php index c4118792255cd..34f2b7d53d9be 100644 --- a/app/code/Magento/Analytics/Block/Adminhtml/System/Config/CollectionTimeLabel.php +++ b/app/code/Magento/Analytics/Block/Adminhtml/System/Config/CollectionTimeLabel.php @@ -5,13 +5,35 @@ */ namespace Magento\Analytics\Block\Adminhtml\System\Config; +use Magento\Framework\App\ObjectManager; + /** * Provides label with default Time Zone */ class CollectionTimeLabel extends \Magento\Config\Block\System\Config\Form\Field { /** - * Add default time zone to comment + * @var \Magento\Framework\Locale\ResolverInterface + */ + private $localeResolver; + + /** + * @param \Magento\Backend\Block\Template\Context $context + * @param array $data + * @param \Magento\Framework\Locale\ResolverInterface|null $localeResolver + */ + public function __construct( + \Magento\Backend\Block\Template\Context $context, + array $data = [], + \Magento\Framework\Locale\ResolverInterface $localeResolver = null + ) { + $this->localeResolver = $localeResolver ?: + ObjectManager::getInstance()->get(\Magento\Framework\Locale\ResolverInterface::class); + parent::__construct($context, $data); + } + + /** + * Add current time zone to comment, properly translated according to locale * * @param \Magento\Framework\Data\Form\Element\AbstractElement $element * @return string @@ -19,7 +41,9 @@ class CollectionTimeLabel extends \Magento\Config\Block\System\Config\Form\Field public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element) { $timeZoneCode = $this->_localeDate->getConfigTimezone(); - $getLongTimeZoneName = \IntlTimeZone::createTimeZone($timeZoneCode)->getDisplayName(); + $locale = $this->localeResolver->getLocale(); + $getLongTimeZoneName = \IntlTimeZone::createTimeZone($timeZoneCode) + ->getDisplayName(false, \IntlTimeZone::DISPLAY_LONG, $locale); $element->setData( 'comment', sprintf("%s (%s)", $getLongTimeZoneName, $timeZoneCode) diff --git a/app/code/Magento/Analytics/ReportXml/DB/SelectBuilder.php b/app/code/Magento/Analytics/ReportXml/DB/SelectBuilder.php index 4e5a1940773b1..17f2392758de8 100644 --- a/app/code/Magento/Analytics/ReportXml/DB/SelectBuilder.php +++ b/app/code/Magento/Analytics/ReportXml/DB/SelectBuilder.php @@ -87,11 +87,13 @@ public function getJoins() * Set joins conditions * * @param array $joins - * @return void + * @return $this */ public function setJoins($joins) { $this->joins = $joins; + + return $this; } /** @@ -108,11 +110,13 @@ public function getConnectionName() * Set connection name * * @param string $connectionName - * @return void + * @return $this */ public function setConnectionName($connectionName) { $this->connectionName = $connectionName; + + return $this; } /** @@ -129,11 +133,13 @@ public function getColumns() * Set columns * * @param array $columns - * @return void + * @return $this */ public function setColumns($columns) { $this->columns = $columns; + + return $this; } /** @@ -150,11 +156,13 @@ public function getFilters() * Set filters * * @param array $filters - * @return void + * @return $this */ public function setFilters($filters) { $this->filters = $filters; + + return $this; } /** @@ -171,11 +179,13 @@ public function getFrom() * Set from condition * * @param array $from - * @return void + * @return $this */ public function setFrom($from) { $this->from = $from; + + return $this; } /** @@ -238,11 +248,13 @@ public function getGroup() * Set group * * @param array $group - * @return void + * @return $this */ public function setGroup($group) { $this->group = $group; + + return $this; } /** @@ -259,11 +271,13 @@ public function getParams() * Set parameters * * @param array $params - * @return void + * @return $this */ public function setParams($params) { $this->params = $params; + + return $this; } /** @@ -280,10 +294,12 @@ public function getHaving() * Set having condition * * @param array $having - * @return void + * @return $this */ public function setHaving($having) { $this->having = $having; + + return $this; } } diff --git a/app/code/Magento/Analytics/ReportXml/ReportProvider.php b/app/code/Magento/Analytics/ReportXml/ReportProvider.php index 3ebe5941108bc..247be5fa8e4ca 100644 --- a/app/code/Magento/Analytics/ReportXml/ReportProvider.php +++ b/app/code/Magento/Analytics/ReportXml/ReportProvider.php @@ -57,7 +57,7 @@ public function __construct( private function getIteratorName(Query $query) { $config = $query->getConfig(); - return isset($config['iterator']) ? $config['iterator'] : null; + return $config['iterator'] ?? null; } /** diff --git a/app/code/Magento/Analytics/Test/Mftf/LICENSE.txt b/app/code/Magento/Analytics/Test/Mftf/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/app/code/Magento/Analytics/Test/Mftf/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/app/code/Magento/Analytics/Test/Mftf/LICENSE_AFL.txt b/app/code/Magento/Analytics/Test/Mftf/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/app/code/Magento/Analytics/Test/Mftf/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/app/code/Magento/Analytics/Test/Mftf/README.md b/app/code/Magento/Analytics/Test/Mftf/README.md new file mode 100644 index 0000000000000..cdeb48941e6a4 --- /dev/null +++ b/app/code/Magento/Analytics/Test/Mftf/README.md @@ -0,0 +1,3 @@ +# Analytics Functional Tests + +The Functional Test Module for **Magento Analytics** module. diff --git a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/AdditionalCommentTest.php b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/AdditionalCommentTest.php index cbf06264096ac..407e323aeaae6 100644 --- a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/AdditionalCommentTest.php +++ b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/AdditionalCommentTest.php @@ -65,11 +65,11 @@ public function testRender() ->method('getLabel') ->willReturn('Comment label'); $html = $this->additionalComment->render($this->abstractElementMock); - $this->assertRegexp( + $this->assertRegExp( "/New comment/", $html ); - $this->assertRegexp( + $this->assertRegExp( "/Comment label/", $html ); diff --git a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/CollectionTimeLabelTest.php b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/CollectionTimeLabelTest.php index a652cf6b3d548..54612076a757f 100644 --- a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/CollectionTimeLabelTest.php +++ b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/CollectionTimeLabelTest.php @@ -73,7 +73,7 @@ public function testRender() $this->abstractElementMock->expects($this->any()) ->method('getComment') ->willReturn('Eastern Standard Time (America/New_York)'); - $this->assertRegexp( + $this->assertRegExp( "/Eastern Standard Time \(America\/New_York\)/", $this->collectionTimeLabel->render($this->abstractElementMock) ); diff --git a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/SubscriptionStatusLabelTest.php b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/SubscriptionStatusLabelTest.php index 09e753e4ac8aa..0806187ebac01 100644 --- a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/SubscriptionStatusLabelTest.php +++ b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/SubscriptionStatusLabelTest.php @@ -77,7 +77,7 @@ public function testRender() $this->abstractElementMock->expects($this->any()) ->method('getComment') ->willReturn('Subscription status: Enabled'); - $this->assertRegexp( + $this->assertRegExp( "/Subscription status: Enabled/", $this->subscriptionStatusLabel->render($this->abstractElementMock) ); diff --git a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/VerticalTest.php b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/VerticalTest.php index abce48c36c86a..6a0cecc781062 100644 --- a/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/VerticalTest.php +++ b/app/code/Magento/Analytics/Test/Unit/Block/Adminhtml/System/Config/VerticalTest.php @@ -65,7 +65,7 @@ public function testRender() ->method('getHint') ->willReturn('New hint'); $html = $this->vertical->render($this->abstractElementMock); - $this->assertRegexp( + $this->assertRegExp( "/New comment/", $html ); diff --git a/app/code/Magento/Analytics/Test/Unit/ReportXml/DB/SelectBuilderTest.php b/app/code/Magento/Analytics/Test/Unit/ReportXml/DB/SelectBuilderTest.php index a82a187cdb3f8..1c60822aca795 100644 --- a/app/code/Magento/Analytics/Test/Unit/ReportXml/DB/SelectBuilderTest.php +++ b/app/code/Magento/Analytics/Test/Unit/ReportXml/DB/SelectBuilderTest.php @@ -67,12 +67,12 @@ public function testCreate() ['link-type' => 'right', 'table' => 'attribute', 'condition' => 'neq'], ]; $groups = ['id', 'name']; - $this->selectBuilder->setConnectionName($connectionName); - $this->selectBuilder->setFrom($from); - $this->selectBuilder->setColumns($columns); - $this->selectBuilder->setFilters([$filter]); - $this->selectBuilder->setJoins($joins); - $this->selectBuilder->setGroup($groups); + $this->selectBuilder->setConnectionName($connectionName) + ->setFrom($from) + ->setColumns($columns) + ->setFilters([$filter]) + ->setJoins($joins) + ->setGroup($groups); $this->resourceConnectionMock->expects($this->once()) ->method('getConnection') ->with($connectionName) diff --git a/app/code/Magento/Analytics/Test/Unit/ReportXml/QueryTest.php b/app/code/Magento/Analytics/Test/Unit/ReportXml/QueryTest.php index a4b08a9ce5e0a..fd924abdd9f44 100644 --- a/app/code/Magento/Analytics/Test/Unit/ReportXml/QueryTest.php +++ b/app/code/Magento/Analytics/Test/Unit/ReportXml/QueryTest.php @@ -49,7 +49,7 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); - $this->selectHydratorMock = $this->getMockBuilder(selectHydrator::class) + $this->selectHydratorMock = $this->getMockBuilder(SelectHydrator::class) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Analytics/composer.json b/app/code/Magento/Analytics/composer.json index b17bb10cb4112..7edb72db45e52 100644 --- a/app/code/Magento/Analytics/composer.json +++ b/app/code/Magento/Analytics/composer.json @@ -2,15 +2,15 @@ "name": "magento/module-analytics", "description": "N/A", "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "php": "~7.0.13|~7.1.0", "magento/module-backend": "100.2.*", - "magento/module-config": "100.2.*", + "magento/module-config": "101.0.*", "magento/module-integration": "100.2.*", "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Analytics/etc/adminhtml/system.xml b/app/code/Magento/Analytics/etc/adminhtml/system.xml index 889517e629e04..c7da840b7e665 100644 --- a/app/code/Magento/Analytics/etc/adminhtml/system.xml +++ b/app/code/Magento/Analytics/etc/adminhtml/system.xml @@ -17,14 +17,14 @@ Your reports can be accessed securely on a personalized dashboard outside of the admin panel by clicking on the "Go to Advanced Reporting" link.
For more information, see our terms and conditions.]]> - + Magento\Config\Model\Config\Source\Enabledisable Magento\Analytics\Model\Config\Backend\Enabled Magento\Analytics\Block\Adminhtml\System\Config\SubscriptionStatusLabel analytics/subscription/enabled - + Magento\Analytics\Block\Adminhtml\System\Config\CollectionTimeLabel Magento\Analytics\Model\Config\Backend\CollectionTime @@ -36,6 +36,9 @@ Magento\Analytics\Model\Config\Source\Vertical Magento\Analytics\Model\Config\Backend\Vertical Magento\Analytics\Block\Adminhtml\System\Config\Vertical + + 1 + diff --git a/app/code/Magento/Analytics/etc/di.xml b/app/code/Magento/Analytics/etc/di.xml index 56657b58475d3..b9bb9cc9ff00c 100644 --- a/app/code/Magento/Analytics/etc/di.xml +++ b/app/code/Magento/Analytics/etc/di.xml @@ -254,4 +254,22 @@ NotifyDataChangedResponseResolver + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + 1 + 1 + 1 + + + diff --git a/app/code/Magento/Authorization/Test/Mftf/LICENSE.txt b/app/code/Magento/Authorization/Test/Mftf/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/app/code/Magento/Authorization/Test/Mftf/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/app/code/Magento/Authorization/Test/Mftf/LICENSE_AFL.txt b/app/code/Magento/Authorization/Test/Mftf/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/app/code/Magento/Authorization/Test/Mftf/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/app/code/Magento/Authorization/Test/Mftf/README.md b/app/code/Magento/Authorization/Test/Mftf/README.md new file mode 100644 index 0000000000000..1d44ab2e73052 --- /dev/null +++ b/app/code/Magento/Authorization/Test/Mftf/README.md @@ -0,0 +1,3 @@ +# Authorization Functional Tests + +The Functional Test Module for **Magento Authorization** module. diff --git a/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php b/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php index bd1a3616a746e..58720ad9c9f5c 100644 --- a/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php +++ b/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php @@ -78,6 +78,9 @@ public function testGetAllowedResourcesByUser() ); } + /** + * @return AclRetriever + */ protected function createAclRetriever() { $this->roleMock = $this->createPartialMock(\Magento\Authorization\Model\Role::class, ['getId', '__wakeup']); diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json index c0b0f9c6b13df..35063d1516784 100644 --- a/app/code/Magento/Authorization/composer.json +++ b/app/code/Magento/Authorization/composer.json @@ -2,12 +2,12 @@ "name": "magento/module-authorization", "description": "Authorization module provides access to Magento ACL functionality.", "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "php": "~7.0.13|~7.1.0", "magento/module-backend": "100.2.*", "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php index 0f10fd633cb5b..9186acce83b4c 100644 --- a/app/code/Magento/Authorizenet/Model/Directpost.php +++ b/app/code/Magento/Authorizenet/Model/Directpost.php @@ -5,10 +5,9 @@ */ namespace Magento\Authorizenet\Model; -use Magento\Framework\HTTP\ZendClientFactory; +use Magento\Framework\App\ObjectManager; use Magento\Payment\Model\Method\ConfigInterface; use Magento\Payment\Model\Method\TransparentInterface; -use Magento\Sales\Model\Order\Email\Sender\OrderSender; /** * Authorize.net DirectPost payment method model. @@ -102,7 +101,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra protected $response; /** - * @var OrderSender + * @var \Magento\Sales\Model\Order\Email\Sender\OrderSender */ protected $orderSender; @@ -123,6 +122,16 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra */ private $psrLogger; + /** + * @var \Magento\Sales\Api\PaymentFailuresInterface + */ + private $paymentFailures; + + /** + * @var \Magento\Sales\Model\Order + */ + private $order; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -141,11 +150,12 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository - * @param OrderSender $orderSender + * @param \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data + * @param \Magento\Sales\Api\PaymentFailuresInterface|null $paymentFailures * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -162,7 +172,7 @@ public function __construct( \Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory, \Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory, TransactionService $transactionService, - ZendClientFactory $httpClientFactory, + \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Quote\Api\CartRepositoryInterface $quoteRepository, @@ -170,7 +180,8 @@ public function __construct( \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository, \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], + \Magento\Sales\Api\PaymentFailuresInterface $paymentFailures = null ) { $this->orderFactory = $orderFactory; $this->storeManager = $storeManager; @@ -179,6 +190,8 @@ public function __construct( $this->orderSender = $orderSender; $this->transactionRepository = $transactionRepository; $this->_code = static::METHOD_CODE; + $this->paymentFailures = $paymentFailures ? : ObjectManager::getInstance() + ->get(\Magento\Sales\Api\PaymentFailuresInterface::class); parent::__construct( $context, @@ -561,13 +574,10 @@ public function process(array $responseData) $this->validateResponse(); $response = $this->getResponse(); - //operate with order - $orderIncrementId = $response->getXInvoiceNum(); $responseText = $this->dataHelper->wrapGatewayError($response->getXResponseReasonText()); $isError = false; - if ($orderIncrementId) { - /* @var $order \Magento\Sales\Model\Order */ - $order = $this->orderFactory->create()->loadByIncrementId($orderIncrementId); + if ($this->getOrderIncrementId()) { + $order = $this->getOrderFromResponse(); //check payment method $payment = $order->getPayment(); if (!$payment || $payment->getMethod() != $this->getCode()) { @@ -632,9 +642,10 @@ public function checkResponseCode() return true; case self::RESPONSE_CODE_DECLINED: case self::RESPONSE_CODE_ERROR: - throw new \Magento\Framework\Exception\LocalizedException( - $this->dataHelper->wrapGatewayError($this->getResponse()->getXResponseReasonText()) - ); + $errorMessage = $this->dataHelper->wrapGatewayError($this->getResponse()->getXResponseReasonText()); + $order = $this->getOrderFromResponse(); + $this->paymentFailures->handle((int)$order->getQuoteId(), $errorMessage); + throw new \Magento\Framework\Exception\LocalizedException($errorMessage); default: throw new \Magento\Framework\Exception\LocalizedException( __('There was a payment authorization error.') @@ -803,10 +814,14 @@ protected function declineOrder(\Magento\Sales\Model\Order $order, $message = '' { try { $response = $this->getResponse(); - if ($voidPayment && $response->getXTransId() && strtoupper($response->getXType()) - == self::REQUEST_TYPE_AUTH_ONLY + if ($voidPayment + && $response->getXTransId() + && strtoupper($response->getXType()) == self::REQUEST_TYPE_AUTH_ONLY ) { - $order->getPayment()->setTransactionId(null)->setParentTransactionId($response->getXTransId())->void(); + $order->getPayment() + ->setTransactionId(null) + ->setParentTransactionId($response->getXTransId()) + ->void($response); } $order->registerCancellation($message)->save(); } catch (\Exception $e) { @@ -988,12 +1003,40 @@ protected function getTransactionResponse($transactionId) private function getPsrLogger() { if (null === $this->psrLogger) { - $this->psrLogger = \Magento\Framework\App\ObjectManager::getInstance() + $this->psrLogger = ObjectManager::getInstance() ->get(\Psr\Log\LoggerInterface::class); } return $this->psrLogger; } + /** + * Fetch order by increment id from response. + * + * @return \Magento\Sales\Model\Order + */ + private function getOrderFromResponse(): \Magento\Sales\Model\Order + { + if (!$this->order) { + $this->order = $this->orderFactory->create(); + + if ($incrementId = $this->getOrderIncrementId()) { + $this->order = $this->order->loadByIncrementId($incrementId); + } + } + + return $this->order; + } + + /** + * Fetch order increment id from response. + * + * @return string + */ + private function getOrderIncrementId(): string + { + return $this->getResponse()->getXInvoiceNum(); + } + /** * Checks if filter action is Report Only. Transactions that trigger this filter are processed as normal, * but are also reported in the Merchant Interface as triggering this filter. diff --git a/app/code/Magento/Authorizenet/Model/Directpost/Request.php b/app/code/Magento/Authorizenet/Model/Directpost/Request.php index d9a403e5c991e..fc78d836b6080 100644 --- a/app/code/Magento/Authorizenet/Model/Directpost/Request.php +++ b/app/code/Magento/Authorizenet/Model/Directpost/Request.php @@ -112,50 +112,50 @@ public function setDataFromOrder( sprintf('%.2F', $order->getBaseShippingAmount()) ); - //need to use strval() because NULL values IE6-8 decodes as "null" in JSON in JavaScript, + //need to use (string) because NULL values IE6-8 decodes as "null" in JSON in JavaScript, //but we need "" for null values. $billing = $order->getBillingAddress(); if (!empty($billing)) { - $this->setXFirstName(strval($billing->getFirstname())) - ->setXLastName(strval($billing->getLastname())) - ->setXCompany(strval($billing->getCompany())) - ->setXAddress(strval($billing->getStreetLine(1))) - ->setXCity(strval($billing->getCity())) - ->setXState(strval($billing->getRegion())) - ->setXZip(strval($billing->getPostcode())) - ->setXCountry(strval($billing->getCountryId())) - ->setXPhone(strval($billing->getTelephone())) - ->setXFax(strval($billing->getFax())) - ->setXCustId(strval($billing->getCustomerId())) - ->setXCustomerIp(strval($order->getRemoteIp())) - ->setXCustomerTaxId(strval($billing->getTaxId())) - ->setXEmail(strval($order->getCustomerEmail())) - ->setXEmailCustomer(strval($paymentMethod->getConfigData('email_customer'))) - ->setXMerchantEmail(strval($paymentMethod->getConfigData('merchant_email'))); + $this->setXFirstName((string)$billing->getFirstname()) + ->setXLastName((string)$billing->getLastname()) + ->setXCompany((string)$billing->getCompany()) + ->setXAddress((string)$billing->getStreetLine(1)) + ->setXCity((string)$billing->getCity()) + ->setXState((string)$billing->getRegion()) + ->setXZip((string)$billing->getPostcode()) + ->setXCountry((string)$billing->getCountryId()) + ->setXPhone((string)$billing->getTelephone()) + ->setXFax((string)$billing->getFax()) + ->setXCustId((string)$billing->getCustomerId()) + ->setXCustomerIp((string)$order->getRemoteIp()) + ->setXCustomerTaxId((string)$billing->getTaxId()) + ->setXEmail((string)$order->getCustomerEmail()) + ->setXEmailCustomer((string)$paymentMethod->getConfigData('email_customer')) + ->setXMerchantEmail((string)$paymentMethod->getConfigData('merchant_email')); } $shipping = $order->getShippingAddress(); if (!empty($shipping)) { $this->setXShipToFirstName( - strval($shipping->getFirstname()) + (string)$shipping->getFirstname() )->setXShipToLastName( - strval($shipping->getLastname()) + (string)$shipping->getLastname() )->setXShipToCompany( - strval($shipping->getCompany()) + (string)$shipping->getCompany() )->setXShipToAddress( - strval($shipping->getStreetLine(1)) + (string)$shipping->getStreetLine(1) )->setXShipToCity( - strval($shipping->getCity()) + (string)$shipping->getCity() )->setXShipToState( - strval($shipping->getRegion()) + (string)$shipping->getRegion() )->setXShipToZip( - strval($shipping->getPostcode()) + (string)$shipping->getPostcode() )->setXShipToCountry( - strval($shipping->getCountryId()) + (string)$shipping->getCountryId() ); } - $this->setXPoNum(strval($payment->getPoNumber())); + $this->setXPoNum((string)$payment->getPoNumber()); return $this; } diff --git a/app/code/Magento/Authorizenet/Test/Mftf/LICENSE.txt b/app/code/Magento/Authorizenet/Test/Mftf/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/app/code/Magento/Authorizenet/Test/Mftf/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/app/code/Magento/Authorizenet/Test/Mftf/LICENSE_AFL.txt b/app/code/Magento/Authorizenet/Test/Mftf/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/app/code/Magento/Authorizenet/Test/Mftf/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/app/code/Magento/Authorizenet/Test/Mftf/README.md b/app/code/Magento/Authorizenet/Test/Mftf/README.md new file mode 100644 index 0000000000000..9391126a85c94 --- /dev/null +++ b/app/code/Magento/Authorizenet/Test/Mftf/README.md @@ -0,0 +1,3 @@ +# Authorizenet Functional Tests + +The Functional Test Module for **Magento Authorizenet** module. diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/Directpost/ResponseTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/Directpost/ResponseTest.php index 6e5d55e52675e..b4274e87401ca 100644 --- a/app/code/Magento/Authorizenet/Test/Unit/Model/Directpost/ResponseTest.php +++ b/app/code/Magento/Authorizenet/Test/Unit/Model/Directpost/ResponseTest.php @@ -37,6 +37,9 @@ public function testGenerateHash($merchantMd5, $merchantApiLogin, $amount, $amou ); } + /** + * @return array + */ public function generateHashDataProvider() { return [ @@ -57,6 +60,14 @@ public function generateHashDataProvider() ]; } + /** + * @param $merchantMd5 + * @param $merchantApiLogin + * @param $amount + * @param $transactionId + * + * @return string + */ protected function generateHash($merchantMd5, $merchantApiLogin, $amount, $transactionId) { return strtoupper(md5($merchantMd5 . $merchantApiLogin . $transactionId . $amount)); diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php index dbb6ac8333c14..26d96b9bc2d90 100644 --- a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php +++ b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php @@ -5,6 +5,7 @@ */ namespace Magento\Authorizenet\Test\Unit\Model; +use Magento\Sales\Api\PaymentFailuresInterface; use Magento\Framework\Simplexml\Element; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Authorizenet\Model\Directpost; @@ -74,6 +75,14 @@ class DirectpostTest extends \PHPUnit\Framework\TestCase */ protected $requestFactory; + /** + * @var PaymentFailuresInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $paymentFailures; + + /** + * @inheritdoc + */ protected function setUp() { $this->scopeConfigMock = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class) @@ -104,6 +113,12 @@ protected function setUp() ->setMethods(['getTransactionDetails']) ->getMock(); + $this->paymentFailures = $this->getMockBuilder( + PaymentFailuresInterface::class + ) + ->disableOriginalConstructor() + ->getMock(); + $this->requestFactory = $this->getRequestFactoryMock(); $httpClientFactoryMock = $this->getHttpClientFactoryMock(); @@ -117,7 +132,8 @@ protected function setUp() 'responseFactory' => $this->responseFactoryMock, 'transactionRepository' => $this->transactionRepositoryMock, 'transactionService' => $this->transactionServiceMock, - 'httpClientFactory' => $httpClientFactoryMock + 'httpClientFactory' => $httpClientFactoryMock, + 'paymentFailures' => $this->paymentFailures, ] ); } @@ -313,12 +329,16 @@ public function checkResponseCodeSuccessDataProvider() } /** - * @param bool $responseCode + * Checks response failures behaviour. + * + * @param int $responseCode + * @param int $failuresHandlerCalls + * @return void * * @expectedException \Magento\Framework\Exception\LocalizedException * @dataProvider checkResponseCodeFailureDataProvider */ - public function testCheckResponseCodeFailure($responseCode) + public function testCheckResponseCodeFailure(int $responseCode, int $failuresHandlerCalls) { $reasonText = 'reason text'; @@ -333,18 +353,35 @@ public function testCheckResponseCodeFailure($responseCode) ->with($reasonText) ->willReturn(__('Gateway error: %1', $reasonText)); + $orderMock = $this->getMockBuilder(Order::class) + ->disableOriginalConstructor() + ->getMock(); + + $orderMock->expects($this->exactly($failuresHandlerCalls)) + ->method('getQuoteId') + ->willReturn(1); + + $this->paymentFailures->expects($this->exactly($failuresHandlerCalls)) + ->method('handle') + ->with(1); + + $reflection = new \ReflectionClass($this->directpost); + $order = $reflection->getProperty('order'); + $order->setAccessible(true); + $order->setValue($this->directpost, $orderMock); + $this->directpost->checkResponseCode(); } /** * @return array */ - public function checkResponseCodeFailureDataProvider() + public function checkResponseCodeFailureDataProvider(): array { return [ - ['responseCode' => Directpost::RESPONSE_CODE_DECLINED], - ['responseCode' => Directpost::RESPONSE_CODE_ERROR], - ['responseCode' => 999999] + ['responseCode' => Directpost::RESPONSE_CODE_DECLINED, 1], + ['responseCode' => Directpost::RESPONSE_CODE_ERROR, 1], + ['responseCode' => 999999, 0], ]; } diff --git a/app/code/Magento/Authorizenet/composer.json b/app/code/Magento/Authorizenet/composer.json index 1022bd47a5786..90f19e36777b2 100644 --- a/app/code/Magento/Authorizenet/composer.json +++ b/app/code/Magento/Authorizenet/composer.json @@ -2,7 +2,7 @@ "name": "magento/module-authorizenet", "description": "N/A", "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "php": "~7.0.13|~7.1.0", "magento/module-sales": "101.0.*", "magento/module-store": "100.2.*", "magento/module-quote": "101.0.*", @@ -16,7 +16,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.2", "license": [ "proprietary" ], diff --git a/app/code/Magento/Authorizenet/view/frontend/requirejs-config.js b/app/code/Magento/Authorizenet/view/frontend/requirejs-config.js index 8edc38dce6f60..8c4c90bf111de 100644 --- a/app/code/Magento/Authorizenet/view/frontend/requirejs-config.js +++ b/app/code/Magento/Authorizenet/view/frontend/requirejs-config.js @@ -6,7 +6,8 @@ var config = { map: { '*': { - transparent: 'Magento_Payment/transparent' + transparent: 'Magento_Payment/js/transparent', + 'Magento_Payment/transparent': 'Magento_Payment/js/transparent' } } }; diff --git a/app/code/Magento/Backend/App/AbstractAction.php b/app/code/Magento/Backend/App/AbstractAction.php index 99ee86b2b6407..3f658ee90bf4e 100644 --- a/app/code/Magento/Backend/App/AbstractAction.php +++ b/app/code/Magento/Backend/App/AbstractAction.php @@ -217,6 +217,7 @@ public function dispatch(\Magento\Framework\App\RequestInterface $request) $this->_view->loadLayout(['default', 'adminhtml_denied'], true, true, false); $this->_view->renderLayout(); $this->_request->setDispatched(true); + return $this->_response; } @@ -226,6 +227,11 @@ public function dispatch(\Magento\Framework\App\RequestInterface $request) $this->_processLocaleSettings(); + // Need to preload isFirstPageAfterLogin (see https://github.com/magento/magento2/issues/15510) + if ($this->_auth->isLoggedIn()) { + $this->_auth->getAuthStorage()->isFirstPageAfterLogin(); + } + return parent::dispatch($request); } diff --git a/app/code/Magento/Backend/App/Action/Plugin/Authentication.php b/app/code/Magento/Backend/App/Action/Plugin/Authentication.php index 68506a521c1cf..4b25e9921e404 100644 --- a/app/code/Magento/Backend/App/Action/Plugin/Authentication.php +++ b/app/code/Magento/Backend/App/Action/Plugin/Authentication.php @@ -160,7 +160,7 @@ protected function _processNotLoggedInUser(\Magento\Framework\App\RequestInterfa } else { $this->_actionFlag->set('', \Magento\Framework\App\ActionInterface::FLAG_NO_DISPATCH, true); $this->_response->setRedirect($this->_url->getCurrentUrl()); - $this->messageManager->addError(__('Invalid Form Key. Please refresh the page.')); + $this->messageManager->addErrorMessage(__('Invalid Form Key. Please refresh the page.')); $isRedirectNeeded = true; } } @@ -205,7 +205,7 @@ protected function _performLogin(\Magento\Framework\App\RequestInterface $reques $this->_auth->login($username, $password); } catch (AuthenticationException $e) { if (!$request->getParam('messageSent')) { - $this->messageManager->addError($e->getMessage()); + $this->messageManager->addErrorMessage($e->getMessage()); $request->setParam('messageSent', true); $outputValue = false; } diff --git a/app/code/Magento/Backend/App/Config.php b/app/code/Magento/Backend/App/Config.php index bb60a1e69dd47..e0983139a690d 100644 --- a/app/code/Magento/Backend/App/Config.php +++ b/app/code/Magento/Backend/App/Config.php @@ -68,6 +68,6 @@ public function isSetFlag($path) if ($path) { $configPath .= '/' . $path; } - return (bool) $this->appConfig->get(System::CONFIG_TYPE, $configPath); + return (bool)$this->appConfig->get(System::CONFIG_TYPE, $configPath); } } diff --git a/app/code/Magento/Backend/App/DefaultPath.php b/app/code/Magento/Backend/App/DefaultPath.php index df8b718389741..b790a2edc3fab 100644 --- a/app/code/Magento/Backend/App/DefaultPath.php +++ b/app/code/Magento/Backend/App/DefaultPath.php @@ -42,6 +42,6 @@ public function __construct(\Magento\Backend\App\ConfigInterface $config) */ public function getPart($code) { - return isset($this->_parts[$code]) ? $this->_parts[$code] : null; + return $this->_parts[$code] ?? null; } } diff --git a/app/code/Magento/Backend/Block/Cache.php b/app/code/Magento/Backend/Block/Cache.php index e14358396aa70..82c36bf3a1fe4 100644 --- a/app/code/Magento/Backend/Block/Cache.php +++ b/app/code/Magento/Backend/Block/Cache.php @@ -22,24 +22,29 @@ protected function _construct() $this->_headerText = __('Cache Storage Management'); parent::_construct(); $this->buttonList->remove('add'); - $this->buttonList->add( - 'flush_magento', - [ - 'label' => __('Flush Magento Cache'), - 'onclick' => 'setLocation(\'' . $this->getFlushSystemUrl() . '\')', - 'class' => 'primary flush-cache-magento' - ] - ); - $message = __('The cache storage may contain additional data. Are you sure that you want to flush it?'); - $this->buttonList->add( - 'flush_system', - [ - 'label' => __('Flush Cache Storage'), - 'onclick' => 'confirmSetLocation(\'' . $message . '\', \'' . $this->getFlushStorageUrl() . '\')', - 'class' => 'flush-cache-storage' - ] - ); + if ($this->_authorization->isAllowed('Magento_Backend::flush_magento_cache')) { + $this->buttonList->add( + 'flush_magento', + [ + 'label' => __('Flush Magento Cache'), + 'onclick' => 'setLocation(\'' . $this->getFlushSystemUrl() . '\')', + 'class' => 'primary flush-cache-magento' + ] + ); + } + + if ($this->_authorization->isAllowed('Magento_Backend::flush_cache_storage')) { + $message = __('The cache storage may contain additional data. Are you sure that you want to flush it?'); + $this->buttonList->add( + 'flush_system', + [ + 'label' => __('Flush Cache Storage'), + 'onclick' => 'confirmSetLocation(\'' . $message . '\', \'' . $this->getFlushStorageUrl() . '\')', + 'class' => 'flush-cache-storage' + ] + ); + } } /** diff --git a/app/code/Magento/Backend/Block/Cache/Permissions.php b/app/code/Magento/Backend/Block/Cache/Permissions.php new file mode 100644 index 0000000000000..272a603145f09 --- /dev/null +++ b/app/code/Magento/Backend/Block/Cache/Permissions.php @@ -0,0 +1,62 @@ +authorization = $authorization; + } + + /** + * @return bool + */ + public function hasAccessToFlushCatalogImages() + { + return $this->authorization->isAllowed('Magento_Backend::flush_catalog_images'); + } + /** + * @return bool + */ + public function hasAccessToFlushJsCss() + { + return $this->authorization->isAllowed('Magento_Backend::flush_js_css'); + } + /** + * @return bool + */ + public function hasAccessToFlushStaticFiles() + { + return $this->authorization->isAllowed('Magento_Backend::flush_static_files'); + } + /** + * @return bool + */ + public function hasAccessToAdditionalActions() + { + return ($this->hasAccessToFlushCatalogImages() + || $this->hasAccessToFlushJsCss() + || $this->hasAccessToFlushStaticFiles()); + } +} diff --git a/app/code/Magento/Backend/Block/Dashboard.php b/app/code/Magento/Backend/Block/Dashboard.php index 8d0a061621fe3..e1e87d8d4c5a3 100644 --- a/app/code/Magento/Backend/Block/Dashboard.php +++ b/app/code/Magento/Backend/Block/Dashboard.php @@ -20,7 +20,7 @@ class Dashboard extends \Magento\Backend\Block\Template /** * @var string */ - protected $_template = 'dashboard/index.phtml'; + protected $_template = 'Magento_Backend::dashboard/index.phtml'; /** * @return void diff --git a/app/code/Magento/Backend/Block/Dashboard/Bar.php b/app/code/Magento/Backend/Block/Dashboard/Bar.php index 29557f12c1093..7ccb2d51ccd1b 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Bar.php +++ b/app/code/Magento/Backend/Block/Dashboard/Bar.php @@ -38,14 +38,6 @@ public function getTotals() */ public function addTotal($label, $value, $isQuantity = false) { - /*if (!$isQuantity) { - $value = $this->format($value); - $decimals = substr($value, -2); - $value = substr($value, 0, -2); - } else { - $value = ($value != '')?$value:0; - $decimals = ''; - }*/ if (!$isQuantity) { $value = $this->format($value); } diff --git a/app/code/Magento/Backend/Block/Dashboard/Graph.php b/app/code/Magento/Backend/Block/Dashboard/Graph.php index 301dffbdc4987..8e238ccab44cb 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Graph.php +++ b/app/code/Magento/Backend/Block/Dashboard/Graph.php @@ -90,7 +90,7 @@ class Graph extends \Magento\Backend\Block\Dashboard\AbstractDashboard /** * @var string */ - protected $_template = 'dashboard/graph.phtml'; + protected $_template = 'Magento_Backend::dashboard/graph.phtml'; /** * Adminhtml dashboard data diff --git a/app/code/Magento/Backend/Block/Dashboard/Grid.php b/app/code/Magento/Backend/Block/Dashboard/Grid.php index 602b5e414d538..f7f9a79f17eb0 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Grid.php +++ b/app/code/Magento/Backend/Block/Dashboard/Grid.php @@ -17,7 +17,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended /** * @var string */ - protected $_template = 'dashboard/grid.phtml'; + protected $_template = 'Magento_Backend::dashboard/grid.phtml'; /** * Setting default for every grid on dashboard diff --git a/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php b/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php index 9d9409fba093b..50279786c0a5b 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php +++ b/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php @@ -92,7 +92,7 @@ protected function _prepareCollection() protected function _afterLoadCollection() { foreach ($this->getCollection() as $item) { - $item->getCustomer() ?: $item->setCustomer('Guest'); + $item->getCustomer() ?: $item->setCustomer($item->getBillingAddress()->getName()); } return $this; } diff --git a/app/code/Magento/Backend/Block/Dashboard/Sales.php b/app/code/Magento/Backend/Block/Dashboard/Sales.php index d0f056230bcd1..6d7a4d6458a8e 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Sales.php +++ b/app/code/Magento/Backend/Block/Dashboard/Sales.php @@ -15,7 +15,7 @@ class Sales extends \Magento\Backend\Block\Dashboard\Bar /** * @var string */ - protected $_template = 'dashboard/salebar.phtml'; + protected $_template = 'Magento_Backend::dashboard/salebar.phtml'; /** * @var \Magento\Framework\Module\Manager diff --git a/app/code/Magento/Backend/Block/Dashboard/Totals.php b/app/code/Magento/Backend/Block/Dashboard/Totals.php index 96ae6dd636380..4dcda3677584c 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Totals.php +++ b/app/code/Magento/Backend/Block/Dashboard/Totals.php @@ -16,7 +16,7 @@ class Totals extends \Magento\Backend\Block\Dashboard\Bar /** * @var string */ - protected $_template = 'dashboard/totalbar.phtml'; + protected $_template = 'Magento_Backend::dashboard/totalbar.phtml'; /** * @var \Magento\Framework\Module\Manager diff --git a/app/code/Magento/Backend/Block/DataProviders/UploadConfig.php b/app/code/Magento/Backend/Block/DataProviders/UploadConfig.php new file mode 100644 index 0000000000000..5c66ccff0826b --- /dev/null +++ b/app/code/Magento/Backend/Block/DataProviders/UploadConfig.php @@ -0,0 +1,39 @@ +config = $config; + } + + /** + * Get image resize configuration + * + * @return int + */ + public function getIsResizeEnabled(): int + { + return (int)$this->config->getValue('system/upload_configuration/enable_resize'); + } +} diff --git a/app/code/Magento/Backend/Block/GlobalSearch.php b/app/code/Magento/Backend/Block/GlobalSearch.php index f4a46283808f4..b45eb84cdaee9 100644 --- a/app/code/Magento/Backend/Block/GlobalSearch.php +++ b/app/code/Magento/Backend/Block/GlobalSearch.php @@ -3,19 +3,61 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Backend\Block; +use Magento\Backend\Model\GlobalSearch\SearchEntityFactory; +use Magento\Backend\Model\GlobalSearch\SearchEntity; +use Magento\Framework\App\ObjectManager; + /** * @api * @since 100.0.2 */ class GlobalSearch extends \Magento\Backend\Block\Template { + /** + * @var SearchEntityFactory + */ + private $searchEntityFactory; + /** * @var string */ protected $_template = 'Magento_Backend::system/search.phtml'; + /** + * @var array + */ + private $entityResources; + + /** + * @var array + */ + private $entityPaths; + + /** + * @param Template\Context $context + * @param array $data + * @param array $entityResources + * @param array $entityPaths + * @param SearchEntityFactory|null $searchEntityFactory + */ + public function __construct( + Template\Context $context, + array $data = [], + array $entityResources = [], + array $entityPaths = [], + SearchEntityFactory $searchEntityFactory = null + ) { + $this->entityResources = $entityResources; + $this->entityPaths = $entityPaths; + $this->searchEntityFactory = $searchEntityFactory ?: ObjectManager::getInstance() + ->get(SearchEntityFactory::class); + + parent::__construct($context, $data); + } + /** * Get components configuration * @return array @@ -31,7 +73,52 @@ public function getWidgetInitOptions() 'filterProperty' => 'name', 'preventClickPropagation' => false, 'minLength' => 2, + 'submitInputOnEnter' => false, ] ]; } + + /** + * Get entities which are allowed to show. + * + * @return SearchEntity[] + */ + public function getEntitiesToShow() + { + $allowedEntityTypes = []; + $entitiesToShow = []; + + foreach ($this->entityResources as $entityType => $resource) { + if ($this->getAuthorization()->isAllowed($resource)) { + $allowedEntityTypes[] = $entityType; + } + } + + foreach ($allowedEntityTypes as $entityType) { + $url = $this->getUrlEntityType($entityType); + + $searchEntity = $this->searchEntityFactory->create(); + $searchEntity->setId('searchPreview' . $entityType); + $searchEntity->setTitle('in ' . $entityType); + $searchEntity->setUrl($url); + + $entitiesToShow[] = $searchEntity; + } + + return $entitiesToShow; + } + + /** + * Get url path by entity type. + * + * @param string $entityType + * + * @return string + */ + private function getUrlEntityType(string $entityType) + { + $urlPath = $this->entityPaths[$entityType] ?? ''; + + return $this->getUrl($urlPath); + } } diff --git a/app/code/Magento/Backend/Block/Media/Uploader.php b/app/code/Magento/Backend/Block/Media/Uploader.php index 4987cb248bd0b..7e1ad03470720 100644 --- a/app/code/Magento/Backend/Block/Media/Uploader.php +++ b/app/code/Magento/Backend/Block/Media/Uploader.php @@ -3,8 +3,14 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Backend\Block\Media; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\Serialize\Serializer\Json; +use Magento\Framework\Image\Adapter\ConfigInterface; + /** * Adminhtml media library uploader * @api @@ -27,17 +33,34 @@ class Uploader extends \Magento\Backend\Block\Widget */ protected $_fileSizeService; + /** + * @var Json + */ + private $jsonEncoder; + + /** + * @var ConfigInterface + */ + private $imageConfig; + /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Framework\File\Size $fileSize * @param array $data + * @param Json $jsonEncoder + * @param ConfigInterface $imageConfig */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Framework\File\Size $fileSize, - array $data = [] + array $data = [], + Json $jsonEncoder = null, + ConfigInterface $imageConfig = null ) { $this->_fileSizeService = $fileSize; + $this->jsonEncoder = $jsonEncoder ?: ObjectManager::getInstance()->get(Json::class); + $this->imageConfig = $imageConfig ?: ObjectManager::getInstance()->get(ConfigInterface::class); + parent::__construct($context, $data); } @@ -79,6 +102,26 @@ public function getFileSizeService() return $this->_fileSizeService; } + /** + * Get Image Upload Maximum Width Config + * + * @return int + */ + public function getImageUploadMaxWidth() + { + return $this->imageConfig->getMaxWidth(); + } + + /** + * Get Image Upload Maximum Height Config + * + * @return int + */ + public function getImageUploadMaxHeight() + { + return $this->imageConfig->getMaxHeight(); + } + /** * Prepares layout and set element renderer * @@ -107,7 +150,7 @@ public function getJsObjectName() */ public function getConfigJson() { - return $this->_coreData->jsonEncode($this->getConfig()->getData()); + return $this->jsonEncoder->encode($this->getConfig()->getData()); } /** diff --git a/app/code/Magento/Backend/Block/Menu.php b/app/code/Magento/Backend/Block/Menu.php index bb239d31b1779..eae066b07ac38 100644 --- a/app/code/Magento/Backend/Block/Menu.php +++ b/app/code/Magento/Backend/Block/Menu.php @@ -76,6 +76,11 @@ class Menu extends \Magento\Backend\Block\Template */ private $anchorRenderer; + /** + * @var ConfigInterface + */ + private $routeConfig; + /** * @param Template\Context $context * @param \Magento\Backend\Model\UrlInterface $url @@ -83,9 +88,11 @@ class Menu extends \Magento\Backend\Block\Template * @param \Magento\Backend\Model\Auth\Session $authSession * @param \Magento\Backend\Model\Menu\Config $menuConfig * @param \Magento\Framework\Locale\ResolverInterface $localeResolver + * @param \Magento\Framework\App\Route\ConfigInterface $routeConfig * @param array $data * @param MenuItemChecker|null $menuItemChecker * @param AnchorRenderer|null $anchorRenderer + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Backend\Block\Template\Context $context, @@ -96,7 +103,8 @@ public function __construct( \Magento\Framework\Locale\ResolverInterface $localeResolver, array $data = [], MenuItemChecker $menuItemChecker = null, - AnchorRenderer $anchorRenderer = null + AnchorRenderer $anchorRenderer = null, + \Magento\Framework\App\Route\ConfigInterface $routeConfig = null ) { $this->_url = $url; $this->_iteratorFactory = $iteratorFactory; @@ -105,6 +113,9 @@ public function __construct( $this->_localeResolver = $localeResolver; $this->menuItemChecker = $menuItemChecker; $this->anchorRenderer = $anchorRenderer; + $this->routeConfig = $routeConfig ?: + \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\App\Route\ConfigInterface::class); parent::__construct($context, $data); } @@ -203,8 +214,9 @@ protected function _afterToHtml($html) */ protected function _callbackSecretKey($match) { + $routeId = $this->routeConfig->getRouteByFrontName($match[1]); return \Magento\Backend\Model\UrlInterface::SECRET_KEY_PARAM_NAME . '/' . $this->_url->getSecretKey( - $match[1], + $routeId, $match[2], $match[3] ); diff --git a/app/code/Magento/Backend/Block/Page/Copyright.php b/app/code/Magento/Backend/Block/Page/Copyright.php index 062497d6a8304..a1b61352930b5 100644 --- a/app/code/Magento/Backend/Block/Page/Copyright.php +++ b/app/code/Magento/Backend/Block/Page/Copyright.php @@ -18,5 +18,5 @@ class Copyright extends \Magento\Backend\Block\Template * * @var string */ - protected $_template = 'page/copyright.phtml'; + protected $_template = 'Magento_Backend::page/copyright.phtml'; } diff --git a/app/code/Magento/Backend/Block/Page/Footer.php b/app/code/Magento/Backend/Block/Page/Footer.php index 368869b79e15c..3d1570e5ddfe7 100644 --- a/app/code/Magento/Backend/Block/Page/Footer.php +++ b/app/code/Magento/Backend/Block/Page/Footer.php @@ -17,7 +17,7 @@ class Footer extends \Magento\Backend\Block\Template /** * @var string */ - protected $_template = 'page/footer.phtml'; + protected $_template = 'Magento_Backend::page/footer.phtml'; /** * @var \Magento\Framework\App\ProductMetadataInterface diff --git a/app/code/Magento/Backend/Block/Page/Header.php b/app/code/Magento/Backend/Block/Page/Header.php index b7ed05ce58e95..c2c5f7472b370 100644 --- a/app/code/Magento/Backend/Block/Page/Header.php +++ b/app/code/Magento/Backend/Block/Page/Header.php @@ -18,7 +18,7 @@ class Header extends \Magento\Backend\Block\Template /** * @var string */ - protected $_template = 'page/header.phtml'; + protected $_template = 'Magento_Backend::page/header.phtml'; /** * Backend data diff --git a/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset.php b/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset.php index 2f9b73f0ae037..6fe8416784c2e 100644 --- a/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset.php +++ b/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset.php @@ -25,7 +25,7 @@ class Fieldset extends \Magento\Backend\Block\Template implements RendererInterf /** * @var string */ - protected $_template = 'store/switcher/form/renderer/fieldset.phtml'; + protected $_template = 'Magento_Backend::store/switcher/form/renderer/fieldset.phtml'; /** * Retrieve an element diff --git a/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset/Element.php b/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset/Element.php index ddd1f1a9178cd..71d4db6849bd2 100644 --- a/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset/Element.php +++ b/app/code/Magento/Backend/Block/Store/Switcher/Form/Renderer/Fieldset/Element.php @@ -23,7 +23,7 @@ class Element extends \Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Eleme /** * @var string */ - protected $_template = 'store/switcher/form/renderer/fieldset/element.phtml'; + protected $_template = 'Magento_Backend::store/switcher/form/renderer/fieldset/element.phtml'; /** * Retrieve an element diff --git a/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php b/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php index f19799d2e4939..034887c67d1ee 100644 --- a/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php +++ b/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php @@ -37,7 +37,7 @@ protected function _prepareForm() ['data' => ['id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post']] ); - $this->_prepareStoreFieldSet($form); + $this->_prepareStoreFieldset($form); $form->addField( 'store_type', diff --git a/app/code/Magento/Backend/Block/System/Store/Grid/Render/Group.php b/app/code/Magento/Backend/Block/System/Store/Grid/Render/Group.php index 59657f38465d7..3d7154eb20f92 100644 --- a/app/code/Magento/Backend/Block/System/Store/Grid/Render/Group.php +++ b/app/code/Magento/Backend/Block/System/Store/Grid/Render/Group.php @@ -27,6 +27,7 @@ public function render(\Magento\Framework\DataObject $row) $this->getUrl('adminhtml/*/editGroup', ['group_id' => $row->getGroupId()]) . '">' . $this->escapeHtml($row->getData($this->getColumn()->getIndex())) . - ''; + '
' + . '(' . __('Code') . ': ' . $row->getGroupCode() . ')'; } } diff --git a/app/code/Magento/Backend/Block/System/Store/Grid/Render/Store.php b/app/code/Magento/Backend/Block/System/Store/Grid/Render/Store.php index 23b2de683a958..9cfc8bfc52691 100644 --- a/app/code/Magento/Backend/Block/System/Store/Grid/Render/Store.php +++ b/app/code/Magento/Backend/Block/System/Store/Grid/Render/Store.php @@ -27,6 +27,7 @@ public function render(\Magento\Framework\DataObject $row) $this->getUrl('adminhtml/*/editStore', ['store_id' => $row->getStoreId()]) . '">' . $this->escapeHtml($row->getData($this->getColumn()->getIndex())) . - ''; + '
' . + '(' . __('Code') . ': ' . $row->getStoreCode() . ')'; } } diff --git a/app/code/Magento/Backend/Block/System/Store/Grid/Render/Website.php b/app/code/Magento/Backend/Block/System/Store/Grid/Render/Website.php index 913e2c903d20c..487eb4f8acfda 100644 --- a/app/code/Magento/Backend/Block/System/Store/Grid/Render/Website.php +++ b/app/code/Magento/Backend/Block/System/Store/Grid/Render/Website.php @@ -24,6 +24,7 @@ public function render(\Magento\Framework\DataObject $row) $this->getUrl('adminhtml/*/editWebsite', ['website_id' => $row->getWebsiteId()]) . '">' . $this->escapeHtml($row->getData($this->getColumn()->getIndex())) . - ''; + '
' . + '(' . __('Code') . ': ' . $row->getCode() . ')'; } } diff --git a/app/code/Magento/Backend/Block/Template.php b/app/code/Magento/Backend/Block/Template.php index d0f39b54c1492..477be0f82462b 100644 --- a/app/code/Magento/Backend/Block/Template.php +++ b/app/code/Magento/Backend/Block/Template.php @@ -17,10 +17,12 @@ * Example: * * - * My\Module\ViewModel\Custom + * My\Module\ViewModel\Custom * * * + * Your class object can then be accessed by doing $block->getViewModel() + * * @api * @SuppressWarnings(PHPMD.NumberOfChildren) * @since 100.0.2 diff --git a/app/code/Magento/Backend/Block/Widget/Button/ButtonList.php b/app/code/Magento/Backend/Block/Widget/Button/ButtonList.php index 94af9a1d7578f..e2d71d171cf15 100644 --- a/app/code/Magento/Backend/Block/Widget/Button/ButtonList.php +++ b/app/code/Magento/Backend/Block/Widget/Button/ButtonList.php @@ -127,12 +127,6 @@ public function getItems() */ public function sortButtons(Item $itemA, Item $itemB) { - $sortOrderA = intval($itemA->getSortOrder()); - $sortOrderB = intval($itemB->getSortOrder()); - - if ($sortOrderA == $sortOrderB) { - return 0; - } - return ($sortOrderA < $sortOrderB) ? -1 : 1; + return (int)$itemA->getSortOrder() <=> (int)$itemB->getSortOrder(); } } diff --git a/app/code/Magento/Backend/Block/Widget/Form.php b/app/code/Magento/Backend/Block/Widget/Form.php index 30221618edbed..d288dc1c5d43e 100644 --- a/app/code/Magento/Backend/Block/Widget/Form.php +++ b/app/code/Magento/Backend/Block/Widget/Form.php @@ -3,8 +3,20 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Backend\Block\Widget; +use Magento\Backend\Block\Widget\Form\Element\ElementCreator; +use Magento\Framework\App\ObjectManager; +use Magento\Backend\Block\Template\Context; +use Magento\Framework\Data\Form as DataForm; +use Magento\Backend\Block\Widget\Form\Renderer\Element; +use Magento\Backend\Block\Widget\Form\Renderer\Fieldset; +use Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Element as FieldsetElement; +use Magento\Eav\Model\Entity\Attribute; +use Magento\Framework\Data\Form\Element\AbstractElement; +use Magento\Framework\Data\Form\AbstractForm; + /** * Backend form widget * @@ -18,7 +30,7 @@ class Form extends \Magento\Backend\Block\Widget /** * Form Object * - * @var \Magento\Framework\Data\Form + * @var DataForm */ protected $_form; @@ -28,12 +40,24 @@ class Form extends \Magento\Backend\Block\Widget protected $_template = 'Magento_Backend::widget/form.phtml'; /** - * @param \Magento\Backend\Block\Template\Context $context + * @var ElementCreator + * / + private $creator; + + /** + * Constructs form + * + * @param Context $context * @param array $data + * @param ElementCreator|null $creator */ - public function __construct(\Magento\Backend\Block\Template\Context $context, array $data = []) - { + public function __construct( + Context $context, + array $data = [], + ElementCreator $creator = null + ) { parent::__construct($context, $data); + $this->creator = $creator ?: ObjectManager::getInstance()->get(ElementCreator::class); } /** @@ -58,21 +82,21 @@ protected function _construct() */ protected function _prepareLayout() { - \Magento\Framework\Data\Form::setElementRenderer( + DataForm::setElementRenderer( $this->getLayout()->createBlock( - \Magento\Backend\Block\Widget\Form\Renderer\Element::class, + Element::class, $this->getNameInLayout() . '_element' ) ); - \Magento\Framework\Data\Form::setFieldsetRenderer( + DataForm::setFieldsetRenderer( $this->getLayout()->createBlock( - \Magento\Backend\Block\Widget\Form\Renderer\Fieldset::class, + Fieldset::class, $this->getNameInLayout() . '_fieldset' ) ); - \Magento\Framework\Data\Form::setFieldsetElementRenderer( + DataForm::setFieldsetElementRenderer( $this->getLayout()->createBlock( - \Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Element::class, + FieldsetElement::class, $this->getNameInLayout() . '_fieldset_element' ) ); @@ -83,7 +107,7 @@ protected function _prepareLayout() /** * Get form object * - * @return \Magento\Framework\Data\Form + * @return DataForm */ public function getForm() { @@ -106,10 +130,10 @@ public function getFormHtml() /** * Set form object * - * @param \Magento\Framework\Data\Form $form + * @param DataForm $form * @return $this */ - public function setForm(\Magento\Framework\Data\Form $form) + public function setForm(DataForm $form) { $this->_form = $form; $this->_form->setParent($this); @@ -148,6 +172,7 @@ protected function _beforeToHtml() /** * Initialize form fields values + * * Method will be called after prepareForm and can be used for field values initialization * * @return $this @@ -169,36 +194,15 @@ protected function _setFieldset($attributes, $fieldset, $exclude = []) { $this->_addElementTypes($fieldset); foreach ($attributes as $attribute) { - /* @var $attribute \Magento\Eav\Model\Entity\Attribute */ + /* @var $attribute Attribute */ if (!$this->_isAttributeVisible($attribute)) { continue; } - if (($inputType = $attribute->getFrontend()->getInputType()) && !in_array( - $attribute->getAttributeCode(), - $exclude - ) && ('media_image' != $inputType || $attribute->getAttributeCode() == 'image') + if (($inputType = $attribute->getFrontend()->getInputType()) + && !in_array($attribute->getAttributeCode(), $exclude) + && ('media_image' !== $inputType || $attribute->getAttributeCode() == 'image') ) { - $fieldType = $inputType; - $rendererClass = $attribute->getFrontend()->getInputRendererClass(); - if (!empty($rendererClass)) { - $fieldType = $inputType . '_' . $attribute->getAttributeCode(); - $fieldset->addType($fieldType, $rendererClass); - } - - $element = $fieldset->addField( - $attribute->getAttributeCode(), - $fieldType, - [ - 'name' => $attribute->getAttributeCode(), - 'label' => $attribute->getFrontend()->getLocalizedLabel(), - 'class' => $attribute->getFrontend()->getClass(), - 'required' => $attribute->getIsRequired(), - 'note' => $attribute->getNote() - ] - )->setEntityAttribute( - $attribute - ); - + $element = $this->creator->create($fieldset, $attribute); $element->setAfterElementHtml($this->_getAdditionalElementHtml($element)); $this->_applyTypeSpecificConfig($inputType, $element, $attribute); @@ -209,10 +213,10 @@ protected function _setFieldset($attributes, $fieldset, $exclude = []) /** * Check whether attribute is visible * - * @param \Magento\Eav\Model\Entity\Attribute $attribute + * @param Attribute $attribute * @return bool */ - protected function _isAttributeVisible(\Magento\Eav\Model\Entity\Attribute $attribute) + protected function _isAttributeVisible(Attribute $attribute) { return !(!$attribute || $attribute->hasIsVisible() && !$attribute->getIsVisible()); } @@ -221,11 +225,11 @@ protected function _isAttributeVisible(\Magento\Eav\Model\Entity\Attribute $attr * Apply configuration specific for different element type * * @param string $inputType - * @param \Magento\Framework\Data\Form\Element\AbstractElement $element - * @param \Magento\Eav\Model\Entity\Attribute $attribute + * @param AbstractElement $element + * @param Attribute $attribute * @return void */ - protected function _applyTypeSpecificConfig($inputType, $element, \Magento\Eav\Model\Entity\Attribute $attribute) + protected function _applyTypeSpecificConfig($inputType, $element, Attribute $attribute) { switch ($inputType) { case 'select': @@ -249,10 +253,10 @@ protected function _applyTypeSpecificConfig($inputType, $element, \Magento\Eav\M /** * Add new element type * - * @param \Magento\Framework\Data\Form\AbstractForm $baseElement + * @param AbstractForm $baseElement * @return void */ - protected function _addElementTypes(\Magento\Framework\Data\Form\AbstractForm $baseElement) + protected function _addElementTypes(AbstractForm $baseElement) { $types = $this->_getAdditionalElementTypes(); foreach ($types as $code => $className) { @@ -273,7 +277,7 @@ protected function _getAdditionalElementTypes() /** * Render additional element * - * @param \Magento\Framework\Data\Form\Element\AbstractElement $element + * @param AbstractElement $element * @return string * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ diff --git a/app/code/Magento/Backend/Block/Widget/Form/Element/Dependence.php b/app/code/Magento/Backend/Block/Widget/Form/Element/Dependence.php index 723deab1e9f7e..eff49c3b75ab2 100644 --- a/app/code/Magento/Backend/Block/Widget/Form/Element/Dependence.php +++ b/app/code/Magento/Backend/Block/Widget/Form/Element/Dependence.php @@ -124,14 +124,18 @@ protected function _toHtml() if (!$this->_depends) { return ''; } - return ''; + + $params = $this->_getDependsJson(); + + if ($this->_configOptions) { + $params .= ', ' . $this->_jsonEncoder->encode($this->_configOptions); + } + + return ""; } /** diff --git a/app/code/Magento/Backend/Block/Widget/Form/Element/ElementCreator.php b/app/code/Magento/Backend/Block/Widget/Form/Element/ElementCreator.php new file mode 100644 index 0000000000000..c81f8dc369242 --- /dev/null +++ b/app/code/Magento/Backend/Block/Widget/Form/Element/ElementCreator.php @@ -0,0 +1,134 @@ +modifiers = $modifiers; + } + + /** + * Creates element + * + * @param Fieldset $fieldset + * @param Attribute $attribute + * + * @return AbstractElement + */ + public function create(Fieldset $fieldset, Attribute $attribute): AbstractElement + { + $config = $this->getElementConfig($attribute); + + if (!empty($config['rendererClass'])) { + $fieldType = $config['inputType'] . '_' . $attribute->getAttributeCode(); + $fieldset->addType($fieldType, $config['rendererClass']); + } + + return $fieldset + ->addField($config['attribute_code'], $config['inputType'], $config) + ->setEntityAttribute($attribute); + } + + /** + * Returns element config + * + * @param Attribute $attribute + * @return array + */ + private function getElementConfig(Attribute $attribute): array + { + $defaultConfig = $this->createDefaultConfig($attribute); + $config = $this->modifyConfig($defaultConfig); + + $config['label'] = __($config['label']); + + return $config; + } + + /** + * Returns default config + * + * @param Attribute $attribute + * @return array + */ + private function createDefaultConfig(Attribute $attribute): array + { + return [ + 'inputType' => $attribute->getFrontend()->getInputType(), + 'rendererClass' => $attribute->getFrontend()->getInputRendererClass(), + 'attribute_code' => $attribute->getAttributeCode(), + 'name' => $attribute->getAttributeCode(), + 'label' => $attribute->getFrontend()->getLabel(), + 'class' => $attribute->getFrontend()->getClass(), + 'required' => $attribute->getIsRequired(), + 'note' => $attribute->getNote(), + ]; + } + + /** + * Modify config + * + * @param array $config + * @return array + */ + private function modifyConfig(array $config): array + { + if ($this->isModified($config['attribute_code'])) { + return $this->applyModifier($config); + } + return $config; + } + + /** + * Returns bool if attribute need to modify + * + * @param string $attribute_code + * @return bool + */ + private function isModified($attribute_code): bool + { + return isset($this->modifiers[$attribute_code]); + } + + /** + * Apply modifier to config + * + * @param array $config + * @return array + */ + private function applyModifier(array $config): array + { + $modifiedConfig = $this->modifiers[$config['attribute_code']]; + foreach (array_keys($config) as $key) { + if (isset($modifiedConfig[$key])) { + $config[$key] = $modifiedConfig[$key]; + } + } + return $config; + } +} diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php index 40a5d92c56b6f..632603d389d21 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php @@ -127,7 +127,7 @@ public function getHtml() /** * @param string|null $index - * @return string + * @return array|string|int|float|null */ public function getEscapedValue($index = null) { @@ -138,6 +138,11 @@ public function getEscapedValue($index = null) $this->_localeDate->getDateFormat(\IntlDateFormatter::SHORT) ); } + + if (is_string($value)) { + return $this->escapeHtml($value); + } + return $value; } diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php index 96b3471db845e..1d8d658267020 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php @@ -26,7 +26,6 @@ public function getValue($index = null) { if ($index) { if ($data = $this->getData('value', 'orig_' . $index)) { - // date('Y-m-d', strtotime($data)); return $data; } return null; @@ -140,8 +139,8 @@ public function getHtml() /** * Return escaped value for calendar * - * @param string $index - * @return string + * @param string|null $index + * @return array|string|int|float|null */ public function getEscapedValue($index = null) { @@ -150,6 +149,11 @@ public function getEscapedValue($index = null) if ($value instanceof \DateTimeInterface) { return $this->_localeDate->formatDateTime($value); } + + if (is_string($value)) { + return $this->escapeHtml($value); + } + return $value; } diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Radio.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Radio.php index 2cbe264c5f396..479a2b6b20293 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Radio.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Radio.php @@ -31,8 +31,7 @@ public function getCondition() { if ($this->getValue()) { return $this->getColumn()->getValue(); - } else { - return [['neq' => $this->getColumn()->getValue()], ['is' => new \Zend_Db_Expr('NULL')]]; } + return [['neq' => $this->getColumn()->getValue()], ['is' => new \Zend_Db_Expr('NULL')]]; } } diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php index b8a2e283b29a0..9df8c532adfdd 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php @@ -58,7 +58,7 @@ public function render(DataObject $row) $result .= $this->getColumn()->getEditOnly() ? '' : '' . $this->_getValue($row) . ''; - return $result . $this->_getInputValueElement($row) . '' ; + return $result . $this->_getInputValueElement($row) . ''; } return $this->_getValue($row); } diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php index ff0399e4f507f..03566bce3fc34 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php @@ -68,10 +68,7 @@ public function __construct( $this->_storeManager = $storeManager; $this->_currencyLocator = $currencyLocator; $this->_localeCurrency = $localeCurrency; - $defaultBaseCurrencyCode = $this->_scopeConfig->getValue( - \Magento\Directory\Model\Currency::XML_PATH_CURRENCY_BASE, - 'default' - ); + $defaultBaseCurrencyCode = $currencyLocator->getDefaultCurrency($this->_request); $this->_defaultBaseCurrency = $currencyFactory->create()->load($defaultBaseCurrencyCode); } @@ -85,7 +82,7 @@ public function render(\Magento\Framework\DataObject $row) { if ($data = (string)$this->_getValue($row)) { $currency_code = $this->_getCurrencyCode($row); - $data = floatval($data) * $this->_getRate($row); + $data = (float)$data * $this->_getRate($row); $sign = (bool)(int)$this->getColumn()->getShowNumberSign() && $data > 0 ? '+' : ''; $data = sprintf("%f", $data); $data = $this->_localeCurrency->getCurrency($currency_code)->toCurrency($data); @@ -121,10 +118,10 @@ protected function _getCurrencyCode($row) protected function _getRate($row) { if ($rate = $this->getColumn()->getRate()) { - return floatval($rate); + return (float)$rate; } if ($rate = $row->getData($this->getColumn()->getRateField())) { - return floatval($rate); + return (float)$rate; } return $this->_defaultBaseCurrency->getRate($this->_getCurrencyCode($row)); } diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Massaction.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Massaction.php index 320713f8b57c4..a611e91f32f00 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Massaction.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Massaction.php @@ -65,7 +65,7 @@ public function render(\Magento\Framework\DataObject $row) */ protected function _getCheckboxHtml($value, $checked) { - $id = 'id_' . rand(0, 999); + $id = 'id_' . random_int(0, 999); $html = '