Contact Form Builder – a plugin for creating contact and feedback forms - Version 1.0.49

Version Description

Download this release

Release Info

Developer webdorado
Plugin Icon 128x128 Contact Form Builder – a plugin for creating contact and feedback forms
Version 1.0.49
Comparing to
See all releases

Code changes from version 1.0.47 to 1.0.49

admin/views/CFMViewGoptions_cfm.php CHANGED
@@ -80,6 +80,17 @@ class CFMViewGoptions_cfm {
80
  <a href="https://console.developers.google.com/flows/enableapi?apiid=maps_backend&keyType=CLIENT_SIDE&reusekey=true" target="_blank"><?php echo __("Get maps API key", "contact_form_maker"); ?></a>
81
  </td>
82
  </tr>
 
 
 
 
 
 
 
 
 
 
 
83
  </tbody>
84
  </table>
85
  <input type="hidden" id="task" name="task" value=""/>
80
  <a href="https://console.developers.google.com/flows/enableapi?apiid=maps_backend&keyType=CLIENT_SIDE&reusekey=true" target="_blank"><?php echo __("Get maps API key", "contact_form_maker"); ?></a>
81
  </td>
82
  </tr>
83
+ <tr>
84
+ <td>
85
+
86
+ </td>
87
+ <td>
88
+ <span style="width:250px; display: inline-block; padding: 0 5px;">(It may take up to 5 minutes for API key change to take effect.)</span>
89
+ </td>
90
+ <td>
91
+
92
+ </td>
93
+ </tr>
94
  </tbody>
95
  </table>
96
  <input type="hidden" id="task" name="task" value=""/>
contact-form-builder.php CHANGED
@@ -3,14 +3,14 @@
3
  * Plugin Name: Contact Form Builder
4
  * Plugin URI: http://web-dorado.com/products/wordpress-contact-form-builder.html
5
  * Description: Contact Form Builder is an advanced plugin to add contact forms into your website. It comes along with multiple default templates which can be customized.
6
- * Version: 1.0.47
7
  * Author: WebDorado
8
  * Author URI: http://web-dorado.com/
9
  * License: GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
10
  */
11
  define('WD_CFM_DIR', WP_PLUGIN_DIR . "/" . plugin_basename(dirname(__FILE__)));
12
  define('WD_CFM_URL', plugins_url(plugin_basename(dirname(__FILE__))));
13
- define('WD_CFM_VERSION', '1.0.47');
14
 
15
  // Plugin menu.
16
  function contact_form_maker_options_panel() {
3
  * Plugin Name: Contact Form Builder
4
  * Plugin URI: http://web-dorado.com/products/wordpress-contact-form-builder.html
5
  * Description: Contact Form Builder is an advanced plugin to add contact forms into your website. It comes along with multiple default templates which can be customized.
6
+ * Version: 1.0.49
7
  * Author: WebDorado
8
  * Author URI: http://web-dorado.com/
9
  * License: GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
10
  */
11
  define('WD_CFM_DIR', WP_PLUGIN_DIR . "/" . plugin_basename(dirname(__FILE__)));
12
  define('WD_CFM_URL', plugins_url(plugin_basename(dirname(__FILE__))));
13
+ define('WD_CFM_VERSION', '1.0.49');
14
 
15
  // Plugin menu.
16
  function contact_form_maker_options_panel() {
featured/featured.php CHANGED
@@ -1,6 +1,12 @@
1
  <?php
2
  function spider_featured($current_plugin = '') {
3
  $plugins = array(
 
 
 
 
 
 
4
  "form-maker" => array(
5
  'title' => 'Form Maker',
6
  'text' => 'Wordpress form builder plugin',
1
  <?php
2
  function spider_featured($current_plugin = '') {
3
  $plugins = array(
4
+ "ecommerce-wd" => array(
5
+ 'title' => 'Ecommerce',
6
+ 'text' => 'Wordpress ecommerce plugin',
7
+ 'content' => 'Ecommerce WD is a highly-functional, user friendly WordPress Ecommerce plugin, which is perfect for developing online stores for any level of complexity.',
8
+ 'href' => 'https://web-dorado.com/products/wordpress-ecommerce.html'
9
+ ),
10
  "form-maker" => array(
11
  'title' => 'Form Maker',
12
  'text' => 'Wordpress form builder plugin',
featured/images/ecommerce.png ADDED
Binary file
featured/style.css CHANGED
@@ -51,6 +51,7 @@
51
  margin: 0 auto;
52
  }
53
 
 
54
  #main_featured_plugins_page #featured-plugins-list li.form-maker .product {background:url("images/form.png") center center no-repeat;}
55
  #main_featured_plugins_page #featured-plugins-list li.catalog .product {background:url("images/catalog.png") center center no-repeat;}
56
  #main_featured_plugins_page #featured-plugins-list li.contact-maker .product {background:url("images/contact.maker.png") center center no-repeat;}
51
  margin: 0 auto;
52
  }
53
 
54
+ #main_featured_plugins_page #featured-plugins-list li.ecommerce-wd .product {background:url("images/ecommerce.png") center center no-repeat;}
55
  #main_featured_plugins_page #featured-plugins-list li.form-maker .product {background:url("images/form.png") center center no-repeat;}
56
  #main_featured_plugins_page #featured-plugins-list li.catalog .product {background:url("images/catalog.png") center center no-repeat;}
57
  #main_featured_plugins_page #featured-plugins-list li.contact-maker .product {background:url("images/contact.maker.png") center center no-repeat;}
js/contactformmaker.js CHANGED
@@ -10183,7 +10183,12 @@ function add(key) {
10183
 
10184
  if(type=="type_map")
10185
  {
10186
- if_gmap_updateMap(i);
 
 
 
 
 
10187
  }
10188
 
10189
 
10183
 
10184
  if(type=="type_map")
10185
  {
10186
+ if(typeof gmapdata[i] == "undefined" || typeof gmapdata[i].getCenter() == "undefined"){
10187
+ alert("Please go to Global Options to setup the Map API key. It may take up to 5 minutes for API key change to take effect.");
10188
+ return false;
10189
+ }
10190
+ else
10191
+ if_gmap_updateMap(i);
10192
  }
10193
 
10194
 
js/if_gmap_back_end.js CHANGED
@@ -1,156 +1,156 @@
1
- /* Code based on Google Map APIv3 Tutorials */
2
-
3
- var gmapdata = new Array();
4
- var gmapmarker = new Array();
5
-
6
- function if_gmap_init(id) {
7
- map = document.getElementById(id + "_elementform_id_temp");
8
- var def_zoomval = parseInt(map.getAttribute("zoom"));
9
- var def_longval = map.getAttribute("center_x");
10
- var def_latval = map.getAttribute("center_y");
11
- var curpoint = new google.maps.LatLng(def_latval, def_longval);
12
- gmapdata[id] = new google.maps.Map(document.getElementById(id + "_elementform_id_temp"), {
13
- center: curpoint,
14
- zoom: def_zoomval,
15
- mapTypeId: 'roadmap'
16
- });
17
- google.maps.event.addListener(gmapdata[id], 'zoom_changed', function() {
18
- document.getElementById(id+"_elementform_id_temp").setAttribute("zoom", gmapdata[id].getZoom());
19
- });
20
- gmapmarker[id] = new Array();
21
- return false;
22
- }
23
-
24
- function update_position(id, i) {
25
- var longval = document.getElementById("longval" + i).value;
26
- var latval = document.getElementById("latval" + i).value;
27
- if (longval.length > 0) {
28
- if (isNaN(parseFloat(longval)) == true) {
29
- longval = 2.294254;
30
- }
31
- }
32
- else {
33
- longval = 2.294254;
34
- }
35
- if (latval.length > 0) {
36
- if (isNaN(parseFloat(latval)) == true) {
37
- latval = 48.858334;
38
- }
39
- }
40
- else {
41
- latval = 48.858334;
42
- }
43
- var curpoint = new google.maps.LatLng(latval,longval);
44
- gmapmarker[id][i].setPosition(curpoint);
45
- gmapdata[id].setCenter(curpoint);
46
- cur_zoom = gmapdata[id].getZoom();
47
- gmapdata[id].setZoom(cur_zoom);
48
- geocoder = new google.maps.Geocoder();
49
- geocoder.geocode({'latLng': gmapmarker[id][i].getPosition()}, function(results, status) {
50
- if (status == google.maps.GeocoderStatus.OK) {
51
- if (results[0]) {
52
- if (document.getElementById("addrval" + i)) {
53
- document.getElementById("addrval" + i).value = results[0].formatted_address;
54
- }
55
- }
56
- }
57
- });
58
- return false;
59
- }
60
-
61
- function reomve_marker(id, i) {
62
- gmapmarker[id][i].setMap(null);
63
- }
64
-
65
- function add_marker_on_map(id, i, w_long, w_lat, w_info, dragb) {
66
- map = document.getElementById(id+"_elementform_id_temp");
67
- if (w_long == null) {
68
- var marker_point = gmapdata[id].getCenter();
69
- w_lat = gmapdata[id].getCenter().lat();
70
- w_long = gmapdata[id].getCenter().lng();
71
- }
72
- else {
73
- var marker_point = new google.maps.LatLng(w_lat, w_long);
74
- }
75
- geocoder = new google.maps.Geocoder();
76
- gmapmarker[id][i] = new google.maps.Marker({
77
- map: gmapdata[id],
78
- position: marker_point,
79
- draggable: dragb
80
- });
81
- gmapmarker[id][i].setDraggable(dragb);
82
- infoW = new google.maps.InfoWindow;
83
- google.maps.event.addListener(gmapdata[id], 'mouseover', function(event) {
84
- if (!document.getElementById("longval" + i)) {
85
- gmapmarker[id][i].setDraggable(false);
86
- }
87
- });
88
- google.maps.event.addListener(gmapmarker[id][i], 'drag', function() {
89
- if (document.getElementById("longval" + i)) {
90
- geocoder.geocode({'latLng': gmapmarker[id][i].getPosition()}, function(results, status) {
91
- if (status == google.maps.GeocoderStatus.OK) {
92
- if (results[0]) {
93
- if (document.getElementById("addrval" + i)) {
94
- document.getElementById("addrval" + i).value = results[0].formatted_address;
95
- }
96
- }
97
- }
98
- });
99
- map.setAttribute("long" + i, gmapmarker[id][i].getPosition().lng().toFixed(6));
100
- map.setAttribute("lat" + i, gmapmarker[id][i].getPosition().lat().toFixed(6));
101
- document.getElementById("latval" + i).value = gmapmarker[id][i].getPosition().lat().toFixed(6);
102
- document.getElementById("longval" + i).value = gmapmarker[id][i].getPosition().lng().toFixed(6);
103
- }
104
- });
105
- google.maps.event.addListener(gmapmarker[id][i], 'click', function() {
106
- infoW.setContent('<div style="overflow: hidden;">' + document.getElementById(id + "_elementform_id_temp").getAttribute('info' + i) + "</div>");
107
- var infoWOpt = {
108
- maxWidth: "300"
109
- };
110
- infoW.setOptions(infoWOpt);
111
- infoW.open(this.getMap(), this);
112
- });
113
- if (document.getElementById("longval" + i)) {
114
- document.getElementById("longval" + i).value = w_long;
115
- document.getElementById("latval" + i).value = w_lat;
116
- geocoder.geocode({'latLng': gmapmarker[id][i].getPosition()}, function(results, status) {
117
- if (status == google.maps.GeocoderStatus.OK) {
118
- if (results[0]) {
119
- if (document.getElementById("addrval" + i)) {
120
- document.getElementById("addrval" + i).value = results[0].formatted_address;
121
- }
122
- }
123
- }
124
- });
125
- map.setAttribute("long" + i, w_long);
126
- map.setAttribute("lat" + i, w_lat);
127
- }
128
- return false;
129
- }
130
-
131
- function changeAddress(id, i) {
132
- var addrval = document.getElementById("addrval" + i).value;
133
- geocoder.geocode( { 'address': addrval}, function(results, status) {
134
- if (status == google.maps.GeocoderStatus.OK) {
135
- gmapdata[id].setCenter(results[0].geometry.location);
136
- gmapmarker[id][i].setPosition(results[0].geometry.location);
137
- document.getElementById("latval"+i).value = gmapmarker[id][i].getPosition().lat().toFixed(6);
138
- document.getElementById("longval"+i).value = gmapmarker[id][i].getPosition().lng().toFixed(6);
139
- map.setAttribute("long" + i, gmapmarker[id][i].getPosition().lng().toFixed(6));
140
- map.setAttribute("lat" + i, gmapmarker[id][i].getPosition().lat().toFixed(6));
141
- }
142
- });
143
- }
144
-
145
- function change_info(value, id, i) {
146
- map = document.getElementById(id + "_elementform_id_temp");
147
- map.setAttribute("info" + i, value);
148
- }
149
-
150
- function if_gmap_updateMap(id) {
151
- map = document.getElementById(id + "_elementform_id_temp");
152
- w_long=gmapdata[id].getCenter().lng();
153
- w_lat=gmapdata[id].getCenter().lat();
154
- map.setAttribute("center_x", w_long);
155
- map.setAttribute("center_y", w_lat);
156
- }
1
+ /* Code based on Google Map APIv3 Tutorials */
2
+
3
+ var gmapdata = new Array();
4
+ var gmapmarker = new Array();
5
+
6
+ function if_gmap_init(id) {
7
+ map = document.getElementById(id + "_elementform_id_temp");
8
+ var def_zoomval = parseInt(map.getAttribute("zoom"));
9
+ var def_longval = map.getAttribute("center_x");
10
+ var def_latval = map.getAttribute("center_y");
11
+ var curpoint = new google.maps.LatLng(def_latval, def_longval);
12
+ gmapdata[id] = new google.maps.Map(document.getElementById(id + "_elementform_id_temp"), {
13
+ center: curpoint,
14
+ zoom: def_zoomval,
15
+ mapTypeId: 'roadmap'
16
+ });
17
+ google.maps.event.addListener(gmapdata[id], 'zoom_changed', function() {
18
+ document.getElementById(id+"_elementform_id_temp").setAttribute("zoom", gmapdata[id].getZoom());
19
+ });
20
+ gmapmarker[id] = new Array();
21
+ return false;
22
+ }
23
+
24
+ function update_position(id, i) {
25
+ var longval = document.getElementById("longval" + i).value;
26
+ var latval = document.getElementById("latval" + i).value;
27
+ if (longval.length > 0) {
28
+ if (isNaN(parseFloat(longval)) == true) {
29
+ longval = 2.294254;
30
+ }
31
+ }
32
+ else {
33
+ longval = 2.294254;
34
+ }
35
+ if (latval.length > 0) {
36
+ if (isNaN(parseFloat(latval)) == true) {
37
+ latval = 48.858334;
38
+ }
39
+ }
40
+ else {
41
+ latval = 48.858334;
42
+ }
43
+ var curpoint = new google.maps.LatLng(latval,longval);
44
+ gmapmarker[id][i].setPosition(curpoint);
45
+ gmapdata[id].setCenter(curpoint);
46
+ cur_zoom = gmapdata[id].getZoom();
47
+ gmapdata[id].setZoom(cur_zoom);
48
+ geocoder = new google.maps.Geocoder();
49
+ geocoder.geocode({'latLng': gmapmarker[id][i].getPosition()}, function(results, status) {
50
+ if (status == google.maps.GeocoderStatus.OK) {
51
+ if (results[0]) {
52
+ if (document.getElementById("addrval" + i)) {
53
+ document.getElementById("addrval" + i).value = results[0].formatted_address;
54
+ }
55
+ }
56
+ }
57
+ });
58
+ return false;
59
+ }
60
+
61
+ function reomve_marker(id, i) {
62
+ gmapmarker[id][i].setMap(null);
63
+ }
64
+
65
+ function add_marker_on_map(id, i, w_long, w_lat, w_info, dragb) {
66
+ map = document.getElementById(id+"_elementform_id_temp");
67
+ if (w_long == null) {
68
+ var marker_point = gmapdata[id].getCenter();
69
+ w_lat = gmapdata[id].getCenter().lat();
70
+ w_long = gmapdata[id].getCenter().lng();
71
+ }
72
+ else {
73
+ var marker_point = new google.maps.LatLng(w_lat, w_long);
74
+ }
75
+ geocoder = new google.maps.Geocoder();
76
+ gmapmarker[id][i] = new google.maps.Marker({
77
+ map: gmapdata[id],
78
+ position: marker_point,
79
+ draggable: dragb
80
+ });
81
+ gmapmarker[id][i].setDraggable(dragb);
82
+ infoW = new google.maps.InfoWindow;
83
+ google.maps.event.addListener(gmapdata[id], 'mouseover', function(event) {
84
+ if (!document.getElementById("longval" + i)) {
85
+ gmapmarker[id][i].setDraggable(false);
86
+ }
87
+ });
88
+ google.maps.event.addListener(gmapmarker[id][i], 'drag', function() {
89
+ if (document.getElementById("longval" + i)) {
90
+ geocoder.geocode({'latLng': gmapmarker[id][i].getPosition()}, function(results, status) {
91
+ if (status == google.maps.GeocoderStatus.OK) {
92
+ if (results[0]) {
93
+ if (document.getElementById("addrval" + i)) {
94
+ document.getElementById("addrval" + i).value = results[0].formatted_address;
95
+ }
96
+ }
97
+ }
98
+ });
99
+ map.setAttribute("long" + i, gmapmarker[id][i].getPosition().lng().toFixed(6));
100
+ map.setAttribute("lat" + i, gmapmarker[id][i].getPosition().lat().toFixed(6));
101
+ document.getElementById("latval" + i).value = gmapmarker[id][i].getPosition().lat().toFixed(6);
102
+ document.getElementById("longval" + i).value = gmapmarker[id][i].getPosition().lng().toFixed(6);
103
+ }
104
+ });
105
+ google.maps.event.addListener(gmapmarker[id][i], 'click', function() {
106
+ infoW.setContent('<div style="overflow: hidden;">' + document.getElementById(id + "_elementform_id_temp").getAttribute('info' + i) + "</div>");
107
+ var infoWOpt = {
108
+ maxWidth: "300"
109
+ };
110
+ infoW.setOptions(infoWOpt);
111
+ infoW.open(this.getMap(), this);
112
+ });
113
+ if (document.getElementById("longval" + i)) {
114
+ document.getElementById("longval" + i).value = w_long;
115
+ document.getElementById("latval" + i).value = w_lat;
116
+ geocoder.geocode({'latLng': gmapmarker[id][i].getPosition()}, function(results, status) {
117
+ if (status == google.maps.GeocoderStatus.OK) {
118
+ if (results[0]) {
119
+ if (document.getElementById("addrval" + i)) {
120
+ document.getElementById("addrval" + i).value = results[0].formatted_address;
121
+ }
122
+ }
123
+ }
124
+ });
125
+ map.setAttribute("long" + i, w_long);
126
+ map.setAttribute("lat" + i, w_lat);
127
+ }
128
+ return false;
129
+ }
130
+
131
+ function changeAddress(id, i) {
132
+ var addrval = document.getElementById("addrval" + i).value;
133
+ geocoder.geocode( { 'address': addrval}, function(results, status) {
134
+ if (status == google.maps.GeocoderStatus.OK) {
135
+ gmapdata[id].setCenter(results[0].geometry.location);
136
+ gmapmarker[id][i].setPosition(results[0].geometry.location);
137
+ document.getElementById("latval"+i).value = gmapmarker[id][i].getPosition().lat().toFixed(6);
138
+ document.getElementById("longval"+i).value = gmapmarker[id][i].getPosition().lng().toFixed(6);
139
+ map.setAttribute("long" + i, gmapmarker[id][i].getPosition().lng().toFixed(6));
140
+ map.setAttribute("lat" + i, gmapmarker[id][i].getPosition().lat().toFixed(6));
141
+ }
142
+ });
143
+ }
144
+
145
+ function change_info(value, id, i) {
146
+ map = document.getElementById(id + "_elementform_id_temp");
147
+ map.setAttribute("info" + i, value);
148
+ }
149
+
150
+ function if_gmap_updateMap(id) {
151
+ map = document.getElementById(id + "_elementform_id_temp");
152
+ w_long=gmapdata[id].getCenter().lng();
153
+ w_lat=gmapdata[id].getCenter().lat();
154
+ map.setAttribute("center_x", w_long);
155
+ map.setAttribute("center_y", w_lat);
156
+ }
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://web-dorado.com/products/wordpress-contact-form-builder.html
4
  Tags: form, forms, contact form, contact forms, contact form plugin, contact forms plugin, forms plugin, Contact Form Builder, contact form manager, multiple contact forms, custom form, Contact Form Builder with recaptcha, contact form with google map, feedback form, feedback forms, contact us, wordpress contact form, email form, feedback, web form, contact me, email, contact manager, contact us form, admin, captcha, contact, database, email, javascript, jquery, page, plugin, survey, widget, custom form, forms creator, text input, validation, send copy, form with captcha, advanced form, recaptcha, contact form with captcha
5
  Requires at least: 3.4
6
  Tested up to: 4.5
7
- Stable tag: 1.0.47
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -137,105 +137,110 @@ After downloading the ZIP file,
137
 
138
 
139
  == Changelog ==
 
 
 
 
 
140
  = 1.0.47 =
141
- Added: Global option section for ReCaptcha and Google Maps API keys
142
- Fixed: Google Maps API key warning in browser
143
 
144
  = 1.0.46 =
145
- Fixed: IPv6 in submissions.
146
 
147
  = 1.0.45 =
148
- Changed: Styles improvements on admin pages.
149
 
150
  = 1.0.44 =
151
- Changed: Featured plugins page.
152
 
153
  = 1.0.43 =
154
- Changed: Add scripts and styles only on necessary pages.
155
 
156
  = 1.0.42 =
157
- Changed: Featured plugins, themes page.
158
- Changed: Unistall page.
159
 
160
  = 1.0.41 =
161
- Fixed: CC, BCC multiple emails.
162
 
163
  = 1.0.40 =
164
- Added: Optional delimiter for exported csv.
165
- Changed: Featured plugins page.
166
 
167
  = 1.0.39 =
168
- Fixed: Email from name with quotes.
169
 
170
  = 1.0.38 =
171
- Changed: Improve submissions export.
172
- Changed: Manager page buttons disposition.
173
 
174
  = 1.0.37 =
175
- Changed: Integrated with new version of reCAPTCHA.
176
 
177
  = 1.0.36 =
178
- Changed: Backend design.
179
 
180
  = 1.0.35 =
181
- Fixed: Inserting fields to custom text in Email.
182
 
183
  = 1.0.34 =
184
- Changed: Featured plugins page.
185
 
186
  = 1.0.33 =
187
- Changed: Italian language file.
188
 
189
  = 1.0.32 =
190
- Changed: Mail header.
191
 
192
  = 1.0.31 =
193
- Changed: Notices show order.
194
 
195
  = 1.0.30 =
196
- Added: Support/rate us messages.
197
 
198
  = 1.0.29 =
199
- Added: RegExp for text fields.
200
 
201
  = 1.0.28 =
202
- Changed: Compability with Wordpress 4.3.
203
 
204
  = 1.0.27 =
205
- Fixed: Javascript conflict with some themes.
206
 
207
  = 1.0.26 =
208
- Changed: Shortcode.
209
 
210
  = 1.0.25 =
211
- Security issue fixed.
212
 
213
  = 1.0.24 =
214
- Changed: Featured plugins page.
215
 
216
  = 1.0.23 =
217
- Fixed: Show statistics in submissions.
218
- Fixed: Save field after edit.
219
 
220
  = 1.0.22 =
221
- Added: Form fields drag & drop in backend.
222
 
223
  = 1.0.21 =
224
- Changed: Featured plugins page.
225
- New: Featured themes page.
226
 
227
  = 1.0.20 =
228
- Fixed: Alert messages with single quotes.
229
- Fixed: Some countries translations.
230
 
231
  = 1.0.19 =
232
- Fixed: Blocked IPs color.
233
- New: Backend trnaslation.
234
 
235
  = 1.0.18 =
236
- New: Mailer option (Wordpress or PHP)
237
- Bug fixed: Delete theme.
238
- Bug fixed: Empty From name.
239
 
240
  = 1.0.17 =
241
  * add ability to call form with php function
4
  Tags: form, forms, contact form, contact forms, contact form plugin, contact forms plugin, forms plugin, Contact Form Builder, contact form manager, multiple contact forms, custom form, Contact Form Builder with recaptcha, contact form with google map, feedback form, feedback forms, contact us, wordpress contact form, email form, feedback, web form, contact me, email, contact manager, contact us form, admin, captcha, contact, database, email, javascript, jquery, page, plugin, survey, widget, custom form, forms creator, text input, validation, send copy, form with captcha, advanced form, recaptcha, contact form with captcha
5
  Requires at least: 3.4
6
  Tested up to: 4.5
7
+ Stable tag: 1.0.49
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
137
 
138
 
139
  == Changelog ==
140
+ = 1.8.49 =
141
+ * Fixed: JS error on incorrect Google Maps API key
142
+ * Added: Alert about incorrect Google Maps API key
143
+ * Changed: Featured plugins page.
144
+
145
  = 1.0.47 =
146
+ * Added: Global option section for ReCaptcha and Google Maps API keys
147
+ * Fixed: Google Maps API key warning in browser
148
 
149
  = 1.0.46 =
150
+ * Fixed: IPv6 in submissions.
151
 
152
  = 1.0.45 =
153
+ * Changed: Styles improvements on admin pages.
154
 
155
  = 1.0.44 =
156
+ * Changed: Featured plugins page.
157
 
158
  = 1.0.43 =
159
+ * Changed: Add scripts and styles only on necessary pages.
160
 
161
  = 1.0.42 =
162
+ * Changed: Featured plugins, themes page.
163
+ * Changed: Unistall page.
164
 
165
  = 1.0.41 =
166
+ * Fixed: CC, BCC multiple emails.
167
 
168
  = 1.0.40 =
169
+ * Added: Optional delimiter for exported csv.
170
+ * Changed: Featured plugins page.
171
 
172
  = 1.0.39 =
173
+ * Fixed: Email from name with quotes.
174
 
175
  = 1.0.38 =
176
+ * Changed: Improve submissions export.
177
+ * Changed: Manager page buttons disposition.
178
 
179
  = 1.0.37 =
180
+ * Changed: Integrated with new version of reCAPTCHA.
181
 
182
  = 1.0.36 =
183
+ * Changed: Backend design.
184
 
185
  = 1.0.35 =
186
+ * Fixed: Inserting fields to custom text in Email.
187
 
188
  = 1.0.34 =
189
+ * Changed: Featured plugins page.
190
 
191
  = 1.0.33 =
192
+ * Changed: Italian language file.
193
 
194
  = 1.0.32 =
195
+ * Changed: Mail header.
196
 
197
  = 1.0.31 =
198
+ * Changed: Notices show order.
199
 
200
  = 1.0.30 =
201
+ * Added: Support/rate us messages.
202
 
203
  = 1.0.29 =
204
+ * Added: RegExp for text fields.
205
 
206
  = 1.0.28 =
207
+ * Changed: Compability with Wordpress 4.3.
208
 
209
  = 1.0.27 =
210
+ * Fixed: Javascript conflict with some themes.
211
 
212
  = 1.0.26 =
213
+ * Changed: Shortcode.
214
 
215
  = 1.0.25 =
216
+ * Security issue fixed.
217
 
218
  = 1.0.24 =
219
+ * Changed: Featured plugins page.
220
 
221
  = 1.0.23 =
222
+ * Fixed: Show statistics in submissions.
223
+ * Fixed: Save field after edit.
224
 
225
  = 1.0.22 =
226
+ * Added: Form fields drag & drop in backend.
227
 
228
  = 1.0.21 =
229
+ * Changed: Featured plugins page.
230
+ * New: Featured themes page.
231
 
232
  = 1.0.20 =
233
+ * Fixed: Alert messages with single quotes.
234
+ * Fixed: Some countries translations.
235
 
236
  = 1.0.19 =
237
+ * Fixed: Blocked IPs color.
238
+ * New: Backend trnaslation.
239
 
240
  = 1.0.18 =
241
+ * New: Mailer option (Wordpress or PHP)
242
+ * Bug fixed: Delete theme.
243
+ * Bug fixed: Empty From name.
244
 
245
  = 1.0.17 =
246
  * add ability to call form with php function