Skip to content

Commit 1b3d044

Browse files
author
Alexander Makeev
committed
MAGETWO-51768: Checkout agreement is not a link on PayPal Order Review page
- added modal form with agreements text
1 parent ce3d92a commit 1b3d044

File tree

5 files changed

+63
-49
lines changed

5 files changed

+63
-49
lines changed

app/code/Magento/CheckoutAgreements/view/frontend/templates/additional_agreements.phtml

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,45 @@
66

77
// @codingStandardsIgnoreFile
88

9-
?>
10-
<?php
119
/**
1210
* @var $block \Magento\CheckoutAgreements\Block\Agreements
1311
*/
14-
?>
15-
<?php if (!$block->getAgreements()) {
12+
if (!$block->getAgreements()) {
1613
return;
17-
} ?>
18-
<ol id="checkout-agreements" class="agreements checkout items">
19-
<?php /** @var \Magento\CheckoutAgreements\Api\Data\AgreementInterface $agreement */ ?>
20-
<?php foreach ($block->getAgreements() as $agreement): ?>
21-
<li class="item">
22-
<div class="checkout-agreement-item-content"<?php echo($agreement->getContentHeight() ? ' style="height:' . $agreement->getContentHeight() . '"' : '')?>>
23-
<?php if ($agreement->getIsHtml()):?>
24-
<?php /* @escapeNotVerified */ echo $agreement->getContent() ?>
25-
<?php else:?>
26-
<?php echo nl2br($block->escapeHtml($agreement->getContent())) ?>
27-
<?php endif; ?>
28-
</div>
29-
<?php if($agreement->getMode() == \Magento\CheckoutAgreements\Model\AgreementModeOptions::MODE_MANUAL): ?>
30-
<div id="checkout-agreements-form-<?php /* @escapeNotVerified */ echo $agreement->getAgreementId()?>" class="field choice agree required">
31-
<input type="checkbox"
32-
id="agreement-<?php /* @escapeNotVerified */ echo $agreement->getAgreementId()?>"
33-
name="agreement[<?php /* @escapeNotVerified */ echo $agreement->getAgreementId()?>]"
34-
value="1"
35-
title="<?php echo $block->escapeHtml($agreement->getCheckboxText()) ?>"
36-
class="checkbox""/>
37-
<label class="label" for="agreement-<?php /* @escapeNotVerified */ echo $agreement->getAgreementId()?>">
38-
<span><?php echo $agreement->getIsHtml() ? $agreement->getCheckboxText() : $block->escapeHtml($agreement->getCheckboxText()) ?></span>
39-
</label>
40-
</div>
41-
<?php elseif($agreement->getMode() == \Magento\CheckoutAgreements\Model\AgreementModeOptions::MODE_AUTO): ?>
42-
<div id="checkout-agreements-form-<?php /* @escapeNotVerified */ echo $agreement->getAgreementId()?>" class="field choice agree">
43-
<span><?php echo $agreement->getIsHtml() ? $agreement->getCheckboxText() : $block->escapeHtml($agreement->getCheckboxText()) ?></span>
44-
</div>
45-
<?php endif; ?>
46-
</li>
47-
<?php endforeach ?>
48-
</ol>
14+
}
15+
16+
/** @var \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection $argeementsCollection */
17+
$argeementsCollection = $block->getAgreements();
18+
$agreementMappedArray = [];
19+
/** @var \Magento\CheckoutAgreements\Model\Agreement $agreement */
20+
foreach ($argeementsCollection as $agreement) {
21+
if ($agreement->getIsActive()) {
22+
$agreementMappedArray[] = [
23+
'mode' => $agreement->getMode(),
24+
'agreementId' => $agreement->getAgreementId(),
25+
'checkboxText' => $agreement->getCheckboxText(),
26+
'content' => $agreement->getContent()
27+
];
28+
}
29+
}
30+
$agreementJson = json_encode($agreementMappedArray);
31+
?>
32+
33+
<div data-bind="scope: 'checkout-agreements-component-scope'" class="checkout-agreements-block">
34+
<!-- ko template: getTemplate() --><!-- /ko -->
35+
</div>
36+
<script type="text/x-magento-init">
37+
{
38+
"*": {
39+
"Magento_Ui/js/core/app": {
40+
"components": {
41+
"checkout-agreements-component-scope": {
42+
"component": "Magento_CheckoutAgreements/js/view/checkout-agreements",
43+
"agreements": <?php echo $agreementJson; ?>,
44+
"isVisible": true
45+
}
46+
}
47+
}
48+
}
49+
}
50+
</script>

