Contact Form 7 - Version 5.0.3

Version Description

  • CSS: Applies the "not-allowed" cursor style to submit buttons in the "disabled" state.
  • Acceptance Checkbox: Revises the tag-generator UI to encourage the use of better options in terms of personal data protection.
  • Introduces wpcf7_anonymize_ip_addr() function.
  • Introduces the consent_for:storage option for all types of form-tags.
Download this release

Release Info

Developer takayukister
Plugin Icon 128x128 Contact Form 7
Version 5.0.3
Comparing to
See all releases

Code changes from version 5.0.2 to 5.0.3

admin/edit-contact-form.php CHANGED
@@ -187,12 +187,23 @@ if ( $post ) :
187
__( 'https://wordpress.org/support/plugin/contact-form-7/', 'contact-form-7' ),
188
__( 'Support Forums', 'contact-form-7' )
189
); ?></li>
190
- <?php if ( 'en_' === substr( get_user_locale(), 0, 3 ) ) : ?>
191
<li><?php echo wpcf7_link(
192
__( 'https://contactform7.com/custom-development/', 'contact-form-7' ),
193
__( 'Professional Services', 'contact-form-7' )
194
); ?></li>
195
- <?php endif; ?>
196
</ol>
197
</div>
198
</div><!-- #informationdiv -->
187
__( 'https://wordpress.org/support/plugin/contact-form-7/', 'contact-form-7' ),
188
__( 'Support Forums', 'contact-form-7' )
189
); ?></li>
190
+ <?php
191
+ $pro_service_langs = array(
192
+ 'en', // English
193
+ 'de', // German
194
+ 'fr', // French
195
+ 'es', // Spanish
196
+ );
197
+
198
+ if ( in_array( substr( get_user_locale(), 0, 2 ), $pro_service_langs ) ) :
199
+ ?>
200
<li><?php echo wpcf7_link(
201
__( 'https://contactform7.com/custom-development/', 'contact-form-7' ),
202
__( 'Professional Services', 'contact-form-7' )
203
); ?></li>
204
+ <?php
205
+ endif;
206
+ ?>
207
</ol>
208
</div>
209
</div><!-- #informationdiv -->
includes/css/styles.css CHANGED
@@ -108,3 +108,7 @@ div.wpcf7 input[type="file"] {
108
div.wpcf7 input[type="file"]:disabled {
109
cursor: default;
110
}
108
div.wpcf7 input[type="file"]:disabled {
109
cursor: default;
110
}
111
+
112
+ div.wpcf7 .wpcf7-submit:disabled {
113
+ cursor: not-allowed;
114
+ }
includes/form-tag.php CHANGED
@@ -204,7 +204,9 @@ class WPCF7_FormTag implements ArrayAccess {
204
205
public function get_default_option( $default = '', $args = '' ) {
206
$args = wp_parse_args( $args, array(
207
- 'multiple' => false ) );
208
209
$options = (array) $this->get_option( 'default' );
210
$values = array();
@@ -283,6 +285,22 @@ class WPCF7_FormTag implements ArrayAccess {
283
}
284
}
285
}
286
}
287
}
288
204
205
public function get_default_option( $default = '', $args = '' ) {
206
$args = wp_parse_args( $args, array(
207
+ 'multiple' => false,
208
+ 'shifted' => false,
209
+ ) );
210
211
$options = (array) $this->get_option( 'default' );
212
$values = array();
285
}
286
}
287
}
288
+
289
+ } elseif ( preg_match( '/^[0-9_]+#x2F;', $opt ) ) {
290
+ $nums = explode( '_', $opt );
291
+
292
+ foreach ( $nums as $num ) {
293
+ $num = absint( $num );
294
+ $num = $args['shifted'] ? $num : $num - 1;
295
+
296
+ if ( isset( $this->values[$num] ) ) {
297
+ if ( $args['multiple'] ) {
298
+ $values[] = $this->values[$num];
299
+ } else {
300
+ return $this->values[$num];
301
+ }
302
+ }
303
+ }
304
}
305
}
306
includes/functions.php CHANGED
@@ -368,3 +368,25 @@ function wpcf7_deprecated_function( $function, $version, $replacement ) {
368
}
369
}
370
}
368
}
369
}
370
}
371
+
372
+ function wpcf7_anonymize_ip_addr( $ip_addr ) {
373
+ if ( ! function_exists( 'inet_ntop' ) || ! function_exists( 'inet_pton' ) ) {
374
+ return $ip_addr;
375
+ }
376
+
377
+ $packed = inet_pton( $ip_addr );
378
+
379
+ if ( false === $packed ) {
380
+ return $ip_addr;
381
+ }
382
+
383
+ if ( 4 == strlen( $packed ) ) { // IPv4
384
+ $mask = '255.255.255.0';
385
+ } elseif ( 16 == strlen( $packed ) ) { // IPv6
386
+ $mask = 'ffff:ffff:ffff:0000:0000:0000:0000:0000';
387
+ } else {
388
+ return $ip_addr;
389
+ }
390
+
391
+ return inet_ntop( $packed & inet_pton( $mask ) );
392
+ }
includes/submission.php CHANGED
@@ -136,6 +136,11 @@ class WPCF7_Submission {
136
$value_orig, $tag );
137
138
$posted_data[$name] = $value;
139
}
140
141
$this->posted_data = apply_filters( 'wpcf7_posted_data', $posted_data );
@@ -159,7 +164,7 @@ class WPCF7_Submission {
159
return $this->status;
160
}
161
162
- $this->meta = array(
163
'remote_ip' => $this->get_remote_ip_addr(),
164
'user_agent' => isset( $_SERVER['HTTP_USER_AGENT'] )
165
? substr( $_SERVER['HTTP_USER_AGENT'], 0, 254 ) : '',
@@ -170,10 +175,14 @@ class WPCF7_Submission {
170
'container_post_id' => isset( $_POST['_wpcf7_container_post'] )
171
? (int) $_POST['_wpcf7_container_post'] : 0,
172
'current_user_id' => get_current_user_id(),
173
- );
174
175
$contact_form = $this->contact_form;
176
177
if ( ! $this->validate() ) { // Validation error occured
178
$this->set_status( 'validation_failed' );
179
$this->set_response( $contact_form->message( 'validation_error' ) );
136
$value_orig, $tag );
137
138
$posted_data[$name] = $value;
139
+
140
+ if ( $tag->has_option( 'consent_for:storage' )
141
+ && empty( $posted_data[$name] ) ) {
142
+ $this->meta['do_not_store'] = true;
143
+ }
144
}
145
146
$this->posted_data = apply_filters( 'wpcf7_posted_data', $posted_data );
164
return $this->status;
165
}
166
167
+ $this->meta = array_merge( $this->meta, array(
168
'remote_ip' => $this->get_remote_ip_addr(),
169
'user_agent' => isset( $_SERVER['HTTP_USER_AGENT'] )
170
? substr( $_SERVER['HTTP_USER_AGENT'], 0, 254 ) : '',
175
'container_post_id' => isset( $_POST['_wpcf7_container_post'] )
176
? (int) $_POST['_wpcf7_container_post'] : 0,
177
'current_user_id' => get_current_user_id(),
178
+ ) );
179
180
$contact_form = $this->contact_form;
181
182
+ if ( $contact_form->is_true( 'do_not_store' ) ) {
183
+ $this->meta['do_not_store'] = true;
184
+ }
185
+
186
if ( ! $this->validate() ) { // Validation error occured
187
$this->set_status( 'validation_failed' );
188
$this->set_response( $contact_form->message( 'validation_error' ) );
modules/acceptance.php CHANGED
@@ -249,8 +249,7 @@ function wpcf7_tag_generator_acceptance( $contact_form, $args = '' ) {
249
<td>
250
<fieldset>
251
<legend class="screen-reader-text"><?php echo esc_html( __( 'Options', 'contact-form-7' ) ); ?></legend>
252
- <label><input type="checkbox" name="default:on" class="option" /> <?php echo esc_html( __( 'Make this checkbox checked by default', 'contact-form-7' ) ); ?></label><br />
253
- <label><input type="checkbox" name="invert" class="option" /> <?php echo esc_html( __( 'Make this work inversely', 'contact-form-7' ) ); ?></label>
254
</fieldset>
255
</td>
256
</tr>
249
<td>
250
<fieldset>
251
<legend class="screen-reader-text"><?php echo esc_html( __( 'Options', 'contact-form-7' ) ); ?></legend>
252
+ <label><input type="checkbox" name="optional" class="option" checked="checked" /> <?php echo esc_html( __( 'Make this checkbox optional', 'contact-form-7' ) ); ?></label>
253
</fieldset>
254
</td>
255
</tr>
modules/checkbox.php CHANGED
@@ -80,39 +80,17 @@ function wpcf7_checkbox_form_tag_handler( $tag ) {
80
}
81
}
82
83
- $defaults = array();
84
-
85
- $default_choice = $tag->get_default_option( null, 'multiple=1' );
86
-
87
- foreach ( $default_choice as $value ) {
88
- $key = array_search( $value, $values, true );
89
-
90
- if ( false !== $key ) {
91
- $defaults[] = (int) $key + 1;
92
- }
93
- }
94
-
95
- if ( $matches = $tag->get_first_match_option( '/^default:([0-9_]+)#x2F;' ) ) {
96
- $defaults = array_merge( $defaults, explode( '_', $matches[1] ) );
97
- }
98
-
99
- $defaults = array_unique( $defaults );
100
101
$hangover = wpcf7_get_hangover( $tag->name, $multiple ? array() : '' );
102
103
foreach ( $values as $key => $value ) {
104
- $class = 'wpcf7-list-item';
105
-
106
- $checked = false;
107
-
108
if ( $hangover ) {
109
- if ( $multiple ) {
110
- $checked = in_array( $value, (array) $hangover, true );
111
- } else {
112
- $checked = ( $hangover === $value );
113
- }
114
} else {
115
- $checked = in_array( $key + 1, (array) $defaults );
116
}
117
118
if ( isset( $labels[$key] ) ) {
@@ -149,6 +127,7 @@ function wpcf7_checkbox_form_tag_handler( $tag ) {
149
$tabindex += 1;
150
}
151
152
$count += 1;
153
154
if ( 1 == $count ) {
80
}
81
}
82
83
+ $default_choice = $tag->get_default_option( null, array(
84
+ 'multiple' => $multiple,
85
+ ) );
86
87
$hangover = wpcf7_get_hangover( $tag->name, $multiple ? array() : '' );
88
89
foreach ( $values as $key => $value ) {
90
if ( $hangover ) {
91
+ $checked = in_array( $value, (array) $hangover, true );
92
} else {
93
+ $checked = in_array( $value, (array) $default_choice, true );
94
}
95
96
if ( isset( $labels[$key] ) ) {
127
$tabindex += 1;
128
}
129
130
+ $class = 'wpcf7-list-item';
131
$count += 1;
132
133
if ( 1 == $count ) {
modules/flamingo.php CHANGED
@@ -12,8 +12,7 @@ function wpcf7_flamingo_submit( $contact_form, $result ) {
12
return;
13
}
14
15
- if ( $contact_form->in_demo_mode()
16
- || $contact_form->is_true( 'do_not_store' ) ) {
17
return;
18
}
19
@@ -31,6 +30,10 @@ function wpcf7_flamingo_submit( $contact_form, $result ) {
31
return;
32
}
33
34
$fields_senseless =
35
$contact_form->scan_form_tags( array( 'feature' => 'do-not-store' ) );
36
12
return;
13
}
14
15
+ if ( $contact_form->in_demo_mode() ) {
16
return;
17
}
18
30
return;
31
}
32
33
+ if ( $submission->get_meta( 'do_not_store' ) ) {
34
+ return;
35
+ }
36
+
37
$fields_senseless =
38
$contact_form->scan_form_tags( array( 'feature' => 'do-not-store' ) );
39
modules/select.php CHANGED
@@ -66,30 +66,14 @@ function wpcf7_select_form_tag_handler( $tag ) {
66
$labels = array_merge( $labels, array_values( $data ) );
67
}
68
69
- $defaults = array();
70
-
71
- $default_choice = $tag->get_default_option( null, 'multiple=1' );
72
-
73
- foreach ( $default_choice as $value ) {
74
- $key = array_search( $value, $values, true );
75
-
76
- if ( false !== $key ) {
77
- $defaults[] = (int) $key + 1;
78
- }
79
- }
80
-
81
- if ( $matches = $tag->get_first_match_option( '/^default:([0-9_]+)#x2F;' ) ) {
82
- $defaults = array_merge( $defaults, explode( '_', $matches[1] ) );
83
- }
84
-
85
- $defaults = array_unique( $defaults );
86
-
87
- $shifted = false;
88
89
if ( $include_blank || empty( $values ) ) {
90
array_unshift( $labels, '---' );
91
array_unshift( $values, '' );
92
- $shifted = true;
93
} elseif ( $first_as_label ) {
94
$values[0] = '';
95
}
@@ -98,20 +82,10 @@ function wpcf7_select_form_tag_handler( $tag ) {
98
$hangover = wpcf7_get_hangover( $tag->name );
99
100
foreach ( $values as $key => $value ) {
101
- $selected = false;
102
-
103
if ( $hangover ) {
104
- if ( $multiple ) {
105
- $selected = in_array( $value, (array) $hangover, true );
106
- } else {
107
- $selected = ( $hangover === $value );
108
- }
109
} else {
110
- if ( ! $shifted && in_array( (int) $key + 1, (array) $defaults ) ) {
111
- $selected = true;
112
- } elseif ( $shifted && in_array( (int) $key, (array) $defaults ) ) {
113
- $selected = true;
114
- }
115
}
116
117
$item_atts = array(
66
$labels = array_merge( $labels, array_values( $data ) );
67
}
68
69
+ $default_choice = $tag->get_default_option( null, array(
70
+ 'multiple' => $multiple,
71
+ 'shifted' => $include_blank,
72
+ ) );
73
74
if ( $include_blank || empty( $values ) ) {
75
array_unshift( $labels, '---' );
76
array_unshift( $values, '' );
77
} elseif ( $first_as_label ) {
78
$values[0] = '';
79
}
82
$hangover = wpcf7_get_hangover( $tag->name );
83
84
foreach ( $values as $key => $value ) {
85
if ( $hangover ) {
86
+ $selected = in_array( $value, (array) $hangover, true );
87
} else {
88
+ $selected = in_array( $value, (array) $default_choice, true );
89
}
90
91
$item_atts = array(
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://contactform7.com/donate/
4
Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
5
Requires at least: 4.8
6
Tested up to: 4.9
7
- Stable tag: 5.0.2
8
License: GPLv2 or later
9
License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
@@ -74,6 +74,13 @@ Do you have questions or issues with Contact Form 7? Use these support channels
74
75
For more information, see [Releases](https://contactform7.com/category/releases/).
76
77
= 5.0.2 =
78
79
* Added the Privacy Notices section to the readme.txt file.
4
Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
5
Requires at least: 4.8
6
Tested up to: 4.9
7
+ Stable tag: 5.0.3
8
License: GPLv2 or later
9
License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
74
75
For more information, see [Releases](https://contactform7.com/category/releases/).
76
77
+ = 5.0.3 =
78
+
79
+ * CSS: Applies the "not-allowed" cursor style to submit buttons in the "disabled" state.
80
+ * Acceptance Checkbox: Revises the tag-generator UI to encourage the use of better options in terms of personal data protection.
81
+ * Introduces wpcf7_anonymize_ip_addr() function.
82
+ * Introduces the consent_for:storage option for all types of form-tags.
83
+
84
= 5.0.2 =
85
86
* Added the Privacy Notices section to the readme.txt file.
wp-contact-form-7.php CHANGED
@@ -7,10 +7,10 @@ Author: Takayuki Miyoshi
7
Author URI: https://ideasilo.wordpress.com/
8
Text Domain: contact-form-7
9
Domain Path: /languages/
10
- Version: 5.0.2
11
*/
12
13
- define( 'WPCF7_VERSION', '5.0.2' );
14
15
define( 'WPCF7_REQUIRED_WP_VERSION', '4.8' );
16
7
Author URI: https://ideasilo.wordpress.com/
8
Text Domain: contact-form-7
9
Domain Path: /languages/
10
+ Version: 5.0.3
11
*/
12
13
+ define( 'WPCF7_VERSION', '5.0.3' );
14
15
define( 'WPCF7_REQUIRED_WP_VERSION', '4.8' );
16