From d184e4ccec3281bbdd9fb051d8b7adf7bf0d3f7c Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@ebay.com> Date: Tue, 30 Jun 2015 12:26:19 +0300 Subject: [PATCH] MAGETWO-39197: There is no CAPTCHA on shipping step login and Sign In --- .../Captcha/Model/Cart/ConfigPlugin.php | 35 +++++++++++++++++++ app/code/Magento/Captcha/etc/di.xml | 3 ++ .../layout/checkout_onepage_index.xml | 3 ++ .../Captcha/view/frontend/layout/default.xml | 33 +++++++++++++++++ .../view/frontend/web/js/action/refresh.js | 5 +-- .../view/frontend/web/js/model/captcha.js | 13 +++++-- .../web/js/view/checkout/defaultCaptcha.js | 15 +++++--- .../web/template/checkout/captcha.html | 2 +- .../Magento/Checkout/Block/Cart/Sidebar.php | 19 ++++++++++ .../frontend/templates/cart/minicart.phtml | 11 +----- 10 files changed, 119 insertions(+), 20 deletions(-) create mode 100644 app/code/Magento/Captcha/Model/Cart/ConfigPlugin.php create mode 100644 app/code/Magento/Captcha/view/frontend/layout/default.xml diff --git a/app/code/Magento/Captcha/Model/Cart/ConfigPlugin.php b/app/code/Magento/Captcha/Model/Cart/ConfigPlugin.php new file mode 100644 index 00000000000..26ecd5b91ac --- /dev/null +++ b/app/code/Magento/Captcha/Model/Cart/ConfigPlugin.php @@ -0,0 +1,35 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Captcha\Model\Cart; + +class ConfigPlugin +{ + /** + * @var \Magento\Captcha\Model\Checkout\ConfigProvider + */ + protected $configProvider; + + /** + * @param \Magento\Captcha\Model\Checkout\ConfigProvider $configProvider + */ + public function __construct( + \Magento\Captcha\Model\Checkout\ConfigProvider $configProvider + ) { + $this->configProvider = $configProvider; + } + + /** + * @param \Magento\Checkout\Block\Cart\Sidebar $subject + * @param array $result + * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterGetConfig(\Magento\Checkout\Block\Cart\Sidebar $subject, array $result) + { + return array_merge_recursive($result, $this->configProvider->getConfig()); + } +} diff --git a/app/code/Magento/Captcha/etc/di.xml b/app/code/Magento/Captcha/etc/di.xml index 3955d289f46..6dfdcd70b22 100644 --- a/app/code/Magento/Captcha/etc/di.xml +++ b/app/code/Magento/Captcha/etc/di.xml @@ -27,4 +27,7 @@ </argument> </arguments> </type> + <type name="Magento\Checkout\Block\Cart\Sidebar"> + <plugin name="login_captcha" type="\Magento\Captcha\Model\Cart\ConfigPlugin" sortOrder="50" /> + </type> </config> diff --git a/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml b/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml index 85765bdf58c..d7d6fc551c5 100644 --- a/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml +++ b/app/code/Magento/Captcha/view/frontend/layout/checkout_onepage_index.xml @@ -19,6 +19,7 @@ <item name="component" xsi:type="string">Magento_Captcha/js/view/checkout/loginCaptcha</item> <item name="displayArea" xsi:type="string">additional-login-form-fields</item> <item name="formId" xsi:type="string">user_login</item> + <item name="configSource" xsi:type="string">checkoutConfig</item> </item> </item> </item> @@ -36,6 +37,7 @@ <item name="component" xsi:type="string">Magento_Captcha/js/view/checkout/loginCaptcha</item> <item name="displayArea" xsi:type="string">additional-login-form-fields</item> <item name="formId" xsi:type="string">guest_checkout</item> + <item name="configSource" xsi:type="string">checkoutConfig</item> </item> </item> </item> @@ -57,6 +59,7 @@ <item name="component" xsi:type="string">Magento_Captcha/js/view/checkout/loginCaptcha</item> <item name="displayArea" xsi:type="string">additional-login-form-fields</item> <item name="formId" xsi:type="string">guest_checkout</item> + <item name="configSource" xsi:type="string">checkoutConfig</item> </item> </item> </item> diff --git a/app/code/Magento/Captcha/view/frontend/layout/default.xml b/app/code/Magento/Captcha/view/frontend/layout/default.xml new file mode 100644 index 00000000000..9e0bf3cc751 --- /dev/null +++ b/app/code/Magento/Captcha/view/frontend/layout/default.xml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd"> + <body> + <referenceBlock name="minicart"> + <arguments> + <argument name="jsLayout" xsi:type="array"> + <item name="components" xsi:type="array"> + <item name="minicart_content" xsi:type="array"> + <item name="children" xsi:type="array"> + <item name="sign-in-popup" xsi:type="array"> + <item name="children" xsi:type="array"> + <item name="captcha" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Captcha/js/view/checkout/loginCaptcha</item> + <item name="displayArea" xsi:type="string">additional-login-form-fields</item> + <item name="formId" xsi:type="string">user_login</item> + <item name="configSource" xsi:type="string">checkout</item> + </item> + </item> + </item> + </item> + </item> + </item> + </argument> + </arguments> + </referenceBlock> + </body> +</page> diff --git a/app/code/Magento/Captcha/view/frontend/web/js/action/refresh.js b/app/code/Magento/Captcha/view/frontend/web/js/action/refresh.js index cc8b2119827..b11ae9b1f14 100644 --- a/app/code/Magento/Captcha/view/frontend/web/js/action/refresh.js +++ b/app/code/Magento/Captcha/view/frontend/web/js/action/refresh.js @@ -9,9 +9,10 @@ define( function(storage) { "use strict"; return function(refreshUrl, formId, imageSource) { - storage.post( + return storage.post( refreshUrl, - JSON.stringify({'formId': formId}) + JSON.stringify({'formId': formId}), + false ).done( function (response) { if (response.imgSrc) { diff --git a/app/code/Magento/Captcha/view/frontend/web/js/model/captcha.js b/app/code/Magento/Captcha/view/frontend/web/js/model/captcha.js index a8abae3cc8d..6a720a8cdeb 100644 --- a/app/code/Magento/Captcha/view/frontend/web/js/model/captcha.js +++ b/app/code/Magento/Captcha/view/frontend/web/js/model/captcha.js @@ -6,10 +6,11 @@ /*global alert*/ define( [ + 'jquery', 'ko', 'Magento_Captcha/js/action/refresh' ], - function(ko, refreshAction) { + function($, ko, refreshAction) { return function (captchaData) { return { formId: captchaData.formId, @@ -20,6 +21,7 @@ define( isCaseSensitive: captchaData.isCaseSensitive, imageHeight: captchaData.imageHeight, refreshUrl: captchaData.refreshUrl, + isLoading: ko.observable(false), getFormId: function () { return this.formId; @@ -70,7 +72,14 @@ define( this.captchaValue(value); }, refresh: function() { - refreshAction(this.getRefreshUrl(), this.getFormId(), this.getImageSource()); + var refresh, + self = this; + this.isLoading(true); + + refresh = refreshAction(this.getRefreshUrl(), this.getFormId(), this.getImageSource()); + $.when(refresh).done(function() { + self.isLoading(false); + }); } }; } diff --git a/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js b/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js index b2de3a1cd51..ddb4a6f84ae 100644 --- a/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js +++ b/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js @@ -7,14 +7,14 @@ define( [ 'jquery', - 'ko', 'uiComponent', 'Magento_Captcha/js/model/captcha', 'Magento_Captcha/js/model/captchaList' ], - function ($, ko, Component, Captcha, captchaList) { - "use strict"; - var captchaConfig = window.checkoutConfig.captcha; + function ($, Component, Captcha, captchaList) { + 'use strict'; + var captchaConfig; + return Component.extend({ defaults: { template: 'Magento_Captcha/checkout/captcha' @@ -25,11 +25,16 @@ define( return this.currentCaptcha.getCaptchaValue(); }, initialize: function() { + this._super(); + captchaConfig = window[this.configSource]['captcha']; + $.each(captchaConfig, function(formId, captchaData) { captchaData.formId = formId; captchaList.add(Captcha(captchaData)); }); - this._super(); + }, + getIsLoading: function() { + return this.currentCaptcha.isLoading }, getCurrentCaptcha: function() { return this.currentCaptcha; diff --git a/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html b/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html index fd345b82386..3b294d904b2 100644 --- a/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html +++ b/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html @@ -5,7 +5,7 @@ */ --> <!-- ko if: (isRequired() && getIsVisible())--> -<div class="field captcha required"> +<div class="field captcha required" data-bind="blockLoader: getIsLoading()"> <label data-bind="attr: {for: 'captcha_' + formId}" class="label"><span data-bind="text: $t('Please type the letters below')"></span></label> <div class="control captcha"> <input name="captcha_string" type="text" class="input-text required-entry" data-bind="value: captchaValue(), attr: {id: 'captcha_' + formId, 'data-scope': dataScope}" /> diff --git a/app/code/Magento/Checkout/Block/Cart/Sidebar.php b/app/code/Magento/Checkout/Block/Cart/Sidebar.php index 6e16041c3a0..a754a3c6582 100644 --- a/app/code/Magento/Checkout/Block/Cart/Sidebar.php +++ b/app/code/Magento/Checkout/Block/Cart/Sidebar.php @@ -52,6 +52,25 @@ class Sidebar extends AbstractCart $this->imageView = $imageView; } + /** + * Returns minicart config + * + * @return array + */ + public function getConfig() + { + return [ + 'shoppingCartUrl' => $this->getShoppingCartUrl(), + 'checkoutUrl' => $this->getCheckoutUrl(), + 'updateItemQtyUrl' => $this->getUpdateItemQtyUrl(), + 'removeItemUrl' => $this->getRemoveItemUrl(), + 'imageTemplate' => $this->getImageHtmlTemplate(), + 'customerRegisterUrl' => $this->getCustomerRegisterUrlUrl(), + 'customerForgotPasswordUrl' => $this->getCustomerForgotPasswordUrl(), + 'baseUrl' => $this->getBaseUrl() + ]; + } + /** * @return string */ diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml index 314e3038a05..6d08bcb4bbf 100644 --- a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml +++ b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml @@ -42,16 +42,7 @@ </div> <?php endif ?> <script> - window.checkout = { - shoppingCartUrl: '<?=$block->getShoppingCartUrl()?>', - checkoutUrl: '<?=$block->getCheckoutUrl()?>', - updateItemQtyUrl: '<?=$block->getUpdateItemQtyUrl()?>', - removeItemUrl: '<?=$block->getRemoveItemUrl()?>', - imageTemplate: '<?= $block->getImageHtmlTemplate()?>', - customerRegisterUrl: '<?= $block->getCustomerRegisterUrlUrl()?>', - customerForgotPasswordUrl: '<?= $block->getCustomerForgotPasswordUrl()?>', - baseUrl: '<?= $block->getBaseUrl()?>' - }; + window.checkout = <?php echo \Zend_Json::encode($block->getConfig()); ?>; </script> <script type="text/x-magento-init"> { -- GitLab