Contact Form Clean and Simple - Version 4.7.1

Version Description

  • Tested with Wordpress version 5.3 Fixed XSS vulnerability in GDPR consent message
Download this release

Release Info

Developer megnicholas
Plugin Icon wp plugin Contact Form Clean and Simple
Version 4.7.1
Comparing to
See all releases

Code changes from version 4.7.0 to 4.7.1

class.cscf_settings.php CHANGED
@@ -1,425 +1,429 @@
1
- <?php
2
-
3
- /*
4
- * creates the settings page for the plugin
5
- */
6
-
7
- class cscf_settings
8
- {
9
- public
10
- function __construct()
11
- {
12
-
13
- if (is_admin()) {
14
- add_action('admin_menu', array(
15
- $this,
16
- 'add_plugin_page'
17
- ));
18
- add_action('admin_init', array(
19
- $this,
20
- 'page_init'
21
- ));
22
- }
23
- }
24
-
25
- public
26
- function add_plugin_page()
27
- {
28
-
29
- // This page will be under "Settings"
30
- add_options_page(__('Contact Form Settings', 'clean-and-simple-contact-form-by-meg-nicholas'), __('Contact Form', 'clean-and-simple-contact-form-by-meg-nicholas'), 'manage_options', 'contact-form-settings', array(
31
- $this,
32
- 'create_admin_page'
33
- ));
34
- }
35
-
36
- public
37
- function create_admin_page()
38
- {
39
- ?>
40
-
41
- <h2><?php _e('Clean and Simple Contact Form Settings', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></h2>
42
- <hr/>
43
-
44
- <div style="float:right;position: relative;width:250px;">
45
-
46
- <div style="border:1px solid;padding:5px;margin-bottom: 8px;text-align:center;">
47
- <h3><?php _e("Donate $10, $20 or $50!", "clean-and-simple-contact-form-by-meg-nicholas"); ?></h3>
48
-
49
- <div>
50
- <p><?php _e("If you like this plugin, please donate to support development and maintenance of:", "clean-and-simple-contact-form-by-meg-nicholas"); ?></p>
51
-
52
- <h3><?php _e("Clean and Simple Contact Form!", "clean-and-simple-contact-form-by-meg-nicholas"); ?></h3>
53
-
54
- <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
55
- <input type="hidden" name="cmd" value="_s-xclick">
56
- <input type="hidden" name="hosted_button_id" value="ALAGLZ3APUZMW">
57
- <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif"
58
- border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
59
- <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1"
60
- height="1">
61
- </form>
62
-
63
- </div>
64
- </div>
65
- </div>
66
- <div style="float:left;">
67
- <p><?php _e('You are using version', 'clean-and-simple-contact-form-by-meg-nicholas'); ?> <?php echo CSCF_VERSION_NUM; ?></p>
68
-
69
- <p><?php _e('If you find this plugin useful please consider', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
70
- <a target="_blank"
71
- href="http://wordpress.org/support/view/plugin-reviews/<?php echo CSCF_PLUGIN_NAME; ?>">
72
- <?php _e('leaving a review', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
73
- </a>
74
- . <?php _e('Thank you!', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
75
- </p>
76
-
77
- <?php if (cscf_PluginSettings::IsJetPackContactFormEnabled()) { ?>
78
- <p class="highlight">
79
- <?php _e('NOTICE: You have JetPack\'s Contact Form enabled please deactivate it or use the shortcode [cscf-contact-form] instead.', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
80
- &nbsp; <a target="_blank"
81
- href="http://www.megnicholas.co.uk/articles/clean-and-simple-contact-form-and-jetpack/"><?php _e('Read More', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></a>
82
- </p>
83
- <?php } ?>
84
-
85
- <p class="howto"><?php _e("Please Note: To add the contact form to your page please add the text", "clean-and-simple-contact-form-by-meg-nicholas"); ?>
86
- <code>[cscf-contact-form]</code> <?php _e("to your post or page.", "clean-and-simple-contact-form-by-meg-nicholas"); ?></p>
87
-
88
- <form method="post" action="options.php">
89
- <?php
90
- submit_button();
91
-
92
- /* This prints out all hidden setting fields*/
93
- settings_fields('test_option_group');
94
- do_settings_sections('contact-form-settings');
95
-
96
- submit_button();
97
- ?>
98
- </form>
99
- </div>
100
- <?php
101
- }
102
-
103
- public
104
- function page_init()
105
- {
106
- add_settings_section('section_recaptcha', '<h3>' . __('ReCAPTCHA Settings', 'clean-and-simple-contact-form-by-meg-nicholas') . '</h3>', array(
107
- $this,
108
- 'print_section_info_recaptcha'
109
- ), 'contact-form-settings');
110
- register_setting('test_option_group', CSCF_OPTIONS_KEY, array(
111
- $this,
112
- 'check_form'
113
- ));
114
- add_settings_field('use_recaptcha', __('Use reCAPTCHA :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
115
- $this,
116
- 'create_fields'
117
- ), 'contact-form-settings', 'section_recaptcha', array(
118
- 'use_recaptcha'
119
- ));
120
- add_settings_field('theme', __('reCAPTCHA Theme :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
121
- $this,
122
- 'create_fields'
123
- ), 'contact-form-settings', 'section_recaptcha', array(
124
- 'theme'
125
- ));
126
- add_settings_field('recaptcha_public_key', __('reCAPTCHA Public Key :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
127
- $this,
128
- 'create_fields'
129
- ), 'contact-form-settings', 'section_recaptcha', array(
130
- 'recaptcha_public_key'
131
- ));
132
- add_settings_field('recaptcha_private_key', __('reCAPTCHA Private Key :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
133
- $this,
134
- 'create_fields'
135
- ), 'contact-form-settings', 'section_recaptcha', array(
136
- 'recaptcha_private_key'
137
- ));
138
- add_settings_section('section_message', '<h3>' . __('Message Settings', 'clean-and-simple-contact-form-by-meg-nicholas') . '</h3>', array(
139
- $this,
140
- 'print_section_info_message'
141
- ), 'contact-form-settings');
142
- add_settings_field('recipient_emails', __('Recipient Emails :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
143
- $this,
144
- 'create_fields'
145
- ), 'contact-form-settings', 'section_message', array(
146
- 'recipient_emails'
147
- ));
148
- add_settings_field('confirm-email', __('Confirm Email Address :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
149
- $this,
150
- 'create_fields'
151
- ), 'contact-form-settings', 'section_message', array(
152
- 'confirm-email'
153
- ));
154
- add_settings_field('email-sender', __('Allow users to email themselves a copy :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
155
- $this,
156
- 'create_fields'
157
- ), 'contact-form-settings', 'section_message', array(
158
- 'email-sender'
159
- ));
160
- add_settings_field('contact-consent', '<span style="color:red;">' . __('*New*','clean-and-simple-contact-form-by-meg-nicholas') . '</span> ' . __('Add a consent checkbox :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
161
- $this,
162
- 'create_fields'
163
- ), 'contact-form-settings', 'section_message', array(
164
- 'contact-consent'
165
- ));
166
- add_settings_field('contact-consent-msg', '<span style="color:red;">' . __('*New*','clean-and-simple-contact-form-by-meg-nicholas') . '</span> ' . __('Consent message :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
167
- $this,
168
- 'create_fields'
169
- ), 'contact-form-settings', 'section_message', array(
170
- 'contact-consent-msg'
171
- ));
172
- add_settings_field('override-from', __('Override \'From\' Address :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
173
- $this,
174
- 'create_fields'
175
- ), 'contact-form-settings', 'section_message', array(
176
- 'override-from'
177
- ));
178
- add_settings_field('from-email', __('\'From\' Email Address :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
179
- $this,
180
- 'create_fields'
181
- ), 'contact-form-settings', 'section_message', array(
182
- 'from-email'
183
- ));
184
- add_settings_field('subject', __('Email Subject :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
185
- $this,
186
- 'create_fields'
187
- ), 'contact-form-settings', 'section_message', array(
188
- 'subject'
189
- ));
190
- add_settings_field('message', __('Message :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
191
- $this,
192
- 'create_fields'
193
- ), 'contact-form-settings', 'section_message', array(
194
- 'message'
195
- ));
196
- add_settings_field('sent_message_heading', __('Message Sent Heading :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
197
- $this,
198
- 'create_fields'
199
- ), 'contact-form-settings', 'section_message', array(
200
- 'sent_message_heading'
201
- ));
202
- add_settings_field('sent_message_body', __('Message Sent Content :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
203
- $this,
204
- 'create_fields'
205
- ), 'contact-form-settings', 'section_message', array(
206
- 'sent_message_body'
207
- ));
208
- add_settings_section('section_styling', '<h3>' . __('Styling and Validation', 'clean-and-simple-contact-form-by-meg-nicholas') . '</h3>', array(
209
- $this,
210
- 'print_section_info_styling'
211
- ), 'contact-form-settings');
212
- add_settings_field('load_stylesheet', __('Use the plugin default stylesheet (un-tick to use your theme style sheet instead) :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
213
- $this,
214
- 'create_fields'
215
- ), 'contact-form-settings', 'section_styling', array(
216
- 'load_stylesheet'
217
- ));
218
- add_settings_field('use_client_validation', __('Use client side validation (AJAX) :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
219
- $this,
220
- 'create_fields'
221
- ), 'contact-form-settings', 'section_styling', array(
222
- 'use_client_validation'
223
- ));
224
- }
225
-
226
- public
227
- function check_form($input)
228
- {
229
-
230
- //recaptcha theme
231
- if (isset($input['theme'])) $input['theme'] = filter_var($input['theme'], FILTER_SANITIZE_STRING);
232
-
233
- //recaptcha_public_key
234
- if (isset($input['recaptcha_public_key'])) $input['recaptcha_public_key'] = filter_var($input['recaptcha_public_key'], FILTER_SANITIZE_STRING);
235
-
236
- //recaptcha_private_key
237
- if (isset($input['recaptcha_private_key'])) $input['recaptcha_private_key'] = filter_var($input['recaptcha_private_key'], FILTER_SANITIZE_STRING);
238
-
239
- //sent_message_heading
240
- $input['sent_message_heading'] = filter_var($input['sent_message_heading'], FILTER_SANITIZE_STRING);
241
-
242
- //sent_message_body
243
- $input['sent_message_body'] = filter_var($input['sent_message_body'], FILTER_SANITIZE_STRING);
244
-
245
- //message
246
- $input['message'] = filter_var($input['message'], FILTER_SANITIZE_STRING);
247
-
248
- //recipient_emails
249
- foreach ($input['recipient_emails'] as $key => $recipient) {
250
- if (!filter_var($input['recipient_emails'][$key], FILTER_VALIDATE_EMAIL)) {
251
- unset($input['recipient_emails'][$key]);
252
- }
253
- }
254
-
255
- //from
256
- if (!filter_var($input['from-email'], FILTER_VALIDATE_EMAIL)) {
257
- unset($input['from-email']);
258
- }
259
-
260
- //subject
261
- $input['subject'] = trim(filter_var($input['subject'], FILTER_SANITIZE_STRING));
262
- if (empty($input['subject'])) {
263
- unset($input['subject']);
264
- }
265
-
266
- if (isset($_POST['add_recipient'])) {
267
- $input['recipient_emails'][] = "";
268
- }
269
-
270
- if (isset($_POST['remove_recipient'])) {
271
- foreach ($_POST['remove_recipient'] as $key => $element) {
272
- unset($input['recipient_emails'][$key]);
273
- }
274
- }
275
-
276
- //tidy up the keys
277
- $tidiedRecipients = array();
278
- foreach ($input['recipient_emails'] as $recipient) {
279
- $tidiedRecipients[] = $recipient;
280
- }
281
- $input['recipient_emails'] = $tidiedRecipients;
282
-
283
-
284
- return $input;
285
- }
286
-
287
- public
288
- function print_section_info_recaptcha()
289
- {
290
- print __('Enter your reCAPTCHA settings below :', 'clean-and-simple-contact-form-by-meg-nicholas');
291
- print "<p>" . __('To use reCAPTCHA you must get an API key from', 'clean-and-simple-contact-form-by-meg-nicholas') . " <a target='_blank' href='" . csf_RecaptchaV2::$signUpUrl . "'>Google reCAPTCHA</a></p>";
292
- }
293
-
294
- public
295
- function print_section_info_message()
296
- {
297
- print __('Enter your message settings below :', 'clean-and-simple-contact-form-by-meg-nicholas');
298
- }
299
-
300
- public
301
- function print_section_info_styling()
302
- {
303
-
304
- //print 'Enter your styling settings below:';
305
-
306
- }
307
-
308
- public
309
- function create_fields($args)
310
- {
311
- $fieldname = $args[0];
312
-
313
- switch ($fieldname) {
314
- case 'use_recaptcha':
315
- $checked = cscf_PluginSettings::UseRecaptcha() == true ? "checked" : "";
316
- ?><input type="checkbox" <?php echo $checked; ?> id="use_recaptcha"
317
- name="<?php echo CSCF_OPTIONS_KEY; ?>[use_recaptcha]"><?php
318
- break;
319
- case 'load_stylesheet':
320
- $checked = cscf_PluginSettings::LoadStyleSheet() == true ? "checked" : "";
321
- ?><input type="checkbox" <?php echo $checked; ?> id="load_stylesheet"
322
- name="<?php echo CSCF_OPTIONS_KEY; ?>[load_stylesheet]"><?php
323
- break;
324
- case 'recaptcha_public_key':
325
- $disabled = cscf_PluginSettings::UseRecaptcha() == false ? "readonly" : "";
326
- ?><input <?php echo $disabled; ?> type="text" size="60" id="recaptcha_public_key"
327
- name="<?php echo CSCF_OPTIONS_KEY; ?>[recaptcha_public_key]"
328
- value="<?php echo cscf_PluginSettings::PublicKey(); ?>" /><?php
329
- break;
330
- case 'recaptcha_private_key':
331
- $disabled = cscf_PluginSettings::UseRecaptcha() == false ? "readonly" : "";
332
- ?><input <?php echo $disabled; ?> type="text" size="60" id="recaptcha_private_key"
333
- name="<?php echo CSCF_OPTIONS_KEY; ?>[recaptcha_private_key]"
334
- value="<?php echo cscf_PluginSettings::PrivateKey(); ?>" /><?php
335
- break;
336
- case 'recipient_emails':
337
- ?>
338
- <ul id="recipients"><?php
339
- foreach (cscf_PluginSettings::RecipientEmails() as $key => $recipientEmail) {
340
- ?>
341
- <li class="recipient_email" data-element="<?php echo $key; ?>">
342
- <input class="enter_recipient" type="email" size="50"
343
- name="<?php echo CSCF_OPTIONS_KEY; ?>[recipient_emails][<?php echo $key ?>]"
344
- value="<?php echo $recipientEmail; ?>"/>
345
- <input class="add_recipient" title="Add New Recipient" type="submit" name="add_recipient"
346
- value="+">
347
- <input class="remove_recipient" title="Remove This Recipient" type="submit"
348
- name="remove_recipient[<?php echo $key; ?>]" value="-">
349
- </li>
350
-
351
- <?php
352
- }
353
- ?></ul><?php
354
- break;
355
- case 'confirm-email':
356
- $checked = cscf_PluginSettings::ConfirmEmail() == true ? "checked" : "";
357
- ?><input type="checkbox" <?php echo $checked; ?> id="confirm-email"
358
- name="<?php echo CSCF_OPTIONS_KEY; ?>[confirm-email]"><?php
359
- break;
360
- case 'override-from':
361
- $checked = cscf_PluginSettings::OverrideFrom() == true ? "checked" : "";
362
- ?><input type="checkbox" <?php echo $checked; ?> id="override-from"
363
- name="<?php echo CSCF_OPTIONS_KEY; ?>[override-from]"><?php
364
- break;
365
- case 'email-sender':
366
- $checked = cscf_PluginSettings::EmailToSender() == true ? "checked" : "";
367
- ?><input type="checkbox" <?php echo $checked; ?> id="email-sender"
368
- name="<?php echo CSCF_OPTIONS_KEY; ?>[email-sender]"><?php
369
- break;
370
- case 'contact-consent':
371
- $checked = cscf_PluginSettings::ContactConsent() == true ? "checked" : "";
372
- ?><input type="checkbox" <?php echo $checked; ?> id="contact-consent"
373
- name="<?php echo CSCF_OPTIONS_KEY; ?>[contact-consent]"><?php
374
- break;
375
- case 'contact-consent-msg':
376
- ?><input type="text" size="60" id="contact-consent-msg"
377
- name="<?php echo CSCF_OPTIONS_KEY; ?>[contact-consent-msg]"
378
- value="<?php echo cscf_PluginSettings::ContactConsentMsg(); ?>"><?php
379
- break;
380
- case 'from-email':
381
- $disabled = cscf_PluginSettings::OverrideFrom() == false ? "readonly" : "";
382
- ?><input <?php echo $disabled; ?> type="text" size="60" id="from-email"
383
- name="<?php echo CSCF_OPTIONS_KEY; ?>[from-email]"
384
- value="<?php echo cscf_PluginSettings::FromEmail(); ?>" /><?php
385
- break;
386
- case 'subject':
387
- ?><input type="text" size="60" id="subject" name="<?php echo CSCF_OPTIONS_KEY; ?>[subject]"
388
- value="<?php echo cscf_PluginSettings::Subject(); ?>" /><?php
389
- break;
390
- case 'sent_message_heading':
391
- ?><input type="text" size="60" id="sent_message_heading"
392
- name="<?php echo CSCF_OPTIONS_KEY; ?>[sent_message_heading]"
393
- value="<?php echo cscf_PluginSettings::SentMessageHeading(); ?>" /><?php
394
- break;
395
- case 'sent_message_body':
396
- ?><textarea cols="63" rows="8"
397
- name="<?php echo CSCF_OPTIONS_KEY; ?>[sent_message_body]"><?php echo cscf_PluginSettings::SentMessageBody(); ?></textarea><?php
398
- break;
399
- case 'message':
400
- ?><textarea cols="63" rows="8"
401
- name="<?php echo CSCF_OPTIONS_KEY; ?>[message]"><?php echo cscf_PluginSettings::Message(); ?></textarea><?php
402
- break;
403
- case 'theme':
404
- $theme = cscf_PluginSettings::Theme();
405
- $disabled = cscf_PluginSettings::UseRecaptcha() == false ? "disabled" : "";
406
- ?>
407
- <select <?php echo $disabled; ?> id="theme" name="<?php echo CSCF_OPTIONS_KEY; ?>[theme]">
408
- <option <?php echo $theme == "light" ? "selected" : ""; ?>
409
- value="light"><?php _e('Light', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></option>
410
- <option <?php echo $theme == "dark" ? "selected" : ""; ?>
411
- value="dark"><?php _e('Dark', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></option>
412
- </select>
413
- <?php
414
- break;
415
- case 'use_client_validation':
416
- $checked = cscf_PluginSettings::UseClientValidation() == true ? "checked" : "";
417
- ?><input type="checkbox" <?php echo $checked; ?> id="use_client_validation"
418
- name="<?php echo CSCF_OPTIONS_KEY; ?>[use_client_validation]"><?php
419
- break;
420
- default:
421
- break;
422
- }
423
- }
424
- }
425
-
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * creates the settings page for the plugin
5
+ */
6
+
7
+ class cscf_settings
8
+ {
9
+ public
10
+ function __construct()
11
+ {
12
+
13
+ if (is_admin()) {
14
+ add_action('admin_menu', array(
15
+ $this,
16
+ 'add_plugin_page'
17
+ ));
18
+ add_action('admin_init', array(
19
+ $this,
20
+ 'page_init'
21
+ ));
22
+ }
23
+ }
24
+
25
+ public
26
+ function add_plugin_page()
27
+ {
28
+
29
+ // This page will be under "Settings"
30
+ add_options_page(__('Contact Form Settings', 'clean-and-simple-contact-form-by-meg-nicholas'), __('Contact Form', 'clean-and-simple-contact-form-by-meg-nicholas'), 'manage_options', 'contact-form-settings', array(
31
+ $this,
32
+ 'create_admin_page'
33
+ ));
34
+ }
35
+
36
+ public
37
+ function create_admin_page()
38
+ {
39
+ ?>
40
+
41
+ <h2><?php _e('Clean and Simple Contact Form Settings', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></h2>
42
+ <hr/>
43
+
44
+ <div style="float:right;position: relative;width:250px;">
45
+
46
+ <div style="border:1px solid;padding:5px;margin-bottom: 8px;text-align:center;">
47
+ <h3><?php _e("Donate $10, $20 or $50!", "clean-and-simple-contact-form-by-meg-nicholas"); ?></h3>
48
+
49
+ <div>
50
+ <p><?php _e("If you like this plugin, please donate to support development and maintenance of:", "clean-and-simple-contact-form-by-meg-nicholas"); ?></p>
51
+
52
+ <h3><?php _e("Clean and Simple Contact Form!", "clean-and-simple-contact-form-by-meg-nicholas"); ?></h3>
53
+
54
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
55
+ <input type="hidden" name="cmd" value="_s-xclick">
56
+ <input type="hidden" name="hosted_button_id" value="ALAGLZ3APUZMW">
57
+ <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif"
58
+ border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
59
+ <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1"
60
+ height="1">
61
+ </form>
62
+
63
+ </div>
64
+ </div>
65
+ </div>
66
+ <div style="float:left;">
67
+ <p><?php _e('You are using version', 'clean-and-simple-contact-form-by-meg-nicholas'); ?> <?php echo CSCF_VERSION_NUM; ?></p>
68
+
69
+ <p><?php _e('If you find this plugin useful please consider', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
70
+ <a target="_blank"
71
+ href="http://wordpress.org/support/view/plugin-reviews/<?php echo CSCF_PLUGIN_NAME; ?>">
72
+ <?php _e('leaving a review', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
73
+ </a>
74
+ . <?php _e('Thank you!', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
75
+ </p>
76
+
77
+ <?php if (cscf_PluginSettings::IsJetPackContactFormEnabled()) { ?>
78
+ <p class="highlight">
79
+ <?php _e('NOTICE: You have JetPack\'s Contact Form enabled please deactivate it or use the shortcode [cscf-contact-form] instead.', 'clean-and-simple-contact-form-by-meg-nicholas'); ?>
80
+ &nbsp; <a target="_blank"
81
+ href="http://www.megnicholas.co.uk/articles/clean-and-simple-contact-form-and-jetpack/"><?php _e('Read More', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></a>
82
+ </p>
83
+ <?php } ?>
84
+
85
+ <p class="howto"><?php _e("Please Note: To add the contact form to your page please add the text", "clean-and-simple-contact-form-by-meg-nicholas"); ?>
86
+ <code>[cscf-contact-form]</code> <?php _e("to your post or page.", "clean-and-simple-contact-form-by-meg-nicholas"); ?></p>
87
+
88
+ <form method="post" action="options.php">
89
+ <?php
90
+ submit_button();
91
+
92
+ /* This prints out all hidden setting fields*/
93
+ settings_fields('test_option_group');
94
+ do_settings_sections('contact-form-settings');
95
+
96
+ submit_button();
97
+ ?>
98
+ </form>
99
+ </div>
100
+ <?php
101
+ }
102
+
103
+ public
104
+ function page_init()
105
+ {
106
+ add_settings_section('section_recaptcha', '<h3>' . __('ReCAPTCHA Settings', 'clean-and-simple-contact-form-by-meg-nicholas') . '</h3>', array(
107
+ $this,
108
+ 'print_section_info_recaptcha'
109
+ ), 'contact-form-settings');
110
+ register_setting('test_option_group', CSCF_OPTIONS_KEY, array(
111
+ $this,
112
+ 'check_form'
113
+ ));
114
+ add_settings_field('use_recaptcha', __('Use reCAPTCHA :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
115
+ $this,
116
+ 'create_fields'
117
+ ), 'contact-form-settings', 'section_recaptcha', array(
118
+ 'use_recaptcha'
119
+ ));
120
+ add_settings_field('theme', __('reCAPTCHA Theme :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
121
+ $this,
122
+ 'create_fields'
123
+ ), 'contact-form-settings', 'section_recaptcha', array(
124
+ 'theme'
125
+ ));
126
+ add_settings_field('recaptcha_public_key', __('reCAPTCHA Public Key :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
127
+ $this,
128
+ 'create_fields'
129
+ ), 'contact-form-settings', 'section_recaptcha', array(
130
+ 'recaptcha_public_key'
131
+ ));
132
+ add_settings_field('recaptcha_private_key', __('reCAPTCHA Private Key :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
133
+ $this,
134
+ 'create_fields'
135
+ ), 'contact-form-settings', 'section_recaptcha', array(
136
+ 'recaptcha_private_key'
137
+ ));
138
+ add_settings_section('section_message', '<h3>' . __('Message Settings', 'clean-and-simple-contact-form-by-meg-nicholas') . '</h3>', array(
139
+ $this,
140
+ 'print_section_info_message'
141
+ ), 'contact-form-settings');
142
+ add_settings_field('recipient_emails', __('Recipient Emails :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
143
+ $this,
144
+ 'create_fields'
145
+ ), 'contact-form-settings', 'section_message', array(
146
+ 'recipient_emails'
147
+ ));
148
+ add_settings_field('confirm-email', __('Confirm Email Address :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
149
+ $this,
150
+ 'create_fields'
151
+ ), 'contact-form-settings', 'section_message', array(
152
+ 'confirm-email'
153
+ ));
154
+ add_settings_field('email-sender', __('Allow users to email themselves a copy :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
155
+ $this,
156
+ 'create_fields'
157
+ ), 'contact-form-settings', 'section_message', array(
158
+ 'email-sender'
159
+ ));
160
+ add_settings_field('contact-consent', '<span style="color:red;">' . __('*New*','clean-and-simple-contact-form-by-meg-nicholas') . '</span> ' . __('Add a consent checkbox :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
161
+ $this,
162
+ 'create_fields'
163
+ ), 'contact-form-settings', 'section_message', array(
164
+ 'contact-consent'
165
+ ));
166
+ add_settings_field('contact-consent-msg', '<span style="color:red;">' . __('*New*','clean-and-simple-contact-form-by-meg-nicholas') . '</span> ' . __('Consent message :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
167
+ $this,
168
+ 'create_fields'
169
+ ), 'contact-form-settings', 'section_message', array(
170
+ 'contact-consent-msg'
171
+ ));
172
+ add_settings_field('override-from', __('Override \'From\' Address :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
173
+ $this,
174
+ 'create_fields'
175
+ ), 'contact-form-settings', 'section_message', array(
176
+ 'override-from'
177
+ ));
178
+ add_settings_field('from-email', __('\'From\' Email Address :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
179
+ $this,
180
+ 'create_fields'
181
+ ), 'contact-form-settings', 'section_message', array(
182
+ 'from-email'
183
+ ));
184
+ add_settings_field('subject', __('Email Subject :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
185
+ $this,
186
+ 'create_fields'
187
+ ), 'contact-form-settings', 'section_message', array(
188
+ 'subject'
189
+ ));
190
+ add_settings_field('message', __('Message :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
191
+ $this,
192
+ 'create_fields'
193
+ ), 'contact-form-settings', 'section_message', array(
194
+ 'message'
195
+ ));
196
+ add_settings_field('sent_message_heading', __('Message Sent Heading :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
197
+ $this,
198
+ 'create_fields'
199
+ ), 'contact-form-settings', 'section_message', array(
200
+ 'sent_message_heading'
201
+ ));
202
+ add_settings_field('sent_message_body', __('Message Sent Content :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
203
+ $this,
204
+ 'create_fields'
205
+ ), 'contact-form-settings', 'section_message', array(
206
+ 'sent_message_body'
207
+ ));
208
+ add_settings_section('section_styling', '<h3>' . __('Styling and Validation', 'clean-and-simple-contact-form-by-meg-nicholas') . '</h3>', array(
209
+ $this,
210
+ 'print_section_info_styling'
211
+ ), 'contact-form-settings');
212
+ add_settings_field('load_stylesheet', __('Use the plugin default stylesheet (un-tick to use your theme style sheet instead) :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
213
+ $this,
214
+ 'create_fields'
215
+ ), 'contact-form-settings', 'section_styling', array(
216
+ 'load_stylesheet'
217
+ ));
218
+ add_settings_field('use_client_validation', __('Use client side validation (AJAX) :', 'clean-and-simple-contact-form-by-meg-nicholas'), array(
219
+ $this,
220
+ 'create_fields'
221
+ ), 'contact-form-settings', 'section_styling', array(
222
+ 'use_client_validation'
223
+ ));
224
+ }
225
+
226
+ public
227
+ function check_form($input)
228
+ {
229
+
230
+ //recaptcha theme
231
+ if (isset($input['theme'])) $input['theme'] = filter_var($input['theme'], FILTER_SANITIZE_STRING);
232
+
233
+ //recaptcha_public_key
234
+ if (isset($input['recaptcha_public_key'])) $input['recaptcha_public_key'] = filter_var($input['recaptcha_public_key'], FILTER_SANITIZE_STRING);
235
+
236
+ //recaptcha_private_key
237
+ if (isset($input['recaptcha_private_key'])) $input['recaptcha_private_key'] = filter_var($input['recaptcha_private_key'], FILTER_SANITIZE_STRING);
238
+
239
+ //sent_message_heading
240
+ $input['sent_message_heading'] = filter_var($input['sent_message_heading'], FILTER_SANITIZE_STRING);
241
+
242
+ //sent_message_body
243
+ $input['sent_message_body'] = filter_var($input['sent_message_body'], FILTER_SANITIZE_STRING);
244
+
245
+ //message
246
+ $input['message'] = filter_var($input['message'], FILTER_SANITIZE_STRING);
247
+
248
+
249
+ //consent message
250
+ $input['contact-consent-msg'] = filter_var($input['contact-consent-msg'], FILTER_SANITIZE_STRING);
251
+
252
+ //recipient_emails
253
+ foreach ($input['recipient_emails'] as $key => $recipient) {
254
+ if (!filter_var($input['recipient_emails'][$key], FILTER_VALIDATE_EMAIL)) {
255
+ unset($input['recipient_emails'][$key]);
256
+ }
257
+ }
258
+
259
+ //from
260
+ if (!filter_var($input['from-email'], FILTER_VALIDATE_EMAIL)) {
261
+ unset($input['from-email']);
262
+ }
263
+
264
+ //subject
265
+ $input['subject'] = trim(filter_var($input['subject'], FILTER_SANITIZE_STRING));
266
+ if (empty($input['subject'])) {
267
+ unset($input['subject']);
268
+ }
269
+
270
+ if (isset($_POST['add_recipient'])) {
271
+ $input['recipient_emails'][] = "";
272
+ }
273
+
274
+ if (isset($_POST['remove_recipient'])) {
275
+ foreach ($_POST['remove_recipient'] as $key => $element) {
276
+ unset($input['recipient_emails'][$key]);
277
+ }
278
+ }
279
+
280
+ //tidy up the keys
281
+ $tidiedRecipients = array();
282
+ foreach ($input['recipient_emails'] as $recipient) {
283
+ $tidiedRecipients[] = $recipient;
284
+ }
285
+ $input['recipient_emails'] = $tidiedRecipients;
286
+
287
+
288
+ return $input;
289
+ }
290
+
291
+ public
292
+ function print_section_info_recaptcha()
293
+ {
294
+ print __('Enter your reCAPTCHA settings below :', 'clean-and-simple-contact-form-by-meg-nicholas');
295
+ print "<p>" . __('To use reCAPTCHA you must get an API key from', 'clean-and-simple-contact-form-by-meg-nicholas') . " <a target='_blank' href='" . csf_RecaptchaV2::$signUpUrl . "'>Google reCAPTCHA</a></p>";
296
+ }
297
+
298
+ public
299
+ function print_section_info_message()
300
+ {
301
+ print __('Enter your message settings below :', 'clean-and-simple-contact-form-by-meg-nicholas');
302
+ }
303
+
304
+ public
305
+ function print_section_info_styling()
306
+ {
307
+
308
+ //print 'Enter your styling settings below:';
309
+
310
+ }
311
+
312
+ public
313
+ function create_fields($args)
314
+ {
315
+ $fieldname = $args[0];
316
+
317
+ switch ($fieldname) {
318
+ case 'use_recaptcha':
319
+ $checked = cscf_PluginSettings::UseRecaptcha() == true ? "checked" : "";
320
+ ?><input type="checkbox" <?php echo $checked; ?> id="use_recaptcha"
321
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[use_recaptcha]"><?php
322
+ break;
323
+ case 'load_stylesheet':
324
+ $checked = cscf_PluginSettings::LoadStyleSheet() == true ? "checked" : "";
325
+ ?><input type="checkbox" <?php echo $checked; ?> id="load_stylesheet"
326
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[load_stylesheet]"><?php
327
+ break;
328
+ case 'recaptcha_public_key':
329
+ $disabled = cscf_PluginSettings::UseRecaptcha() == false ? "readonly" : "";
330
+ ?><input <?php echo $disabled; ?> type="text" size="60" id="recaptcha_public_key"
331
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[recaptcha_public_key]"
332
+ value="<?php echo cscf_PluginSettings::PublicKey(); ?>" /><?php
333
+ break;
334
+ case 'recaptcha_private_key':
335
+ $disabled = cscf_PluginSettings::UseRecaptcha() == false ? "readonly" : "";
336
+ ?><input <?php echo $disabled; ?> type="text" size="60" id="recaptcha_private_key"
337
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[recaptcha_private_key]"
338
+ value="<?php echo cscf_PluginSettings::PrivateKey(); ?>" /><?php
339
+ break;
340
+ case 'recipient_emails':
341
+ ?>
342
+ <ul id="recipients"><?php
343
+ foreach (cscf_PluginSettings::RecipientEmails() as $key => $recipientEmail) {
344
+ ?>
345
+ <li class="recipient_email" data-element="<?php echo $key; ?>">
346
+ <input class="enter_recipient" type="email" size="50"
347
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[recipient_emails][<?php echo $key ?>]"
348
+ value="<?php echo $recipientEmail; ?>"/>
349
+ <input class="add_recipient" title="Add New Recipient" type="submit" name="add_recipient"
350
+ value="+">
351
+ <input class="remove_recipient" title="Remove This Recipient" type="submit"
352
+ name="remove_recipient[<?php echo $key; ?>]" value="-">
353
+ </li>
354
+
355
+ <?php
356
+ }
357
+ ?></ul><?php
358
+ break;
359
+ case 'confirm-email':
360
+ $checked = cscf_PluginSettings::ConfirmEmail() == true ? "checked" : "";
361
+ ?><input type="checkbox" <?php echo $checked; ?> id="confirm-email"
362
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[confirm-email]"><?php
363
+ break;
364
+ case 'override-from':
365
+ $checked = cscf_PluginSettings::OverrideFrom() == true ? "checked" : "";
366
+ ?><input type="checkbox" <?php echo $checked; ?> id="override-from"
367
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[override-from]"><?php
368
+ break;
369
+ case 'email-sender':
370
+ $checked = cscf_PluginSettings::EmailToSender() == true ? "checked" : "";
371
+ ?><input type="checkbox" <?php echo $checked; ?> id="email-sender"
372
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[email-sender]"><?php
373
+ break;
374
+ case 'contact-consent':
375
+ $checked = cscf_PluginSettings::ContactConsent() == true ? "checked" : "";
376
+ ?><input type="checkbox" <?php echo $checked; ?> id="contact-consent"
377
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[contact-consent]"><?php
378
+ break;
379
+ case 'contact-consent-msg':
380
+ ?><input type="text" size="60" id="contact-consent-msg"
381
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[contact-consent-msg]"
382
+ value="<?php echo cscf_PluginSettings::ContactConsentMsg(); ?>"><?php
383
+ break;
384
+ case 'from-email':
385
+ $disabled = cscf_PluginSettings::OverrideFrom() == false ? "readonly" : "";
386
+ ?><input <?php echo $disabled; ?> type="text" size="60" id="from-email"
387
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[from-email]"
388
+ value="<?php echo cscf_PluginSettings::FromEmail(); ?>" /><?php
389
+ break;
390
+ case 'subject':
391
+ ?><input type="text" size="60" id="subject" name="<?php echo CSCF_OPTIONS_KEY; ?>[subject]"
392
+ value="<?php echo cscf_PluginSettings::Subject(); ?>" /><?php
393
+ break;
394
+ case 'sent_message_heading':
395
+ ?><input type="text" size="60" id="sent_message_heading"
396
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[sent_message_heading]"
397
+ value="<?php echo cscf_PluginSettings::SentMessageHeading(); ?>" /><?php
398
+ break;
399
+ case 'sent_message_body':
400
+ ?><textarea cols="63" rows="8"
401
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[sent_message_body]"><?php echo cscf_PluginSettings::SentMessageBody(); ?></textarea><?php
402
+ break;
403
+ case 'message':
404
+ ?><textarea cols="63" rows="8"
405
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[message]"><?php echo cscf_PluginSettings::Message(); ?></textarea><?php
406
+ break;
407
+ case 'theme':
408
+ $theme = cscf_PluginSettings::Theme();
409
+ $disabled = cscf_PluginSettings::UseRecaptcha() == false ? "disabled" : "";
410
+ ?>
411
+ <select <?php echo $disabled; ?> id="theme" name="<?php echo CSCF_OPTIONS_KEY; ?>[theme]">
412
+ <option <?php echo $theme == "light" ? "selected" : ""; ?>
413
+ value="light"><?php _e('Light', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></option>
414
+ <option <?php echo $theme == "dark" ? "selected" : ""; ?>
415
+ value="dark"><?php _e('Dark', 'clean-and-simple-contact-form-by-meg-nicholas'); ?></option>
416
+ </select>
417
+ <?php
418
+ break;
419
+ case 'use_client_validation':
420
+ $checked = cscf_PluginSettings::UseClientValidation() == true ? "checked" : "";
421
+ ?><input type="checkbox" <?php echo $checked; ?> id="use_client_validation"
422
+ name="<?php echo CSCF_OPTIONS_KEY; ?>[use_client_validation]"><?php
423
+ break;
424
+ default:
425
+ break;
426
+ }
427
+ }
428
+ }
429
+
clean-and-simple-contact-form-by-meg-nicholas.php CHANGED
@@ -1,79 +1,79 @@
1
- <?php
2
- /**
3
- * @package Clean and Simple Contact Form
4
- */
5
-
6
- /*
7
- Plugin Name: Clean and Simple Contact Form
8
- Plugin URI: http://www.megnicholas.co.uk/wordpress-plugins/clean-and-simple-contact-form
9
- Description: A clean and simple contact form with Google reCAPTCHA and Twitter Bootstrap markup.
10
- Version: 4.7.0
11
- Author: Meghan Nicholas
12
- Author URI: http://www.megnicholas.co.uk
13
- License: GPLv2 or later
14
- Text Domain: clean-and-simple-contact-form-by-meg-nicholas
15
- Domain Path: /languages
16
- */
17
-
18
- /*
19
- This program is free software; you can redistribute it and/or
20
- modify it under the terms of the GNU General Public License
21
- as published by the Free Software Foundation; either version 2
22
- of the License, or (at your option) any later version.
23
-
24
- This program is distributed in the hope that it will be useful,
25
- but WITHOUT ANY WARRANTY; without even the implied warranty of
26
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27
- GNU General Public License for more details.
28
-
29
- You should have received a copy of the GNU General Public License
30
- along with this program; if not, write to the Free Software
31
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
32
- */
33
-
34
- /*
35
- * @package Main
36
- */
37
- include ('shortcodes/contact-form.php');
38
- include ('class.cscf.php');
39
- include ('class.cscf_pluginsettings.php');
40
- include ('class.cscf_settings.php');
41
- include ('class.cscf_contact.php');
42
- include ('class.view.php');
43
- include ('class.cscf_filters.php');
44
- include ('ajax.php');
45
- include ('recaptchav2.php');
46
-
47
- if (!defined('CSCF_THEME_DIR')) define('CSCF_THEME_DIR', ABSPATH . 'wp-content/themes/' . get_template());
48
-
49
- if (!defined('CSCF_PLUGIN_NAME')) define('CSCF_PLUGIN_NAME', 'clean-and-simple-contact-form-by-meg-nicholas');
50
-
51
- if (!defined('CSCF_PLUGIN_DIR')) define('CSCF_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . CSCF_PLUGIN_NAME);
52
-
53
- if (!defined('CSCF_PLUGIN_URL')) define('CSCF_PLUGIN_URL', WP_PLUGIN_URL . '/' . CSCF_PLUGIN_NAME);
54
-
55
- if (!defined('CSCF_VERSION_KEY')) define('CSCF_VERSION_KEY', 'cscf_version');
56
-
57
- if (!defined('CSCF_VERSION_NUM')) define('CSCF_VERSION_NUM', '4.7.0');
58
-
59
- if (!defined('CSCF_OPTIONS_KEY')) define('CSCF_OPTIONS_KEY', 'cscf_options');
60
-
61
- $cscf = new cscf();
62
-
63
- /*get the current version and update options to the new option*/
64
- $oldVersion = get_option(CSCF_VERSION_KEY);
65
- update_option(CSCF_VERSION_KEY, CSCF_VERSION_NUM);
66
-
67
- /*If this is a new installation then set some defaults*/
68
- if ( $oldVersion == false ) {
69
- $options = get_option(CSCF_OPTIONS_KEY);
70
- $options['use_client_validation'] = true;
71
- $options['load_stylesheet'] = true;
72
- $options['confirm-email'] = true;
73
- update_option(CSCF_OPTIONS_KEY,$options);
74
- }
75
-
76
- /*if necessary do an upgrade*/
77
- if ($oldVersion < CSCF_VERSION_NUM) {
78
- $cscf->Upgrade($oldVersion);
79
  }
1
+ <?php
2
+ /**
3
+ * @package Clean and Simple Contact Form
4
+ */
5
+
6
+ /*
7
+ Plugin Name: Clean and Simple Contact Form
8
+ Plugin URI: http://www.megnicholas.co.uk/wordpress-plugins/clean-and-simple-contact-form
9
+ Description: A clean and simple contact form with Google reCAPTCHA and Twitter Bootstrap markup.
10
+ Version: 4.7.1
11
+ Author: Meghan Nicholas
12
+ Author URI: http://www.megnicholas.co.uk
13
+ License: GPLv2 or later
14
+ Text Domain: clean-and-simple-contact-form-by-meg-nicholas
15
+ Domain Path: /languages
16
+ */
17
+
18
+ /*
19
+ This program is free software; you can redistribute it and/or
20
+ modify it under the terms of the GNU General Public License
21
+ as published by the Free Software Foundation; either version 2
22
+ of the License, or (at your option) any later version.
23
+
24
+ This program is distributed in the hope that it will be useful,
25
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
26
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27
+ GNU General Public License for more details.
28
+
29
+ You should have received a copy of the GNU General Public License
30
+ along with this program; if not, write to the Free Software
31
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
32
+ */
33
+
34
+ /*
35
+ * @package Main
36
+ */
37
+ include ('shortcodes/contact-form.php');
38
+ include ('class.cscf.php');
39
+ include ('class.cscf_pluginsettings.php');
40
+ include ('class.cscf_settings.php');
41
+ include ('class.cscf_contact.php');
42
+ include ('class.view.php');
43
+ include ('class.cscf_filters.php');
44
+ include ('ajax.php');
45
+ include ('recaptchav2.php');
46
+
47
+ if (!defined('CSCF_THEME_DIR')) define('CSCF_THEME_DIR', ABSPATH . 'wp-content/themes/' . get_template());
48
+
49
+ if (!defined('CSCF_PLUGIN_NAME')) define('CSCF_PLUGIN_NAME', 'clean-and-simple-contact-form-by-meg-nicholas');
50
+
51
+ if (!defined('CSCF_PLUGIN_DIR')) define('CSCF_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . CSCF_PLUGIN_NAME);
52
+
53
+ if (!defined('CSCF_PLUGIN_URL')) define('CSCF_PLUGIN_URL', WP_PLUGIN_URL . '/' . CSCF_PLUGIN_NAME);
54
+
55
+ if (!defined('CSCF_VERSION_KEY')) define('CSCF_VERSION_KEY', 'cscf_version');
56
+
57
+ if (!defined('CSCF_VERSION_NUM')) define('CSCF_VERSION_NUM', '4.7.1');
58
+
59
+ if (!defined('CSCF_OPTIONS_KEY')) define('CSCF_OPTIONS_KEY', 'cscf_options');
60
+
61
+ $cscf = new cscf();
62
+
63
+ /*get the current version and update options to the new option*/
64
+ $oldVersion = get_option(CSCF_VERSION_KEY);
65
+ update_option(CSCF_VERSION_KEY, CSCF_VERSION_NUM);
66
+
67
+ /*If this is a new installation then set some defaults*/
68
+ if ( $oldVersion == false ) {
69
+ $options = get_option(CSCF_OPTIONS_KEY);
70
+ $options['use_client_validation'] = true;
71
+ $options['load_stylesheet'] = true;
72
+ $options['confirm-email'] = true;
73
+ update_option(CSCF_OPTIONS_KEY,$options);
74
+ }
75
+
76
+ /*if necessary do an upgrade*/
77
+ if ($oldVersion < CSCF_VERSION_NUM) {
78
+ $cscf->Upgrade($oldVersion);
79
  }
readme.txt CHANGED
@@ -1,428 +1,431 @@
1
- === Contact Form Clean and Simple ===
2
- Contributors: megnicholas
3
- Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AKQM4KSBQ4H66
4
- License: GPLv2 or later
5
- License URI: http://www.gnu.org/licenses/gpl.html
6
- Tags: simple, contact, form, contact button, contact form, contact form plugin, akismet, contacts, contacts form plugin, contact me, feedback form, bootstrap, twitter, google, reCAPTCHA, ajax, secure
7
- Requires at least: 3.3
8
- Tested up to: 4.9.6
9
- Stable tag: 4.6.2
10
-
11
- A clean and simple AJAX contact form with Google reCAPTCHA, Twitter Bootstrap markup and Akismet spam filtering.
12
-
13
- == Description ==
14
- A clean and simple AJAX contact form with Google reCAPTCHA, Twitter Bootstrap markup and Akismet spam filtering.
15
-
16
- * **Clean**: all user inputs are stripped in order to avoid cross-site scripting (XSS) vulnerabilities.
17
-
18
- * **Simple**: AJAX enabled validation and submission for immediate response and guidance for your users (can be switched off).
19
-
20
- * **Stylish**: Use the included stylesheet or switch it off and use your own for seamless integration with your website.
21
- Uses **Twitter Bootstrap** classes.
22
-
23
- * **Safe**: All incoming data is scanned for spam with **Akismet**.
24
-
25
- This is a straightforward contact form for your WordPress site. There is very minimal set-up
26
- required. Simply install, activate, and then place the short code **[cscf-contact-form]** on your web page.
27
-
28
- A standard set of input boxes are provided, these include Email Address, Name, Message and a nice big ‘Send Message’ button.
29
-
30
- When your user has completed the form an email will be sent to you containing your user’s message.
31
- To reply simply click the ‘reply’ button on your email client.
32
- The email address used is the one you have set up in WordPress under ‘Settings’ -> ‘General’, so do check this is correct.
33
-
34
- To help prevent spam all data is scanned via Akismet.
35
- For this to work you must have the [Akismet Plugin](http://wordpress.org/plugins/akismet/ "Akismet Plugin") installed and activated.
36
- All spam will be placed in your 'comments' list which you can then review if you want to
37
- [learn more](http://www.megnicholas.co.uk/articles/contact-form-plugin-can-detect-spam/ "Learn More").
38
-
39
- For added piece of mind this plugin also allows you to add a ‘**reCAPTCHA**’.
40
- This adds a picture of a couple of words to the bottom of the contact form.
41
- Your user must correctly type the words before the form can be submitted, and in so doing, prove that they are human.
42
-
43
- = Why Choose This Plugin? =
44
- Granted there are many plugins of this type in existence already. Why use this one in-particular?
45
-
46
- Here’s why:
47
-
48
- * Minimal setup. Simply activate the plugin and place the shortcode [cscf-contact-form] on any post or page.
49
-
50
- * **Safe**. All input entered by your user is stripped back to minimise as far as possible the likelihood of any
51
- malicious user attempting to inject a script into your website.
52
- If the Akismet plugin is activated all form data will be scanned for spam.
53
- You can turn on reCAPTCHA to avoid your form being abused by bots.
54
-
55
- * **Ajax enabled**. You have the option to turn on AJAX (client-side) validation and submission which gives your users an immediate response when completing the form without having to wait for the page to refresh.
56
-
57
- * The form can **integrate seamlessly into your website**. Turn off the plugin’s default css style sheet so that your theme’s style sheet can be used instead.
58
-
59
- * If your theme is based on **twitter bootstrap** then this plugin will fit right in because it already has all the right div’s and CSS classes for bootstrap.
60
-
61
- * This plugin will only link in its jQuery file where it’s needed, it **will not impose** itself on every page of your whole site!
62
-
63
- * Works with the **latest version of WordPress**.
64
-
65
- * Written by an **experienced PHP programmer**, the code is rock solid, safe, and rigorously tested as standard practice.
66
-
67
- Hopefully this plugin will fulfil all your needs, if not [get in-touch](http://www.megnicholas.co.uk/contact-me "Get In Touch") and I will customise to your exact requirements.
68
-
69
-
70
- == Installation ==
71
- There are two ways to install:
72
-
73
- 1. Click the ‘Install Now’ link from the plugin library listing to automatically download and install.
74
-
75
- 2. Download the plugin as a zip file. To install the zip file simply double click to extract it and place the whole folder in your wordpress plugins folder, e.g. [wordpress]/wp-content/plugins where [wordpress] is the directory that you installed WordPress in.
76
-
77
- Then visit the plugin page on your wordpress site and click ‘Activate’ against the ‘Clean and Simple Contact Form’ plugin listing.
78
-
79
- To place the contact form on your page use the shortcode [cscf-contact-form]
80
-
81
- [More information on how to use the plugin.](http://www.megnicholas.co.uk/wordpress-plugins/clean-and-simple-contact-form/ "More Information")
82
-
83
- == How to Use ==
84
- Unless you want to change messages or add reCAPTCHA to your contact form then this plugin will work out of the box without any additional setup.
85
-
86
- Important: Check that you have an email address set-up in your WordPress ‘Settings’->’General’ page. This is the address that the plugin will use to send the contents of the contact form.
87
-
88
- To add the contact form to your WordPress website simply place the shortcode [cscf-contact-form] on the post or page that you wish the form to appear on.
89
-
90
- **If you have Jetpack plugin installed disable the contact form otherwise the wrong form might display.**
91
-
92
- [More information on how to use the plugin.](http://www.megnicholas.co.uk/wordpress-plugins/clean-and-simple-contact-form/ "More Information")
93
-
94
- == Additional Settings ==
95
- This plugin will work out of the box without any additional setup. You have the option to change the default messages that are displayed to your user and to add reCAPTCHA capabilities.
96
-
97
- Go to the settings screen for the contact form plugin.
98
-
99
- You will find a link to the setting screen against the entry of this plugin on the ‘Installed Plugins’ page.
100
-
101
- Here is a list of things that you can change
102
-
103
- * **Message**: The message displayed to the user at the top of the contact form.
104
-
105
- * **Message Sent Heading**: The message heading or title displayed to the user after the message has been sent.
106
-
107
- * **Message Sent Content**: The message content or body displayed to the user after the message has been sent.
108
-
109
- * **Use this plugin’s default stylesheet**: The plugin comes with a default style sheet to make the form look nice for your user. Untick this if you want to use your theme’s stylesheet instead. The default stylesheet will simply not be linked in.
110
-
111
- * **Use client side validation (Ajax)**: When ticked the contact form will be validated and submitted on the client giving your user instant feedback if they have filled the form in incorrectly. If you wish the form to be validated and submitted only to the server then untick this option.
112
-
113
- * **Use reCAPTCHA**: Tick this option if you wish your form to have a reCAPTCHA box. ReCAPTCHA helps to avoid spam bots using your form by checking that the form filler is actually a real person. To use reCAPTCHA you will need to get a some special keys from google https://www.google.com/recaptcha/admin/create. Once you have your keys enter them into the Public key and Private key boxes
114
-
115
- * **reCAPTCHA Public Key**: Enter the public key that you obtained from here.
116
-
117
- * **reCAPTCHA Private Key**: Enter the private key that you obtained from here.
118
-
119
- * **reCAPTCHA Theme**: Here you can change the reCAPTCHA box theme so that it fits with the style of your website.
120
-
121
- * **Recipient Emails**: The email address where you would like all messages to be sent.
122
- This will default to the email address you have specified under 'E-Mail Address' in your WordPress General Settings.
123
- If you want your mail sent to a different address then enter it here.
124
- You may enter multiple email addresses by clicking the '+' button.
125
-
126
- * **Confirm Email Address**: Email confirmation is now optional. To force your user to re-type their email address tick 'Confirm Email Address'.
127
- It is recommended that you leave this option on. If you turn this option off your user will only have to enter their email address once,
128
- but if they enter it incorrectly you will have no way of getting back to them!
129
-
130
- * **Email Subject**: This is the email subject that will appear on all messages. If you would like to set it to something different then enter it here.
131
-
132
- * **Override 'From' Address**: If you tick this and then fill in the 'From Address:' box then all email will be sent from the given address NOT from the email address given by the form filler.
133
-
134
- * **Option to allow enquiry to email themselves a copy of the message.
135
-
136
- * **!NEW! Contact consent**: This option allows you to be GDPR compliant by adding a 'Consent to contact' check box at the bottom of the form.
137
-
138
-
139
- == Screenshots ==
140
- 1. Contact Form With reCAPTCHA
141
- 2. Contact Form Without reCAPTCHA
142
- 3. Message Sent
143
- 4. Contact Form Options Screen
144
- 5. Place this shortcode on your post or page to deploy
145
-
146
- == Demo ==
147
- This is a demonstration of this plugin working on the default Twenty Twelve theme ->
148
- [Clean and Simple Contact Form Demonstration](http://demo.megnicholas.co.uk/wordpress-clean-and-simple-contact-form "Plugin Demonstration")
149
-
150
- ==About Meg Nicholas ==
151
- I am a freelance WordPress Developer.
152
- [Hire me for all your Wordpress needs](http://www.megnicholas.co.uk "Hire Me").
153
-
154
- == Frequently Asked Questions ==
155
- = I get a message to say that the message could not be sent =
156
-
157
- If you get this message then you have a general problem with email on your server. This plugin uses Wordpress's send mail function.
158
- So a problem sending mail from this plugin indicates that Wordpress as a whole cannot send email.
159
- Contact your web host provider for help, or use an SMTP plugin to use a third party email service.
160
-
161
- = I don't receive the email =
162
-
163
- * Check the recipient email on your settings screen, is it correct?
164
- * Check in your spam or junk mail folder
165
- * For Gmail check in 'All Mail', the email might have gone straight to archive
166
- * Try overriding the 'From' email address in the settings screen. Use an email address you own or is from your own domain
167
-
168
- = Why is a different contact form displayed? =
169
-
170
- You may have a conflict with another plugin. Either deactivate the other contact form plugin, if you don't need it, or use
171
- this alternative short code on your webpage - `[cscf-contact-form]`.
172
- This problem often occurs when Jetpack plugin is installed.
173
-
174
- = How do I display the contact form on my page/post? =
175
-
176
- To put the contact form on your page, add the text:
177
- `[cscf-contact-form]`
178
-
179
- The contact form will appear when you view the page.
180
-
181
- = When I use the style sheet that comes with the plugin my theme is affected =
182
-
183
- It is impossible to test this plugin with all themes. Styling incompatibilities can occur. In this case, switch off the default stylesheet on the settings
184
- screen so you can add your own styles to your theme's stylesheet.
185
-
186
- = Can I have this plugin in my own language? =
187
-
188
- Yes, I am currently building up translation files for this plugin. If your language is not yet available you are very welcome to translate it.
189
- If you are not sure how to go about doing this [get in touch](http://www.megnicholas.co.uk/contact-me/ "Contact Me").
190
-
191
- = How do I change the text box sizes? =
192
-
193
- The plugin now uses Bootstrap 3. The text box widths now use up 100% of the available width.
194
- This makes the form responsive to all types of media. If you want to have a fixed width for the form you can put some styling around the shortcode:
195
- `<div style="width:600px;">[cscf-contact-form]</div>`
196
-
197
- = Can I have multiple forms? =
198
-
199
- Currently you may only have one contact form per page. You CAN however put the contact form on more than one page using the same shortcode.
200
- Note that making changes to the settings will affect all implementations of the plugin across your site.
201
-
202
- = Will this work with other plugins that use Google reCAPTCHA? =
203
- Yes it will. HOWEVER, you cannot have more than one reCAPTCHA on a page. This is a constraint created by Google.
204
- So for example, if your 'Contact Me' page has comments below it,
205
- the reCAPTCHA for the contact form will be displayed correctly but not in the comments form below.
206
- The comments form will never validate due to no supplied reCAPTCHA code.
207
-
208
- == Changelog ==
209
- = 4.7.0 =
210
- * Tested with Wordpress version 4.9.6
211
- * Added consent to contact checkbox for GDPR compliance
212
- = 4.6.2 =
213
- * Turkish translation update. Thanks to Abdullah Manaz! Tested up to WordPress 4.6.1.
214
- = 4.6.1 =
215
- * Fixed untranslated strings. Thanks to Abdullah Manaz!
216
- = 4.6.0 =
217
- * Prevent multiple 'send message' clicks.
218
- * Changed text domain to plugin slug to allow for WP translation system import
219
- * Removed advertising from settings screen
220
- * Added Korean translation thanks to Lee Dae-yeop
221
- * Added Romanian translation. Thanks to Marius Pruna.
222
- * Update French translation thanks to Steph
223
- * Added Hungarian translation. Thanks to János Sánta.
224
- = 4.5.1 =
225
- * Updated Polish translations thanks to Kacper
226
- * Updated French translation
227
- = 4.5.0 =
228
- * Added support for google recaptcha2. Replaces recaptcha version 1
229
- * Update to Italian translation thanks to Silvano
230
- * Added back the DIV to the contact form view as this introduced a display issue
231
- * Updated German translation thanks to schasoli
232
- * Polish translation update thanks to Kacper Rucinski
233
- = 4.4.4 =
234
- * Added Serbian translation thanks to [Borisa Djuraskovic](http://www.webhostinghub.com "Borisa Djuraskovic")
235
- * Added Slovenian translation thanks to Bekim Lutolli
236
- * Fixed some 'notice' errors
237
- * Recaptcha styling workaround for twenty fifteen theme
238
- * Remove empty divs from view
239
- = 4.4.3 =
240
- * Remove branding
241
- = 4.4.2 =
242
- * Akismet tweak only log as spam if akismet_result = 'true'
243
- * Updated Turkish translations thanks again to [Abdullah Manaz](http://manaz.net "Abdullah Manaz")
244
- * Added Indonesian translations thanks to Beny Hirmansyah
245
- = 4.4.0 =
246
- * Fixed XSS issue
247
- = 4.4.1 =
248
- * Add option for enquiry to email themselves a copy of the message
249
- * Update to Polish translation thanks to Radosław “Robaczek” Rak
250
- = 4.3.4 =
251
- * Added the wordpress page of contact form to the email
252
- * Removed link in main contact form view
253
- = 4.3.3 =
254
- * Before overriding the from address, check that another plugin has not done it first.
255
- Any plugin that overrides 'from email address' and 'from name' such as wp-mail-smtp plugin will take precedence over the settings in this plugin.
256
- * Added 'reply-to' to the email header
257
- * Moved the Name field before Email field
258
- * Added Hebrew translation thanks to Shay Cohen
259
- = 4.3.2 =
260
- * Added Norwegian Bokmål translation thanks to Jann Vestby
261
- * Added Brazilian Portugese translation originally a Portugese translation by Ricardo Santos aka BogasoBogolha
262
- = 4.3.1 =
263
- * Polish translation has been updated thanks to Arkadiusz Baron
264
- * Updated Turkish translations thanks again to [Abdullah Manaz](http://manaz.net "Abdullah Manaz")
265
- * New installations now have default stylesheet, ajax, and confirm-email options turned on
266
- * Compatibility with WordPress 3.8
267
- * Tested with twentyfourteen theme
268
- = 4.3.0 =
269
- * Contact form is now filtered for spam when the Akisturkishturkishturkmet plugin is present.
270
- [Learn more](http://www.megnicholas.co.uk/articles/contact-form-plugin-can-detect-spam/ "Learn More").
271
- = 4.2.5 =
272
- * Fixed bug that caused a PHP notice to be generated when 'Confirm Email Message' option is switched off.
273
- Thanks to MarrsAttax
274
- = 4.2.4 =
275
- * The requirement for users to confirm their email address is now optional.
276
- When turned off users only need to enter their email address once.
277
- * Added Arabic translation thanks to [Omar AlQabandi](http://www.PlusOmar.com "Omar AlQabandi")
278
- = 4.2.3 =
279
- * Added ability to specify multiple recipient email addresses
280
- * Fix settings gui - there was a problem enabling 'From' Address option when javascript is not enabled.
281
- = 4.2.2 =
282
- * Recaptcha library has now been namespaced to 'cscf' to remove ALL possibility of conflicts with other plugins that also include this library.
283
- = 4.2.1 =
284
- * Fixed potential conflict with other themes or plugins that use Google reCAPTCHA. reCAPTCHA library is not loaded if it already loaded by another plugin or theme.
285
- * Recaptcha library function is now used to generate the sign up url on the settings page. The site domain is passed into the url for convenience.
286
- * Options subject, message, heading, and body text are now translated when they are retrieved from the the database. Previously only the default messages were translated when no values were found in the database.
287
- * Improved housekeeping: generic name for settings array has been changed from 'array_key' to 'cscf-options'
288
- = 4.2.0 =
289
- * Updated Turkish translations thanks again to [Abdullah Manaz](http://manaz.net "Abdullah Manaz")
290
- * Fixed a problem where certain texts on the settings screen were not being translated
291
- thanks to [Abdullah Manaz](http://manaz.net "Abdullah Manaz") again for finding this
292
- * Updates to FAQ section
293
- * The settings link on the plugin page may now be translated
294
- * The text 'Contact Form' on the admin screen menu may now be translated
295
- * Added Greek translations thanks to Georgios Diamantopoulos
296
- = 4.1.9 =
297
- * Added support for Bootstrap 3.0.0. Plugin is still compatible with Bootstrap 2.3.2, but if your theme uses this version
298
- please do not use the plugin's default style sheet (uncheck the box in the settings screen)
299
- [more information here](http://www.megnicholas.co.uk/articles/version-4-1-9-supports-bootstrap-3/ "more information").
300
- = 4.1.8 =
301
- * Added Russian Translation thanks to Oleg
302
- * Correct character encoding in Estonian translation thanks to [Marko Punnar](http://aretaja.org "Marko Punnar")
303
- * Correct some Spanish translation errors thanks to rowanda
304
- = 4.1.7 =
305
- * Added a note about the short code to use on the settings screen.
306
- * Added Estonian Translation thanks to [Marko Punnar](http://aretaja.org "Marko Punnar")
307
- * Added Japanese language thanks to Nikhil Khullar
308
- * Updated Turkish translation thanks again to Abdullah Manaz http://manaz.net
309
- = 4.1.6 =
310
- * Added ability to specify a 'from' address. When supplied the email will come from that address instead of the form filler's email address.
311
- * Changed type of email input boxes to "email"
312
- * Added Turkish translation thanks to Abdullah Manaz http://manaz.net
313
- = 4.1.5 =
314
- * Removed all carriage returns from views to avoid problems with wptexturize
315
- * Fixed typo in Dutch translation.
316
- = 4.1.4 =
317
- * Added Slovak translation file - thanks to Peter Gašparík
318
- * Added Catalan translation file - thanks to Llorenç
319
- = 4.1.3 =
320
- * Fixed escaped characters.
321
- * Added more translation files
322
- * Forms now submit via ajax.
323
- * Upgraded jquery-validate.js to 1.11. Removed jquery metadata plugin, form validation is now built with data attributes instead of json in classes.
324
- * Improved view html.
325
- * Added translations: Dutch thanks to Daniel Tetteroo, Armenian thanks to [Artak Kolyan](http://ablog.gratun.am "Artak Kolyan"),
326
- Polish thanks to Patryk Peas
327
- = 4.1.2 =
328
- * Added some FAQs
329
- * Added alternative shortcode [cscf-contact-form] for use when conflicts could occur.
330
- * Updated the documentation.
331
- * Recaptcha form now responds to language changes
332
- * Updated pot file to reflect new name space
333
- * Changed name space from cff to cscf
334
- * Settings screen: recaptcha theme and key inputs are immediately enabled/disabled as the 'Use reCAPTCHA' box is clicked.
335
- * Corrected some html seen as invalid by http://validator.w3.org/
336
- * removed '<?=' and replaced with '<?php echo' in cscf_settings, thanks go to andrewbacon
337
- * Added notice to setting screen when JetPack's contact form is active
338
- * Fixed problem where 'Please enter a valid email address' was not translating in the 'confirm email address' input
339
- = 4.1.1 =
340
- * Fixed potential conflicts with themes that use bootstrap
341
- * Enabled internationalisation, this plugin will now work with multiple languages
342
- * Added German translation file for my German friends, thanks to faktorzweinet for the translation
343
- = 4.1.0 =
344
- * Fixed a bug in class.cff_settings.php where php opening tag had got missed off. This problem caused the settings screen not to display correctly but only occurred with some versions of php. Please upgrade if you have this problem.
345
- = 4.0.9 =
346
- * Switched header argument of wp_mail over to a filter to remove any potential conflicts with other emailing plugins or themes
347
- * The ability to set a different recipient email address. Previously all email was sent to the WordPress administrator email address.
348
- * Allow the email subject to be customised.
349
- = 4.0.8 =
350
- * Fixed a bug: When using reCAPTCHA ajax did not work.
351
- * Fixed a bug: Ajax validation was not checking email address were equal (server side was doing it instead)
352
- * Improvement: Ajax now works better.
353
- * Documentation update: nicer links (worked how to do them in markdown!), changelog and upgrade notice sections now correctly formatted.
354
- = 4.0.7 =
355
- * Fixed a bug: Plugin name is actually clean-and-simple-contact-form-by-meg-nicholas now (not contact-form) but this new name needed to be updated in the plugin settings definitions. I also needed to rename contact-form.php to clean-and-simple-contact-form-by-meg-nicholas.php. My thanks to Jakub for finding this bug.
356
- * If your webpage is ssl then reCAPTCHA will now also use ssl mode.
357
-
358
-
359
- == Upgrade Notice ==
360
- = 4.7.0 =
361
- Tested with Wordpress version 4.9.6. Added 'consent to contact' GDPR compliance message
362
- = 4.6.2 =
363
- Updated translations. Tested up to WordPress 4.6.1.
364
- = 4.6.0 =
365
- Updated translations. Correct textdomain. Prevent multiple clicks.
366
- = 4.5.1 =
367
- Translation updates
368
- = 4.5.0 =
369
- Added support for Google Recaptcha2. Updated translation. Fixed layout bug.
370
- = 4.4.4 =
371
- Added languages, css fix for twenty fifteen theme, remove 'notice' errors, remove empty divs
372
- = 4.4.3 =
373
- Tested up to 4.1
374
- = 4.4.2 =
375
- Akismet tweak and translation updates
376
- = 4.4.1 =
377
- Fixed XSS issue
378
- = 4.4.0 =
379
- Added option for enquiry to email themselves a copy of the message plus Polish translation updated
380
- = 4.3.4 =
381
- Email now includes page url of contact form, removed link in main contact form view
382
- = 4.3.3 =
383
- Hebrew Language added, name field moved to top of form, added 'reply-to'
384
- = 4.3.2 =
385
- Added Norwegian and Brazilian Portugese Translations
386
- = 4.3.1 =
387
- Checked compatibility with WP 3.8 and TwentyFourteen theme, translation updates, defaults for new installations
388
- = 4.3.0 =
389
- Contact form is now filtered for spam when the Akismet plugin is present.
390
- [Learn more](http://www.megnicholas.co.uk/articles/contact-form-plugin-can-detect-spam/ "Learn More").
391
- = 4.2.5 =
392
- Small bug fix
393
- = 4.2.4 =
394
- 'Confirm Email' can now be turned off. Arabic translation added.
395
- = 4.2.3 =
396
- Multiple recipients are now possible
397
- = 4.2.2 =
398
- Remove ALL possibility of conflicts with other plugins that also include Google reCAPTCHA library
399
- = 4.2.1 =
400
- Translation and housekeeping updates
401
- = 4.2.0 =
402
- Translation and documentation updates
403
- = 4.1.9 =
404
- Support for [Bootstrap 3](http://www.megnicholas.co.uk/articles/version-4-1-9-supports-bootstrap-3/ "More information on 4.1.9")
405
- = 4.1.8 =
406
- Added Russian translation and some modifications to Estonian and Spanish translations
407
- = 4.1.7
408
- More translations. A helpful note about the short code to use has been put on the settings screen
409
- = 4.1.6 =
410
- Ability to specify a 'From' address. This email will be used to send the mail instead of the form filler's email address.
411
- = 4.1.5 =
412
- Works with themes that pre-process the html.
413
- = 4.1.4 =
414
- New translations - Slovak and Catalan
415
- = 4.1.3 =
416
- Form now submits via ajax!
417
- = 4.1.2 =
418
- Alternative shortcode, recaptcha internationalisation, Jetpack conflict warning notice
419
- = 4.1.1 =
420
- Internationalisation, fixed conflict with some bootstrapped themes.
421
- = 4.1.0 =
422
- Please upgrade if your settings screen is not displaying.
423
- = 4.0.9 =
424
- More customisation: recipient email address, and email subject.
425
- = 4.0.8 =
426
- Ajax now works when your form has reCAPTCHA on it. Ajax validation is now cleaner.
427
- = 4.0.7 =
428
- Fixed a bug which occurred when plugin name was changed. reCAPTCHA will now use ssl if your webpage is ssl.
 
 
 
1
+ === Contact Form Clean and Simple ===
2
+ Contributors: megnicholas
3
+ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AKQM4KSBQ4H66
4
+ License: GPLv2 or later
5
+ License URI: http://www.gnu.org/licenses/gpl.html
6
+ Tags: simple, contact, form, contact button, contact form, contact form plugin, akismet, contacts, contacts form plugin, contact me, feedback form, bootstrap, twitter, google, reCAPTCHA, ajax, secure
7
+ Requires at least: 3.3
8
+ Tested up to: 5.3
9
+ Stable tag: 4.7.0
10
+
11
+ A clean and simple AJAX contact form with Google reCAPTCHA, Twitter Bootstrap markup and Akismet spam filtering.
12
+
13
+ == Description ==
14
+ A clean and simple AJAX contact form with Google reCAPTCHA, Twitter Bootstrap markup and Akismet spam filtering.
15
+
16
+ * **Clean**: all user inputs are stripped in order to avoid cross-site scripting (XSS) vulnerabilities.
17
+
18
+ * **Simple**: AJAX enabled validation and submission for immediate response and guidance for your users (can be switched off).
19
+
20
+ * **Stylish**: Use the included stylesheet or switch it off and use your own for seamless integration with your website.
21
+ Uses **Twitter Bootstrap** classes.
22
+
23
+ * **Safe**: All incoming data is scanned for spam with **Akismet**.
24
+
25
+ This is a straightforward contact form for your WordPress site. There is very minimal set-up
26
+ required. Simply install, activate, and then place the short code **[cscf-contact-form]** on your web page.
27
+
28
+ A standard set of input boxes are provided, these include Email Address, Name, Message and a nice big ‘Send Message’ button.
29
+
30
+ When your user has completed the form an email will be sent to you containing your user’s message.
31
+ To reply simply click the ‘reply’ button on your email client.
32
+ The email address used is the one you have set up in WordPress under ‘Settings’ -> ‘General’, so do check this is correct.
33
+
34
+ To help prevent spam all data is scanned via Akismet.
35
+ For this to work you must have the [Akismet Plugin](http://wordpress.org/plugins/akismet/ "Akismet Plugin") installed and activated.
36
+ All spam will be placed in your 'comments' list which you can then review if you want to
37
+ [learn more](http://www.megnicholas.co.uk/articles/contact-form-plugin-can-detect-spam/ "Learn More").
38
+
39
+ For added piece of mind this plugin also allows you to add a ‘**reCAPTCHA**’.
40
+ This adds a picture of a couple of words to the bottom of the contact form.
41
+ Your user must correctly type the words before the form can be submitted, and in so doing, prove that they are human.
42
+
43
+ = Why Choose This Plugin? =
44
+ Granted there are many plugins of this type in existence already. Why use this one in-particular?
45
+
46
+ Here’s why:
47
+
48
+ * Minimal setup. Simply activate the plugin and place the shortcode [cscf-contact-form] on any post or page.
49
+
50
+ * **Safe**. All input entered by your user is stripped back to minimise as far as possible the likelihood of any
51
+ malicious user attempting to inject a script into your website.
52
+ If the Akismet plugin is activated all form data will be scanned for spam.
53
+ You can turn on reCAPTCHA to avoid your form being abused by bots.
54
+
55
+ * **Ajax enabled**. You have the option to turn on AJAX (client-side) validation and submission which gives your users an immediate response when completing the form without having to wait for the page to refresh.
56
+
57
+ * The form can **integrate seamlessly into your website**. Turn off the plugin’s default css style sheet so that your theme’s style sheet can be used instead.
58
+
59
+ * If your theme is based on **twitter bootstrap** then this plugin will fit right in because it already has all the right div’s and CSS classes for bootstrap.
60
+
61
+ * This plugin will only link in its jQuery file where it’s needed, it **will not impose** itself on every page of your whole site!
62
+
63
+ * Works with the **latest version of WordPress**.
64
+
65
+ * Written by an **experienced PHP programmer**, the code is rock solid, safe, and rigorously tested as standard practice.
66
+
67
+ Hopefully this plugin will fulfil all your needs, if not [get in-touch](http://www.megnicholas.co.uk/contact-me "Get In Touch") and I will customise to your exact requirements.
68
+
69
+
70
+ == Installation ==
71
+ There are two ways to install:
72
+
73
+ 1. Click the ‘Install Now’ link from the plugin library listing to automatically download and install.
74
+
75
+ 2. Download the plugin as a zip file. To install the zip file simply double click to extract it and place the whole folder in your wordpress plugins folder, e.g. [wordpress]/wp-content/plugins where [wordpress] is the directory that you installed WordPress in.
76
+
77
+ Then visit the plugin page on your wordpress site and click ‘Activate’ against the ‘Clean and Simple Contact Form’ plugin listing.
78
+
79
+ To place the contact form on your page use the shortcode [cscf-contact-form]
80
+
81
+ [More information on how to use the plugin.](http://www.megnicholas.co.uk/wordpress-plugins/clean-and-simple-contact-form/ "More Information")
82
+
83
+ == How to Use ==
84
+ Unless you want to change messages or add reCAPTCHA to your contact form then this plugin will work out of the box without any additional setup.
85
+
86
+ Important: Check that you have an email address set-up in your WordPress ‘Settings’->’General’ page. This is the address that the plugin will use to send the contents of the contact form.
87
+
88
+ To add the contact form to your WordPress website simply place the shortcode [cscf-contact-form] on the post or page that you wish the form to appear on.
89
+
90
+ **If you have Jetpack plugin installed disable the contact form otherwise the wrong form might display.**
91
+
92
+ [More information on how to use the plugin.](http://www.megnicholas.co.uk/wordpress-plugins/clean-and-simple-contact-form/ "More Information")
93
+
94
+ == Additional Settings ==
95
+ This plugin will work out of the box without any additional setup. You have the option to change the default messages that are displayed to your user and to add reCAPTCHA capabilities.
96
+
97
+ Go to the settings screen for the contact form plugin.
98
+
99
+ You will find a link to the setting screen against the entry of this plugin on the ‘Installed Plugins’ page.
100
+
101
+ Here is a list of things that you can change
102
+
103
+ * **Message**: The message displayed to the user at the top of the contact form.
104
+
105
+ * **Message Sent Heading**: The message heading or title displayed to the user after the message has been sent.
106
+
107
+ * **Message Sent Content**: The message content or body displayed to the user after the message has been sent.
108
+
109
+ * **Use this plugin’s default stylesheet**: The plugin comes with a default style sheet to make the form look nice for your user. Untick this if you want to use your theme’s stylesheet instead. The default stylesheet will simply not be linked in.
110
+
111
+ * **Use client side validation (Ajax)**: When ticked the contact form will be validated and submitted on the client giving your user instant feedback if they have filled the form in incorrectly. If you wish the form to be validated and submitted only to the server then untick this option.
112
+
113
+ * **Use reCAPTCHA**: Tick this option if you wish your form to have a reCAPTCHA box. ReCAPTCHA helps to avoid spam bots using your form by checking that the form filler is actually a real person. To use reCAPTCHA you will need to get a some special keys from google https://www.google.com/recaptcha/admin/create. Once you have your keys enter them into the Public key and Private key boxes
114
+
115
+ * **reCAPTCHA Public Key**: Enter the public key that you obtained from here.
116
+
117
+ * **reCAPTCHA Private Key**: Enter the private key that you obtained from here.
118
+
119
+ * **reCAPTCHA Theme**: Here you can change the reCAPTCHA box theme so that it fits with the style of your website.
120
+
121
+ * **Recipient Emails**: The email address where you would like all messages to be sent.
122
+ This will default to the email address you have specified under 'E-Mail Address' in your WordPress General Settings.
123
+ If you want your mail sent to a different address then enter it here.
124
+ You may enter multiple email addresses by clicking the '+' button.
125
+
126
+ * **Confirm Email Address**: Email confirmation is now optional. To force your user to re-type their email address tick 'Confirm Email Address'.
127
+ It is recommended that you leave this option on. If you turn this option off your user will only have to enter their email address once,
128
+ but if they enter it incorrectly you will have no way of getting back to them!
129
+
130
+ * **Email Subject**: This is the email subject that will appear on all messages. If you would like to set it to something different then enter it here.
131
+
132
+ * **Override 'From' Address**: If you tick this and then fill in the 'From Address:' box then all email will be sent from the given address NOT from the email address given by the form filler.
133
+
134
+ * **Option to allow enquiry to email themselves a copy of the message.
135
+
136
+ * **!NEW! Contact consent**: This option allows you to be GDPR compliant by adding a 'Consent to contact' check box at the bottom of the form.
137
+
138
+
139
+ == Screenshots ==
140
+ 1. Contact Form With reCAPTCHA
141
+ 2. Contact Form Without reCAPTCHA
142
+ 3. Message Sent
143
+ 4. Contact Form Options Screen
144
+ 5. Place this shortcode on your post or page to deploy
145
+
146
+ == Demo ==
147
+ This is a demonstration of this plugin working on the default Twenty Twelve theme ->
148
+ [Clean and Simple Contact Form Demonstration](http://demo.megnicholas.co.uk/wordpress-clean-and-simple-contact-form "Plugin Demonstration")
149
+
150
+ ==About Meg Nicholas ==
151
+ I am a freelance WordPress Developer.
152
+ [Hire me for all your Wordpress needs](http://www.megnicholas.co.uk "Hire Me").
153
+
154
+ == Frequently Asked Questions ==
155
+ = I get a message to say that the message could not be sent =
156
+
157
+ If you get this message then you have a general problem with email on your server. This plugin uses Wordpress's send mail function.
158
+ So a problem sending mail from this plugin indicates that Wordpress as a whole cannot send email.
159
+ Contact your web host provider for help, or use an SMTP plugin to use a third party email service.
160
+
161
+ = I don't receive the email =
162
+
163
+ * Check the recipient email on your settings screen, is it correct?
164
+ * Check in your spam or junk mail folder
165
+ * For Gmail check in 'All Mail', the email might have gone straight to archive
166
+ * Try overriding the 'From' email address in the settings screen. Use an email address you own or is from your own domain
167
+
168
+ = Why is a different contact form displayed? =
169
+
170
+ You may have a conflict with another plugin. Either deactivate the other contact form plugin, if you don't need it, or use
171
+ this alternative short code on your webpage - `[cscf-contact-form]`.
172
+ This problem often occurs when Jetpack plugin is installed.
173
+
174
+ = How do I display the contact form on my page/post? =
175
+
176
+ To put the contact form on your page, add the text:
177
+ `[cscf-contact-form]`
178
+
179
+ The contact form will appear when you view the page.
180
+
181
+ = When I use the style sheet that comes with the plugin my theme is affected =
182
+
183
+ It is impossible to test this plugin with all themes. Styling incompatibilities can occur. In this case, switch off the default stylesheet on the settings
184
+ screen so you can add your own styles to your theme's stylesheet.
185
+
186
+ = Can I have this plugin in my own language? =
187
+
188
+ Yes, I am currently building up translation files for this plugin. If your language is not yet available you are very welcome to translate it.
189
+ If you are not sure how to go about doing this [get in touch](http://www.megnicholas.co.uk/contact-me/ "Contact Me").
190
+
191
+ = How do I change the text box sizes? =
192
+
193
+ The plugin now uses Bootstrap 3. The text box widths now use up 100% of the available width.
194
+ This makes the form responsive to all types of media. If you want to have a fixed width for the form you can put some styling around the shortcode:
195
+ `<div style="width:600px;">[cscf-contact-form]</div>`
196
+
197
+ = Can I have multiple forms? =
198
+
199
+ Currently you may only have one contact form per page. You CAN however put the contact form on more than one page using the same shortcode.
200
+ Note that making changes to the settings will affect all implementations of the plugin across your site.
201
+
202
+ = Will this work with other plugins that use Google reCAPTCHA? =
203
+ Yes it will. HOWEVER, you cannot have more than one reCAPTCHA on a page. This is a constraint created by Google.
204
+ So for example, if your 'Contact Me' page has comments below it,
205
+ the reCAPTCHA for the contact form will be displayed correctly but not in the comments form below.
206
+ The comments form will never validate due to no supplied reCAPTCHA code.
207
+
208
+ == Changelog ==
209
+ = 4.7.1 =
210
+ * Tested with Wordpress version 5.3
211
+ Fixed XSS vulnerability in GDPR consent message
212
+ = 4.7.0 =
213
+ * Tested with Wordpress version 4.9.6
214
+ * Added consent to contact checkbox for GDPR compliance
215
+ = 4.6.2 =
216
+ * Turkish translation update. Thanks to Abdullah Manaz! Tested up to WordPress 4.6.1.
217
+ = 4.6.1 =
218
+ * Fixed untranslated strings. Thanks to Abdullah Manaz!
219
+ = 4.6.0 =
220
+ * Prevent multiple 'send message' clicks.
221
+ * Changed text domain to plugin slug to allow for WP translation system import
222
+ * Removed advertising from settings screen
223
+ * Added Korean translation thanks to Lee Dae-yeop
224
+ * Added Romanian translation. Thanks to Marius Pruna.
225
+ * Update French translation thanks to Steph
226
+ * Added Hungarian translation. Thanks to János Sánta.
227
+ = 4.5.1 =
228
+ * Updated Polish translations thanks to Kacper
229
+ * Updated French translation
230
+ = 4.5.0 =
231
+ * Added support for google recaptcha2. Replaces recaptcha version 1
232
+ * Update to Italian translation thanks to Silvano
233
+ * Added back the DIV to the contact form view as this introduced a display issue
234
+ * Updated German translation thanks to schasoli
235
+ * Polish translation update thanks to Kacper Rucinski
236
+ = 4.4.4 =
237
+ * Added Serbian translation thanks to [Borisa Djuraskovic](http://www.webhostinghub.com "Borisa Djuraskovic")
238
+ * Added Slovenian translation thanks to Bekim Lutolli
239
+ * Fixed some 'notice' errors
240
+ * Recaptcha styling workaround for twenty fifteen theme
241
+ * Remove empty divs from view
242
+ = 4.4.3 =
243
+ * Remove branding
244
+ = 4.4.2 =
245
+ * Akismet tweak only log as spam if akismet_result = 'true'
246
+ * Updated Turkish translations thanks again to [Abdullah Manaz](http://manaz.net "Abdullah Manaz")
247
+ * Added Indonesian translations thanks to Beny Hirmansyah
248
+ = 4.4.0 =
249
+ * Fixed XSS issue
250
+ = 4.4.1 =
251
+ * Add option for enquiry to email themselves a copy of the message
252
+ * Update to Polish translation thanks to Radosław “Robaczek” Rak
253
+ = 4.3.4 =
254
+ * Added the wordpress page of contact form to the email
255
+ * Removed link in main contact form view
256
+ = 4.3.3 =
257
+ * Before overriding the from address, check that another plugin has not done it first.
258
+ Any plugin that overrides 'from email address' and 'from name' such as wp-mail-smtp plugin will take precedence over the settings in this plugin.
259
+ * Added 'reply-to' to the email header
260
+ * Moved the Name field before Email field
261
+ * Added Hebrew translation thanks to Shay Cohen
262
+ = 4.3.2 =
263
+ * Added Norwegian Bokmål translation thanks to Jann Vestby
264
+ * Added Brazilian Portugese translation originally a Portugese translation by Ricardo Santos aka BogasoBogolha
265
+ = 4.3.1 =
266
+ * Polish translation has been updated thanks to Arkadiusz Baron
267
+ * Updated Turkish translations thanks again to [Abdullah Manaz](http://manaz.net "Abdullah Manaz")
268
+ * New installations now have default stylesheet, ajax, and confirm-email options turned on
269
+ * Compatibility with WordPress 3.8
270
+ * Tested with twentyfourteen theme
271
+ = 4.3.0 =
272
+ * Contact form is now filtered for spam when the Akisturkishturkishturkmet plugin is present.
273
+ [Learn more](http://www.megnicholas.co.uk/articles/contact-form-plugin-can-detect-spam/ "Learn More").
274
+ = 4.2.5 =
275
+ * Fixed bug that caused a PHP notice to be generated when 'Confirm Email Message' option is switched off.
276
+ Thanks to MarrsAttax
277
+ = 4.2.4 =
278
+ * The requirement for users to confirm their email address is now optional.
279
+ When turned off users only need to enter their email address once.
280
+ * Added Arabic translation thanks to [Omar AlQabandi](http://www.PlusOmar.com "Omar AlQabandi")
281
+ = 4.2.3 =
282
+ * Added ability to specify multiple recipient email addresses
283
+ * Fix settings gui - there was a problem enabling 'From' Address option when javascript is not enabled.
284
+ = 4.2.2 =
285
+ * Recaptcha library has now been namespaced to 'cscf' to remove ALL possibility of conflicts with other plugins that also include this library.
286
+ = 4.2.1 =
287
+ * Fixed potential conflict with other themes or plugins that use Google reCAPTCHA. reCAPTCHA library is not loaded if it already loaded by another plugin or theme.
288
+ * Recaptcha library function is now used to generate the sign up url on the settings page. The site domain is passed into the url for convenience.
289
+ * Options subject, message, heading, and body text are now translated when they are retrieved from the the database. Previously only the default messages were translated when no values were found in the database.
290
+ * Improved housekeeping: generic name for settings array has been changed from 'array_key' to 'cscf-options'
291
+ = 4.2.0 =
292
+ * Updated Turkish translations thanks again to [Abdullah Manaz](http://manaz.net "Abdullah Manaz")
293
+ * Fixed a problem where certain texts on the settings screen were not being translated
294
+ thanks to [Abdullah Manaz](http://manaz.net "Abdullah Manaz") again for finding this
295
+ * Updates to FAQ section
296
+ * The settings link on the plugin page may now be translated
297
+ * The text 'Contact Form' on the admin screen menu may now be translated
298
+ * Added Greek translations thanks to Georgios Diamantopoulos
299
+ = 4.1.9 =
300
+ * Added support for Bootstrap 3.0.0. Plugin is still compatible with Bootstrap 2.3.2, but if your theme uses this version
301
+ please do not use the plugin's default style sheet (uncheck the box in the settings screen)
302
+ [more information here](http://www.megnicholas.co.uk/articles/version-4-1-9-supports-bootstrap-3/ "more information").
303
+ = 4.1.8 =
304
+ * Added Russian Translation thanks to Oleg
305
+ * Correct character encoding in Estonian translation thanks to [Marko Punnar](http://aretaja.org "Marko Punnar")
306
+ * Correct some Spanish translation errors thanks to rowanda
307
+ = 4.1.7 =
308
+ * Added a note about the short code to use on the settings screen.
309
+ * Added Estonian Translation thanks to [Marko Punnar](http://aretaja.org "Marko Punnar")
310
+ * Added Japanese language thanks to Nikhil Khullar
311
+ * Updated Turkish translation thanks again to Abdullah Manaz http://manaz.net
312
+ = 4.1.6 =
313
+ * Added ability to specify a 'from' address. When supplied the email will come from that address instead of the form filler's email address.
314
+ * Changed type of email input boxes to "email"
315
+ * Added Turkish translation thanks to Abdullah Manaz http://manaz.net
316
+ = 4.1.5 =
317
+ * Removed all carriage returns from views to avoid problems with wptexturize
318
+ * Fixed typo in Dutch translation.
319
+ = 4.1.4 =
320
+ * Added Slovak translation file - thanks to Peter Gašparík
321
+ * Added Catalan translation file - thanks to Llorenç
322
+ = 4.1.3 =
323
+ * Fixed escaped characters.
324
+ * Added more translation files
325
+ * Forms now submit via ajax.
326
+ * Upgraded jquery-validate.js to 1.11. Removed jquery metadata plugin, form validation is now built with data attributes instead of json in classes.
327
+ * Improved view html.
328
+ * Added translations: Dutch thanks to Daniel Tetteroo, Armenian thanks to [Artak Kolyan](http://ablog.gratun.am "Artak Kolyan"),
329
+ Polish thanks to Patryk Peas
330
+ = 4.1.2 =
331
+ * Added some FAQs
332
+ * Added alternative shortcode [cscf-contact-form] for use when conflicts could occur.
333
+ * Updated the documentation.
334
+ * Recaptcha form now responds to language changes
335
+ * Updated pot file to reflect new name space
336
+ * Changed name space from cff to cscf
337
+ * Settings screen: recaptcha theme and key inputs are immediately enabled/disabled as the 'Use reCAPTCHA' box is clicked.
338
+ * Corrected some html seen as invalid by http://validator.w3.org/
339
+ * removed '<?=' and replaced with '<?php echo' in cscf_settings, thanks go to andrewbacon
340
+ * Added notice to setting screen when JetPack's contact form is active
341
+ * Fixed problem where 'Please enter a valid email address' was not translating in the 'confirm email address' input
342
+ = 4.1.1 =
343
+ * Fixed potential conflicts with themes that use bootstrap
344
+ * Enabled internationalisation, this plugin will now work with multiple languages
345
+ * Added German translation file for my German friends, thanks to faktorzweinet for the translation
346
+ = 4.1.0 =
347
+ * Fixed a bug in class.cff_settings.php where php opening tag had got missed off. This problem caused the settings screen not to display correctly but only occurred with some versions of php. Please upgrade if you have this problem.
348
+ = 4.0.9 =
349
+ * Switched header argument of wp_mail over to a filter to remove any potential conflicts with other emailing plugins or themes
350
+ * The ability to set a different recipient email address. Previously all email was sent to the WordPress administrator email address.
351
+ * Allow the email subject to be customised.
352
+ = 4.0.8 =
353
+ * Fixed a bug: When using reCAPTCHA ajax did not work.
354
+ * Fixed a bug: Ajax validation was not checking email address were equal (server side was doing it instead)
355
+ * Improvement: Ajax now works better.
356
+ * Documentation update: nicer links (worked how to do them in markdown!), changelog and upgrade notice sections now correctly formatted.
357
+ = 4.0.7 =
358
+ * Fixed a bug: Plugin name is actually clean-and-simple-contact-form-by-meg-nicholas now (not contact-form) but this new name needed to be updated in the plugin settings definitions. I also needed to rename contact-form.php to clean-and-simple-contact-form-by-meg-nicholas.php. My thanks to Jakub for finding this bug.
359
+ * If your webpage is ssl then reCAPTCHA will now also use ssl mode.
360
+
361
+
362
+ == Upgrade Notice ==
363
+ = 4.7.0 =
364
+ Tested with Wordpress version 4.9.6. Added 'consent to contact' GDPR compliance message
365
+ = 4.6.2 =
366
+ Updated translations. Tested up to WordPress 4.6.1.
367
+ = 4.6.0 =
368
+ Updated translations. Correct textdomain. Prevent multiple clicks.
369
+ = 4.5.1 =
370
+ Translation updates
371
+ = 4.5.0 =
372
+ Added support for Google Recaptcha2. Updated translation. Fixed layout bug.
373
+ = 4.4.4 =
374
+ Added languages, css fix for twenty fifteen theme, remove 'notice' errors, remove empty divs
375
+ = 4.4.3 =
376
+ Tested up to 4.1
377
+ = 4.4.2 =
378
+ Akismet tweak and translation updates
379
+ = 4.4.1 =
380
+ Fixed XSS issue
381
+ = 4.4.0 =
382
+ Added option for enquiry to email themselves a copy of the message plus Polish translation updated
383
+ = 4.3.4 =
384
+ Email now includes page url of contact form, removed link in main contact form view
385
+ = 4.3.3 =
386
+ Hebrew Language added, name field moved to top of form, added 'reply-to'
387
+ = 4.3.2 =
388
+ Added Norwegian and Brazilian Portugese Translations
389
+ = 4.3.1 =
390
+ Checked compatibility with WP 3.8 and TwentyFourteen theme, translation updates, defaults for new installations
391
+ = 4.3.0 =
392
+ Contact form is now filtered for spam when the Akismet plugin is present.
393
+ [Learn more](http://www.megnicholas.co.uk/articles/contact-form-plugin-can-detect-spam/ "Learn More").
394
+ = 4.2.5 =
395
+ Small bug fix
396
+ = 4.2.4 =
397
+ 'Confirm Email' can now be turned off. Arabic translation added.
398
+ = 4.2.3 =
399
+ Multiple recipients are now possible
400
+ = 4.2.2 =
401
+ Remove ALL possibility of conflicts with other plugins that also include Google reCAPTCHA library
402
+ = 4.2.1 =
403
+ Translation and housekeeping updates
404
+ = 4.2.0 =
405
+ Translation and documentation updates
406
+ = 4.1.9 =
407
+ Support for [Bootstrap 3](http://www.megnicholas.co.uk/articles/version-4-1-9-supports-bootstrap-3/ "More information on 4.1.9")
408
+ = 4.1.8 =
409
+ Added Russian translation and some modifications to Estonian and Spanish translations
410
+ = 4.1.7
411
+ More translations. A helpful note about the short code to use has been put on the settings screen
412
+ = 4.1.6 =
413
+ Ability to specify a 'From' address. This email will be used to send the mail instead of the form filler's email address.
414
+ = 4.1.5 =
415
+ Works with themes that pre-process the html.
416
+ = 4.1.4 =
417
+ New translations - Slovak and Catalan
418
+ = 4.1.3 =
419
+ Form now submits via ajax!
420
+ = 4.1.2 =
421
+ Alternative shortcode, recaptcha internationalisation, Jetpack conflict warning notice
422
+ = 4.1.1 =
423
+ Internationalisation, fixed conflict with some bootstrapped themes.
424
+ = 4.1.0 =
425
+ Please upgrade if your settings screen is not displaying.
426
+ = 4.0.9 =
427
+ More customisation: recipient email address, and email subject.
428
+ = 4.0.8 =
429
+ Ajax now works when your form has reCAPTCHA on it. Ajax validation is now cleaner.
430
+ = 4.0.7 =
431
+ Fixed a bug which occurred when plugin name was changed. reCAPTCHA will now use ssl if your webpage is ssl.