Skip to content

Commit 01cb488

Browse files
author
Denys Rul
committed
MAGETWO-32480: Merge validation rules
- Merge validation rules for a frontend area
1 parent 396e45b commit 01cb488

File tree

5 files changed

+119
-142
lines changed

5 files changed

+119
-142
lines changed

app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/composite/fieldset/options/type/date.phtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ require([
4444
<script>
4545
require([
4646
"jquery",
47-
"mage/validation"
47+
"mage/backend/validation"
4848
], function(jQuery){
4949

5050
//<![CDATA[

app/code/Magento/Catalog/view/frontend/web/product/view/validation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
define([
88
"jquery",
99
"jquery/ui",
10-
"mage/validation"
10+
"mage/validation/validation"
1111
], factory);
1212
} else {
1313
factory(jQuery);

app/code/Magento/Customer/view/frontend/requirejs-config.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,5 @@ var config = {
1010
address: 'Magento_Customer/address',
1111
setPassword: 'Magento_Customer/set-password'
1212
}
13-
},
14-
deps: [
15-
'mage/validation/dob-rule'
16-
]
13+
}
1714
};

lib/web/mage/validation/dob-rule.js

Lines changed: 0 additions & 71 deletions
This file was deleted.

lib/web/mage/validation/validation.js

Lines changed: 116 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -15,76 +15,127 @@
1515
}
1616
}(function ($) {
1717
"use strict";
18-
19-
/**
20-
* Validation rule for grouped product, with multiple qty fields,
21-
* only one qty needs to have a positive integer
22-
*/
23-
$.validator.addMethod(
24-
"validate-grouped-qty",
25-
function(value, element, params) {
26-
var result = false;
27-
var total = 0;
28-
$(params).find('input[data-validate*="validate-grouped-qty"]').each(function(i, e) {
29-
var val = $(e).val();
30-
if (val && val.length > 0) {
31-
result = true;
32-
var valInt = parseInt(val, 10) || 0;
33-
if (valInt >= 0) {
34-
total += valInt;
35-
} else {
36-
result = false;
37-
return result;
38-
}
39-
}
40-
});
41-
return result && total > 0;
42-
},
43-
'Please specify the quantity of product(s).'
44-
);
4518

46-
$.validator.addMethod(
47-
"validate-one-checkbox-required-by-name",
48-
function(value, element, params) {
49-
var checkedCount = 0;
50-
if (element.type === 'checkbox') {
51-
$('[name="' + element.name + '"]').each(function() {
52-
if ($(this).is(':checked')) {
53-
checkedCount += 1;
54-
return false;
19+
$.each({
20+
'validate-grouped-qty': [
21+
function (value, element, params) {
22+
var result = false;
23+
var total = 0;
24+
$(params).find('input[data-validate*="validate-grouped-qty"]').each(function (i, e) {
25+
var val = $(e).val();
26+
if (val && val.length > 0) {
27+
result = true;
28+
var valInt = parseInt(val, 10) || 0;
29+
if (valInt >= 0) {
30+
total += valInt;
31+
} else {
32+
result = false;
33+
return result;
34+
}
5535
}
5636
});
57-
}
58-
var container = '#' + params;
59-
if (checkedCount > 0) {
60-
$(container).removeClass('validation-failed');
61-
$(container).addClass('validation-passed');
62-
return true;
63-
} else {
64-
$(container).addClass('validation-failed');
65-
$(container).removeClass('validation-passed');
37+
return result && total > 0;
38+
},
39+
'Please specify the quantity of product(s).'
40+
],
41+
'validate-one-checkbox-required-by-name': [
42+
function (value, element, params) {
43+
var checkedCount = 0;
44+
if (element.type === 'checkbox') {
45+
$('[name="' + element.name + '"]').each(function () {
46+
if ($(this).is(':checked')) {
47+
checkedCount += 1;
48+
return false;
49+
}
50+
});
51+
}
52+
var container = '#' + params;
53+
if (checkedCount > 0) {
54+
$(container).removeClass('validation-failed');
55+
$(container).addClass('validation-passed');
56+
return true;
57+
} else {
58+
$(container).addClass('validation-failed');
59+
$(container).removeClass('validation-passed');
60+
return false;
61+
}
62+
},
63+
'Please select one of the options.'
64+
],
65+
'validate-date-between': [
66+
function (value, element, params) {
67+
var minDate = new Date(params[0]),
68+
maxDate = new Date(params[1]),
69+
inputDate = new Date(element.value);
70+
minDate.setHours(0);
71+
maxDate.setHours(0);
72+
if (inputDate >= minDate && inputDate <= maxDate) {
73+
return true;
74+
}
75+
this.dateBetweenErrorMessage = $.mage.__('Please enter a date between %min and %max.').replace('%min', minDate).replace('%max', maxDate);
6676
return false;
77+
},
78+
function () {
79+
return this.dateBetweenErrorMessage;
6780
}
68-
},
69-
'Please select one of the options.'
70-
);
81+
],
82+
'validate-dob': [
83+
function (val, element, params) {
84+
var dob = $(element).parents('.customer-dob');
85+
$(dob).find('.' + this.settings.errorClass).removeClass(this.settings.errorClass);
86+
var dayVal = $(dob).find(params[0]).find('input:text').val(),
87+
monthVal = $(dob).find(params[1]).find('input:text').val(),
88+
yearVal = $(dob).find(params[2]).find('input:text').val(),
89+
dobLength = dayVal.length + monthVal.length + yearVal.length;
90+
if (params[3] && dobLength === 0) {
91+
this.dobErrorMessage = 'This is a required field.';
92+
return false;
93+
}
94+
if (!params[3] && dobLength === 0) {
95+
return true;
96+
}
97+
var day = parseInt(dayVal, 10) || 0,
98+
month = parseInt(monthVal, 10) || 0,
99+
year = parseInt(yearVal, 10) || 0,
100+
curYear = (new Date()).getFullYear();
101+
if (!day || !month || !year) {
102+
this.dobErrorMessage = 'Please enter a valid full date.';
103+
return false;
104+
}
105+
if (month < 1 || month > 12) {
106+
this.dobErrorMessage = 'Please enter a valid month (1-12).';
107+
return false;
108+
}
109+
if (year < 1900 || year > curYear) {
110+
this.dobErrorMessage =
111+
$.mage.__('Please enter a valid year (1900-%1).').replace('%1', curYear.toString());
112+
return false;
113+
}
114+
var validateDayInMonth = new Date(year, month, 0).getDate();
115+
if (day < 1 || day > validateDayInMonth) {
116+
this.dobErrorMessage =
117+
$.mage.__('Please enter a valid day (1-%1).').replace('%1', validateDayInMonth.toString());
118+
return false;
119+
}
120+
var today = new Date(),
121+
dateEntered = new Date();
122+
dateEntered.setFullYear(year, month - 1, day);
123+
if (dateEntered > today) {
124+
this.dobErrorMessage = $.mage.__('Please enter a date in the past.');
125+
return false;
126+
}
71127

72-
$.validator.addMethod(
73-
"validate-date-between",
74-
function(value, element, params) {
75-
var minDate = new Date(params[0]),
76-
maxDate = new Date(params[1]),
77-
inputDate = new Date(element.value);
78-
minDate.setHours(0);
79-
maxDate.setHours(0);
80-
if (inputDate >= minDate && inputDate <= maxDate) {
128+
day = day % 10 === day ? '0' + day : day;
129+
month = month % 10 === month ? '0' + month : month;
130+
$(element).val(month + '/' + day + '/' + year);
81131
return true;
132+
},
133+
function () {
134+
return this.dobErrorMessage;
82135
}
83-
this.dateBetweenErrorMessage = $.mage.__('Please enter a date between %min and %max.').replace('%min', minDate).replace('%max', maxDate);
84-
return false;
85-
},
86-
function(){
87-
return this.dateBetweenErrorMessage;
88-
}
89-
);
90-
}));
136+
]
137+
}, function (i, rule) {
138+
rule.unshift(i);
139+
$.validator.addMethod.apply($.validator, rule);
140+
});
141+
}));

0 commit comments

Comments
 (0)