Contact Form 7 - Version 3.1.1

Version Description

  • Introduce wpcf7_verify_nonce() and wpcf7_create_nonce() for front-end use. This fixes the wrong nonce issue on cached pages.
  • Preserve new line characters in form shortcode contents to bypass auto-p filter.
  • Use [\r\n\t ] instead of [\s] in regex to prevent issues of checkbox/radio options containing some UTF-8 characters are dropped.
  • Bug fixed: tag generator menu is incorrectly shown on WordPress 3.2.x.
  • The jQuery Form Plugin (jquery.form.js) has been updated to 2.96.
  • Translations for Latvian, Hebrew, German, and Japanese have been updated.
Download this release

Release Info

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

Code changes from version 3.1 to 3.1.1

admin/admin.php CHANGED
@@ -169,6 +169,34 @@ function wpcf7_admin_enqueue_scripts() {
169
'tagGenerators' => $taggenerators ) );
170
}
171
172
function wpcf7_admin_management_page() {
173
$contact_forms = get_posts( array(
174
'numberposts' => -1,
169
'tagGenerators' => $taggenerators ) );
170
}
171
172
+ add_action( 'admin_print_footer_scripts', 'wpcf7_print_taggenerators_json', 20 );
173
+
174
+ function wpcf7_print_taggenerators_json() { // for backward compatibility
175
+ global $plugin_page, $wpcf7_tag_generators;
176
+
177
+ if ( ! version_compare( get_bloginfo( 'version' ), '3.3-dev', '<' ) )
178
+ return;
179
+
180
+ if ( ! isset( $plugin_page ) || 'wpcf7' != $plugin_page )
181
+ return;
182
+
183
+ $taggenerators = array();
184
+
185
+ foreach ( (array) $wpcf7_tag_generators as $name => $tg ) {
186
+ $taggenerators[$name] = array_merge(
187
+ (array) $tg['options'],
188
+ array( 'title' => $tg['title'], 'content' => $tg['content'] ) );
189
+ }
190
+
191
+ ?>
192
+ <script type="text/javascript">
193
+ /* <![CDATA[ */
194
+ _wpcf7.tagGenerators = <?php echo json_encode( $taggenerators ) ?>;
195
+ /* ]]> */
196
+ </script>
197
+ <?php
198
+ }
199
+
200
function wpcf7_admin_management_page() {
201
$contact_forms = get_posts( array(
202
'numberposts' => -1,
includes/classes.php CHANGED
@@ -82,7 +82,7 @@ class WPCF7_ContactForm {
82
'_wpcf7_unit_tag' => $this->unit_tag );
83
84
if ( WPCF7_VERIFY_NONCE )
85
- $hidden_fields['_wpnonce'] = wp_create_nonce( $this->unit_tag );
86
87
$content = '';
88
@@ -222,9 +222,14 @@ class WPCF7_ContactForm {
222
continue;
223
224
$name = $fe['name'];
225
- $pipes = $fe['pipes'];
226
$value = $_POST[$name];
227
228
if ( WPCF7_USE_PIPE && is_a( $pipes, 'WPCF7_Pipes' ) && ! $pipes->zero() ) {
229
if ( is_array( $value) ) {
230
$new_value = array();
@@ -330,7 +335,7 @@ class WPCF7_ContactForm {
330
}
331
332
function verify_nonce() {
333
- return wp_verify_nonce( $_POST['_wpnonce'], $_POST['_wpcf7_unit_tag'] );
334
}
335
336
/* Mail */
@@ -484,7 +489,7 @@ class WPCF7_ContactForm {
484
$values = array();
485
486
foreach ( $tmp_settings as $setting ) {
487
- if ( preg_match('/^([a-zA-Z0-9_]+)\s*:(.*)#x2F;', $setting, $matches ) ) {
488
if ( $matches[1] != $name )
489
continue;
490
82
'_wpcf7_unit_tag' => $this->unit_tag );
83
84
if ( WPCF7_VERIFY_NONCE )
85
+ $hidden_fields['_wpnonce'] = wpcf7_create_nonce( $this->unit_tag );
86
87
$content = '';
88
222
continue;
223
224
$name = $fe['name'];
225
+
226
+ if ( ! isset( $_POST[$name] ) )
227
+ continue;
228
+
229
$value = $_POST[$name];
230
231
+ $pipes = $fe['pipes'];
232
+
233
if ( WPCF7_USE_PIPE && is_a( $pipes, 'WPCF7_Pipes' ) && ! $pipes->zero() ) {
234
if ( is_array( $value) ) {
235
$new_value = array();
335
}
336
337
function verify_nonce() {
338
+ return wpcf7_verify_nonce( $_POST['_wpnonce'], $_POST['_wpcf7_unit_tag'] );
339
}
340
341
/* Mail */
489
$values = array();
490
491
foreach ( $tmp_settings as $setting ) {
492
+ if ( preg_match('/^([a-zA-Z0-9_]+)[\t ]*:(.*)#x2F;', $setting, $matches ) ) {
493
if ( $matches[1] != $name )
494
continue;
495
includes/controller.php CHANGED
@@ -153,7 +153,7 @@ add_filter( 'widget_text', 'wpcf7_widget_text_filter', 9 );
153
function wpcf7_widget_text_filter( $content ) {
154
global $wpcf7;
155
156
- if ( ! preg_match( '/\[\s*contact-form(-7)?\s.*?\]/', $content ) )
157
return $content;
158
159
$wpcf7->widget_count += 1;
@@ -231,7 +231,7 @@ function wpcf7_enqueue_scripts() {
231
// so we need to deregister it and re-register the latest one
232
wp_deregister_script( 'jquery-form' );
233
wp_register_script( 'jquery-form', wpcf7_plugin_url( 'jquery.form.js' ),
234
- array( 'jquery' ), '2.52', true );
235
236
$in_footer = true;
237
if ( 'header' === WPCF7_LOAD_JS )
153
function wpcf7_widget_text_filter( $content ) {
154
global $wpcf7;
155
156
+ if ( ! preg_match( '/\[[\r\n\t ]*contact-form(-7)?[\r\n\t ].*?\]/', $content ) )
157
return $content;
158
159
$wpcf7->widget_count += 1;
231
// so we need to deregister it and re-register the latest one
232
wp_deregister_script( 'jquery-form' );
233
wp_register_script( 'jquery-form', wpcf7_plugin_url( 'jquery.form.js' ),
234
+ array( 'jquery' ), '2.96', true );
235
236
$in_footer = true;
237
if ( 'header' === WPCF7_LOAD_JS )
includes/functions.php CHANGED
@@ -186,7 +186,7 @@ function wpcf7_l10n() {
186
'sq' => __( 'Albanian', 'wpcf7' ),
187
'ar' => __( 'Arabic', 'wpcf7' ),
188
'hy_AM' => __( 'Armenian', 'wpcf7' ),
189
- 'az_AZ' => __( 'Azeri', 'wpcf7' ),
190
'bn_BD' => __( 'Bangla', 'wpcf7' ),
191
'be_BY' => __( 'Belarusian', 'wpcf7' ),
192
'bs' => __( 'Bosnian', 'wpcf7' ),
@@ -257,4 +257,32 @@ function wpcf7_ajax_loader() {
257
return apply_filters( 'wpcf7_ajax_loader', $url );
258
}
259
260
?>
186
'sq' => __( 'Albanian', 'wpcf7' ),
187
'ar' => __( 'Arabic', 'wpcf7' ),
188
'hy_AM' => __( 'Armenian', 'wpcf7' ),
189
+ 'az_AZ' => __( 'Azerbaijani', 'wpcf7' ),
190
'bn_BD' => __( 'Bangla', 'wpcf7' ),
191
'be_BY' => __( 'Belarusian', 'wpcf7' ),
192
'bs' => __( 'Bosnian', 'wpcf7' ),
257
return apply_filters( 'wpcf7_ajax_loader', $url );
258
}
259
260
+ /* Nonce functions: wpcf7_verify_nonce() and wpcf7_create_nonce()
261
+ * For front-end use only.
262
+ * Almost the same as wp_verify_nonce() and wp_create_nonce() except that $uid is always 0.
263
+ */
264
+
265
+ function wpcf7_verify_nonce( $nonce, $action = -1 ) {
266
+ $i = wp_nonce_tick();
267
+ $uid = 0;
268
+
269
+ // Nonce generated 0-12 hours ago
270
+ if ( substr( wp_hash( $i . $action . $uid, 'nonce' ), -12, 10 ) == $nonce )
271
+ return 1;
272
+
273
+ // Nonce generated 12-24 hours ago
274
+ if ( substr( wp_hash( ( $i - 1 ) . $action . $uid, 'nonce' ), -12, 10 ) == $nonce )
275
+ return 2;
276
+
277
+ // Invalid nonce
278
+ return false;
279
+ }
280
+
281
+ function wpcf7_create_nonce( $action = -1 ) {
282
+ $i = wp_nonce_tick();
283
+ $uid = 0;
284
+
285
+ return substr( wp_hash( $i . $action . $uid, 'nonce' ), -12, 10 );
286
+ }
287
+
288
?>
includes/shortcodes.php CHANGED
@@ -36,9 +36,11 @@ class WPCF7_ShortcodeManager {
36
return $m[0];
37
38
$tag = $m[2];
39
- $attr = trim( preg_replace( '/\s+/', ' ', $m[3] ) );
40
$content = trim( $m[5] );
41
42
$result = $m[1] . '[' . $tag
43
. ( $attr ? ' ' . $attr : '' )
44
. ( $m[4] ? ' ' . $m[4] : '' )
@@ -71,7 +73,7 @@ class WPCF7_ShortcodeManager {
71
$tagregexp = join( '|', array_map( 'preg_quote', $tagnames ) );
72
73
return '(\[?)'
74
- . '\[(' . $tagregexp . ')(?:\s(.*?))?(?:\s(\/))?\]'
75
. '(?:([^[]*?)\[\/\2\])?'
76
. '(\]?)';
77
}
@@ -125,7 +127,7 @@ class WPCF7_ShortcodeManager {
125
}
126
127
$content = trim( $m[5] );
128
- $content = preg_replace( "/<br\s*\/?>#x2F;m", '', $content );
129
$scanned_tag['content'] = $content;
130
131
$scanned_tag = apply_filters( 'wpcf7_form_tag', $scanned_tag, $this->exec );
@@ -145,11 +147,11 @@ class WPCF7_ShortcodeManager {
145
$text = preg_replace( "/[\x{00a0}\x{200b}]+/u", " ", $text );
146
$text = stripcslashes( trim( $text ) );
147
148
- $pattern = '%^([-+*=0-9a-zA-Z:.!?#amp;@_/|\%\s]*?)((?:\s*"[^"]*"|\s*\'[^\']*\')*)$%';
149
150
if ( preg_match( $pattern, $text, $match ) ) {
151
if ( ! empty( $match[1] ) ) {
152
- $atts['options'] = preg_split( '/[\s]+/', trim( $match[1] ) );
153
}
154
if ( ! empty( $match[2] ) ) {
155
preg_match_all( '/"[^"]*"|\'[^\']*\'/', $match[2], $matched_values );
36
return $m[0];
37
38
$tag = $m[2];
39
+ $attr = trim( preg_replace( '/[\r\n\t ]+/', ' ', $m[3] ) );
40
$content = trim( $m[5] );
41
42
+ $content = str_replace( "\n", '<WPPreserveNewline />', $content );
43
+
44
$result = $m[1] . '[' . $tag
45
. ( $attr ? ' ' . $attr : '' )
46
. ( $m[4] ? ' ' . $m[4] : '' )
73
$tagregexp = join( '|', array_map( 'preg_quote', $tagnames ) );
74
75
return '(\[?)'
76
+ . '\[(' . $tagregexp . ')(?:[\r\n\t ](.*?))?(?:[\r\n\t ](\/))?\]'
77
. '(?:([^[]*?)\[\/\2\])?'
78
. '(\]?)';
79
}
127
}
128
129
$content = trim( $m[5] );
130
+ $content = preg_replace( "/<br[\r\n\t ]*\/?>#x2F;m", '', $content );
131
$scanned_tag['content'] = $content;
132
133
$scanned_tag = apply_filters( 'wpcf7_form_tag', $scanned_tag, $this->exec );
147
$text = preg_replace( "/[\x{00a0}\x{200b}]+/u", " ", $text );
148
$text = stripcslashes( trim( $text ) );
149
150
+ $pattern = '%^([-+*=0-9a-zA-Z:.!?#amp;@_/|\%\r\n\t ]*?)((?:[\r\n\t ]*"[^"]*"|[\r\n\t ]*\'[^\']*\')*)$%';
151
152
if ( preg_match( $pattern, $text, $match ) ) {
153
if ( ! empty( $match[1] ) ) {
154
+ $atts['options'] = preg_split( '/[\r\n\t ]+/', trim( $match[1] ) );
155
}
156
if ( ! empty( $match[2] ) ) {
157
preg_match_all( '/"[^"]*"|\'[^\']*\'/', $match[2], $matched_values );
jquery.form.js CHANGED
@@ -1,6 +1,6 @@
1
/*!
2
* jQuery Form Plugin
3
- * version: 2.95 (30-JAN-2012)
4
* @requires jQuery v1.3.2 or later
5
*
6
* Examples and documentation at: http://malsup.com/jquery/form/
@@ -14,7 +14,7 @@
14
Usage Note:
15
-----------
16
Do not use both ajaxSubmit and ajaxForm on the same form. These
17
- functions are intended to be exclusive. Use ajaxSubmit if you want
18
to bind your own submit handler to the form. For example,
19
20
$(document).ready(function() {
@@ -34,7 +34,15 @@
34
target: '#output'
35
});
36
});
37
38
When using ajaxForm, the ajaxSubmit function will be invoked for you
39
at the appropriate time.
40
*/
@@ -634,8 +642,11 @@ $.fn.ajaxSubmit = function(options) {
634
* the form itself.
635
*/
636
$.fn.ajaxForm = function(options) {
637
// in jQuery 1.3+ we can fix mistakes with the ready state
638
- if (this.length === 0) {
639
var o = { s: this.selector, c: this.context };
640
if (!$.isReady && o.s) {
641
log('DOM not ready, queuing ajaxForm');
@@ -649,42 +660,60 @@ $.fn.ajaxForm = function(options) {
649
return this;
650
}
651
652
- return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
653
- if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
654
- e.preventDefault();
655
- $(this).ajaxSubmit(options);
656
- }
657
- }).bind('click.form-plugin', function(e) {
658
- var target = e.target;
659
- var $el = $(target);
660
- if (!($el.is(":submit,input:image"))) {
661
- // is this a child element of the submit el? (ex: a span within a button)
662
- var t = $el.closest(':submit');
663
- if (t.length == 0) {
664
- return;
665
- }
666
- target = t[0];
667
- }
668
- var form = this;
669
- form.clk = target;
670
- if (target.type == 'image') {
671
- if (e.offsetX != undefined) {
672
- form.clk_x = e.offsetX;
673
- form.clk_y = e.offsetY;
674
- } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
675
- var offset = $el.offset();
676
- form.clk_x = e.pageX - offset.left;
677
- form.clk_y = e.pageY - offset.top;
678
- } else {
679
- form.clk_x = e.pageX - target.offsetLeft;
680
- form.clk_y = e.pageY - target.offsetTop;
681
- }
682
}
683
- // clear form vars
684
- setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
685
- });
686
};
687
688
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
689
$.fn.ajaxFormUnbind = function() {
690
return this.unbind('submit.form-plugin click.form-plugin');
1
/*!
2
* jQuery Form Plugin
3
+ * version: 2.96 (16-FEB-2012)
4
* @requires jQuery v1.3.2 or later
5
*
6
* Examples and documentation at: http://malsup.com/jquery/form/
14
Usage Note:
15
-----------
16
Do not use both ajaxSubmit and ajaxForm on the same form. These
17
+ functions are mutually exclusive. Use ajaxSubmit if you want
18
to bind your own submit handler to the form. For example,
19
20
$(document).ready(function() {
34
target: '#output'
35
});
36
});
37
+
38
+ You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
39
+ form does not have to exist when you invoke ajaxForm:
40
41
+ $('#myForm').ajaxForm({
42
+ delegation: true,
43
+ target: '#output'
44
+ });
45
+
46
When using ajaxForm, the ajaxSubmit function will be invoked for you
47
at the appropriate time.
48
*/
642
* the form itself.
643
*/
644
$.fn.ajaxForm = function(options) {
645
+ options = options || {};
646
+ options.delegation = options.delegation && $.isFunction($.fn.on);
647
+
648
// in jQuery 1.3+ we can fix mistakes with the ready state
649
+ if (!options.delegation && this.length === 0) {
650
var o = { s: this.selector, c: this.context };
651
if (!$.isReady && o.s) {
652
log('DOM not ready, queuing ajaxForm');
660
return this;
661
}
662
663
+ if ( options.delegation ) {
664
+ $(document)
665
+ .off('submit.form-plugin', this.selector, doAjaxSubmit)
666
+ .off('click.form-plugin', this.selector, captureSubmittingElement)
667
+ .on('submit.form-plugin', this.selector, options, doAjaxSubmit)
668
+ .on('click.form-plugin', this.selector, options, captureSubmittingElement);
669
+ return this;
670
+ }
671
+
672
+ return this.ajaxFormUnbind()
673
+ .bind('submit.form-plugin', options, doAjaxSubmit)
674
+ .bind('click.form-plugin', options, captureSubmittingElement);
675
+ };
676
+
677
+ // private event handlers
678
+ function doAjaxSubmit(e) {
679
+ var options = e.data;
680
+ if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
681
+ e.preventDefault();
682
+ $(this).ajaxSubmit(options);
683
+ }
684
+ }
685
+
686
+ function captureSubmittingElement(e) {
687
+ var target = e.target;
688
+ var $el = $(target);
689
+ if (!($el.is(":submit,input:image"))) {
690
+ // is this a child element of the submit el? (ex: a span within a button)
691
+ var t = $el.closest(':submit');
692
+ if (t.length == 0) {
693
+ return;
694
}
695
+ target = t[0];
696
+ }
697
+ var form = this;
698
+ form.clk = target;
699
+ if (target.type == 'image') {
700
+ if (e.offsetX != undefined) {
701
+ form.clk_x = e.offsetX;
702
+ form.clk_y = e.offsetY;
703
+ } else if (typeof $.fn.offset == 'function') {
704
+ var offset = $el.offset();
705
+ form.clk_x = e.pageX - offset.left;
706
+ form.clk_y = e.pageY - offset.top;
707
+ } else {
708
+ form.clk_x = e.pageX - target.offsetLeft;
709
+ form.clk_y = e.pageY - target.offsetTop;
710
+ }
711
+ }
712
+ // clear form vars
713
+ setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
714
};
715
716
+
717
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
718
$.fn.ajaxFormUnbind = function() {
719
return this.unbind('submit.form-plugin click.form-plugin');
languages/wpcf7-de_DE.mo CHANGED
Binary file
languages/wpcf7-he_IL.mo CHANGED
Binary file
languages/wpcf7-ja.mo CHANGED
Binary file
languages/wpcf7-lv.mo CHANGED
Binary file
languages/wpcf7.pot CHANGED
@@ -2,8 +2,8 @@ msgid ""
2
msgstr ""
3
"Project-Id-Version: Contact Form 7\n"
4
"Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2012-01-29 16:04+0900\n"
6
- "PO-Revision-Date: 2012-01-29 16:04+0900\n"
7
"Last-Translator: Takayuki Miyoshi <takayukister@gmail.com>\n"
8
"Language-Team: \n"
9
"MIME-Version: 1.0\n"
@@ -53,71 +53,71 @@ msgstr ""
53
msgid "Generate Tag"
54
msgstr ""
55
56
- #: contact-form-7/admin/admin.php:216
57
msgid "Settings"
58
msgstr ""
59
60
- #: contact-form-7/admin/admin.php:227
61
msgid "http://contactform7.com/"
62
msgstr ""
63
64
- #: contact-form-7/admin/admin.php:228
65
msgid "Contactform7.com"
66
msgstr ""
67
68
- #: contact-form-7/admin/admin.php:229
69
msgid "http://contactform7.com/docs/"
70
msgstr ""
71
72
- #: contact-form-7/admin/admin.php:230
73
msgid "Docs"
74
msgstr ""
75
76
- #: contact-form-7/admin/admin.php:231
77
msgid "http://contactform7.com/faq/"
78
msgstr ""
79
80
- #: contact-form-7/admin/admin.php:232
81
msgid "FAQ"
82
msgstr ""
83
84
- #: contact-form-7/admin/admin.php:233
85
msgid "http://contactform7.com/support/"
86
msgstr ""
87
88
- #: contact-form-7/admin/admin.php:234
89
msgid "Support"
90
msgstr ""
91
92
- #: contact-form-7/admin/admin.php:248
93
msgid "Contact form created."
94
msgstr ""
95
96
- #: contact-form-7/admin/admin.php:251
97
msgid "Contact form saved."
98
msgstr ""
99
100
- #: contact-form-7/admin/admin.php:254
101
msgid "Contact form deleted."
102
msgstr ""
103
104
- #: contact-form-7/admin/admin.php:288
105
msgid "Contact Form 7 needs your support. Please donate today."
106
msgstr ""
107
108
- #: contact-form-7/admin/admin.php:289
109
msgid "Your contribution is needed for making this plugin better."
110
msgstr ""
111
112
- #: contact-form-7/admin/admin.php:295
113
msgid "http://contactform7.com/donate/"
114
msgstr ""
115
116
- #: contact-form-7/admin/admin.php:295
117
msgid "Donate"
118
msgstr ""
119
120
- #: contact-form-7/admin/admin.php:315
121
#, php-format
122
msgid "<strong>Contact Form 7 %1$s requires WordPress %2$s or higher.</strong> Please <a href=\"%3$s\">update WordPress</a> first."
123
msgstr ""
@@ -220,7 +220,7 @@ msgstr ""
220
msgid "Message body:"
221
msgstr ""
222
223
- #: contact-form-7/includes/classes.php:660
224
msgid "Untitled"
225
msgstr ""
226
@@ -339,7 +339,7 @@ msgid "Armenian"
339
msgstr ""
340
341
#: contact-form-7/includes/functions.php:189
342
- msgid "Azeri"
343
msgstr ""
344
345
#: contact-form-7/includes/functions.php:190
2
msgstr ""
3
"Project-Id-Version: Contact Form 7\n"
4
"Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2012-02-22 15:57+0900\n"
6
+ "PO-Revision-Date: 2012-02-22 15:58+0900\n"
7
"Last-Translator: Takayuki Miyoshi <takayukister@gmail.com>\n"
8
"Language-Team: \n"
9
"MIME-Version: 1.0\n"
53
msgid "Generate Tag"
54
msgstr ""
55
56
+ #: contact-form-7/admin/admin.php:244
57
msgid "Settings"
58
msgstr ""
59
60
+ #: contact-form-7/admin/admin.php:255
61
msgid "http://contactform7.com/"
62
msgstr ""
63
64
+ #: contact-form-7/admin/admin.php:256
65
msgid "Contactform7.com"
66
msgstr ""
67
68
+ #: contact-form-7/admin/admin.php:257
69
msgid "http://contactform7.com/docs/"
70
msgstr ""
71
72
+ #: contact-form-7/admin/admin.php:258
73
msgid "Docs"
74
msgstr ""
75
76
+ #: contact-form-7/admin/admin.php:259
77
msgid "http://contactform7.com/faq/"
78
msgstr ""
79
80
+ #: contact-form-7/admin/admin.php:260
81
msgid "FAQ"
82
msgstr ""
83
84
+ #: contact-form-7/admin/admin.php:261
85
msgid "http://contactform7.com/support/"
86
msgstr ""
87
88
+ #: contact-form-7/admin/admin.php:262
89
msgid "Support"
90
msgstr ""
91
92
+ #: contact-form-7/admin/admin.php:276
93
msgid "Contact form created."
94
msgstr ""
95
96
+ #: contact-form-7/admin/admin.php:279
97
msgid "Contact form saved."
98
msgstr ""
99
100
+ #: contact-form-7/admin/admin.php:282
101
msgid "Contact form deleted."
102
msgstr ""
103
104
+ #: contact-form-7/admin/admin.php:316
105
msgid "Contact Form 7 needs your support. Please donate today."
106
msgstr ""
107
108
+ #: contact-form-7/admin/admin.php:317
109
msgid "Your contribution is needed for making this plugin better."
110
msgstr ""
111
112
+ #: contact-form-7/admin/admin.php:323
113
msgid "http://contactform7.com/donate/"
114
msgstr ""
115
116
+ #: contact-form-7/admin/admin.php:323
117
msgid "Donate"
118
msgstr ""
119
120
+ #: contact-form-7/admin/admin.php:343
121
#, php-format
122
msgid "<strong>Contact Form 7 %1$s requires WordPress %2$s or higher.</strong> Please <a href=\"%3$s\">update WordPress</a> first."
123
msgstr ""
220
msgid "Message body:"
221
msgstr ""
222
223
+ #: contact-form-7/includes/classes.php:665
224
msgid "Untitled"
225
msgstr ""
226
339
msgstr ""
340
341
#: contact-form-7/includes/functions.php:189
342
+ msgid "Azerbaijani"
343
msgstr ""
344
345
#: contact-form-7/includes/functions.php:190
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://contactform7.com/donate/
4
Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
5
Requires at least: 3.2
6
Tested up to: 3.3.1
7
- Stable tag: 3.1
8
9
Just another contact form plugin. Simple but flexible.
10
@@ -28,7 +28,7 @@ It is hard to continue development and support for this plugin without contribut
28
* Albanian (sq) - [Olgi Zenullari](http://www.olgizenullari.com/)
29
* Arabic (ar) - [Tarek Chaaban](http://www.chaaban.info/), Muhammed Lardi, [Yaser Maadan](http://www.englize.com/)
30
* Armenian (hy_AM) - [Emmanuelle Traduction](http://www.translatonline.com/)
31
- * Azeri (az_AZ) - [Zaur Bayramov](http://bloglayaq.com/)
32
* Bangla (bn_BD) - [SM Mehdi Akram](http://www.shamokaldarpon.com/)
33
* Belarusian (be_BY) - [Igor Dubilei](http://www.iflexion.com/)
34
* Bosnian (bs) - [Vedran](http://www.seorabbit.com/)
@@ -49,7 +49,7 @@ It is hard to continue development and support for this plugin without contribut
49
* Georgian (ka_GE) - [Nodar Rocko Davituri](http://davituri.com/)
50
* German (de_DE) - [Marcel Spitau](http://blog.spitau.de), [Ivan Graf](http://blog.bildergallery.com/)
51
* Greek (el) - [Nick Mouratidis](http://www.kepik.gr/), [Pr. friedlich](http://friedlich.wordpress.com/)
52
- * Hebrew (he_IL) - [Yaron Ofer](http://www.gadgetguru.co.il/)
53
* Hindi (hi_IN) - [Tarun Joshi](http://www.readers-cafe.net/), [Ashish](http://outshinesolutions.com/)
54
* Hungarian (hu_HU) - [Andras Hirschler](http://hia.itblog.hu/), [János Csárdi-Braunstein](http://blogocska.org/), [Farkas Győző](http://www.sakraft.hu/)
55
* Indonesian (Bahasa Indonesia; id_ID) - [Hendry Lee](http://blogbuildingu.com/), [Belajar Seo Indonesia](http://dhany.web.id/panduan-seo)
@@ -113,6 +113,15 @@ Do you have questions or issues with Contact Form 7? Use these support channels
113
114
== Changelog ==
115
116
= 3.1 =
117
118
* Offer nonce verification for contact forms.
4
Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
5
Requires at least: 3.2
6
Tested up to: 3.3.1
7
+ Stable tag: 3.1.1
8
9
Just another contact form plugin. Simple but flexible.
10
28
* Albanian (sq) - [Olgi Zenullari](http://www.olgizenullari.com/)
29
* Arabic (ar) - [Tarek Chaaban](http://www.chaaban.info/), Muhammed Lardi, [Yaser Maadan](http://www.englize.com/)
30
* Armenian (hy_AM) - [Emmanuelle Traduction](http://www.translatonline.com/)
31
+ * Azerbaijani (az_AZ) - [Zaur Bayramov](http://bloglayaq.com/)
32
* Bangla (bn_BD) - [SM Mehdi Akram](http://www.shamokaldarpon.com/)
33
* Belarusian (be_BY) - [Igor Dubilei](http://www.iflexion.com/)
34
* Bosnian (bs) - [Vedran](http://www.seorabbit.com/)
49
* Georgian (ka_GE) - [Nodar Rocko Davituri](http://davituri.com/)
50
* German (de_DE) - [Marcel Spitau](http://blog.spitau.de), [Ivan Graf](http://blog.bildergallery.com/)
51
* Greek (el) - [Nick Mouratidis](http://www.kepik.gr/), [Pr. friedlich](http://friedlich.wordpress.com/)
52
+ * Hebrew (he_IL) - [Yaron Ofer](http://www.gadgetguru.co.il/), [Arik Galansky](http://www.arikg.co.il/)
53
* Hindi (hi_IN) - [Tarun Joshi](http://www.readers-cafe.net/), [Ashish](http://outshinesolutions.com/)
54
* Hungarian (hu_HU) - [Andras Hirschler](http://hia.itblog.hu/), [János Csárdi-Braunstein](http://blogocska.org/), [Farkas Győző](http://www.sakraft.hu/)
55
* Indonesian (Bahasa Indonesia; id_ID) - [Hendry Lee](http://blogbuildingu.com/), [Belajar Seo Indonesia](http://dhany.web.id/panduan-seo)
113
114
== Changelog ==
115
116
+ = 3.1.1 =
117
+
118
+ * Introduce wpcf7_verify_nonce() and wpcf7_create_nonce() for front-end use. This fixes the wrong nonce issue on cached pages.
119
+ * Preserve new line characters in form shortcode contents to bypass auto-p filter.
120
+ * Use [\r\n\t ] instead of [\s] in regex to prevent issues of checkbox/radio options containing some UTF-8 characters are dropped.
121
+ * Bug fixed: tag generator menu is incorrectly shown on WordPress 3.2.x.
122
+ * The jQuery Form Plugin (jquery.form.js) has been updated to 2.96.
123
+ * Translations for Latvian, Hebrew, German, and Japanese have been updated.
124
+
125
= 3.1 =
126
127
* Offer nonce verification for contact forms.
wp-contact-form-7.php CHANGED
@@ -7,7 +7,7 @@ Author: Takayuki Miyoshi
7
Author URI: http://ideasilo.wordpress.com/
8
Text Domain: wpcf7
9
Domain Path: /languages/
10
- Version: 3.1
11
*/
12
13
/* Copyright 2007-2012 Takayuki Miyoshi (email: takayukister at gmail.com)
@@ -27,7 +27,7 @@ Version: 3.1
27
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28
*/
29
30
- define( 'WPCF7_VERSION', '3.1' );
31
32
define( 'WPCF7_REQUIRED_WP_VERSION', '3.2' );
33
7
Author URI: http://ideasilo.wordpress.com/
8
Text Domain: wpcf7
9
Domain Path: /languages/
10
+ Version: 3.1.1
11
*/
12
13
/* Copyright 2007-2012 Takayuki Miyoshi (email: takayukister at gmail.com)
27
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28
*/
29
30
+ define( 'WPCF7_VERSION', '3.1.1' );
31
32
define( 'WPCF7_REQUIRED_WP_VERSION', '3.2' );
33