Version Description
- The default contact form template is revised.
- reCAPTCHA: Run grecaptcha.reset() after a submission.
- The autocomplete option for form-tags and wpcf7_form_autocomplete filter hook are introduced to manage autocomplete attribute.
- The config validator is revised. The wpcf7_config_validator_validate action hook is introduced to allow 3rd-party to cut in.
- A bug in character count form-tag is fixed.
- Language Packs: Language files for Danish (da_DK), Polish (pl_PL), and Czech (cs_CZ) have been removed from the plugin package.
Download this release
Release Info
Developer | takayukister |
Plugin | Contact Form 7 |
Version | 4.5 |
Comparing to | |
See all releases |
Code changes from version 4.4.2 to 4.5
- admin/admin.php +58 -101
- admin/css/styles.css +40 -1
- admin/edit-contact-form.php +5 -0
- admin/includes/admin-functions.php +2 -1
- admin/includes/class-contact-forms-list-table.php +14 -11
- admin/includes/editor.php +9 -46
- admin/includes/welcome-panel.php +72 -0
- admin/js/scripts.js +36 -0
- admin/js/tag-generator.js +3 -1
- includes/config-validator.php +182 -50
- includes/contact-form-template.php +22 -13
- includes/contact-form.php +4 -37
- includes/controller.php +4 -2
- includes/css/styles.css +4 -0
- includes/formatting.php +1 -1
- includes/functions.php +11 -2
- includes/js/scripts.js +18 -1
- includes/submission.php +1 -1
- languages/contact-form-7-cs_CZ.mo +0 -0
- languages/contact-form-7-da_DK.mo +0 -0
- languages/contact-form-7-pl_PL.mo +0 -0
- languages/readme.txt +3 -4
- modules/count.php +12 -9
- modules/file.php +13 -4
- modules/quiz.php +5 -2
- modules/really-simple-captcha.php +20 -12
- modules/recaptcha.php +3 -1
- modules/text.php +15 -6
- modules/textarea.php +7 -2
- readme.txt +12 -4
- wp-contact-form-7.php +3 -3
admin/admin.php
CHANGED
@@ -3,6 +3,7 @@
|
|
3 |
require_once WPCF7_PLUGIN_DIR . '/admin/includes/admin-functions.php';
|
4 |
require_once WPCF7_PLUGIN_DIR . '/admin/includes/help-tabs.php';
|
5 |
require_once WPCF7_PLUGIN_DIR . '/admin/includes/tag-generator.php';
|
|
|
6 |
|
7 |
add_action( 'admin_init', 'wpcf7_admin_init' );
|
8 |
|
@@ -170,12 +171,13 @@ function wpcf7_load_contact_form_admin() {
|
|
170 |
'count_invalid' => 0 );
|
171 |
|
172 |
foreach ( $contact_forms as $contact_form ) {
|
173 |
-
$contact_form
|
|
|
174 |
|
175 |
-
if ( $
|
176 |
-
$result['count_invalid'] += 1;
|
177 |
-
} else {
|
178 |
$result['count_valid'] += 1;
|
|
|
|
|
179 |
}
|
180 |
}
|
181 |
|
@@ -245,10 +247,34 @@ function wpcf7_admin_enqueue_scripts( $hook_suffix ) {
|
|
245 |
array( 'jquery', 'jquery-ui-tabs' ),
|
246 |
WPCF7_VERSION, true );
|
247 |
|
248 |
-
|
249 |
'pluginUrl' => wpcf7_plugin_url(),
|
250 |
-
'saveAlert' => __(
|
251 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
252 |
|
253 |
add_thickbox();
|
254 |
|
@@ -293,6 +319,8 @@ function wpcf7_admin_management_page() {
|
|
293 |
}
|
294 |
?></h1>
|
295 |
|
|
|
|
|
296 |
<?php do_action( 'wpcf7_admin_notices' ); ?>
|
297 |
|
298 |
<form method="get" action="">
|
@@ -367,6 +395,7 @@ function wpcf7_admin_integration_page() {
|
|
367 |
|
368 |
<h1><?php echo esc_html( __( 'Integration with Other Services', 'contact-form-7' ) ); ?></h1>
|
369 |
|
|
|
370 |
<?php do_action( 'wpcf7_admin_notices' ); ?>
|
371 |
|
372 |
<?php
|
@@ -444,7 +473,7 @@ function wpcf7_plugin_action_links( $links, $file ) {
|
|
444 |
return $links;
|
445 |
}
|
446 |
|
447 |
-
add_action( '
|
448 |
|
449 |
function wpcf7_old_wp_version_error() {
|
450 |
$wp_version = get_bloginfo( 'version' );
|
@@ -454,92 +483,13 @@ function wpcf7_old_wp_version_error() {
|
|
454 |
}
|
455 |
|
456 |
?>
|
457 |
-
<div class="notice notice-
|
458 |
<p><?php echo sprintf( __( '<strong>Contact Form 7 %1$s requires WordPress %2$s or higher.</strong> Please <a href="%3$s">update WordPress</a> first.', 'contact-form-7' ), WPCF7_VERSION, WPCF7_REQUIRED_WP_VERSION, admin_url( 'update-core.php' ) ); ?></p>
|
459 |
</div>
|
460 |
<?php
|
461 |
}
|
462 |
|
463 |
-
add_action( '
|
464 |
-
|
465 |
-
function wpcf7_welcome_panel() {
|
466 |
-
global $plugin_page;
|
467 |
-
|
468 |
-
if ( 'wpcf7' != $plugin_page || ! empty( $_GET['post'] ) ) {
|
469 |
-
return;
|
470 |
-
}
|
471 |
-
|
472 |
-
$classes = 'welcome-panel';
|
473 |
-
|
474 |
-
$vers = (array) get_user_meta( get_current_user_id(),
|
475 |
-
'wpcf7_hide_welcome_panel_on', true );
|
476 |
-
|
477 |
-
if ( wpcf7_version_grep( wpcf7_version( 'only_major=1' ), $vers ) ) {
|
478 |
-
$classes .= ' hidden';
|
479 |
-
}
|
480 |
-
|
481 |
-
?>
|
482 |
-
<div id="welcome-panel" class="<?php echo esc_attr( $classes ); ?>">
|
483 |
-
<?php wp_nonce_field( 'wpcf7-welcome-panel-nonce', 'welcomepanelnonce', false ); ?>
|
484 |
-
<a class="welcome-panel-close" href="<?php echo esc_url( menu_page_url( 'wpcf7', false ) ); ?>"><?php echo esc_html( __( 'Dismiss', 'contact-form-7' ) ); ?></a>
|
485 |
-
|
486 |
-
<div class="welcome-panel-content">
|
487 |
-
<div class="welcome-panel-column-container">
|
488 |
-
<div class="welcome-panel-column">
|
489 |
-
<h3><?php echo esc_html( __( 'Contact Form 7 Needs Your Support', 'contact-form-7' ) ); ?></h3>
|
490 |
-
<p class="message"><?php echo esc_html( __( "It is hard to continue development and support for this plugin without contributions from users like you. If you enjoy using Contact Form 7 and find it useful, please consider making a donation.", 'contact-form-7' ) ); ?></p>
|
491 |
-
<p><?php echo wpcf7_link( __( 'http://contactform7.com/donate/', 'contact-form-7' ), __( 'Donate', 'contact-form-7' ), array( 'class' => 'button button-primary' ) ); ?></p>
|
492 |
-
</div>
|
493 |
-
|
494 |
-
<div class="welcome-panel-column">
|
495 |
-
<h3><?php echo esc_html( __( 'Get Started', 'contact-form-7' ) ); ?></h3>
|
496 |
-
<ul>
|
497 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/getting-started-with-contact-form-7/', 'contact-form-7' ), __( 'Getting Started with Contact Form 7', 'contact-form-7' ) ); ?></li>
|
498 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/admin-screen/', 'contact-form-7' ), __( 'Admin Screen', 'contact-form-7' ) ); ?></li>
|
499 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/tag-syntax/', 'contact-form-7' ), __( 'How Tags Work', 'contact-form-7' ) ); ?></li>
|
500 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/setting-up-mail/', 'contact-form-7' ), __( 'Setting Up Mail', 'contact-form-7' ) ); ?></li>
|
501 |
-
</ul>
|
502 |
-
</div>
|
503 |
-
|
504 |
-
<div class="welcome-panel-column">
|
505 |
-
<h3><?php echo esc_html( __( 'Did You Know?', 'contact-form-7' ) ); ?></h3>
|
506 |
-
<ul>
|
507 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/spam-filtering-with-akismet/', 'contact-form-7' ), __( 'Spam Filtering with Akismet', 'contact-form-7' ) ); ?></li>
|
508 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/save-submitted-messages-with-flamingo/', 'contact-form-7' ), __( 'Save Messages with Flamingo', 'contact-form-7' ) ); ?></li>
|
509 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/selectable-recipient-with-pipes/', 'contact-form-7' ), __( 'Selectable Recipient with Pipes', 'contact-form-7' ) ); ?></li>
|
510 |
-
<li><?php echo wpcf7_link( __( 'http://contactform7.com/tracking-form-submissions-with-google-analytics/', 'contact-form-7' ), __( 'Tracking with Google Analytics', 'contact-form-7' ) ); ?></li>
|
511 |
-
</ul>
|
512 |
-
</div>
|
513 |
-
</div>
|
514 |
-
</div>
|
515 |
-
</div>
|
516 |
-
<?php
|
517 |
-
}
|
518 |
-
|
519 |
-
add_action( 'wp_ajax_wpcf7-update-welcome-panel', 'wpcf7_admin_ajax_welcome_panel' );
|
520 |
-
|
521 |
-
function wpcf7_admin_ajax_welcome_panel() {
|
522 |
-
check_ajax_referer( 'wpcf7-welcome-panel-nonce', 'welcomepanelnonce' );
|
523 |
-
|
524 |
-
$vers = get_user_meta( get_current_user_id(),
|
525 |
-
'wpcf7_hide_welcome_panel_on', true );
|
526 |
-
|
527 |
-
if ( empty( $vers ) || ! is_array( $vers ) ) {
|
528 |
-
$vers = array();
|
529 |
-
}
|
530 |
-
|
531 |
-
if ( empty( $_POST['visible'] ) ) {
|
532 |
-
$vers[] = WPCF7_VERSION;
|
533 |
-
}
|
534 |
-
|
535 |
-
$vers = array_unique( $vers );
|
536 |
-
|
537 |
-
update_user_meta( get_current_user_id(), 'wpcf7_hide_welcome_panel_on', $vers );
|
538 |
-
|
539 |
-
wp_die( 1 );
|
540 |
-
}
|
541 |
-
|
542 |
-
add_action( 'wpcf7_admin_notices', 'wpcf7_not_allowed_to_edit' );
|
543 |
|
544 |
function wpcf7_not_allowed_to_edit() {
|
545 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
@@ -556,11 +506,11 @@ function wpcf7_not_allowed_to_edit() {
|
|
556 |
'contact-form-7' );
|
557 |
|
558 |
echo sprintf(
|
559 |
-
'<div class="notice notice-warning
|
560 |
esc_html( $message ) );
|
561 |
}
|
562 |
|
563 |
-
add_action( '
|
564 |
|
565 |
function wpcf7_notice_config_errors() {
|
566 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
@@ -572,23 +522,29 @@ function wpcf7_notice_config_errors() {
|
|
572 |
return;
|
573 |
}
|
574 |
|
575 |
-
|
|
|
|
|
576 |
$message = sprintf(
|
577 |
_n(
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
number_format_i18n(
|
582 |
|
583 |
$link = wpcf7_link(
|
584 |
-
__( 'http://contactform7.com/configuration-
|
585 |
-
|
|
|
|
|
586 |
|
587 |
-
echo sprintf(
|
|
|
|
|
588 |
}
|
589 |
}
|
590 |
|
591 |
-
add_action( '
|
592 |
|
593 |
function wpcf7_notice_bulk_validate_config() {
|
594 |
if ( ! wpcf7_validate_configuration()
|
@@ -613,5 +569,6 @@ function wpcf7_notice_bulk_validate_config() {
|
|
613 |
|
614 |
$message = __( "Misconfiguration leads to mail delivery failure or other troubles. Validate your contact forms now.", 'contact-form-7' );
|
615 |
|
616 |
-
echo sprintf( '<div class="notice notice-warning
|
|
|
617 |
}
|
3 |
require_once WPCF7_PLUGIN_DIR . '/admin/includes/admin-functions.php';
|
4 |
require_once WPCF7_PLUGIN_DIR . '/admin/includes/help-tabs.php';
|
5 |
require_once WPCF7_PLUGIN_DIR . '/admin/includes/tag-generator.php';
|
6 |
+
require_once WPCF7_PLUGIN_DIR . '/admin/includes/welcome-panel.php';
|
7 |
|
8 |
add_action( 'admin_init', 'wpcf7_admin_init' );
|
9 |
|
171 |
'count_invalid' => 0 );
|
172 |
|
173 |
foreach ( $contact_forms as $contact_form ) {
|
174 |
+
$config_validator = new WPCF7_ConfigValidator( $contact_form );
|
175 |
+
$config_validator->validate();
|
176 |
|
177 |
+
if ( $config_validator->is_valid() ) {
|
|
|
|
|
178 |
$result['count_valid'] += 1;
|
179 |
+
} else {
|
180 |
+
$result['count_invalid'] += 1;
|
181 |
}
|
182 |
}
|
183 |
|
247 |
array( 'jquery', 'jquery-ui-tabs' ),
|
248 |
WPCF7_VERSION, true );
|
249 |
|
250 |
+
$args = array(
|
251 |
'pluginUrl' => wpcf7_plugin_url(),
|
252 |
+
'saveAlert' => __(
|
253 |
+
"The changes you made will be lost if you navigate away from this page.",
|
254 |
+
'contact-form-7' ),
|
255 |
+
'activeTab' => isset( $_GET['active-tab'] )
|
256 |
+
? (int) $_GET['active-tab'] : 0,
|
257 |
+
'howToCorrectLink' => __( "How to correct this?", 'contact-form-7' ),
|
258 |
+
'configErrors' => array() );
|
259 |
+
|
260 |
+
if ( ( $post = wpcf7_get_current_contact_form() )
|
261 |
+
&& current_user_can( 'wpcf7_edit_contact_form', $post->id() )
|
262 |
+
&& wpcf7_validate_configuration() ) {
|
263 |
+
$config_validator = new WPCF7_ConfigValidator( $post );
|
264 |
+
$error_messages = $config_validator->collect_error_messages();
|
265 |
+
|
266 |
+
foreach ( $error_messages as $section => $errors ) {
|
267 |
+
$args['configErrors'][$section] = array();
|
268 |
+
|
269 |
+
foreach ( $errors as $error ) {
|
270 |
+
$args['configErrors'][$section][] = array(
|
271 |
+
'message' => esc_html( $error['message'] ),
|
272 |
+
'link' => esc_url( $error['link'] ) );
|
273 |
+
}
|
274 |
+
}
|
275 |
+
}
|
276 |
+
|
277 |
+
wp_localize_script( 'wpcf7-admin', '_wpcf7', $args );
|
278 |
|
279 |
add_thickbox();
|
280 |
|
319 |
}
|
320 |
?></h1>
|
321 |
|
322 |
+
<?php do_action( 'wpcf7_admin_warnings' ); ?>
|
323 |
+
<?php wpcf7_welcome_panel(); ?>
|
324 |
<?php do_action( 'wpcf7_admin_notices' ); ?>
|
325 |
|
326 |
<form method="get" action="">
|
395 |
|
396 |
<h1><?php echo esc_html( __( 'Integration with Other Services', 'contact-form-7' ) ); ?></h1>
|
397 |
|
398 |
+
<?php do_action( 'wpcf7_admin_warnings' ); ?>
|
399 |
<?php do_action( 'wpcf7_admin_notices' ); ?>
|
400 |
|
401 |
<?php
|
473 |
return $links;
|
474 |
}
|
475 |
|
476 |
+
add_action( 'wpcf7_admin_warnings', 'wpcf7_old_wp_version_error' );
|
477 |
|
478 |
function wpcf7_old_wp_version_error() {
|
479 |
$wp_version = get_bloginfo( 'version' );
|
483 |
}
|
484 |
|
485 |
?>
|
486 |
+
<div class="notice notice-warning">
|
487 |
<p><?php echo sprintf( __( '<strong>Contact Form 7 %1$s requires WordPress %2$s or higher.</strong> Please <a href="%3$s">update WordPress</a> first.', 'contact-form-7' ), WPCF7_VERSION, WPCF7_REQUIRED_WP_VERSION, admin_url( 'update-core.php' ) ); ?></p>
|
488 |
</div>
|
489 |
<?php
|
490 |
}
|
491 |
|
492 |
+
add_action( 'wpcf7_admin_warnings', 'wpcf7_not_allowed_to_edit' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
493 |
|
494 |
function wpcf7_not_allowed_to_edit() {
|
495 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
506 |
'contact-form-7' );
|
507 |
|
508 |
echo sprintf(
|
509 |
+
'<div class="notice notice-warning"><p>%s</p></div>',
|
510 |
esc_html( $message ) );
|
511 |
}
|
512 |
|
513 |
+
add_action( 'wpcf7_admin_misc_pub_section', 'wpcf7_notice_config_errors' );
|
514 |
|
515 |
function wpcf7_notice_config_errors() {
|
516 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
522 |
return;
|
523 |
}
|
524 |
|
525 |
+
$config_validator = new WPCF7_ConfigValidator( $contact_form );
|
526 |
+
|
527 |
+
if ( $count_errors = $config_validator->count_errors() ) {
|
528 |
$message = sprintf(
|
529 |
_n(
|
530 |
+
'%s configuration error found',
|
531 |
+
'%s configuration errors found',
|
532 |
+
$count_errors, 'contact-form-7' ),
|
533 |
+
number_format_i18n( $count_errors ) );
|
534 |
|
535 |
$link = wpcf7_link(
|
536 |
+
__( 'http://contactform7.com/configuration-validator-faq/',
|
537 |
+
'contact-form-7' ),
|
538 |
+
__( "What's this?", 'contact-form-7' ),
|
539 |
+
array( 'class' => 'external' ) );
|
540 |
|
541 |
+
echo sprintf(
|
542 |
+
'<div class="misc-pub-section warning">%1$s<br />%2$s</div>',
|
543 |
+
$message, $link );
|
544 |
}
|
545 |
}
|
546 |
|
547 |
+
add_action( 'wpcf7_admin_warnings', 'wpcf7_notice_bulk_validate_config', 5 );
|
548 |
|
549 |
function wpcf7_notice_bulk_validate_config() {
|
550 |
if ( ! wpcf7_validate_configuration()
|
569 |
|
570 |
$message = __( "Misconfiguration leads to mail delivery failure or other troubles. Validate your contact forms now.", 'contact-form-7' );
|
571 |
|
572 |
+
echo sprintf( '<div class="notice notice-warning"><p>%s » %s</p></div>',
|
573 |
+
esc_html( $message ), $link );
|
574 |
}
|
admin/css/styles.css
CHANGED
@@ -56,12 +56,51 @@ span.shortcode > input {
|
|
56 |
color: #23282d;
|
57 |
}
|
58 |
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
color: #d00;
|
61 |
font-style: normal;
|
62 |
font-size: 13px;
|
63 |
}
|
64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
/*
|
66 |
* Tabs
|
67 |
*/
|
56 |
color: #23282d;
|
57 |
}
|
58 |
|
59 |
+
#misc-publishing-actions .misc-pub-section::before {
|
60 |
+
content: "\f488";
|
61 |
+
-moz-osx-font-smoothing: grayscale;
|
62 |
+
display: inline-block;
|
63 |
+
font: 20px/1 dashicons;
|
64 |
+
left: -1px;
|
65 |
+
padding: 0 2px 0 0;
|
66 |
+
position: relative;
|
67 |
+
text-decoration: none !important;
|
68 |
+
top: 0;
|
69 |
+
vertical-align: top;
|
70 |
+
color: #82878c;
|
71 |
+
}
|
72 |
+
|
73 |
+
#misc-publishing-actions .misc-pub-section.warning::before {
|
74 |
+
content: "\f534";
|
75 |
+
}
|
76 |
+
|
77 |
+
#misc-publishing-actions .misc-pub-section.warning a.external {
|
78 |
+
font-style: italic;
|
79 |
+
}
|
80 |
+
|
81 |
+
div.config-error, span.config-error, ul.config-error {
|
82 |
color: #d00;
|
83 |
font-style: normal;
|
84 |
font-size: 13px;
|
85 |
}
|
86 |
|
87 |
+
ul.config-error {
|
88 |
+
margin: 0;
|
89 |
+
}
|
90 |
+
|
91 |
+
ul.config-error li {
|
92 |
+
padding: 0 4px;
|
93 |
+
margin: 0;
|
94 |
+
}
|
95 |
+
|
96 |
+
ul.config-error li a.external {
|
97 |
+
font-style: italic;
|
98 |
+
}
|
99 |
+
|
100 |
+
[data-config-field][aria-invalid="true"] {
|
101 |
+
border-color: #d00;
|
102 |
+
}
|
103 |
+
|
104 |
/*
|
105 |
* Tabs
|
106 |
*/
|
admin/edit-contact-form.php
CHANGED
@@ -43,6 +43,7 @@ function wpcf7_admin_save_button( $post_id ) {
|
|
43 |
}
|
44 |
?></h1>
|
45 |
|
|
|
46 |
<?php do_action( 'wpcf7_admin_notices' ); ?>
|
47 |
|
48 |
<?php
|
@@ -132,6 +133,10 @@ if ( $post ) :
|
|
132 |
<?php endif; ?>
|
133 |
</div><!-- #minor-publishing-actions -->
|
134 |
|
|
|
|
|
|
|
|
|
135 |
<div id="major-publishing-actions">
|
136 |
|
137 |
<?php
|
43 |
}
|
44 |
?></h1>
|
45 |
|
46 |
+
<?php do_action( 'wpcf7_admin_warnings' ); ?>
|
47 |
<?php do_action( 'wpcf7_admin_notices' ); ?>
|
48 |
|
49 |
<?php
|
133 |
<?php endif; ?>
|
134 |
</div><!-- #minor-publishing-actions -->
|
135 |
|
136 |
+
<div id="misc-publishing-actions">
|
137 |
+
<?php do_action( 'wpcf7_admin_misc_pub_section', $post_id ); ?>
|
138 |
+
</div><!-- #misc-publishing-actions -->
|
139 |
+
|
140 |
<div id="major-publishing-actions">
|
141 |
|
142 |
<?php
|
admin/includes/admin-functions.php
CHANGED
@@ -158,7 +158,8 @@ function wpcf7_save_contact_form( $post_id = -1 ) {
|
|
158 |
$post_id = $contact_form->save();
|
159 |
|
160 |
if ( wpcf7_validate_configuration() ) {
|
161 |
-
$contact_form
|
|
|
162 |
}
|
163 |
|
164 |
return $post_id;
|
158 |
$post_id = $contact_form->save();
|
159 |
|
160 |
if ( wpcf7_validate_configuration() ) {
|
161 |
+
$config_validator = new WPCF7_ConfigValidator( $contact_form );
|
162 |
+
$config_validator->validate();
|
163 |
}
|
164 |
|
165 |
return $post_id;
|
admin/includes/class-contact-forms-list-table.php
CHANGED
@@ -110,17 +110,20 @@ class WPCF7_Contact_Form_List_Table extends WP_List_Table {
|
|
110 |
$output = sprintf( '<strong>%s</strong>', $output );
|
111 |
|
112 |
if ( wpcf7_validate_configuration()
|
113 |
-
&& current_user_can( 'wpcf7_edit_contact_form', $item->id() )
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
$
|
|
|
|
|
|
|
124 |
}
|
125 |
|
126 |
$actions = array(
|
110 |
$output = sprintf( '<strong>%s</strong>', $output );
|
111 |
|
112 |
if ( wpcf7_validate_configuration()
|
113 |
+
&& current_user_can( 'wpcf7_edit_contact_form', $item->id() ) ) {
|
114 |
+
$config_validator = new WPCF7_ConfigValidator( $item );
|
115 |
+
|
116 |
+
if ( $count_errors = $config_validator->count_errors() ) {
|
117 |
+
$error_notice = sprintf(
|
118 |
+
_n(
|
119 |
+
'%s configuration error found',
|
120 |
+
'%s configuration errors found',
|
121 |
+
$count_errors, 'contact-form-7' ),
|
122 |
+
number_format_i18n( $count_errors ) );
|
123 |
+
$output .= sprintf(
|
124 |
+
'<div class="config-error">%s</div>',
|
125 |
+
$error_notice );
|
126 |
+
}
|
127 |
}
|
128 |
|
129 |
$actions = array(
|
admin/includes/editor.php
CHANGED
@@ -49,7 +49,7 @@ function wpcf7_editor_panel_form( $post ) {
|
|
49 |
$tag_generator->print_buttons();
|
50 |
?>
|
51 |
|
52 |
-
<textarea id="wpcf7-form" name="wpcf7-form" cols="100" rows="24" class="large-text code"><?php echo esc_textarea( $post->prop( 'form' ) ); ?></textarea>
|
53 |
<?php
|
54 |
}
|
55 |
|
@@ -79,8 +79,6 @@ function wpcf7_editor_box_mail( $post, $args = '' ) {
|
|
79 |
'subject' => '', 'body' => '', 'additional_headers' => '',
|
80 |
'attachments' => '', 'use_html' => false, 'exclude_blank' => false ) );
|
81 |
|
82 |
-
$do_validate = wpcf7_validate_configuration();
|
83 |
-
|
84 |
?>
|
85 |
<div class="contact-form-editor-box-mail" id="<?php echo $id; ?>">
|
86 |
<h2><?php echo esc_html( $args['title'] ); ?></h2>
|
@@ -104,12 +102,7 @@ function wpcf7_editor_box_mail( $post, $args = '' ) {
|
|
104 |
<label for="<?php echo $id; ?>-recipient"><?php echo esc_html( __( 'To', 'contact-form-7' ) ); ?></label>
|
105 |
</th>
|
106 |
<td>
|
107 |
-
<?php $
|
108 |
-
sprintf( '%s.recipient', $args['name'] ) ); ?>
|
109 |
-
<input type="text" id="<?php echo $id; ?>-recipient" name="<?php echo $id; ?>-recipient" class="large-text code" size="70" value="<?php echo esc_attr( $mail['recipient'] ); ?>"<?php if ( $do_validate && $config_error ) { echo ' aria-invalid="true"'; } ?> />
|
110 |
-
<?php if ( $do_validate && $config_error ) {
|
111 |
-
echo sprintf( '<br /><span role="alert" class="config-error">%s</span>', $config_error );
|
112 |
-
} ?>
|
113 |
</td>
|
114 |
</tr>
|
115 |
|
@@ -118,12 +111,7 @@ function wpcf7_editor_box_mail( $post, $args = '' ) {
|
|
118 |
<label for="<?php echo $id; ?>-sender"><?php echo esc_html( __( 'From', 'contact-form-7' ) ); ?></label>
|
119 |
</th>
|
120 |
<td>
|
121 |
-
<?php $
|
122 |
-
sprintf( '%s.sender', $args['name'] ) ); ?>
|
123 |
-
<input type="text" id="<?php echo $id; ?>-sender" name="<?php echo $id; ?>-sender" class="large-text code" size="70" value="<?php echo esc_attr( $mail['sender'] ); ?>"<?php if ( $do_validate && $config_error ) { echo ' aria-invalid="true"'; } ?> />
|
124 |
-
<?php if ( $do_validate && $config_error ) {
|
125 |
-
echo sprintf( '<br /><span role="alert" class="config-error">%s</span>', $config_error );
|
126 |
-
} ?>
|
127 |
</td>
|
128 |
</tr>
|
129 |
|
@@ -132,12 +120,7 @@ function wpcf7_editor_box_mail( $post, $args = '' ) {
|
|
132 |
<label for="<?php echo $id; ?>-subject"><?php echo esc_html( __( 'Subject', 'contact-form-7' ) ); ?></label>
|
133 |
</th>
|
134 |
<td>
|
135 |
-
<?php $
|
136 |
-
sprintf( '%s.subject', $args['name'] ) ); ?>
|
137 |
-
<input type="text" id="<?php echo $id; ?>-subject" name="<?php echo $id; ?>-subject" class="large-text code" size="70" value="<?php echo esc_attr( $mail['subject'] ); ?>"<?php if ( $do_validate && $config_error ) { echo ' aria-invalid="true"'; } ?> />
|
138 |
-
<?php if ( $do_validate && $config_error ) {
|
139 |
-
echo sprintf( '<br /><span role="alert" class="config-error">%s</span>', $config_error );
|
140 |
-
} ?>
|
141 |
</td>
|
142 |
</tr>
|
143 |
|
@@ -146,12 +129,7 @@ function wpcf7_editor_box_mail( $post, $args = '' ) {
|
|
146 |
<label for="<?php echo $id; ?>-additional-headers"><?php echo esc_html( __( 'Additional Headers', 'contact-form-7' ) ); ?></label>
|
147 |
</th>
|
148 |
<td>
|
149 |
-
<?php $
|
150 |
-
sprintf( '%s.additional_headers', $args['name'] ) ); ?>
|
151 |
-
<textarea id="<?php echo $id; ?>-additional-headers" name="<?php echo $id; ?>-additional-headers" cols="100" rows="4" class="large-text code"<?php if ( $do_validate && $config_error ) { echo ' aria-invalid="true"'; } ?>><?php echo esc_textarea( $mail['additional_headers'] ); ?></textarea>
|
152 |
-
<?php if ( $do_validate && $config_error ) {
|
153 |
-
echo sprintf( '<br /><span role="alert" class="config-error">%s</span>', $config_error );
|
154 |
-
} ?>
|
155 |
</td>
|
156 |
</tr>
|
157 |
|
@@ -160,12 +138,7 @@ function wpcf7_editor_box_mail( $post, $args = '' ) {
|
|
160 |
<label for="<?php echo $id; ?>-body"><?php echo esc_html( __( 'Message Body', 'contact-form-7' ) ); ?></label>
|
161 |
</th>
|
162 |
<td>
|
163 |
-
<?php $
|
164 |
-
sprintf( '%s.body', $args['name'] ) ); ?>
|
165 |
-
<textarea id="<?php echo $id; ?>-body" name="<?php echo $id; ?>-body" cols="100" rows="18" class="large-text code"<?php if ( $do_validate && $config_error ) { echo ' aria-invalid="true"'; } ?>><?php echo esc_textarea( $mail['body'] ); ?></textarea>
|
166 |
-
<?php if ( $do_validate && $config_error ) {
|
167 |
-
echo sprintf( '<br /><span role="alert" class="config-error">%s</span>', $config_error );
|
168 |
-
} ?>
|
169 |
|
170 |
<p><label for="<?php echo $id; ?>-exclude-blank"><input type="checkbox" id="<?php echo $id; ?>-exclude-blank" name="<?php echo $id; ?>-exclude-blank" value="1"<?php echo ( ! empty( $mail['exclude_blank'] ) ) ? ' checked="checked"' : ''; ?> /> <?php echo esc_html( __( 'Exclude lines with blank mail-tags from output', 'contact-form-7' ) ); ?></label></p>
|
171 |
|
@@ -178,7 +151,7 @@ function wpcf7_editor_box_mail( $post, $args = '' ) {
|
|
178 |
<label for="<?php echo $id; ?>-attachments"><?php echo esc_html( __( 'File Attachments', 'contact-form-7' ) ); ?></label>
|
179 |
</th>
|
180 |
<td>
|
181 |
-
<textarea id="<?php echo $id; ?>-attachments" name="<?php echo $id; ?>-attachments" cols="100" rows="4" class="large-text code"><?php echo esc_textarea( $mail['attachments'] ); ?></textarea>
|
182 |
</td>
|
183 |
</tr>
|
184 |
</tbody>
|
@@ -196,8 +169,6 @@ function wpcf7_editor_panel_messages( $post ) {
|
|
196 |
unset( $messages['captcha_not_match'] );
|
197 |
}
|
198 |
|
199 |
-
$do_validate = wpcf7_validate_configuration();
|
200 |
-
|
201 |
?>
|
202 |
<h2><?php echo esc_html( __( 'Messages', 'contact-form-7' ) ); ?></h2>
|
203 |
<fieldset>
|
@@ -207,18 +178,10 @@ function wpcf7_editor_panel_messages( $post ) {
|
|
207 |
foreach ( $messages as $key => $arr ) {
|
208 |
$field_name = 'wpcf7-message-' . strtr( $key, '_', '-' );
|
209 |
|
210 |
-
$config_error = $do_validate
|
211 |
-
? $post->config_error( sprintf( 'messages.%s', $key ) ) : '';
|
212 |
-
|
213 |
?>
|
214 |
<p class="description">
|
215 |
<label for="<?php echo $field_name; ?>"><?php echo esc_html( $arr['description'] ); ?><br />
|
216 |
-
<input type="text" id="<?php echo $field_name; ?>" name="<?php echo $field_name; ?>" class="large-text" size="70" value="<?php echo esc_attr( $post->message( $key, false ) ); ?>"<?php echo
|
217 |
-
<?php
|
218 |
-
if ( $config_error ) {
|
219 |
-
echo sprintf( '<br /><span role="alert" class="config-error">%s</span>', $config_error );
|
220 |
-
}
|
221 |
-
?>
|
222 |
</label>
|
223 |
</p>
|
224 |
<?php
|
@@ -239,7 +202,7 @@ function wpcf7_editor_panel_additional_settings( $post ) {
|
|
239 |
<h2><?php echo esc_html( __( 'Additional Settings', 'contact-form-7' ) ); ?></h2>
|
240 |
<fieldset>
|
241 |
<legend><?php echo $description; ?></legend>
|
242 |
-
<textarea id="wpcf7-additional-settings" name="wpcf7-additional-settings" cols="100" rows="8" class="large-text"><?php echo esc_textarea( $post->prop( 'additional_settings' ) ); ?></textarea>
|
243 |
</fieldset>
|
244 |
<?php
|
245 |
}
|
49 |
$tag_generator->print_buttons();
|
50 |
?>
|
51 |
|
52 |
+
<textarea id="wpcf7-form" name="wpcf7-form" cols="100" rows="24" class="large-text code" data-config-field="form.body"><?php echo esc_textarea( $post->prop( 'form' ) ); ?></textarea>
|
53 |
<?php
|
54 |
}
|
55 |
|
79 |
'subject' => '', 'body' => '', 'additional_headers' => '',
|
80 |
'attachments' => '', 'use_html' => false, 'exclude_blank' => false ) );
|
81 |
|
|
|
|
|
82 |
?>
|
83 |
<div class="contact-form-editor-box-mail" id="<?php echo $id; ?>">
|
84 |
<h2><?php echo esc_html( $args['title'] ); ?></h2>
|
102 |
<label for="<?php echo $id; ?>-recipient"><?php echo esc_html( __( 'To', 'contact-form-7' ) ); ?></label>
|
103 |
</th>
|
104 |
<td>
|
105 |
+
<input type="text" id="<?php echo $id; ?>-recipient" name="<?php echo $id; ?>-recipient" class="large-text code" size="70" value="<?php echo esc_attr( $mail['recipient'] ); ?>" data-config-field="<?php echo sprintf( '%s.recipient', esc_attr( $args['name'] ) ); ?>" />
|
|
|
|
|
|
|
|
|
|
|
106 |
</td>
|
107 |
</tr>
|
108 |
|
111 |
<label for="<?php echo $id; ?>-sender"><?php echo esc_html( __( 'From', 'contact-form-7' ) ); ?></label>
|
112 |
</th>
|
113 |
<td>
|
114 |
+
<input type="text" id="<?php echo $id; ?>-sender" name="<?php echo $id; ?>-sender" class="large-text code" size="70" value="<?php echo esc_attr( $mail['sender'] ); ?>" data-config-field="<?php echo sprintf( '%s.sender', esc_attr( $args['name'] ) ); ?>" />
|
|
|
|
|
|
|
|
|
|
|
115 |
</td>
|
116 |
</tr>
|
117 |
|
120 |
<label for="<?php echo $id; ?>-subject"><?php echo esc_html( __( 'Subject', 'contact-form-7' ) ); ?></label>
|
121 |
</th>
|
122 |
<td>
|
123 |
+
<input type="text" id="<?php echo $id; ?>-subject" name="<?php echo $id; ?>-subject" class="large-text code" size="70" value="<?php echo esc_attr( $mail['subject'] ); ?>" data-config-field="<?php echo sprintf( '%s.subject', esc_attr( $args['name'] ) ); ?>" />
|
|
|
|
|
|
|
|
|
|
|
124 |
</td>
|
125 |
</tr>
|
126 |
|
129 |
<label for="<?php echo $id; ?>-additional-headers"><?php echo esc_html( __( 'Additional Headers', 'contact-form-7' ) ); ?></label>
|
130 |
</th>
|
131 |
<td>
|
132 |
+
<textarea id="<?php echo $id; ?>-additional-headers" name="<?php echo $id; ?>-additional-headers" cols="100" rows="4" class="large-text code" data-config-field="<?php echo sprintf( '%s.additional_headers', esc_attr( $args['name'] ) ); ?>"><?php echo esc_textarea( $mail['additional_headers'] ); ?></textarea>
|
|
|
|
|
|
|
|
|
|
|
133 |
</td>
|
134 |
</tr>
|
135 |
|
138 |
<label for="<?php echo $id; ?>-body"><?php echo esc_html( __( 'Message Body', 'contact-form-7' ) ); ?></label>
|
139 |
</th>
|
140 |
<td>
|
141 |
+
<textarea id="<?php echo $id; ?>-body" name="<?php echo $id; ?>-body" cols="100" rows="18" class="large-text code" data-config-field="<?php echo sprintf( '%s.body', esc_attr( $args['name'] ) ); ?>"><?php echo esc_textarea( $mail['body'] ); ?></textarea>
|
|
|
|
|
|
|
|
|
|
|
142 |
|
143 |
<p><label for="<?php echo $id; ?>-exclude-blank"><input type="checkbox" id="<?php echo $id; ?>-exclude-blank" name="<?php echo $id; ?>-exclude-blank" value="1"<?php echo ( ! empty( $mail['exclude_blank'] ) ) ? ' checked="checked"' : ''; ?> /> <?php echo esc_html( __( 'Exclude lines with blank mail-tags from output', 'contact-form-7' ) ); ?></label></p>
|
144 |
|
151 |
<label for="<?php echo $id; ?>-attachments"><?php echo esc_html( __( 'File Attachments', 'contact-form-7' ) ); ?></label>
|
152 |
</th>
|
153 |
<td>
|
154 |
+
<textarea id="<?php echo $id; ?>-attachments" name="<?php echo $id; ?>-attachments" cols="100" rows="4" class="large-text code" data-config-field="<?php echo sprintf( '%s.attachments', esc_attr( $args['name'] ) ); ?>"><?php echo esc_textarea( $mail['attachments'] ); ?></textarea>
|
155 |
</td>
|
156 |
</tr>
|
157 |
</tbody>
|
169 |
unset( $messages['captcha_not_match'] );
|
170 |
}
|
171 |
|
|
|
|
|
172 |
?>
|
173 |
<h2><?php echo esc_html( __( 'Messages', 'contact-form-7' ) ); ?></h2>
|
174 |
<fieldset>
|
178 |
foreach ( $messages as $key => $arr ) {
|
179 |
$field_name = 'wpcf7-message-' . strtr( $key, '_', '-' );
|
180 |
|
|
|
|
|
|
|
181 |
?>
|
182 |
<p class="description">
|
183 |
<label for="<?php echo $field_name; ?>"><?php echo esc_html( $arr['description'] ); ?><br />
|
184 |
+
<input type="text" id="<?php echo $field_name; ?>" name="<?php echo $field_name; ?>" class="large-text" size="70" value="<?php echo esc_attr( $post->message( $key, false ) ); ?>" data-config-field="<?php echo sprintf( 'messages.%s', esc_attr( $key ) ); ?>" />
|
|
|
|
|
|
|
|
|
|
|
185 |
</label>
|
186 |
</p>
|
187 |
<?php
|
202 |
<h2><?php echo esc_html( __( 'Additional Settings', 'contact-form-7' ) ); ?></h2>
|
203 |
<fieldset>
|
204 |
<legend><?php echo $description; ?></legend>
|
205 |
+
<textarea id="wpcf7-additional-settings" name="wpcf7-additional-settings" cols="100" rows="8" class="large-text" data-config-field="additional_settings.body"><?php echo esc_textarea( $post->prop( 'additional_settings' ) ); ?></textarea>
|
206 |
</fieldset>
|
207 |
<?php
|
208 |
}
|
admin/includes/welcome-panel.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
function wpcf7_welcome_panel() {
|
4 |
+
$classes = 'welcome-panel';
|
5 |
+
|
6 |
+
$vers = (array) get_user_meta( get_current_user_id(),
|
7 |
+
'wpcf7_hide_welcome_panel_on', true );
|
8 |
+
|
9 |
+
if ( wpcf7_version_grep( wpcf7_version( 'only_major=1' ), $vers ) ) {
|
10 |
+
$classes .= ' hidden';
|
11 |
+
}
|
12 |
+
|
13 |
+
?>
|
14 |
+
<div id="welcome-panel" class="<?php echo esc_attr( $classes ); ?>">
|
15 |
+
<?php wp_nonce_field( 'wpcf7-welcome-panel-nonce', 'welcomepanelnonce', false ); ?>
|
16 |
+
<a class="welcome-panel-close" href="<?php echo esc_url( menu_page_url( 'wpcf7', false ) ); ?>"><?php echo esc_html( __( 'Dismiss', 'contact-form-7' ) ); ?></a>
|
17 |
+
|
18 |
+
<div class="welcome-panel-content">
|
19 |
+
<div class="welcome-panel-column-container">
|
20 |
+
<div class="welcome-panel-column">
|
21 |
+
<h3><?php echo esc_html( __( 'Contact Form 7 Needs Your Support', 'contact-form-7' ) ); ?></h3>
|
22 |
+
<p class="message"><?php echo esc_html( __( "It is hard to continue development and support for this plugin without contributions from users like you. If you enjoy using Contact Form 7 and find it useful, please consider making a donation.", 'contact-form-7' ) ); ?></p>
|
23 |
+
<p><?php echo wpcf7_link( __( 'http://contactform7.com/donate/', 'contact-form-7' ), __( 'Donate', 'contact-form-7' ), array( 'class' => 'button button-primary' ) ); ?></p>
|
24 |
+
</div>
|
25 |
+
|
26 |
+
<div class="welcome-panel-column">
|
27 |
+
<h3><?php echo esc_html( __( 'Get Started', 'contact-form-7' ) ); ?></h3>
|
28 |
+
<ul>
|
29 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/getting-started-with-contact-form-7/', 'contact-form-7' ), __( 'Getting Started with Contact Form 7', 'contact-form-7' ) ); ?></li>
|
30 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/admin-screen/', 'contact-form-7' ), __( 'Admin Screen', 'contact-form-7' ) ); ?></li>
|
31 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/tag-syntax/', 'contact-form-7' ), __( 'How Tags Work', 'contact-form-7' ) ); ?></li>
|
32 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/setting-up-mail/', 'contact-form-7' ), __( 'Setting Up Mail', 'contact-form-7' ) ); ?></li>
|
33 |
+
</ul>
|
34 |
+
</div>
|
35 |
+
|
36 |
+
<div class="welcome-panel-column">
|
37 |
+
<h3><?php echo esc_html( __( 'Did You Know?', 'contact-form-7' ) ); ?></h3>
|
38 |
+
<ul>
|
39 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/spam-filtering-with-akismet/', 'contact-form-7' ), __( 'Spam Filtering with Akismet', 'contact-form-7' ) ); ?></li>
|
40 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/save-submitted-messages-with-flamingo/', 'contact-form-7' ), __( 'Save Messages with Flamingo', 'contact-form-7' ) ); ?></li>
|
41 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/selectable-recipient-with-pipes/', 'contact-form-7' ), __( 'Selectable Recipient with Pipes', 'contact-form-7' ) ); ?></li>
|
42 |
+
<li><?php echo wpcf7_link( __( 'http://contactform7.com/tracking-form-submissions-with-google-analytics/', 'contact-form-7' ), __( 'Tracking with Google Analytics', 'contact-form-7' ) ); ?></li>
|
43 |
+
</ul>
|
44 |
+
</div>
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
</div>
|
48 |
+
<?php
|
49 |
+
}
|
50 |
+
|
51 |
+
add_action( 'wp_ajax_wpcf7-update-welcome-panel', 'wpcf7_admin_ajax_welcome_panel' );
|
52 |
+
|
53 |
+
function wpcf7_admin_ajax_welcome_panel() {
|
54 |
+
check_ajax_referer( 'wpcf7-welcome-panel-nonce', 'welcomepanelnonce' );
|
55 |
+
|
56 |
+
$vers = get_user_meta( get_current_user_id(),
|
57 |
+
'wpcf7_hide_welcome_panel_on', true );
|
58 |
+
|
59 |
+
if ( empty( $vers ) || ! is_array( $vers ) ) {
|
60 |
+
$vers = array();
|
61 |
+
}
|
62 |
+
|
63 |
+
if ( empty( $_POST['visible'] ) ) {
|
64 |
+
$vers[] = WPCF7_VERSION;
|
65 |
+
}
|
66 |
+
|
67 |
+
$vers = array_unique( $vers );
|
68 |
+
|
69 |
+
update_user_meta( get_current_user_id(), 'wpcf7_hide_welcome_panel_on', $vers );
|
70 |
+
|
71 |
+
wp_die( 1 );
|
72 |
+
}
|
admin/js/scripts.js
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
(function($) {
|
2 |
|
|
|
|
|
3 |
if (typeof _wpcf7 == 'undefined' || _wpcf7 === null) {
|
4 |
_wpcf7 = {};
|
5 |
}
|
@@ -53,6 +55,34 @@
|
|
53 |
window.getSelection().addRange(range);
|
54 |
});
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
$(window).on('beforeunload', function(event) {
|
57 |
var changed = false;
|
58 |
|
@@ -61,6 +91,12 @@
|
|
61 |
if (this.defaultChecked != $(this).is(':checked')) {
|
62 |
changed = true;
|
63 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
} else {
|
65 |
if (this.defaultValue != $(this).val()) {
|
66 |
changed = true;
|
1 |
(function($) {
|
2 |
|
3 |
+
'use strict';
|
4 |
+
|
5 |
if (typeof _wpcf7 == 'undefined' || _wpcf7 === null) {
|
6 |
_wpcf7 = {};
|
7 |
}
|
55 |
window.getSelection().addRange(range);
|
56 |
});
|
57 |
|
58 |
+
$('[data-config-field]').each(function() {
|
59 |
+
var section = $(this).attr('data-config-field');
|
60 |
+
|
61 |
+
if (_wpcf7.configErrors[section]) {
|
62 |
+
var $list = $('<ul></ul>').attr({
|
63 |
+
'role': 'alert',
|
64 |
+
'class': 'config-error'
|
65 |
+
});
|
66 |
+
|
67 |
+
$.each(_wpcf7.configErrors[section], function(i, val) {
|
68 |
+
var $li = $('<li></li>').text(val.message);
|
69 |
+
|
70 |
+
if (val.link) {
|
71 |
+
var $link = $('<a></a>').attr({
|
72 |
+
'href': val.link,
|
73 |
+
'class': 'external'
|
74 |
+
}).text(_wpcf7.howToCorrectLink);
|
75 |
+
|
76 |
+
$li = $li.append(' ').append($link);
|
77 |
+
}
|
78 |
+
|
79 |
+
$li.appendTo($list);
|
80 |
+
});
|
81 |
+
|
82 |
+
$(this).after($list).attr({'aria-invalid': 'true'});
|
83 |
+
}
|
84 |
+
});
|
85 |
+
|
86 |
$(window).on('beforeunload', function(event) {
|
87 |
var changed = false;
|
88 |
|
91 |
if (this.defaultChecked != $(this).is(':checked')) {
|
92 |
changed = true;
|
93 |
}
|
94 |
+
} else if ($(this).is('select')) {
|
95 |
+
$(this).find('option').each(function() {
|
96 |
+
if (this.defaultSelected != $(this).is(':selected')) {
|
97 |
+
changed = true;
|
98 |
+
}
|
99 |
+
});
|
100 |
} else {
|
101 |
if (this.defaultValue != $(this).val()) {
|
102 |
changed = true;
|
admin/js/tag-generator.js
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
(function($) {
|
2 |
|
|
|
|
|
3 |
if (typeof _wpcf7 == 'undefined' || _wpcf7 === null) {
|
4 |
_wpcf7 = {};
|
5 |
}
|
@@ -59,7 +61,7 @@
|
|
59 |
tag_type += '*';
|
60 |
}
|
61 |
|
62 |
-
components = _wpcf7.taggen.compose(tag_type, $form);
|
63 |
$(this).val(components);
|
64 |
});
|
65 |
|
1 |
(function($) {
|
2 |
|
3 |
+
'use strict';
|
4 |
+
|
5 |
if (typeof _wpcf7 == 'undefined' || _wpcf7 === null) {
|
6 |
_wpcf7 = {};
|
7 |
}
|
61 |
tag_type += '*';
|
62 |
}
|
63 |
|
64 |
+
var components = _wpcf7.taggen.compose(tag_type, $form);
|
65 |
$(this).val(components);
|
66 |
});
|
67 |
|
includes/config-validator.php
CHANGED
@@ -2,40 +2,111 @@
|
|
2 |
|
3 |
class WPCF7_ConfigValidator {
|
4 |
|
|
|
5 |
const error_maybe_empty = 101;
|
6 |
const error_invalid_syntax = 102;
|
7 |
const error_email_not_in_site_domain = 103;
|
8 |
const error_html_in_message = 104;
|
|
|
9 |
|
10 |
private $contact_form;
|
11 |
private $errors = array();
|
12 |
|
13 |
public function __construct( WPCF7_ContactForm $contact_form ) {
|
14 |
$this->contact_form = $contact_form;
|
15 |
-
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
}
|
19 |
|
20 |
public function is_valid() {
|
21 |
-
return ! $this->
|
22 |
}
|
23 |
|
24 |
-
public function
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
}
|
27 |
|
28 |
-
public function
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
32 |
|
33 |
-
return
|
34 |
}
|
35 |
|
36 |
-
public function
|
37 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
|
|
39 |
switch ( $code ) {
|
40 |
case self::error_maybe_empty:
|
41 |
return __( "This field can be empty depending on user input.", 'contact-form-7' );
|
@@ -45,31 +116,93 @@ class WPCF7_ConfigValidator {
|
|
45 |
return __( "This email address does not belong to the same domain as the site.", 'contact-form-7' );
|
46 |
case self::error_html_in_message:
|
47 |
return __( "HTML tags are not allowed in a message.", 'contact-form-7' );
|
|
|
|
|
48 |
default:
|
49 |
return '';
|
50 |
}
|
51 |
}
|
52 |
|
53 |
-
|
54 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
}
|
56 |
|
57 |
public function validate() {
|
58 |
$this->errors = array();
|
59 |
|
|
|
60 |
$this->validate_mail( 'mail' );
|
61 |
$this->validate_mail( 'mail_2' );
|
62 |
$this->validate_messages();
|
63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
delete_post_meta( $this->contact_form->id(), '_config_errors' );
|
65 |
|
66 |
if ( $this->errors ) {
|
67 |
update_post_meta( $this->contact_form->id(), '_config_errors',
|
68 |
$this->errors );
|
69 |
-
return false;
|
70 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
}
|
74 |
|
75 |
public function validate_mail( $template = 'mail' ) {
|
@@ -100,7 +233,8 @@ class WPCF7_ConfigValidator {
|
|
100 |
|
101 |
if ( '' === $subject ) {
|
102 |
$this->add_error( sprintf( '%s.subject', $template ),
|
103 |
-
self::error_maybe_empty
|
|
|
104 |
}
|
105 |
|
106 |
$sender = $components['sender'];
|
@@ -111,10 +245,12 @@ class WPCF7_ConfigValidator {
|
|
111 |
|
112 |
if ( ! wpcf7_is_mailbox_list( $sender ) ) {
|
113 |
$this->add_error( sprintf( '%s.sender', $template ),
|
114 |
-
self::error_invalid_syntax
|
|
|
115 |
} elseif ( ! wpcf7_is_email_in_site_domain( $sender ) ) {
|
116 |
$this->add_error( sprintf( '%s.sender', $template ),
|
117 |
-
self::error_email_not_in_site_domain
|
|
|
118 |
}
|
119 |
|
120 |
$recipient = $components['recipient'];
|
@@ -125,34 +261,18 @@ class WPCF7_ConfigValidator {
|
|
125 |
|
126 |
if ( ! wpcf7_is_mailbox_list( $recipient ) ) {
|
127 |
$this->add_error( sprintf( '%s.recipient', $template ),
|
128 |
-
self::error_invalid_syntax
|
|
|
129 |
}
|
130 |
|
131 |
$additional_headers = $components['additional_headers'];
|
132 |
$additional_headers = new WPCF7_MailTaggedText( $additional_headers,
|
133 |
array( 'callback' => $callback ) );
|
134 |
$additional_headers = $additional_headers->replace_tags();
|
|
|
|
|
135 |
|
136 |
-
|
137 |
-
$this->add_error( sprintf( '%s.additional_headers', $template ),
|
138 |
-
self::error_invalid_syntax );
|
139 |
-
}
|
140 |
-
|
141 |
-
$body = $components['body'];
|
142 |
-
$body = new WPCF7_MailTaggedText( $body,
|
143 |
-
array( 'callback' => $callback ) );
|
144 |
-
$body = $body->replace_tags();
|
145 |
-
|
146 |
-
if ( '' === $body ) {
|
147 |
-
$this->add_error( sprintf( '%s.body', $template ),
|
148 |
-
self::error_maybe_empty );
|
149 |
-
}
|
150 |
-
}
|
151 |
-
|
152 |
-
public function test_additional_headers_syntax( $content ) {
|
153 |
-
$headers = explode( "\n", $content );
|
154 |
-
|
155 |
-
foreach ( $headers as $header ) {
|
156 |
$header = trim( $header );
|
157 |
|
158 |
if ( '' === $header ) {
|
@@ -160,19 +280,30 @@ class WPCF7_ConfigValidator {
|
|
160 |
}
|
161 |
|
162 |
if ( ! preg_match( '/^([0-9A-Za-z-]+):(.+)$/', $header, $matches ) ) {
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
array( 'reply-to', 'cc', 'bcc' ) );
|
168 |
-
|
169 |
-
if ( $is_mailbox_list_field
|
170 |
&& ! wpcf7_is_mailbox_list( $matches[2] ) ) {
|
171 |
-
|
|
|
|
|
|
|
|
|
|
|
172 |
}
|
173 |
}
|
174 |
|
175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
}
|
177 |
|
178 |
public function validate_messages() {
|
@@ -192,7 +323,8 @@ class WPCF7_ConfigValidator {
|
|
192 |
|
193 |
if ( $stripped != $message ) {
|
194 |
$this->add_error( sprintf( 'messages.%s', $key ),
|
195 |
-
self::error_html_in_message
|
|
|
196 |
}
|
197 |
}
|
198 |
}
|
2 |
|
3 |
class WPCF7_ConfigValidator {
|
4 |
|
5 |
+
const error = 100;
|
6 |
const error_maybe_empty = 101;
|
7 |
const error_invalid_syntax = 102;
|
8 |
const error_email_not_in_site_domain = 103;
|
9 |
const error_html_in_message = 104;
|
10 |
+
const error_multiple_controls_in_label = 105;
|
11 |
|
12 |
private $contact_form;
|
13 |
private $errors = array();
|
14 |
|
15 |
public function __construct( WPCF7_ContactForm $contact_form ) {
|
16 |
$this->contact_form = $contact_form;
|
17 |
+
|
18 |
+
$config_errors = get_post_meta( $contact_form->id(),
|
19 |
+
'_config_errors', true );
|
20 |
+
|
21 |
+
foreach ( (array) $config_errors as $section => $errors ) {
|
22 |
+
if ( empty( $errors ) ) {
|
23 |
+
continue;
|
24 |
+
}
|
25 |
+
|
26 |
+
if ( ! is_array( $errors ) ) { // for back-compat
|
27 |
+
$code = $errors;
|
28 |
+
$this->add_error( $section, $code );
|
29 |
+
} else {
|
30 |
+
foreach ( (array) $errors as $error ) {
|
31 |
+
if ( ! empty( $error['code'] ) ) {
|
32 |
+
$code = $error['code'];
|
33 |
+
$args = isset( $error['args'] ) ? $error['args'] : '';
|
34 |
+
$this->add_error( $section, $code, $args );
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
public function contact_form() {
|
42 |
+
return $this->contact_form;
|
43 |
}
|
44 |
|
45 |
public function is_valid() {
|
46 |
+
return ! $this->count_errors();
|
47 |
}
|
48 |
|
49 |
+
public function count_errors() {
|
50 |
+
$count = 0;
|
51 |
+
|
52 |
+
foreach( $this->errors as $errors ) {
|
53 |
+
$count += count( array_filter( $errors ) );
|
54 |
+
}
|
55 |
+
|
56 |
+
return $count;
|
57 |
}
|
58 |
|
59 |
+
public function collect_error_messages() {
|
60 |
+
$error_messages = array();
|
61 |
+
|
62 |
+
foreach ( $this->errors as $section => $errors ) {
|
63 |
+
$error_messages[$section] = array();
|
64 |
+
|
65 |
+
foreach ( $errors as $error ) {
|
66 |
+
if ( empty( $error['args']['message'] ) ) {
|
67 |
+
$message = $this->get_default_message( $error['code'] );
|
68 |
+
} elseif ( empty( $error['args']['params'] ) ) {
|
69 |
+
$message = $error['args']['message'];
|
70 |
+
} else {
|
71 |
+
$message = $this->build_message(
|
72 |
+
$error['args']['message'],
|
73 |
+
$error['args']['params'] );
|
74 |
+
}
|
75 |
+
|
76 |
+
$link = '';
|
77 |
+
|
78 |
+
if ( ! empty( $error['args']['link'] ) ) {
|
79 |
+
$link = $error['args']['link'];
|
80 |
+
}
|
81 |
+
|
82 |
+
$error_messages[$section][] = array(
|
83 |
+
'message' => $message,
|
84 |
+
'link' => $link );
|
85 |
+
}
|
86 |
}
|
87 |
|
88 |
+
return $error_messages;
|
89 |
}
|
90 |
|
91 |
+
public function build_message( $message, $params = '' ) {
|
92 |
+
$params = wp_parse_args( $params, array() );
|
93 |
+
|
94 |
+
foreach ( $params as $key => $val ) {
|
95 |
+
if ( ! preg_match( '/^[0-9A-Za-z_]+$/', $key ) ) { // invalid key
|
96 |
+
continue;
|
97 |
+
}
|
98 |
+
|
99 |
+
$placeholder = '%' . $key . '%';
|
100 |
+
|
101 |
+
if ( false !== stripos( $message, $placeholder ) ) {
|
102 |
+
$message = str_ireplace( $placeholder, $val, $message );
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
return $message;
|
107 |
+
}
|
108 |
|
109 |
+
public function get_default_message( $code ) {
|
110 |
switch ( $code ) {
|
111 |
case self::error_maybe_empty:
|
112 |
return __( "This field can be empty depending on user input.", 'contact-form-7' );
|
116 |
return __( "This email address does not belong to the same domain as the site.", 'contact-form-7' );
|
117 |
case self::error_html_in_message:
|
118 |
return __( "HTML tags are not allowed in a message.", 'contact-form-7' );
|
119 |
+
case self::error_multiple_controls_in_label:
|
120 |
+
return __( "Multiple form controls are placed inside a single label element.", 'contact-form-7' );
|
121 |
default:
|
122 |
return '';
|
123 |
}
|
124 |
}
|
125 |
|
126 |
+
public function add_error( $section, $code, $args = '' ) {
|
127 |
+
$args = wp_parse_args( $args, array(
|
128 |
+
'message' => '',
|
129 |
+
'params' => array() ) );
|
130 |
+
|
131 |
+
if ( ! isset( $this->errors[$section] ) ) {
|
132 |
+
$this->errors[$section] = array();
|
133 |
+
}
|
134 |
+
|
135 |
+
$this->errors[$section][] = array( 'code' => $code, 'args' => $args );
|
136 |
+
}
|
137 |
+
|
138 |
+
public function remove_error( $section, $code ) {
|
139 |
+
if ( empty( $this->errors[$section] ) ) {
|
140 |
+
return;
|
141 |
+
}
|
142 |
+
|
143 |
+
foreach ( (array) $this->errors[$section] as $key => $error ) {
|
144 |
+
if ( isset( $error['code'] ) && $error['code'] == $code ) {
|
145 |
+
unset( $this->errors[$section][$key] );
|
146 |
+
}
|
147 |
+
}
|
148 |
}
|
149 |
|
150 |
public function validate() {
|
151 |
$this->errors = array();
|
152 |
|
153 |
+
$this->validate_form();
|
154 |
$this->validate_mail( 'mail' );
|
155 |
$this->validate_mail( 'mail_2' );
|
156 |
$this->validate_messages();
|
157 |
|
158 |
+
do_action( 'wpcf7_config_validator_validate', $this );
|
159 |
+
|
160 |
+
$this->save();
|
161 |
+
return $this->is_valid();
|
162 |
+
}
|
163 |
+
|
164 |
+
public function save() {
|
165 |
delete_post_meta( $this->contact_form->id(), '_config_errors' );
|
166 |
|
167 |
if ( $this->errors ) {
|
168 |
update_post_meta( $this->contact_form->id(), '_config_errors',
|
169 |
$this->errors );
|
|
|
170 |
}
|
171 |
+
}
|
172 |
+
|
173 |
+
public function validate_form() {
|
174 |
+
$body = $this->contact_form->prop( 'form' );
|
175 |
+
$pattern = '%<label(?:[ \t\n]+.*?)?>(.+?)</label>%s';
|
176 |
+
|
177 |
+
if ( preg_match_all( $pattern, $body, $matches ) ) {
|
178 |
+
$manager = WPCF7_ShortcodeManager::get_instance();
|
179 |
+
|
180 |
+
foreach ( $matches[1] as $insidelabel ) {
|
181 |
+
$tags = $manager->scan_shortcode( $insidelabel );
|
182 |
+
$fields_count = 0;
|
183 |
+
|
184 |
+
foreach ( $tags as $tag ) {
|
185 |
+
$tag = new WPCF7_Shortcode( $tag );
|
186 |
+
|
187 |
+
if ( in_array( $tag->basetype, array( 'checkbox', 'radio' ) ) ) {
|
188 |
+
$fields_count += count( $tag->values );
|
189 |
|
190 |
+
if ( $tag->has_option( 'free_text' ) ) {
|
191 |
+
$fields_count += 1;
|
192 |
+
}
|
193 |
+
} elseif ( ! empty( $tag->name ) ) {
|
194 |
+
$fields_count += 1;
|
195 |
+
}
|
196 |
+
|
197 |
+
if ( 1 < $fields_count ) {
|
198 |
+
$this->add_error( 'form.body',
|
199 |
+
self::error_multiple_controls_in_label,
|
200 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#form.body:error_multiple_controls_in_label', 'contact-form-7' ) ) );
|
201 |
+
return;
|
202 |
+
}
|
203 |
+
}
|
204 |
+
}
|
205 |
+
}
|
206 |
}
|
207 |
|
208 |
public function validate_mail( $template = 'mail' ) {
|
233 |
|
234 |
if ( '' === $subject ) {
|
235 |
$this->add_error( sprintf( '%s.subject', $template ),
|
236 |
+
self::error_maybe_empty,
|
237 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#mail.subject:error_maybe_empty', 'contact-form-7' ) ) );
|
238 |
}
|
239 |
|
240 |
$sender = $components['sender'];
|
245 |
|
246 |
if ( ! wpcf7_is_mailbox_list( $sender ) ) {
|
247 |
$this->add_error( sprintf( '%s.sender', $template ),
|
248 |
+
self::error_invalid_syntax,
|
249 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#mail.sender:error_invalid_syntax', 'contact-form-7' ) ) );
|
250 |
} elseif ( ! wpcf7_is_email_in_site_domain( $sender ) ) {
|
251 |
$this->add_error( sprintf( '%s.sender', $template ),
|
252 |
+
self::error_email_not_in_site_domain,
|
253 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#mail.sender:error_email_not_in_site_domain', 'contact-form-7' ) ) );
|
254 |
}
|
255 |
|
256 |
$recipient = $components['recipient'];
|
261 |
|
262 |
if ( ! wpcf7_is_mailbox_list( $recipient ) ) {
|
263 |
$this->add_error( sprintf( '%s.recipient', $template ),
|
264 |
+
self::error_invalid_syntax,
|
265 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#mail.recipient:error_invalid_syntax', 'contact-form-7' ) ) );
|
266 |
}
|
267 |
|
268 |
$additional_headers = $components['additional_headers'];
|
269 |
$additional_headers = new WPCF7_MailTaggedText( $additional_headers,
|
270 |
array( 'callback' => $callback ) );
|
271 |
$additional_headers = $additional_headers->replace_tags();
|
272 |
+
$additional_headers = explode( "\n", $additional_headers );
|
273 |
+
$mailbox_header_types = array( 'reply-to', 'cc', 'bcc' );
|
274 |
|
275 |
+
foreach ( $additional_headers as $header ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
276 |
$header = trim( $header );
|
277 |
|
278 |
if ( '' === $header ) {
|
280 |
}
|
281 |
|
282 |
if ( ! preg_match( '/^([0-9A-Za-z-]+):(.+)$/', $header, $matches ) ) {
|
283 |
+
$this->add_error( sprintf( '%s.additional_headers', $template ),
|
284 |
+
self::error_invalid_syntax,
|
285 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#mail.additional_headers:error_invalid_syntax', 'contact-form-7' ) ) );
|
286 |
+
} elseif ( in_array( strtolower( $matches[1] ), $mailbox_header_types )
|
|
|
|
|
|
|
287 |
&& ! wpcf7_is_mailbox_list( $matches[2] ) ) {
|
288 |
+
$this->add_error( sprintf( '%s.additional_headers', $template ),
|
289 |
+
self::error_invalid_syntax, array(
|
290 |
+
'message' =>
|
291 |
+
__( "The %name% field value is invalid.", 'contact-form-7' ),
|
292 |
+
'params' => array( 'name' => $matches[1] ),
|
293 |
+
'link' => __( 'http://contactform7.com/configuration-errors/#mail.additional_headers:error_invalid_syntax', 'contact-form-7' ) ) );
|
294 |
}
|
295 |
}
|
296 |
|
297 |
+
$body = $components['body'];
|
298 |
+
$body = new WPCF7_MailTaggedText( $body,
|
299 |
+
array( 'callback' => $callback ) );
|
300 |
+
$body = $body->replace_tags();
|
301 |
+
|
302 |
+
if ( '' === $body ) {
|
303 |
+
$this->add_error( sprintf( '%s.body', $template ),
|
304 |
+
self::error_maybe_empty,
|
305 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#mail.body:error_maybe_empty', 'contact-form-7' ) ) );
|
306 |
+
}
|
307 |
}
|
308 |
|
309 |
public function validate_messages() {
|
323 |
|
324 |
if ( $stripped != $message ) {
|
325 |
$this->add_error( sprintf( 'messages.%s', $key ),
|
326 |
+
self::error_html_in_message,
|
327 |
+
array( 'link' => __( 'http://contactform7.com/configuration-errors/#messages:error_html_in_message', 'contact-form-7' ) ) );
|
328 |
}
|
329 |
}
|
330 |
}
|
includes/contact-form-template.php
CHANGED
@@ -19,20 +19,29 @@ class WPCF7_ContactFormTemplate {
|
|
19 |
}
|
20 |
|
21 |
public static function form() {
|
22 |
-
$template =
|
23 |
-
'
|
24 |
-
|
25 |
-
|
26 |
-
. '<p>' . __( 'Your Email', 'contact-form-7' )
|
27 |
-
. ' ' . __( '(required)', 'contact-form-7' ) . '<br />' . "\n"
|
28 |
-
. ' [email* your-email] </p>' . "\n\n"
|
29 |
-
. '<p>' . __( 'Subject', 'contact-form-7' ) . '<br />' . "\n"
|
30 |
-
. ' [text your-subject] </p>' . "\n\n"
|
31 |
-
. '<p>' . __( 'Your Message', 'contact-form-7' ) . '<br />' . "\n"
|
32 |
-
. ' [textarea your-message] </p>' . "\n\n"
|
33 |
-
. '<p>[submit "' . __( 'Send', 'contact-form-7' ) . '"]</p>';
|
34 |
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
}
|
37 |
|
38 |
public static function mail() {
|
19 |
}
|
20 |
|
21 |
public static function form() {
|
22 |
+
$template = sprintf(
|
23 |
+
'
|
24 |
+
<label> %2$s %1$s
|
25 |
+
[text* your-name] </label>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
27 |
+
<label> %3$s %1$s
|
28 |
+
[email* your-email] </label>
|
29 |
+
|
30 |
+
<label> %4$s
|
31 |
+
[text your-subject] </label>
|
32 |
+
|
33 |
+
<label> %5$s
|
34 |
+
[textarea your-message] </label>
|
35 |
+
|
36 |
+
[submit "%6$s"]',
|
37 |
+
__( '(required)', 'contact-form-7' ),
|
38 |
+
__( 'Your Name', 'contact-form-7' ),
|
39 |
+
__( 'Your Email', 'contact-form-7' ),
|
40 |
+
__( 'Subject', 'contact-form-7' ),
|
41 |
+
__( 'Your Message', 'contact-form-7' ),
|
42 |
+
__( 'Send', 'contact-form-7' ) );
|
43 |
+
|
44 |
+
return trim( $template );
|
45 |
}
|
46 |
|
47 |
public static function mail() {
|
includes/contact-form.php
CHANGED
@@ -14,7 +14,6 @@ class WPCF7_ContactForm {
|
|
14 |
private $unit_tag;
|
15 |
private $responses_count = 0;
|
16 |
private $scanned_form_tags;
|
17 |
-
private $config_validator;
|
18 |
|
19 |
public static function count() {
|
20 |
return self::$found_items;
|
@@ -317,14 +316,17 @@ class WPCF7_ContactForm {
|
|
317 |
$class = apply_filters( 'wpcf7_form_class_attr', $class );
|
318 |
|
319 |
$enctype = apply_filters( 'wpcf7_form_enctype', '' );
|
|
|
320 |
|
321 |
-
$novalidate = apply_filters( 'wpcf7_form_novalidate',
|
|
|
322 |
|
323 |
$atts = array(
|
324 |
'action' => esc_url( $url ),
|
325 |
'method' => 'post',
|
326 |
'class' => $class,
|
327 |
'enctype' => wpcf7_enctype_value( $enctype ),
|
|
|
328 |
'novalidate' => $novalidate ? 'novalidate' : '' );
|
329 |
|
330 |
if ( '' !== $id_attr ) {
|
@@ -811,41 +813,6 @@ class WPCF7_ContactForm {
|
|
811 |
|
812 |
return apply_filters( 'wpcf7_contact_form_shortcode', $shortcode, $args, $this );
|
813 |
}
|
814 |
-
|
815 |
-
public function validate_configuration() {
|
816 |
-
if ( ! $this->initial() ) {
|
817 |
-
if ( ! $this->config_validator ) {
|
818 |
-
$this->config_validator = new WPCF7_ConfigValidator( $this );
|
819 |
-
}
|
820 |
-
|
821 |
-
$this->config_validator->validate();
|
822 |
-
}
|
823 |
-
}
|
824 |
-
|
825 |
-
public function get_config_errors() {
|
826 |
-
if ( ! $this->initial() ) {
|
827 |
-
if ( ! $this->config_validator ) {
|
828 |
-
$this->config_validator = new WPCF7_ConfigValidator( $this );
|
829 |
-
}
|
830 |
-
|
831 |
-
return $this->config_validator->get_errors();
|
832 |
-
}
|
833 |
-
|
834 |
-
return array();
|
835 |
-
}
|
836 |
-
|
837 |
-
public function config_error( $section ) {
|
838 |
-
if ( ! $this->initial() ) {
|
839 |
-
if ( ! $this->config_validator ) {
|
840 |
-
$this->config_validator = new WPCF7_ConfigValidator( $this );
|
841 |
-
}
|
842 |
-
|
843 |
-
return $this->config_validator->get_error_message( $section );
|
844 |
-
}
|
845 |
-
|
846 |
-
return '';
|
847 |
-
}
|
848 |
-
|
849 |
}
|
850 |
|
851 |
function wpcf7_contact_form( $id ) {
|
14 |
private $unit_tag;
|
15 |
private $responses_count = 0;
|
16 |
private $scanned_form_tags;
|
|
|
17 |
|
18 |
public static function count() {
|
19 |
return self::$found_items;
|
316 |
$class = apply_filters( 'wpcf7_form_class_attr', $class );
|
317 |
|
318 |
$enctype = apply_filters( 'wpcf7_form_enctype', '' );
|
319 |
+
$autocomplete = apply_filters( 'wpcf7_form_autocomplete', '' );
|
320 |
|
321 |
+
$novalidate = apply_filters( 'wpcf7_form_novalidate',
|
322 |
+
wpcf7_support_html5() );
|
323 |
|
324 |
$atts = array(
|
325 |
'action' => esc_url( $url ),
|
326 |
'method' => 'post',
|
327 |
'class' => $class,
|
328 |
'enctype' => wpcf7_enctype_value( $enctype ),
|
329 |
+
'autocomplete' => $autocomplete,
|
330 |
'novalidate' => $novalidate ? 'novalidate' : '' );
|
331 |
|
332 |
if ( '' !== $id_attr ) {
|
813 |
|
814 |
return apply_filters( 'wpcf7_contact_form_shortcode', $shortcode, $args, $this );
|
815 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
816 |
}
|
817 |
|
818 |
function wpcf7_contact_form( $id ) {
|
includes/controller.php
CHANGED
@@ -166,8 +166,10 @@ function wpcf7_enqueue_scripts() {
|
|
166 |
|
167 |
$_wpcf7 = array(
|
168 |
'loaderUrl' => wpcf7_ajax_loader(),
|
169 |
-
'
|
170 |
-
|
|
|
|
|
171 |
'sending' => __( 'Sending ...', 'contact-form-7' ) );
|
172 |
|
173 |
if ( defined( 'WP_CACHE' ) && WP_CACHE ) {
|
166 |
|
167 |
$_wpcf7 = array(
|
168 |
'loaderUrl' => wpcf7_ajax_loader(),
|
169 |
+
'recaptcha' => array(
|
170 |
+
'messages' => array(
|
171 |
+
'empty' => __( 'Please verify that you are not a robot.',
|
172 |
+
'contact-form-7' ) ) ),
|
173 |
'sending' => __( 'Sending ...', 'contact-form-7' ) );
|
174 |
|
175 |
if ( defined( 'WP_CACHE' ) && WP_CACHE ) {
|
includes/css/styles.css
CHANGED
@@ -76,3 +76,7 @@ div.wpcf7 div.ajax-error {
|
|
76 |
div.wpcf7 .placeheld {
|
77 |
color: #888;
|
78 |
}
|
|
|
|
|
|
|
|
76 |
div.wpcf7 .placeheld {
|
77 |
color: #888;
|
78 |
}
|
79 |
+
|
80 |
+
.wpcf7-recaptcha iframe {
|
81 |
+
margin-bottom: 0;
|
82 |
+
}
|
includes/formatting.php
CHANGED
@@ -177,7 +177,7 @@ function wpcf7_is_url( $url ) {
|
|
177 |
}
|
178 |
|
179 |
function wpcf7_is_tel( $tel ) {
|
180 |
-
$result = preg_match( '
|
181 |
return apply_filters( 'wpcf7_is_tel', $result, $tel );
|
182 |
}
|
183 |
|
177 |
}
|
178 |
|
179 |
function wpcf7_is_tel( $tel ) {
|
180 |
+
$result = preg_match( '%^[+]?[0-9()/ -]*$%', $tel );
|
181 |
return apply_filters( 'wpcf7_is_tel', $result, $tel );
|
182 |
}
|
183 |
|
includes/functions.php
CHANGED
@@ -250,8 +250,17 @@ function wpcf7_enctype_value( $enctype ) {
|
|
250 |
|
251 |
function wpcf7_rmdir_p( $dir ) {
|
252 |
if ( is_file( $dir ) ) {
|
253 |
-
@unlink( $dir )
|
254 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
}
|
256 |
|
257 |
if ( ! is_dir( $dir ) ) {
|
250 |
|
251 |
function wpcf7_rmdir_p( $dir ) {
|
252 |
if ( is_file( $dir ) ) {
|
253 |
+
if ( ! $result = @unlink( $dir ) ) {
|
254 |
+
$stat = @stat( $dir );
|
255 |
+
$perms = $stat['mode'];
|
256 |
+
@chmod( $dir, $perms | 0200 ); // add write for owner
|
257 |
+
|
258 |
+
if ( ! $result = @unlink( $dir ) ) {
|
259 |
+
@chmod( $dir, $perms );
|
260 |
+
}
|
261 |
+
}
|
262 |
+
|
263 |
+
return $result;
|
264 |
}
|
265 |
|
266 |
if ( ! is_dir( $dir ) ) {
|
includes/js/scripts.js
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
(function($) {
|
2 |
|
|
|
|
|
3 |
if (typeof _wpcf7 == 'undefined' || _wpcf7 === null) {
|
4 |
_wpcf7 = {};
|
5 |
}
|
@@ -74,6 +76,8 @@
|
|
74 |
this.find('.wpcf7-validates-as-url').change(function() {
|
75 |
$(this).wpcf7NormalizeUrl();
|
76 |
});
|
|
|
|
|
77 |
};
|
78 |
|
79 |
$.wpcf7AjaxSuccess = function(data, status, xhr, $form) {
|
@@ -113,7 +117,7 @@
|
|
113 |
$form.find('[name="g-recaptcha-response"]').each(function() {
|
114 |
if ('' == $(this).val()) {
|
115 |
var $recaptcha = $(this).closest('.wpcf7-form-control-wrap');
|
116 |
-
$recaptcha.wpcf7NotValidTip(_wpcf7.
|
117 |
}
|
118 |
});
|
119 |
|
@@ -394,6 +398,19 @@
|
|
394 |
});
|
395 |
};
|
396 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
397 |
$.wpcf7UpdateScreenReaderResponse = function($form, data) {
|
398 |
$('.wpcf7 .screen-reader-response').html('').attr('role', '');
|
399 |
|
1 |
(function($) {
|
2 |
|
3 |
+
'use strict';
|
4 |
+
|
5 |
if (typeof _wpcf7 == 'undefined' || _wpcf7 === null) {
|
6 |
_wpcf7 = {};
|
7 |
}
|
76 |
this.find('.wpcf7-validates-as-url').change(function() {
|
77 |
$(this).wpcf7NormalizeUrl();
|
78 |
});
|
79 |
+
|
80 |
+
this.find('.wpcf7-recaptcha').wpcf7Recaptcha();
|
81 |
};
|
82 |
|
83 |
$.wpcf7AjaxSuccess = function(data, status, xhr, $form) {
|
117 |
$form.find('[name="g-recaptcha-response"]').each(function() {
|
118 |
if ('' == $(this).val()) {
|
119 |
var $recaptcha = $(this).closest('.wpcf7-form-control-wrap');
|
120 |
+
$recaptcha.wpcf7NotValidTip(_wpcf7.recaptcha.messages.empty);
|
121 |
}
|
122 |
});
|
123 |
|
398 |
});
|
399 |
};
|
400 |
|
401 |
+
$.fn.wpcf7Recaptcha = function() {
|
402 |
+
return this.each(function() {
|
403 |
+
var events = 'wpcf7:spam wpcf7:mailsent wpcf7:mailfailed';
|
404 |
+
$(this).closest('div.wpcf7').on(events, function(e) {
|
405 |
+
if (recaptchaWidgets && grecaptcha) {
|
406 |
+
$.each(recaptchaWidgets, function(index, value) {
|
407 |
+
grecaptcha.reset(value);
|
408 |
+
});
|
409 |
+
}
|
410 |
+
});
|
411 |
+
});
|
412 |
+
};
|
413 |
+
|
414 |
$.wpcf7UpdateScreenReaderResponse = function($form, data) {
|
415 |
$('.wpcf7 .screen-reader-response').html('').attr('role', '');
|
416 |
|
includes/submission.php
CHANGED
@@ -284,7 +284,7 @@ class WPCF7_Submission {
|
|
284 |
|
285 |
public function remove_uploaded_files() {
|
286 |
foreach ( (array) $this->uploaded_files as $name => $path ) {
|
287 |
-
|
288 |
@rmdir( dirname( $path ) ); // remove parent dir if it's removable (empty).
|
289 |
}
|
290 |
}
|
284 |
|
285 |
public function remove_uploaded_files() {
|
286 |
foreach ( (array) $this->uploaded_files as $name => $path ) {
|
287 |
+
wpcf7_rmdir_p( $path );
|
288 |
@rmdir( dirname( $path ) ); // remove parent dir if it's removable (empty).
|
289 |
}
|
290 |
}
|
languages/contact-form-7-cs_CZ.mo
DELETED
Binary file
|
languages/contact-form-7-da_DK.mo
DELETED
Binary file
|
languages/contact-form-7-pl_PL.mo
DELETED
Binary file
|
languages/readme.txt
CHANGED
@@ -1,10 +1,9 @@
|
|
1 |
== For Translators ==
|
2 |
|
3 |
-
We are
|
4 |
|
5 |
-
For details, see
|
6 |
http://contactform7.com/2016/01/08/translations-migrate-to-translate-wordpress-org/
|
7 |
|
8 |
-
|
9 |
|
10 |
-
Thank you.
|
1 |
== For Translators ==
|
2 |
|
3 |
+
We are in the process of migrating translations to translate.wordpress.org.
|
4 |
|
|
|
5 |
http://contactform7.com/2016/01/08/translations-migrate-to-translate-wordpress-org/
|
6 |
|
7 |
+
The language files in this directory will no longer be updated and will be removed at some point in the future.
|
8 |
|
9 |
+
Thank you for your past contribution, and see you at translate.wordpress.org :)
|
modules/count.php
CHANGED
@@ -18,19 +18,24 @@ function wpcf7_count_shortcode_handler( $tag ) {
|
|
18 |
return '';
|
19 |
}
|
20 |
|
21 |
-
$
|
22 |
$maxlength = $minlength = null;
|
23 |
|
24 |
-
|
25 |
-
$target =
|
26 |
-
$
|
27 |
-
$minlength = $target->get_minlength_option();
|
28 |
|
29 |
-
if (
|
30 |
-
$maxlength = $
|
|
|
|
|
31 |
}
|
32 |
}
|
33 |
|
|
|
|
|
|
|
|
|
34 |
if ( $tag->has_option( 'down' ) ) {
|
35 |
$value = (int) $maxlength;
|
36 |
$class = 'wpcf7-character-count down';
|
@@ -53,5 +58,3 @@ function wpcf7_count_shortcode_handler( $tag ) {
|
|
53 |
|
54 |
return $html;
|
55 |
}
|
56 |
-
|
57 |
-
?>
|
18 |
return '';
|
19 |
}
|
20 |
|
21 |
+
$targets = wpcf7_scan_shortcode( array( 'name' => $tag->name ) );
|
22 |
$maxlength = $minlength = null;
|
23 |
|
24 |
+
while ( $targets ) {
|
25 |
+
$target = array_shift( $targets );
|
26 |
+
$target = new WPCF7_Shortcode( $target );
|
|
|
27 |
|
28 |
+
if ( 'count' != $target->type ) {
|
29 |
+
$maxlength = $target->get_maxlength_option();
|
30 |
+
$minlength = $target->get_minlength_option();
|
31 |
+
break;
|
32 |
}
|
33 |
}
|
34 |
|
35 |
+
if ( $maxlength && $minlength && $maxlength < $minlength ) {
|
36 |
+
$maxlength = $minlength = null;
|
37 |
+
}
|
38 |
+
|
39 |
if ( $tag->has_option( 'down' ) ) {
|
40 |
$value = (int) $maxlength;
|
41 |
$class = 'wpcf7-character-count down';
|
58 |
|
59 |
return $html;
|
60 |
}
|
|
|
|
modules/file.php
CHANGED
@@ -296,7 +296,7 @@ function wpcf7_tag_generator_file( $contact_form, $args = '' ) {
|
|
296 |
|
297 |
/* Warning message */
|
298 |
|
299 |
-
add_action( '
|
300 |
|
301 |
function wpcf7_file_display_warning_message() {
|
302 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
@@ -316,7 +316,7 @@ function wpcf7_file_display_warning_message() {
|
|
316 |
if ( ! is_dir( $uploads_dir ) || ! wp_is_writable( $uploads_dir ) ) {
|
317 |
$message = sprintf( __( 'This contact form contains file uploading fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7' ), $uploads_dir );
|
318 |
|
319 |
-
echo '<div class="notice notice-
|
320 |
}
|
321 |
}
|
322 |
|
@@ -362,7 +362,7 @@ function wpcf7_upload_tmp_dir() {
|
|
362 |
|
363 |
add_action( 'template_redirect', 'wpcf7_cleanup_upload_files', 20 );
|
364 |
|
365 |
-
function wpcf7_cleanup_upload_files() {
|
366 |
if ( is_admin() || 'GET' != $_SERVER['REQUEST_METHOD']
|
367 |
|| is_robots() || is_feed() || is_trackback() ) {
|
368 |
return;
|
@@ -374,6 +374,10 @@ function wpcf7_cleanup_upload_files() {
|
|
374 |
return;
|
375 |
}
|
376 |
|
|
|
|
|
|
|
|
|
377 |
if ( $handle = @opendir( $dir ) ) {
|
378 |
while ( false !== ( $file = readdir( $handle ) ) ) {
|
379 |
if ( $file == "." || $file == ".." || $file == ".htaccess" ) {
|
@@ -382,11 +386,16 @@ function wpcf7_cleanup_upload_files() {
|
|
382 |
|
383 |
$mtime = @filemtime( $dir . $file );
|
384 |
|
385 |
-
if ( $mtime && time() < $mtime +
|
386 |
continue;
|
387 |
}
|
388 |
|
389 |
wpcf7_rmdir_p( path_join( $dir, $file ) );
|
|
|
|
|
|
|
|
|
|
|
390 |
}
|
391 |
|
392 |
closedir( $handle );
|
296 |
|
297 |
/* Warning message */
|
298 |
|
299 |
+
add_action( 'wpcf7_admin_warnings', 'wpcf7_file_display_warning_message' );
|
300 |
|
301 |
function wpcf7_file_display_warning_message() {
|
302 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
316 |
if ( ! is_dir( $uploads_dir ) || ! wp_is_writable( $uploads_dir ) ) {
|
317 |
$message = sprintf( __( 'This contact form contains file uploading fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7' ), $uploads_dir );
|
318 |
|
319 |
+
echo '<div class="notice notice-warning"><p>' . esc_html( $message ) . '</p></div>';
|
320 |
}
|
321 |
}
|
322 |
|
362 |
|
363 |
add_action( 'template_redirect', 'wpcf7_cleanup_upload_files', 20 );
|
364 |
|
365 |
+
function wpcf7_cleanup_upload_files( $seconds = 60, $max = 100 ) {
|
366 |
if ( is_admin() || 'GET' != $_SERVER['REQUEST_METHOD']
|
367 |
|| is_robots() || is_feed() || is_trackback() ) {
|
368 |
return;
|
374 |
return;
|
375 |
}
|
376 |
|
377 |
+
$seconds = absint( $seconds );
|
378 |
+
$max = absint( $max );
|
379 |
+
$count = 0;
|
380 |
+
|
381 |
if ( $handle = @opendir( $dir ) ) {
|
382 |
while ( false !== ( $file = readdir( $handle ) ) ) {
|
383 |
if ( $file == "." || $file == ".." || $file == ".htaccess" ) {
|
386 |
|
387 |
$mtime = @filemtime( $dir . $file );
|
388 |
|
389 |
+
if ( $mtime && time() < $mtime + $seconds ) { // less than $seconds old
|
390 |
continue;
|
391 |
}
|
392 |
|
393 |
wpcf7_rmdir_p( path_join( $dir, $file ) );
|
394 |
+
$count += 1;
|
395 |
+
|
396 |
+
if ( $max <= $count ) {
|
397 |
+
break;
|
398 |
+
}
|
399 |
}
|
400 |
|
401 |
closedir( $handle );
|
modules/quiz.php
CHANGED
@@ -14,15 +14,17 @@ function wpcf7_add_shortcode_quiz() {
|
|
14 |
function wpcf7_quiz_shortcode_handler( $tag ) {
|
15 |
$tag = new WPCF7_Shortcode( $tag );
|
16 |
|
17 |
-
if ( empty( $tag->name ) )
|
18 |
return '';
|
|
|
19 |
|
20 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
21 |
|
22 |
$class = wpcf7_form_controls_class( $tag->type );
|
23 |
|
24 |
-
if ( $validation_error )
|
25 |
$class .= ' wpcf7-not-valid';
|
|
|
26 |
|
27 |
$atts = array();
|
28 |
|
@@ -37,6 +39,7 @@ function wpcf7_quiz_shortcode_handler( $tag ) {
|
|
37 |
$atts['class'] = $tag->get_class_option( $class );
|
38 |
$atts['id'] = $tag->get_id_option();
|
39 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
|
|
40 |
$atts['aria-required'] = 'true';
|
41 |
$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
|
42 |
|
14 |
function wpcf7_quiz_shortcode_handler( $tag ) {
|
15 |
$tag = new WPCF7_Shortcode( $tag );
|
16 |
|
17 |
+
if ( empty( $tag->name ) ) {
|
18 |
return '';
|
19 |
+
}
|
20 |
|
21 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
22 |
|
23 |
$class = wpcf7_form_controls_class( $tag->type );
|
24 |
|
25 |
+
if ( $validation_error ) {
|
26 |
$class .= ' wpcf7-not-valid';
|
27 |
+
}
|
28 |
|
29 |
$atts = array();
|
30 |
|
39 |
$atts['class'] = $tag->get_class_option( $class );
|
40 |
$atts['id'] = $tag->get_id_option();
|
41 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
42 |
+
$atts['autocomplete'] = 'off';
|
43 |
$atts['aria-required'] = 'true';
|
44 |
$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
|
45 |
|
modules/really-simple-captcha.php
CHANGED
@@ -15,11 +15,13 @@ function wpcf7_add_shortcode_captcha() {
|
|
15 |
function wpcf7_captcha_shortcode_handler( $tag ) {
|
16 |
$tag = new WPCF7_Shortcode( $tag );
|
17 |
|
18 |
-
if ( 'captchac' == $tag->type && ! class_exists( 'ReallySimpleCaptcha' ) )
|
19 |
return '<em>' . __( 'To use CAPTCHA, you need <a href="http://wordpress.org/extend/plugins/really-simple-captcha/">Really Simple CAPTCHA</a> plugin installed.', 'contact-form-7' ) . '</em>';
|
|
|
20 |
|
21 |
-
if ( empty( $tag->name ) )
|
22 |
return '';
|
|
|
23 |
|
24 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
25 |
|
@@ -41,15 +43,18 @@ function wpcf7_captcha_shortcode_handler( $tag ) {
|
|
41 |
|
42 |
$op = array_merge( $op, wpcf7_captchac_options( $tag->options ) );
|
43 |
|
44 |
-
if ( ! $filename = wpcf7_generate_captcha( $op ) )
|
45 |
return '';
|
|
|
46 |
|
47 |
if ( ! empty( $op['img_size'] ) ) {
|
48 |
-
if ( isset( $op['img_size'][0] ) )
|
49 |
$atts['width'] = $op['img_size'][0];
|
|
|
50 |
|
51 |
-
if ( isset( $op['img_size'][1] ) )
|
52 |
$atts['height'] = $op['img_size'][1];
|
|
|
53 |
}
|
54 |
|
55 |
$atts['alt'] = 'captcha';
|
@@ -66,8 +71,9 @@ function wpcf7_captcha_shortcode_handler( $tag ) {
|
|
66 |
return $html;
|
67 |
|
68 |
} elseif ( 'captchar' == $tag->type ) { // CAPTCHA-Response (input)
|
69 |
-
if ( $validation_error )
|
70 |
$class .= ' wpcf7-not-valid';
|
|
|
71 |
|
72 |
$atts = array();
|
73 |
|
@@ -83,15 +89,17 @@ function wpcf7_captcha_shortcode_handler( $tag ) {
|
|
83 |
$atts['class'] = $tag->get_class_option( $class );
|
84 |
$atts['id'] = $tag->get_id_option();
|
85 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
86 |
-
|
87 |
$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
|
88 |
|
89 |
$value = (string) reset( $tag->values );
|
90 |
|
91 |
-
if ( wpcf7_is_posted() )
|
92 |
$value = '';
|
|
|
93 |
|
94 |
-
if ( $tag->has_option( 'placeholder' )
|
|
|
95 |
$atts['placeholder'] = $value;
|
96 |
$value = '';
|
97 |
}
|
@@ -281,7 +289,7 @@ function wpcf7_tag_generator_captcha( $contact_form, $args = '' ) {
|
|
281 |
|
282 |
/* Warning message */
|
283 |
|
284 |
-
add_action( '
|
285 |
|
286 |
function wpcf7_captcha_display_warning_message() {
|
287 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
@@ -305,13 +313,13 @@ function wpcf7_captcha_display_warning_message() {
|
|
305 |
if ( ! is_dir( $uploads_dir ) || ! wp_is_writable( $uploads_dir ) ) {
|
306 |
$message = sprintf( __( 'This contact form contains CAPTCHA fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7' ), $uploads_dir );
|
307 |
|
308 |
-
echo '<div class="notice notice-
|
309 |
}
|
310 |
|
311 |
if ( ! function_exists( 'imagecreatetruecolor' ) || ! function_exists( 'imagettftext' ) ) {
|
312 |
$message = __( 'This contact form contains CAPTCHA fields, but the necessary libraries (GD and FreeType) are not available on your server.', 'contact-form-7' );
|
313 |
|
314 |
-
echo '<div class="notice notice-
|
315 |
}
|
316 |
}
|
317 |
|
15 |
function wpcf7_captcha_shortcode_handler( $tag ) {
|
16 |
$tag = new WPCF7_Shortcode( $tag );
|
17 |
|
18 |
+
if ( 'captchac' == $tag->type && ! class_exists( 'ReallySimpleCaptcha' ) ) {
|
19 |
return '<em>' . __( 'To use CAPTCHA, you need <a href="http://wordpress.org/extend/plugins/really-simple-captcha/">Really Simple CAPTCHA</a> plugin installed.', 'contact-form-7' ) . '</em>';
|
20 |
+
}
|
21 |
|
22 |
+
if ( empty( $tag->name ) ) {
|
23 |
return '';
|
24 |
+
}
|
25 |
|
26 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
27 |
|
43 |
|
44 |
$op = array_merge( $op, wpcf7_captchac_options( $tag->options ) );
|
45 |
|
46 |
+
if ( ! $filename = wpcf7_generate_captcha( $op ) ) {
|
47 |
return '';
|
48 |
+
}
|
49 |
|
50 |
if ( ! empty( $op['img_size'] ) ) {
|
51 |
+
if ( isset( $op['img_size'][0] ) ) {
|
52 |
$atts['width'] = $op['img_size'][0];
|
53 |
+
}
|
54 |
|
55 |
+
if ( isset( $op['img_size'][1] ) ) {
|
56 |
$atts['height'] = $op['img_size'][1];
|
57 |
+
}
|
58 |
}
|
59 |
|
60 |
$atts['alt'] = 'captcha';
|
71 |
return $html;
|
72 |
|
73 |
} elseif ( 'captchar' == $tag->type ) { // CAPTCHA-Response (input)
|
74 |
+
if ( $validation_error ) {
|
75 |
$class .= ' wpcf7-not-valid';
|
76 |
+
}
|
77 |
|
78 |
$atts = array();
|
79 |
|
89 |
$atts['class'] = $tag->get_class_option( $class );
|
90 |
$atts['id'] = $tag->get_id_option();
|
91 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
92 |
+
$atts['autocomplete'] = 'off';
|
93 |
$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
|
94 |
|
95 |
$value = (string) reset( $tag->values );
|
96 |
|
97 |
+
if ( wpcf7_is_posted() ) {
|
98 |
$value = '';
|
99 |
+
}
|
100 |
|
101 |
+
if ( $tag->has_option( 'placeholder' )
|
102 |
+
|| $tag->has_option( 'watermark' ) ) {
|
103 |
$atts['placeholder'] = $value;
|
104 |
$value = '';
|
105 |
}
|
289 |
|
290 |
/* Warning message */
|
291 |
|
292 |
+
add_action( 'wpcf7_admin_warnings', 'wpcf7_captcha_display_warning_message' );
|
293 |
|
294 |
function wpcf7_captcha_display_warning_message() {
|
295 |
if ( ! $contact_form = wpcf7_get_current_contact_form() ) {
|
313 |
if ( ! is_dir( $uploads_dir ) || ! wp_is_writable( $uploads_dir ) ) {
|
314 |
$message = sprintf( __( 'This contact form contains CAPTCHA fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7' ), $uploads_dir );
|
315 |
|
316 |
+
echo '<div class="notice notice-warning"><p>' . esc_html( $message ) . '</p></div>';
|
317 |
}
|
318 |
|
319 |
if ( ! function_exists( 'imagecreatetruecolor' ) || ! function_exists( 'imagettftext' ) ) {
|
320 |
$message = __( 'This contact form contains CAPTCHA fields, but the necessary libraries (GD and FreeType) are not available on your server.', 'contact-form-7' );
|
321 |
|
322 |
+
echo '<div class="notice notice-warning"><p>' . esc_html( $message ) . '</p></div>';
|
323 |
}
|
324 |
}
|
325 |
|
modules/recaptcha.php
CHANGED
@@ -249,6 +249,7 @@ function wpcf7_recaptcha_callback_script() {
|
|
249 |
|
250 |
?>
|
251 |
<script type="text/javascript">
|
|
|
252 |
var recaptchaCallback = function() {
|
253 |
var forms = document.getElementsByTagName('form');
|
254 |
var pattern = /(^|\s)g-recaptcha(\s|$)/;
|
@@ -260,7 +261,7 @@ var recaptchaCallback = function() {
|
|
260 |
var sitekey = divs[j].getAttribute('data-sitekey');
|
261 |
|
262 |
if (divs[j].className && divs[j].className.match(pattern) && sitekey) {
|
263 |
-
grecaptcha.render(divs[j], {
|
264 |
'sitekey': sitekey,
|
265 |
'theme': divs[j].getAttribute('data-theme'),
|
266 |
'type': divs[j].getAttribute('data-type'),
|
@@ -270,6 +271,7 @@ var recaptchaCallback = function() {
|
|
270 |
'expired-callback': divs[j].getAttribute('data-expired-callback')
|
271 |
});
|
272 |
|
|
|
273 |
break;
|
274 |
}
|
275 |
}
|
249 |
|
250 |
?>
|
251 |
<script type="text/javascript">
|
252 |
+
var recaptchaWidgets = [];
|
253 |
var recaptchaCallback = function() {
|
254 |
var forms = document.getElementsByTagName('form');
|
255 |
var pattern = /(^|\s)g-recaptcha(\s|$)/;
|
261 |
var sitekey = divs[j].getAttribute('data-sitekey');
|
262 |
|
263 |
if (divs[j].className && divs[j].className.match(pattern) && sitekey) {
|
264 |
+
var widget_id = grecaptcha.render(divs[j], {
|
265 |
'sitekey': sitekey,
|
266 |
'theme': divs[j].getAttribute('data-theme'),
|
267 |
'type': divs[j].getAttribute('data-type'),
|
271 |
'expired-callback': divs[j].getAttribute('data-expired-callback')
|
272 |
});
|
273 |
|
274 |
+
recaptchaWidgets.push(widget_id);
|
275 |
break;
|
276 |
}
|
277 |
}
|
modules/text.php
CHANGED
@@ -20,18 +20,21 @@ function wpcf7_add_shortcode_text() {
|
|
20 |
function wpcf7_text_shortcode_handler( $tag ) {
|
21 |
$tag = new WPCF7_Shortcode( $tag );
|
22 |
|
23 |
-
if ( empty( $tag->name ) )
|
24 |
return '';
|
|
|
25 |
|
26 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
27 |
|
28 |
$class = wpcf7_form_controls_class( $tag->type, 'wpcf7-text' );
|
29 |
|
30 |
-
if ( in_array( $tag->basetype, array( 'email', 'url', 'tel' ) ) )
|
31 |
$class .= ' wpcf7-validates-as-' . $tag->basetype;
|
|
|
32 |
|
33 |
-
if ( $validation_error )
|
34 |
$class .= ' wpcf7-not-valid';
|
|
|
35 |
|
36 |
$atts = array();
|
37 |
|
@@ -39,7 +42,8 @@ function wpcf7_text_shortcode_handler( $tag ) {
|
|
39 |
$atts['maxlength'] = $tag->get_maxlength_option();
|
40 |
$atts['minlength'] = $tag->get_minlength_option();
|
41 |
|
42 |
-
if ( $atts['maxlength'] && $atts['minlength']
|
|
|
43 |
unset( $atts['maxlength'], $atts['minlength'] );
|
44 |
}
|
45 |
|
@@ -47,11 +51,16 @@ function wpcf7_text_shortcode_handler( $tag ) {
|
|
47 |
$atts['id'] = $tag->get_id_option();
|
48 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
49 |
|
50 |
-
|
|
|
|
|
|
|
51 |
$atts['readonly'] = 'readonly';
|
|
|
52 |
|
53 |
-
if ( $tag->is_required() )
|
54 |
$atts['aria-required'] = 'true';
|
|
|
55 |
|
56 |
$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
|
57 |
|
20 |
function wpcf7_text_shortcode_handler( $tag ) {
|
21 |
$tag = new WPCF7_Shortcode( $tag );
|
22 |
|
23 |
+
if ( empty( $tag->name ) ) {
|
24 |
return '';
|
25 |
+
}
|
26 |
|
27 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
28 |
|
29 |
$class = wpcf7_form_controls_class( $tag->type, 'wpcf7-text' );
|
30 |
|
31 |
+
if ( in_array( $tag->basetype, array( 'email', 'url', 'tel' ) ) ) {
|
32 |
$class .= ' wpcf7-validates-as-' . $tag->basetype;
|
33 |
+
}
|
34 |
|
35 |
+
if ( $validation_error ) {
|
36 |
$class .= ' wpcf7-not-valid';
|
37 |
+
}
|
38 |
|
39 |
$atts = array();
|
40 |
|
42 |
$atts['maxlength'] = $tag->get_maxlength_option();
|
43 |
$atts['minlength'] = $tag->get_minlength_option();
|
44 |
|
45 |
+
if ( $atts['maxlength'] && $atts['minlength']
|
46 |
+
&& $atts['maxlength'] < $atts['minlength'] ) {
|
47 |
unset( $atts['maxlength'], $atts['minlength'] );
|
48 |
}
|
49 |
|
51 |
$atts['id'] = $tag->get_id_option();
|
52 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
53 |
|
54 |
+
$atts['autocomplete'] = $tag->get_option( 'autocomplete',
|
55 |
+
'[-0-9a-zA-Z]+', true );
|
56 |
+
|
57 |
+
if ( $tag->has_option( 'readonly' ) ) {
|
58 |
$atts['readonly'] = 'readonly';
|
59 |
+
}
|
60 |
|
61 |
+
if ( $tag->is_required() ) {
|
62 |
$atts['aria-required'] = 'true';
|
63 |
+
}
|
64 |
|
65 |
$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
|
66 |
|
modules/textarea.php
CHANGED
@@ -15,15 +15,17 @@ function wpcf7_add_shortcode_textarea() {
|
|
15 |
function wpcf7_textarea_shortcode_handler( $tag ) {
|
16 |
$tag = new WPCF7_Shortcode( $tag );
|
17 |
|
18 |
-
if ( empty( $tag->name ) )
|
19 |
return '';
|
|
|
20 |
|
21 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
22 |
|
23 |
$class = wpcf7_form_controls_class( $tag->type );
|
24 |
|
25 |
-
if ( $validation_error )
|
26 |
$class .= ' wpcf7-not-valid';
|
|
|
27 |
|
28 |
$atts = array();
|
29 |
|
@@ -40,6 +42,9 @@ function wpcf7_textarea_shortcode_handler( $tag ) {
|
|
40 |
$atts['id'] = $tag->get_id_option();
|
41 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
42 |
|
|
|
|
|
|
|
43 |
if ( $tag->has_option( 'readonly' ) ) {
|
44 |
$atts['readonly'] = 'readonly';
|
45 |
}
|
15 |
function wpcf7_textarea_shortcode_handler( $tag ) {
|
16 |
$tag = new WPCF7_Shortcode( $tag );
|
17 |
|
18 |
+
if ( empty( $tag->name ) ) {
|
19 |
return '';
|
20 |
+
}
|
21 |
|
22 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
23 |
|
24 |
$class = wpcf7_form_controls_class( $tag->type );
|
25 |
|
26 |
+
if ( $validation_error ) {
|
27 |
$class .= ' wpcf7-not-valid';
|
28 |
+
}
|
29 |
|
30 |
$atts = array();
|
31 |
|
42 |
$atts['id'] = $tag->get_id_option();
|
43 |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
|
44 |
|
45 |
+
$atts['autocomplete'] = $tag->get_option( 'autocomplete',
|
46 |
+
'[-0-9a-zA-Z]+', true );
|
47 |
+
|
48 |
if ( $tag->has_option( 'readonly' ) ) {
|
49 |
$atts['readonly'] = 'readonly';
|
50 |
}
|
readme.txt
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
Contributors: takayukister
|
3 |
Donate link: http://contactform7.com/donate/
|
4 |
Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
|
5 |
-
Requires at least: 4.
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag: 4.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -29,7 +29,6 @@ The following plugins are recommended for Contact Form 7 users:
|
|
29 |
* [Flamingo](https://wordpress.org/plugins/flamingo/) by Takayuki Miyoshi - With Flamingo, you can save submitted messages via contact forms in the database.
|
30 |
* [Postman](https://wordpress.org/plugins/postman-smtp/) by
|
31 |
Jason Hendriks - Postman is a next-generation SMTP Mailer, software that assists in the delivery of email generated by your WordPress site.
|
32 |
-
* [Contact Form 7: Accessible Defaults](https://wordpress.org/plugins/contact-form-7-accessible-defaults/) by Joe Dolson - Replaces the default Contact Form 7 form with an accessible equivalent and provides a suite of selectable base forms.
|
33 |
* [Bogo](https://wordpress.org/plugins/bogo/) by Takayuki Miyoshi - Bogo is a straight-forward multilingual plugin that doesn't cause headaches.
|
34 |
|
35 |
= Translations =
|
@@ -63,6 +62,15 @@ Do you have questions or issues with Contact Form 7? Use these support channels
|
|
63 |
|
64 |
For more information, see [Releases](http://contactform7.com/category/releases/).
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
= 4.4.2 =
|
67 |
|
68 |
* Language Packs: Language files for French (fr_FR), Russian (ru_RU), Slovak (sk_SK), and Turkish (tr_TR) have been removed from the plugin package.
|
2 |
Contributors: takayukister
|
3 |
Donate link: http://contactform7.com/donate/
|
4 |
Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
|
5 |
+
Requires at least: 4.4
|
6 |
+
Tested up to: 4.6
|
7 |
+
Stable tag: 4.5
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
29 |
* [Flamingo](https://wordpress.org/plugins/flamingo/) by Takayuki Miyoshi - With Flamingo, you can save submitted messages via contact forms in the database.
|
30 |
* [Postman](https://wordpress.org/plugins/postman-smtp/) by
|
31 |
Jason Hendriks - Postman is a next-generation SMTP Mailer, software that assists in the delivery of email generated by your WordPress site.
|
|
|
32 |
* [Bogo](https://wordpress.org/plugins/bogo/) by Takayuki Miyoshi - Bogo is a straight-forward multilingual plugin that doesn't cause headaches.
|
33 |
|
34 |
= Translations =
|
62 |
|
63 |
For more information, see [Releases](http://contactform7.com/category/releases/).
|
64 |
|
65 |
+
= 4.5 =
|
66 |
+
|
67 |
+
* The default contact form template is revised.
|
68 |
+
* reCAPTCHA: Run grecaptcha.reset() after a submission.
|
69 |
+
* The autocomplete option for form-tags and wpcf7_form_autocomplete filter hook are introduced to manage autocomplete attribute.
|
70 |
+
* The config validator is revised. The wpcf7_config_validator_validate action hook is introduced to allow 3rd-party to cut in.
|
71 |
+
* A bug in character count form-tag is fixed.
|
72 |
+
* Language Packs: Language files for Danish (da_DK), Polish (pl_PL), and Czech (cs_CZ) have been removed from the plugin package.
|
73 |
+
|
74 |
= 4.4.2 =
|
75 |
|
76 |
* Language Packs: Language files for French (fr_FR), Russian (ru_RU), Slovak (sk_SK), and Turkish (tr_TR) have been removed from the plugin package.
|
wp-contact-form-7.php
CHANGED
@@ -7,12 +7,12 @@ Author: Takayuki Miyoshi
|
|
7 |
Author URI: http://ideasilo.wordpress.com/
|
8 |
Text Domain: contact-form-7
|
9 |
Domain Path: /languages/
|
10 |
-
Version: 4.
|
11 |
*/
|
12 |
|
13 |
-
define( 'WPCF7_VERSION', '4.
|
14 |
|
15 |
-
define( 'WPCF7_REQUIRED_WP_VERSION', '4.
|
16 |
|
17 |
define( 'WPCF7_PLUGIN', __FILE__ );
|
18 |
|
7 |
Author URI: http://ideasilo.wordpress.com/
|
8 |
Text Domain: contact-form-7
|
9 |
Domain Path: /languages/
|
10 |
+
Version: 4.5
|
11 |
*/
|
12 |
|
13 |
+
define( 'WPCF7_VERSION', '4.5' );
|
14 |
|
15 |
+
define( 'WPCF7_REQUIRED_WP_VERSION', '4.4' );
|
16 |
|
17 |
define( 'WPCF7_PLUGIN', __FILE__ );
|
18 |
|