app/code/Magento/CheckoutAgreements/view/frontend/web/js/model/agreement-validator.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ define(
1111
],
1212
function ($) {
1313
'use strict';
14-
var agreementsConfig = window.checkoutConfig.checkoutAgreements;
14+
var checkoutConfig = window.checkoutConfig,
15+
agreementsConfig = checkoutConfig ? checkoutConfig.checkoutAgreements : {};
16+
1517
return {
1618
/**
1719
* Validate checkout agreements

app/code/Magento/CheckoutAgreements/view/frontend/web/js/view/checkout-agreements.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ define(
1111
],
1212
function (ko, $, Component, agreementsModal) {
1313
'use strict';
14-
var agreementsConfig = window.checkoutConfig.checkoutAgreements,
15-
agreementManualMode = 1;
14+
var checkoutConfig = window.checkoutConfig,
15+
agreementManualMode = 1,
16+
agreementsConfig = checkoutConfig ? checkoutConfig.checkoutAgreements : {};
1617

1718
return Component.extend({
1819
defaults: {

app/code/Magento/CheckoutAgreements/view/frontend/web/template/checkout/checkout-agreements.html

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* See COPYING.txt for license details.
55
*/
66
-->
7-
<form data-role="checkout-agreements" method="post">
7+
<div data-role="checkout-agreements">
88
<div class="checkout-agreements" data-bind="visible: isVisible">
99
<!-- ko foreach: agreements -->
1010
<!-- ko if: ($parent.isAgreementRequired($data)) -->
@@ -15,8 +15,7 @@
1515
'name': 'agreement[' + agreementId + ']',
1616
'value': agreementId
1717
}"
18-
data-validate="{required:true}"
19-
>
18+
data-validate="{required:true}" />
2019
<label data-bind="attr: {'for': 'agreement_' + agreementId}">
2120
<button type="button"
2221
class="action action-show"
@@ -40,4 +39,4 @@
4039
<div class="checkout-agreements-item-content" data-bind="html: modalContent"></div>
4140
</div>
4241
</div>
43-
</form>
42+
</div>

app/code/Magento/Paypal/view/frontend/web/order-review.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ define([
2424
updateContainerSelector: '#details-reload',
2525
waitLoadingContainer: '#review-please-wait',
2626
shippingMethodContainer: '#shipping-method-container',
27+
agreementSelector: 'div.checkout-agreements input',
2728
isAjax: false,
2829
updateShippingMethodSubmitSelector: "#update-shipping-method-submit",
2930
reviewSubmitSelector: "#review-submit",
@@ -63,7 +64,6 @@ define([
6364
.find('select').not(this.options.shippingSelector).on('change', this._propertyChange);
6465
this._updateOrderSubmit(isDisable);
6566
}
66-
6767
},
6868

6969
/**
@@ -163,6 +163,11 @@ define([
163163
* Validate Order form
164164
*/
165165
_validateForm: function () {
166+
this.element.find(this.options.agreementSelector).off('change').on('change', $.proxy(function (e) {
167+
var isValid = this._validateForm();
168+
this._updateOrderSubmit(!isValid);
169+
}, this));
170+
166171
if (this.element.data('mageValidation')) {
167172
return this.element.validation().valid();
168173
}
@@ -236,15 +241,20 @@ define([
236241
callBackResponseHandler = null,
237242
shippingMethod = $.trim($(this.options.shippingSelector).val());
238243
this._shippingTobilling();
239-
if (url && resultId && this._validateForm() && shippingMethod) {
240-
this._updateOrderSubmit(true);
241-
this._toggleButton(this.options.updateOrderSelector, true);
244+
245+
var validateFormResult = this._validateForm();
246+
var isShippingUpdate = url == $(this.options.shippingSubmitFormSelector).prop('action') && shippingMethod;
247+
248+
if (url && resultId && (validateFormResult || isShippingUpdate)) {
249+
this._updateOrderSubmit(validateFormResult);
250+
this._toggleButton(this.options.updateOrderSelector, !validateFormResult);
251+
242252
// form data and callBack updated based on the shippping Form element
243253
if (this.isShippingSubmitForm) {
244254
formData = $(this.options.shippingSubmitFormSelector).serialize() + "&isAjax=true";
245255
callBackResponseHandler = function (response) {
246256
$(resultId).html(response);
247-
this._updateOrderSubmit(false);
257+
this._updateOrderSubmit(!validateFormResult);
248258
this._ajaxComplete();
249259
};
250260
} else {
@@ -300,4 +310,4 @@ define([
300310
});
301311

302312
return $.mage.orderReview;
303-
});
313+
});

0 commit comments

Comments
 (0)