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*:(.*)$/', $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 ]*:(.*)$/', $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*\/?>$/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:.!?#$&@_/|\%\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 ]*\/?>$/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:.!?#$&@_/|\%\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