1
1
<?php
2
+
2
3
namespace App \Http \Requests ;
3
4
4
5
use Illuminate \Foundation \Http \FormRequest ;
@@ -23,38 +24,40 @@ public function authorize()
23
24
protected function prepareForValidation ()
24
25
{
25
26
/**
26
- * The array fields could be not set if no checkbox is checked or JS is used
27
+ * The array fields could be not set if no checkbox is checked or JS is used
27
28
* to take all the array fields away. Here we make sure all array fields have a
28
- * default value of [] "empty array" if they are not submitted or have a
29
+ * default value of [] "empty array" if they are not submitted or have a
29
30
* non-array value
30
31
*/
31
-
32
+
32
33
$ additionalLanguages = is_array ($ this ->post ('additionalLanguages ' )) ? $ this ->post ('additionalLanguages ' ) : [];
33
34
$ experience = is_array ($ this ->post ('experience ' )) ? $ this ->post ('experience ' ) : [];
34
-
35
+
35
36
$ fixedExperience = [];
36
- foreach ($ experience as $ k => $ job ){
37
+ foreach ($ experience as $ k => $ job ) {
37
38
$ additionalLanguagesUsed = is_array ($ job ['additionalLanguagesUsed ' ] ?? null )
38
- ? $ job ['additionalLanguagesUsed ' ] : [];
39
+ ? $ job ['additionalLanguagesUsed ' ]
40
+ : [];
39
41
40
42
$ fixedJob = [
41
- 'languagesUsed ' => is_array ($ job ['languagesUsed ' ] ?? null )
42
- ? $ job ['languagesUsed ' ] : [],
43
+ 'languagesUsed ' => is_array ($ job ['languagesUsed ' ] ?? null )
44
+ ? $ job ['languagesUsed ' ]
45
+ : [],
43
46
44
47
'additionalLanguagesUsed '
45
- => array_filter ($ additionalLanguagesUsed , function ($ value ){
46
- return !empty ($ value );
47
- }), // remove empty additionalLanguagesUsed[] fields
48
+ => array_filter ($ additionalLanguagesUsed , function ($ value ) {
49
+ return !empty ($ value );
50
+ }), // remove empty additionalLanguagesUsed[] fields
48
51
];
49
52
$ fixedExperience [$ k ] = array_replace ($ job , $ fixedJob );
50
- }
53
+ }
51
54
52
55
$ this ->merge ([
53
56
'languages ' => is_array ($ this ->post ('languages ' )) ? $ this ->post ('languages ' ) : [],
54
- 'additionalLanguages '
55
- => array_filter ($ additionalLanguages , function ($ value ){ // remove empty additionalLanguages[] fields
56
- return !empty ($ value );
57
- }),
57
+ 'additionalLanguages '
58
+ => array_filter ($ additionalLanguages , function ($ value ) { // remove empty additionalLanguages[] fields
59
+ return !empty ($ value );
60
+ }),
58
61
'experience ' => $ fixedExperience ,
59
62
]);
60
63
}
@@ -64,22 +67,22 @@ protected function prepareForValidation()
64
67
*
65
68
* @return array
66
69
*/
67
- public function rules ()
70
+ public function rules (ReCaptchaV3 $ captcha )
68
71
{
69
72
$ rules = [
70
73
'fullName ' => ['bail ' , 'required ' , 'max:255 ' , $ this ->uniqueFullName ()],
71
74
'email ' => ['bail ' , 'required ' , 'max:255 ' , 'email ' ],
72
75
'address ' => ['nullable ' , 'string ' ],
73
76
'countryId ' => ['bail ' , 'required ' , Rule::in (array_keys (FormOptions::getCountries ('en_US ' ))),],
74
- 'languages ' => [
75
- 'array ' ,
76
- function ($ attribute , $ value , $ fail ){ // Validate that either "Programming Languages" or "Additional Languages" has entries
77
- if (empty ($ value ) && empty ($ this ->post ('additionalLanguages ' ))){
77
+ 'languages ' => [
78
+ 'array ' ,
79
+ function ($ attribute , $ value , $ fail ) { // Validate that either "Programming Languages" or "Additional Languages" has entries
80
+ if (empty ($ value ) && empty ($ this ->post ('additionalLanguages ' ))) {
78
81
$ fail (trans ('messages.languagesRequired ' ));
79
82
}
80
83
},
81
84
],
82
- 'languages.* ' => ['string ' , 'distinct ' , Rule::in (FormOptions::getProgrammingLanguages ())],
85
+ 'languages.* ' => ['string ' , 'distinct ' , Rule::in (FormOptions::getProgrammingLanguages ())],
83
86
'additionalLanguages ' => ['array ' ],
84
87
'additionalLanguages.* ' => ['string ' , 'distinct ' ],
85
88
'experience ' => ['array ' ],
@@ -90,56 +93,57 @@ function($attribute, $value, $fail){ // Validate that either "Programming Lan
90
93
'experience.*.finishDate ' => ['required ' , 'date_format:Y-m-d ' , 'after_or_equal:experience.*.startDate ' ],
91
94
'experience.*.type ' => ['required ' , Rule::in (array_keys (FormOptions::getWorkTypeOptions ()))],
92
95
'g-recaptcha-response ' => [
93
- function ($ attribute , $ value , $ fail ){ // reCAPTCHA validation
94
- $ validator = new ReCaptchaV3 (env ('RECAPTCHA_SECRET ' ));
95
- $ validator ->setValue ($ value );
96
-
97
- if ($ validator ->isValid () === false ){
96
+ 'bail ' ,
97
+ 'required ' ,
98
+ function ($ attribute , $ value , $ fail ) use ($ captcha ) { // reCAPTCHA validation
99
+ $ captcha ->setValue ($ value );
100
+
101
+ if ($ captcha ->isValid () === false ) {
98
102
$ fail (trans ('messages.inputReCaptchaFail ' ));
99
103
}
100
104
},
101
105
],
102
106
];
103
-
107
+
104
108
$ experience = is_array ($ this ->post ('experience ' )) ? $ this ->post ('experience ' ) : [];
105
- foreach (array_keys ($ experience ) as $ k ){
106
- $ rules ['experience. ' . $ k . '.languagesUsed ' ] = [
109
+ foreach (array_keys ($ experience ) as $ k ) {
110
+ $ rules ['experience. ' . $ k . '.languagesUsed ' ] = [
107
111
'array ' ,
108
- function ($ attribute , $ value , $ fail ) use ($ k ) { // Validate that either "Languages Used" or "Additional Languages Used" has entries
109
- if (empty ($ value ) && empty ($ this ->input ('experience. ' . $ k . '.additionalLanguagesUsed ' ))){
112
+ function ($ attribute , $ value , $ fail ) use ($ k ) { // Validate that either "Languages Used" or "Additional Languages Used" has entries
113
+ if (empty ($ value ) && empty ($ this ->input ('experience. ' . $ k . '.additionalLanguagesUsed ' ))) {
110
114
$ fail (trans ('messages.languagesUsedRequired ' ));
111
115
}
112
116
},
113
117
];
114
-
115
- $ rules ['experience. ' . $ k . '.languagesUsed.* ' ] = [
116
- 'string ' ,
117
- 'distinct ' ,
118
+
119
+ $ rules ['experience. ' . $ k . '.languagesUsed.* ' ] = [
120
+ 'string ' ,
121
+ 'distinct ' ,
118
122
Rule::in (array_keys (FormOptions::getProgrammingLanguages ())),
119
123
];
120
-
121
- $ rules ['experience. ' . $ k . '.additionalLanguagesUsed ' ] = ['array ' ];
122
- $ rules ['experience. ' . $ k . '.additionalLanguagesUsed.* ' ] = ['string ' , 'distinct ' ];
123
- }
124
-
124
+
125
+ $ rules ['experience. ' . $ k . '.additionalLanguagesUsed ' ] = ['array ' ];
126
+ $ rules ['experience. ' . $ k . '.additionalLanguagesUsed.* ' ] = ['string ' , 'distinct ' ];
127
+ }
128
+
125
129
return $ rules ;
126
130
}
127
-
128
- private function uniqueFullName () : Rules \Unique
131
+
132
+ private function uniqueFullName (): Rules \Unique
129
133
{
130
134
$ rule = Rule::unique (PersonExperience::class, 'fullName ' )
131
- ->where ('sessionId ' , session ()-> getId ( ));
135
+ ->where ('sessionToken ' , session (' sessionToken ' ));
132
136
133
- if (request ()->id ){
137
+ if (request ()->id ) {
134
138
$ rule ->ignore (request ()->id , 'id ' );
135
139
}
136
-
140
+
137
141
return $ rule ;
138
142
}
139
-
143
+
140
144
/**
141
145
* Customizing some of the error messages
142
- *
146
+ *
143
147
* @return array
144
148
*/
145
149
public function messages ()
@@ -155,6 +159,7 @@ public function messages()
155
159
'experience.*.finishDate.after_or_equal ' => trans ('messages.formAfterStartDate ' ),
156
160
'experience.*.type.required ' => trans ('messages.inputRequired ' ),
157
161
'experience.*.additionalLanguagesUsed.*.distinct ' => trans ('messages.inputDuplicated ' ),
162
+ 'g-recaptcha-response.required ' => trans ('messages.inputReCaptchaFail ' ),
158
163
];
159
164
}
160
165
}
0 commit comments