Form Maker by WD – user-friendly drag & drop Form Builder plugin - Version 1.13.8

Version Description

  • Fixed: Form submit bug.
Download this release

Release Info

Developer webdorado
Plugin Icon 128x128 Form Maker by WD – user-friendly drag & drop Form Builder plugin
Version 1.13.8
Comparing to
See all releases

Code changes from version 1.13.7 to 1.13.8

Files changed (3) hide show
  1. form-maker.php +1829 -1829
  2. frontend/models/form_maker.php +5 -4
  3. readme.txt +1488 -1485
form-maker.php CHANGED
@@ -1,1830 +1,1830 @@
1
- <?php
2
- /**
3
- * Plugin Name: Form Maker
4
- * Plugin URI: https://10web.io/plugins/wordpress-form-maker/
5
- * Description: This plugin is a modern and advanced tool for easy and fast creating of a WordPress Form. The backend interface is intuitive and user friendly which allows users far from scripting and programming to create WordPress Forms.
6
- * Version: 1.13.7
7
- * Author: 10Web Form Builder Team
8
- * Author URI: https://10web.io/plugins/
9
- * License: GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
10
- */
11
-
12
- defined('ABSPATH') || die('Access Denied');
13
-
14
- final class WDFM {
15
- /**
16
- * PLUGIN = 2 points to Contact Form Maker
17
- */
18
- const PLUGIN = 1;
19
-
20
- /**
21
- * The single instance of the class.
22
- */
23
- protected static $_instance = null;
24
- /**
25
- * Plugin directory path.
26
- */
27
- public $plugin_dir = '';
28
- /**
29
- * Plugin directory url.
30
- */
31
- public $plugin_url = '';
32
- /**
33
- * Plugin front urls.
34
- */
35
- public $front_urls = array();
36
- /**
37
- * Plugin main file.
38
- */
39
- public $main_file = '';
40
- /**
41
- * Plugin version.
42
- */
43
- public $plugin_version = '';
44
- /**
45
- * Plugin database version.
46
- */
47
- public $db_version = '';
48
- /**
49
- * Plugin menu slug.
50
- */
51
- public $menu_slug = '';
52
- /**
53
- * Plugin menu slug.
54
- */
55
- public $prefix = '';
56
- public $css_prefix = '';
57
- public $js_prefix = '';
58
-
59
- public $nicename = '';
60
- public $nonce = 'nonce_fm';
61
- public $fm_form_nonce = 'fm_form_nonce%d';
62
- public $is_free = 1;
63
- public $is_demo = false;
64
- public $fm_settings = array();
65
-
66
- /**
67
- * Main WDFM Instance.
68
- *
69
- * Ensures only one instance is loaded or can be loaded.
70
- *
71
- * @static
72
- * @return WDFM - Main instance.
73
- */
74
- public static function instance() {
75
- if ( is_null( self::$_instance ) ) {
76
- self::$_instance = new self();
77
- }
78
- return self::$_instance;
79
- }
80
-
81
- public function __construct() {
82
- $this->define_constants();
83
- require_once($this->plugin_dir . '/framework/WDW_FM_Library.php');
84
- if (is_admin()) {
85
- require_once(wp_normalize_path($this->plugin_dir . '/admin/controllers/controller.php'));
86
- require_once(wp_normalize_path($this->plugin_dir . '/admin/models/model.php'));
87
- require_once(wp_normalize_path($this->plugin_dir . '/admin/views/view.php'));
88
- }
89
- $this->add_actions();
90
- }
91
-
92
- /**
93
- * Define Constants.
94
- */
95
- private function define_constants() {
96
- $this->plugin_dir = WP_PLUGIN_DIR . "/" . plugin_basename(dirname(__FILE__));
97
- $this->plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
98
- $this->front_urls = $this->get_front_urls();
99
- $this->main_file = plugin_basename(__FILE__);
100
- $this->plugin_version = '1.13.7';
101
- $this->db_version = '2.13.7';
102
- $this->menu_postfix = ($this->is_free == 2 ? '_fmc' : '_fm');
103
- $this->plugin_postfix = ($this->is_free == 2 ? '_fmc' : '');
104
- $this->menu_slug = 'manage' . $this->menu_postfix;
105
- $this->prefix = 'form_maker' . $this->plugin_postfix;
106
- $this->css_prefix = 'fm_';
107
- $this->js_prefix = 'fm_';
108
- $this->handle_prefix = ($this->is_free == 2 ? 'fmc' : 'fm');
109
- $this->nicename = ($this->is_free == 2 ? __('Contact Form', $this->prefix) : __('Form Maker', $this->prefix));
110
- $this->slug = ($this->is_free == 2 ? 'contact-form-maker' : 'form-maker');
111
- $this->fm_settings = get_option( $this->handle_prefix . '_settings' );
112
- if ( empty($this->fm_settings['fm_developer_mode']) ) {
113
- $this->fm_settings['fm_developer_mode'] = 0;
114
- }
115
- }
116
-
117
- /**
118
- * Add actions.
119
- */
120
- private function add_actions() {
121
- add_action('init', array($this, 'init'), 9);
122
- add_action('admin_menu', array( $this, 'form_maker_options_panel' ) );
123
-
124
- add_action('wp_ajax_manage' . $this->menu_postfix, array($this, 'form_maker_ajax')); //Post/page search on display options pages.
125
- add_action('wp_ajax_get_stats' . $this->plugin_postfix, array($this, 'form_maker')); //Show statistics
126
- add_action('wp_ajax_generete_csv' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Export csv.
127
- add_action('wp_ajax_generete_xml' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Export xml.
128
- add_action('wp_ajax_formmakerwdcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete captcha image and save it code in session.
129
- add_action('wp_ajax_nopriv_formmakerwdcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete captcha image and save it code in session for all users.
130
- add_action('wp_ajax_formmakerwdmathcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete math captcha image and save it code in session.
131
- add_action('wp_ajax_nopriv_formmakerwdmathcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete math captcha image and save it code in session for all users.
132
- add_action('wp_ajax_product_option' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open product options on add paypal field.
133
- add_action('wp_ajax_FormMakerEditCountryinPopup' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open country list.
134
- add_action('wp_ajax_FormMakerMapEditinPopup' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open map in submissions.
135
- add_action('wp_ajax_FormMakerIpinfoinPopup' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open ip in submissions.
136
- add_action('wp_ajax_show_matrix' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Edit matrix in submissions.
137
- add_action('wp_ajax_FormMakerSubmits' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open submissions in submissions.
138
-
139
- if ( !$this->is_demo ) {
140
- add_action('wp_ajax_FormMakerSQLMapping' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Add/Edit SQLMaping from form options.
141
- add_action('wp_ajax_select_data_from_db' . $this->plugin_postfix, array( $this, 'form_maker_ajax' )); // select data from db.
142
- }
143
-
144
- add_action('wp_ajax_manage' . $this->plugin_postfix, array($this, 'form_maker_ajax')); //Show statistics
145
-
146
- if ( !$this->is_free ) {
147
- add_action('wp_ajax_paypal_info', array($this, 'form_maker_ajax')); // Paypal info in submissions page.
148
- add_action('wp_ajax_checkpaypal', array($this, 'form_maker_ajax')); // Notify url from Paypal Sandbox.
149
- add_action('wp_ajax_nopriv_checkpaypal', array($this, 'form_maker_ajax')); // Notify url from Paypal Sandbox for all users.
150
- add_action('wp_ajax_get_frontend_stats', array($this, 'form_maker_ajax_frontend')); //Show statistics frontend
151
- add_action('wp_ajax_nopriv_get_frontend_stats', array($this, 'form_maker_ajax_frontend')); //Show statistics frontend
152
- add_action('wp_ajax_frontend_show_map', array($this, 'form_maker_ajax_frontend')); //Show map frontend
153
- add_action('wp_ajax_nopriv_frontend_show_map', array($this, 'form_maker_ajax_frontend')); //Show map frontend
154
- add_action('wp_ajax_frontend_show_matrix', array($this, 'form_maker_ajax_frontend')); //Show matrix frontend
155
- add_action('wp_ajax_nopriv_frontend_show_matrix', array($this, 'form_maker_ajax_frontend')); //Show matrix frontend
156
- add_action('wp_ajax_frontend_paypal_info', array($this, 'form_maker_ajax_frontend')); //Show paypal info frontend
157
- add_action('wp_ajax_nopriv_frontend_paypal_info', array($this, 'form_maker_ajax_frontend')); //Show paypal info frontend
158
- add_action('wp_ajax_frontend_generate_csv', array($this, 'form_maker_ajax_frontend')); //generate csv frontend
159
- add_action('wp_ajax_nopriv_frontend_generate_csv', array($this, 'form_maker_ajax_frontend')); //generate csv frontend
160
- add_action('wp_ajax_frontend_generate_xml', array($this, 'form_maker_ajax_frontend')); //generate xml frontend
161
- add_action('wp_ajax_nopriv_frontend_generate_xml', array($this, 'form_maker_ajax_frontend')); //generate xml frontend
162
- }
163
- add_action('wp_ajax_fm_reload_input', array($this, 'form_maker_ajax_frontend'));
164
- add_action('wp_ajax_nopriv_fm_reload_input', array($this, 'form_maker_ajax_frontend'));
165
-
166
- // Add media button to WP editor.
167
- add_action('wp_ajax_FMShortocde' . $this->plugin_postfix, array($this, 'form_maker_ajax'));
168
- add_filter('media_buttons_context', array($this, 'media_button'));
169
-
170
- add_action('admin_head', array($this, 'form_maker_admin_ajax'));//js variables for admin.
171
-
172
- // Form maker shortcodes.
173
- if ( !is_admin() ) {
174
- add_shortcode('FormPreview' . $this->plugin_postfix, array($this, 'fm_form_preview_shortcode'));
175
- if ($this->is_free != 2) {
176
- add_shortcode('Form', array($this, 'fm_shortcode'));
177
- }
178
- if (!($this->is_free == 1)) {
179
- add_shortcode('contact_form', array($this, 'fm_shortcode'));
180
- add_shortcode('wd_contact_form', array($this, 'fm_shortcode'));
181
- }
182
- add_shortcode('email_verification' . $this->plugin_postfix, array($this, 'fm_email_verification_shortcode'));
183
- }
184
- // Action to display not emedded type forms.
185
- global $pagenow;
186
- if (!is_admin() || !in_array($pagenow, array('wp-login.php', 'wp-register.php'))) {
187
- add_action('wp_footer', array($this, 'FM_front_end_main'));
188
- }
189
-
190
- // Form Maker Widget.
191
- if (class_exists('WP_Widget')) {
192
- add_action('widgets_init', array($this, 'register_widgets'));
193
- }
194
-
195
- // Plugin activation.
196
- register_activation_hook(__FILE__, array($this, 'global_activate'));
197
- add_action('wpmu_new_blog', array($this, 'new_blog_added'), 10, 6);
198
-
199
- if ( (!isset($_GET['action']) || $_GET['action'] != 'deactivate')
200
- && (!isset($_GET['page']) || $_GET['page'] != 'uninstall' . $this->menu_postfix) ) {
201
- add_action('admin_init', array($this, 'form_maker_activate'));
202
- }
203
-
204
- // Register scripts/styles.
205
- add_action('wp_enqueue_scripts', array($this, 'register_frontend_scripts'));
206
- add_action('admin_enqueue_scripts', array($this, 'register_admin_scripts'));
207
-
208
- // Set per_page option for submissions.
209
- add_filter('set-screen-option', array($this, 'set_option_submissions'), 10, 3);
210
-
211
- // Check extensions versions.
212
- if ( $this->is_free != 2 && isset( $_GET[ 'page' ] ) && strpos( esc_html( $_GET[ 'page' ] ), '_' . $this->handle_prefix ) !== FALSE ) {
213
- add_action('admin_notices', array($this, 'fm_check_addons_compatibility'));
214
- }
215
-
216
- add_action('plugins_loaded', array($this, 'plugins_loaded'), 9);
217
-
218
- add_filter('wpseo_whitelist_permalink_vars', array($this, 'add_query_vars_seo'));
219
-
220
- // Enqueue block editor assets for Gutenberg.
221
- add_filter('tw_get_block_editor_assets', array($this, 'register_block_editor_assets'));
222
- add_filter('tw_get_plugin_blocks', array($this, 'register_plugin_block'));
223
- add_action( 'enqueue_block_editor_assets', array($this, 'enqueue_block_editor_assets') );
224
-
225
- // Privacy policy.
226
- add_action( 'admin_init', array($this, 'add_privacy_policy_content') );
227
-
228
- // Personal data export.
229
- add_filter( 'wp_privacy_personal_data_exporters', array($this, 'register_privacy_personal_data_exporter') );
230
- // Personal data erase.
231
- add_filter( 'wp_privacy_personal_data_erasers', array($this, 'register_privacy_personal_data_eraser') );
232
-
233
- // Register widget for Elementor builder.
234
- add_action('elementor/widgets/widgets_registered', array($this, 'register_elementor_widget'));
235
- // Register 10Web category for Elementor widget if 10Web builder doesn't installed.
236
- add_action('elementor/elements/categories_registered', array($this, 'register_widget_category'), 1, 1);
237
- //fires after elementor editor styles and scripts are enqueued.
238
- add_action('elementor/editor/after_enqueue_styles', array($this, 'enqueue_editor_styles'), 11);
239
- }
240
-
241
- public function enqueue_editor_styles() {
242
- wp_enqueue_style($this->handle_prefix . '-icons', $this->plugin_url . '/fonts/style.css', array(), '1.0.0');
243
- }
244
-
245
- /**
246
- * Register widget for Elementor builder.
247
- */
248
- public function register_elementor_widget() {
249
- if ( defined('ELEMENTOR_PATH') && class_exists('Elementor\Widget_Base') ) {
250
- require_once ($this->plugin_dir . '/admin/controllers/elementorWidget.php');
251
- }
252
- }
253
-
254
- /**
255
- * Register 10Web category for Elementor widget if 10Web builder doesn't installed.
256
- *
257
- * @param $elements_manager
258
- */
259
- public function register_widget_category( $elements_manager ) {
260
- $elements_manager->add_category('tenweb-plugins-widgets', array(
261
- 'title' => __('10WEB Plugins', 'tenweb-builder'),
262
- 'icon' => 'fa fa-plug',
263
- ));
264
- }
265
-
266
- function add_privacy_policy_content() {
267
- if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) {
268
- return;
269
- }
270
-
271
- $content = __( 'When you leave a comment on this site, we send your name, email
272
- address, IP address and comment text to example.com. Example.com does
273
- not retain your personal data.', WDFMInstance(self::PLUGIN)->prefix );
274
-
275
- wp_add_privacy_policy_content(
276
- WDFMInstance(self::PLUGIN)->nicename,
277
- wp_kses_post( wpautop( $content, false ) )
278
- );
279
- }
280
-
281
- public function register_privacy_personal_data_exporter( $exporters ) {
282
- $exporters[ $this->slug ] = array(
283
- 'exporter_friendly_name' => $this->nicename,
284
- 'callback' => array( WDW_FM_Library(self::PLUGIN), 'privacy_personal_data_export' ),
285
- );
286
- return $exporters;
287
- }
288
-
289
- public function register_privacy_personal_data_eraser( $erasers ) {
290
- $erasers[ $this->slug ] = array(
291
- 'eraser_friendly_name' => $this->nicename,
292
- 'callback' => array( WDW_FM_Library(self::PLUGIN), 'privacy_personal_data_erase' ),
293
- );
294
- return $erasers;
295
- }
296
-
297
- public function register_block_editor_assets($assets) {
298
- $version = '2.0.3';
299
- $js_path = $this->plugin_url . '/js/tw-gb/block.js';
300
- $css_path = $this->plugin_url . '/css/tw-gb/block.css';
301
- if (!isset($assets['version']) || version_compare($assets['version'], $version) === -1) {
302
- $assets['version'] = $version;
303
- $assets['js_path'] = $js_path;
304
- $assets['css_path'] = $css_path;
305
- }
306
- return $assets;
307
- }
308
-
309
- public function register_plugin_block($blocks) {
310
- if ($this->is_free == 2) {
311
- $key = 'tw/contact-form-maker';
312
- $key_submissions = 'tw/cfm-submissions';
313
- }
314
- else {
315
- $key = 'tw/form-maker';
316
- $key_submissions = 'tw/fm-submissions';
317
- }
318
- $fm_nonce = wp_create_nonce('fm_ajax_nonce');
319
- $plugin_name = $this->nicename;
320
- $plugin_name_submissions = __('Submissions', WDFMInstance(self::PLUGIN)->prefix);
321
- $icon_url = $this->plugin_url . '/images/tw-gb/icon_colored.svg';
322
- $icon_svg = $this->plugin_url . '/images/tw-gb/icon.svg';
323
- $url = add_query_arg(array('action' => 'FMShortocde' . $this->plugin_postfix, 'task' => 'submissions', 'nonce' => $fm_nonce), admin_url('admin-ajax.php'));
324
- $data = WDW_FM_Library(self::PLUGIN)->get_shortcode_data();
325
- $blocks[$key] = array(
326
- 'title' => $plugin_name,
327
- 'titleSelect' => sprintf(__('Select %s', $this->prefix), $plugin_name),
328
- 'iconUrl' => $icon_url,
329
- 'iconSvg' => array('width' => 20, 'height' => 20, 'src' => $icon_svg),
330
- 'isPopup' => false,
331
- 'data' => $data,
332
- );
333
- $blocks[$key_submissions] = array(
334
- 'title' => $plugin_name_submissions,
335
- 'titleSelect' => sprintf(__('Select %s', $this->prefix), $plugin_name),
336
- 'iconUrl' => $icon_url,
337
- 'iconSvg' => array('width' => 20, 'height' => 20, 'src' => $icon_svg),
338
- 'isPopup' => true,
339
- 'containerClass' => 'tw-container-wrap-520-400',
340
- 'data' => array('shortcodeUrl' => $url),
341
- );
342
- return $blocks;
343
- }
344
-
345
- public function enqueue_block_editor_assets() {
346
- // Remove previously registered or enqueued versions
347
- $wp_scripts = wp_scripts();
348
- foreach ($wp_scripts->registered as $key => $value) {
349
- // Check for an older versions with prefix.
350
- if (strpos($key, 'tw-gb-block') > 0) {
351
- wp_deregister_script( $key );
352
- wp_deregister_style( $key );
353
- }
354
- }
355
- // Get plugin blocks from all 10Web plugins.
356
- $blocks = apply_filters('tw_get_plugin_blocks', array());
357
- // Get the last version from all 10Web plugins.
358
- $assets = apply_filters('tw_get_block_editor_assets', array());
359
- // Not performing unregister or unenqueue as in old versions all are with prefixes.
360
- wp_enqueue_script('tw-gb-block', $assets['js_path'], array( 'wp-blocks', 'wp-element' ), $assets['version']);
361
- wp_localize_script('tw-gb-block', 'tw_obj_translate', array(
362
- 'nothing_selected' => __('Nothing selected.', $this->prefix),
363
- 'empty_item' => __('- Select -', $this->prefix),
364
- 'blocks' => json_encode($blocks)
365
- ));
366
- wp_enqueue_style('tw-gb-block', $assets['css_path'], array( 'wp-edit-blocks' ), $assets['version']);
367
- }
368
-
369
- /**
370
- * Wordpress init actions.
371
- */
372
- public function init() {
373
- ob_start();
374
- $this->fm_overview();
375
-
376
- // Register fmemailverification post type
377
- $this->register_fmemailverification_cpt();
378
-
379
- // Register fmformpreview post type
380
- $this->register_form_preview_cpt();
381
- }
382
-
383
- /**
384
- * Plugins loaded actions.
385
- */
386
- public function plugins_loaded() {
387
- // Languages localization.
388
- load_plugin_textdomain($this->prefix, FALSE, basename(dirname(__FILE__)) . '/languages');
389
-
390
- if ($this->is_free != 2 && !function_exists('WDFM')) {
391
- require_once($this->plugin_dir . '/WDFM.php');
392
- }
393
-
394
- // Initialize extensions.
395
- if ($this->is_free != 2) {
396
- do_action('fm_init_addons');
397
- }
398
- // Prevent adding shortcode conflict with some builders.
399
- $this->before_shortcode_add_builder_editor();
400
- }
401
-
402
- /**
403
- * Plugin menu.
404
- */
405
- public function form_maker_options_panel() {
406
- $parent_slug = !$this->is_free ? $this->menu_slug : null;
407
- if( !$this->is_free || ($this->is_free == 1 && get_option( "fm_subscribe_done" ) == 1) || ($this->is_free == 2 && get_option( "cfm_subscribe_done" ) == 1) ) {
408
- add_menu_page($this->nicename, $this->nicename, 'manage_options', $this->menu_slug, array( $this, 'form_maker' ), $this->plugin_url . '/images/FormMakerLogo-16.png');
409
- $parent_slug = $this->menu_slug;
410
- }
411
- add_submenu_page($parent_slug, __('Forms', $this->prefix), __('Forms', $this->prefix), 'manage_options', $this->menu_slug, array($this, 'form_maker'));
412
- $submissions_page = add_submenu_page($parent_slug, __('Submissions', $this->prefix), __('Submissions', $this->prefix), 'manage_options', 'submissions' . $this->menu_postfix, array($this, 'form_maker'));
413
- add_action('load-' . $submissions_page, array($this, 'submissions_per_page'));
414
-
415
- add_submenu_page(null, __('Blocked IPs', $this->prefix), __('Blocked IPs', $this->prefix), 'manage_options', 'blocked_ips' . $this->menu_postfix, array($this, 'form_maker'));
416
- add_submenu_page($parent_slug, __('Themes', $this->prefix), __('Themes', $this->prefix), 'manage_options', 'themes' . $this->menu_postfix, array($this, 'form_maker'));
417
- add_submenu_page($parent_slug, __('Options', $this->prefix), __('Options', $this->prefix), 'manage_options', 'options' . $this->menu_postfix, array($this, 'form_maker'));
418
- add_submenu_page(null, __('Uninstall', $this->prefix), __('Uninstall', $this->prefix), 'manage_options', 'uninstall' . $this->menu_postfix, array($this, 'form_maker'));
419
- }
420
-
421
- /**
422
- * Set front plugin url.
423
- *
424
- * return string $plugin_url
425
- */
426
- private function set_front_plugin_url() {
427
- $plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
428
-
429
- return $plugin_url;
430
- }
431
-
432
- /**
433
- * Set front upload url.
434
- *
435
- * return string $upload_url
436
- */
437
- private function set_front_upload_url() {
438
- $wp_upload_dir = wp_upload_dir();
439
- $upload_url = $wp_upload_dir['baseurl'];
440
- $http = 'http://';
441
- $https = 'https://';
442
- if ( $_SERVER['SERVER_PORT'] == 443 || strpos(get_option('home'), $https) > -1 ) {
443
- $upload_url = str_replace($http, $https, $wp_upload_dir['baseurl']);
444
- }
445
-
446
- return $upload_url;
447
- }
448
-
449
- /**
450
- * Get front urls.
451
- *
452
- * return array $urls
453
- */
454
- public function get_front_urls() {
455
- $urls = array();
456
- $urls['plugin_url'] = $this->set_front_plugin_url();
457
- $urls['upload_url'] = $this->set_front_upload_url();
458
-
459
- return $urls;
460
- }
461
-
462
- /**
463
- * Add per_page screen option for submissions page.
464
- */
465
- function submissions_per_page() {
466
- $option = 'per_page';
467
- $args_rates = array(
468
- 'label' => __('Number of items per page:', $this->prefix),
469
- 'default' => 20,
470
- 'option' => 'fm_submissions_per_page'
471
- );
472
- add_screen_option( $option, $args_rates );
473
- }
474
-
475
- /**
476
- * Set per_page option for submissions page.
477
- *
478
- * @param $status
479
- * @param $option
480
- * @param $value
481
- * @return mixed
482
- */
483
- function set_option_submissions($status, $option, $value) {
484
- if ( 'fm_submissions_per_page' == $option ) return $value;
485
- return $status;
486
- }
487
-
488
- /**
489
- * Output for admin pages.
490
- */
491
- public function form_maker() {
492
- if (function_exists('current_user_can')) {
493
- if (!current_user_can('manage_options')) {
494
- die('Access Denied');
495
- }
496
- }
497
- else {
498
- die('Access Denied');
499
- }
500
- $page = WDW_FM_Library(self::PLUGIN)->get('page');
501
- if (($page != '') && (($page == 'manage' . $this->menu_postfix) || ($page == 'options' . $this->menu_postfix) || ($page == 'submissions' . $this->menu_postfix) || ($page == 'blocked_ips' . $this->menu_postfix) || ($page == 'themes' . $this->menu_postfix) || ($page == 'uninstall' . $this->menu_postfix))) {
502
- $page = ucfirst(substr($page, 0, strlen($page) - strlen($this->menu_postfix)));
503
- echo '<div id="fm_loading"></div>';
504
- echo '<div id="fm_admin_container" class="fm-form-container" style="display: none;">';
505
- try {
506
- require_once ($this->plugin_dir . '/admin/controllers/' . $page . '_fm.php');
507
- $controller_class = 'FMController' . $page . $this->menu_postfix;
508
- $controller = new $controller_class();
509
- $controller->execute();
510
- } catch (Exception $e) {
511
- ob_start();
512
- debug_print_backtrace();
513
- error_log(ob_get_clean());
514
- }
515
- echo '</div>';
516
- }
517
- }
518
-
519
- /**
520
- * Register widgets.
521
- */
522
- public function register_widgets() {
523
- require_once($this->plugin_dir . '/admin/controllers/Widget.php');
524
- register_widget('FMControllerWidget' . $this->plugin_postfix);
525
- }
526
-
527
- /**
528
- * Register Admin styles/scripts.
529
- */
530
- public function register_admin_scripts() {
531
- $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
532
- // Admin styles.
533
- wp_register_style($this->handle_prefix . '-tables', $this->plugin_url . '/css/form_maker_tables.css', array(), $this->plugin_version);
534
- wp_register_style($this->handle_prefix . '-phone_field_css', $this->plugin_url . '/css/intlTelInput.css', array(), $this->plugin_version);
535
- wp_register_style($this->handle_prefix . '-jquery-ui', $this->plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
536
- wp_register_style($this->handle_prefix . '-codemirror', $this->plugin_url . '/css/codemirror.css', array(), $this->plugin_version);
537
- wp_register_style($this->handle_prefix . '-layout', $this->plugin_url . '/css/form_maker_layout.css', array(), $this->plugin_version);
538
- wp_register_style($this->handle_prefix . '-bootstrap', $this->plugin_url . '/css/fm-bootstrap.css', array(), $this->plugin_version);
539
- wp_register_style($this->handle_prefix . '-colorpicker', $this->plugin_url . '/css/spectrum.css', array(), $this->plugin_version);
540
- // Roboto font for top bar.
541
- wp_register_style($this->handle_prefix . '-roboto', 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700');
542
-
543
- if ( !$this->is_free ) {
544
- wp_register_style('jquery.fancybox', $this->plugin_url . '/js/fancybox/jquery.fancybox.css', array(), '2.1.5');
545
- }
546
- // Admin scripts.
547
- $localize_key_all = $this->handle_prefix . '-admin';
548
- $localize_key_manage = $this->handle_prefix . '-manage';
549
- $localize_key_add_fields = $this->handle_prefix . '-add-fields';
550
- $localize_key_formmaker_div = $this->handle_prefix . '-formmaker_div';
551
-
552
- if ( ! $fm_settings['fm_developer_mode'] ) {
553
- $localize_key_all = $this->handle_prefix . ( ( WDW_FM_Library(self::PLUGIN)->get('page') == 'submissions_' . $this->handle_prefix ) ? '-submission' : '-scripts');
554
- $localize_key_manage .= '-edit';
555
- $localize_key_add_fields = $localize_key_manage;
556
- $localize_key_formmaker_div = $localize_key_manage;
557
- wp_register_style($this->handle_prefix . '-styles', $this->plugin_url . '/css/fm-styles.min.css', array(), $this->plugin_version);
558
- wp_register_script($this->handle_prefix . '-scripts', $this->plugin_url . '/js/fm-scripts.min.js', array(), $this->plugin_version);
559
-
560
- wp_register_style($this->handle_prefix . '-manage', $this->plugin_url . '/css/manage-styles.min.css', array(), $this->plugin_version);
561
- wp_register_script($this->handle_prefix . '-manage', $this->plugin_url . '/js/manage-scripts.min.js', array(), $this->plugin_version);
562
-
563
- wp_register_style($this->handle_prefix . '-manage-edit', $this->plugin_url . '/css/manage-edit-styles.min.css', array(), $this->plugin_version);
564
- wp_register_script($this->handle_prefix . '-manage-edit', $this->plugin_url . '/js/manage-edit-scripts.min.js', array(), $this->plugin_version);
565
-
566
- wp_register_style($this->handle_prefix . '-submission', $this->plugin_url . '/css/submission-styles.min.css', array(), $this->plugin_version);
567
- wp_register_script($this->handle_prefix . '-submission', $this->plugin_url . '/js/submission-scripts.min.js', array(), $this->plugin_version);
568
-
569
- wp_register_style($this->handle_prefix . '-theme-edit', $this->plugin_url . '/css/theme-edit-styles.min.css', array(), $this->plugin_version);
570
- wp_register_script($this->handle_prefix . '-theme-edit', $this->plugin_url . '/js/theme-edit-scripts.min.js', array(), $this->plugin_version);
571
- }
572
-
573
- $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
574
- wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
575
- wp_register_script($this->handle_prefix . '-gmap_form', $this->plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
576
-
577
- wp_register_script($this->handle_prefix . '-phone_field', $this->plugin_url . '/js/intlTelInput.js', array(), '11.0.0');
578
-
579
- // For drag and drop on mobiles.
580
- wp_register_script($this->handle_prefix . '_jquery.ui.touch-punch.min', $this->plugin_url . '/js/jquery.ui.touch-punch.min.js', array('jquery'), '0.2.3');
581
-
582
- wp_register_script($this->handle_prefix . '-admin', $this->plugin_url . '/js/form_maker_admin.js', array(), $this->plugin_version);
583
- wp_register_script($localize_key_manage, $this->plugin_url . '/js/form_maker_manage.js', array(), $this->plugin_version);
584
- wp_register_script($this->handle_prefix . '-manage-edit', $this->plugin_url . '/js/form_maker_manage_edit.js', array(), $this->plugin_version);
585
- wp_register_script($localize_key_formmaker_div, $this->plugin_url . '/js/formmaker_div.js', array(), $this->plugin_version);
586
- wp_register_script($this->handle_prefix . '-form-options', $this->plugin_url . '/js/form_maker_form_options.js', array(), $this->plugin_version);
587
- wp_register_script($this->handle_prefix . '-form-advanced-layout', $this->plugin_url . '/js/form_maker_form_advanced_layout.js', array(), $this->plugin_version);
588
- wp_register_script($localize_key_add_fields, $this->plugin_url . '/js/add_field.js', array($this->handle_prefix . '-formmaker_div'), $this->plugin_version);
589
-
590
- wp_localize_script($localize_key_manage, 'form_maker_manage', array(
591
- 'add_new_field' => __('Add Field', $this->prefix),
592
- 'add_column' => __('Add Column', $this->prefix),
593
- 'required_field' => __('Field is required.', $this->prefix),
594
- 'not_valid_value' => __('Enter a valid value.', $this->prefix),
595
- 'not_valid_email' => __('Enter a valid email address.', $this->prefix),
596
- ));
597
-
598
- wp_localize_script($localize_key_all, 'form_maker', array(
599
- 'countries' => WDW_FM_Library(self::PLUGIN)->get_countries(),
600
- 'delete_confirmation' => __('Do you want to delete selected items?', $this->prefix),
601
- 'select_at_least_one_item' => __('You must select at least one item.', $this->prefix),
602
- 'add_placeholder' => __('Add placeholder', $this->prefix),
603
- ));
604
-
605
- wp_localize_script($localize_key_add_fields, 'form_maker', array(
606
- 'countries' => WDW_FM_Library(self::PLUGIN)->get_countries(),
607
- 'states' => WDW_FM_Library(self::PLUGIN)->get_states(),
608
- 'provinces' => WDW_FM_Library(self::PLUGIN)->get_provinces_canada(),
609
- 'plugin_url' => $this->plugin_url,
610
- 'nothing_found' => __('Nothing found.', $this->prefix),
611
- 'captcha_created' => __('The captcha already has been created.', $this->prefix),
612
- 'update' => __('Update', $this->prefix),
613
- 'add' => __('Add', $this->prefix),
614
- 'add_field' => __('Add Field', $this->prefix),
615
- 'edit_field' => __('Edit Field', $this->prefix),
616
- 'stripe3' => __('To use this feature, please go to Form Options > Payment Options and select "Stripe" as the Payment Method.', $this->prefix),
617
- 'sunday' => __('Sunday', $this->prefix),
618
- 'monday' => __('Monday', $this->prefix),
619
- 'tuesday' => __('Tuesday', $this->prefix),
620
- 'wednesday' => __('Wednesday', $this->prefix),
621
- 'thursday' => __('Thursday', $this->prefix),
622
- 'friday' => __('Friday', $this->prefix),
623
- 'saturday' => __('Saturday', $this->prefix),
624
- 'leave_empty' => __('Leave empty to set the width to 100%.', $this->prefix),
625
- 'is_demo' => $this->is_demo,
626
- 'important_message' => __('The free version is limited up to 7 fields to add. If you need this functionality, you need to buy the commercial version.', $this->prefix),
627
- 'no_preview' => __('No preview available for reCAPTCHA.', $this->prefix),
628
- 'invisible_recaptcha_error' => sprintf( __('%s Old reCAPTCHA keys will not work for %s. Please make sure to enable the API keys for Invisible reCAPTCHA.', $this->prefix), '<b>'. __('Note:', $this->prefix) .'</b>', '<b>'. __('Invisible reCAPTCHA', $this->prefix) .'</b>' ),
629
- 'type_text_description' => __('This field is a single line text input.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('You can set the text input as Required, making sure the submitter provides a value for it.', $this->prefix).'<br><br>'.__('Validation (RegExp.) option in Advanced options lets you configure Regular Expression for your Single Line Text field. Use Common Regular Expressions select box to use built-in validation patterns. For instance, in case you can add a validation for decimal number, IP address or zip code by selecting corresponding options of Common Regular Expressions drop-down.', $this->prefix) .'<br><br>'.__('Additionally, you can add HTML attributes to your form fields with Additional Attributes.', $this->prefix),
630
- 'type_textarea_description' => __('This field adds a textarea box to your form. Users can write alphanumeric text, special characters and line breaks.', $this->prefix).'<br><br>'.__('You can set the text input as Required, making sure the submitter provides a value for it.', $this->prefix).'<br><br>'.__('Set the width and height of the textarea box using Size(px) option.', $this->prefix),
631
- 'type_number_description' => __('This is an input text that accepts only numbers. Users can type a number directly, or use the spinner arrows to specify it.', $this->prefix).'<br><br>'.__('Step option defines the number to increment/decrement the spinner value, when the users press up or down arrows.', $this->prefix).'<br><br>'.__('Use Min Value and Max Value options to set lower and upper limitation for the value of this Number field.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix),
632
- 'type_select_description' => __('This field allows the submitter to choose values from select box. Just click (+) Option button and fill in all options you will need or click (+) From Database to fill the options from a database table.', $this->prefix) .'<br><br>'.__('In case you need to have option values to be different from option names, mark Enable option\'s value from Advanced options as checked.', $this->prefix),
633
- 'type_radio_description' => __('Using this field you can add a list of Radio buttons to your form. Just click (+) Option button and fill in all options you will need or click (+) From Database to fill the options from a database table.', $this->prefix).'<br><br>'.__('Relative Position lets you choose the position of options in relation to each other. Whereas Option Label Position lets you select the position of radio button label.', $this->prefix).'<br><br>'.__('In case you need to have option values to be different from option names, mark Enable option\'s value from Advanced options as checked.', $this->prefix).'<br><br>'.__('And by enabling Allow other, you can let the user to write their own specific value.', $this->prefix),
634
- 'type_checkbox_description' => __('Multiple Choice field lets you have a list of Checkboxes. This field allows the submitter to choose more than one values.', $this->prefix).'<br><br>'.__('Just click (+) Option button and fill in all options you will need or click (+) From Database to fill the options from a database table.', $this->prefix).'<br><br>'.__('Relative Position lets you choose the position of options in relation to each other. Whereas Option Label Position lets you select the position of radio button label.', $this->prefix).'<br><br>'.__('In case you need to have option values to be different from option names, mark Enable option\'s value from Advanced options as checked.', $this->prefix).'<br><br>'.__('And by enabling Allow other, you can let the user to write their own specific value.', $this->prefix),
635
- 'type_recaptcha_description' => sprintf(__('Form Maker is integrated with Google ReCaptcha, which protects your forms from spam bots. Before adding ReCaptcha to your form, you need to configure Site and Secret Keys by registering your website on %s', $this->prefix),'<a href="https://www.google.com/recaptcha/intro/" target="_blank">'. __('Google ReCaptcha website', $this->prefix) .'</a>').'<br><br>'.__('After registering and creating the keys, copy them to Form Maker > Options page.', $this->prefix),
636
- 'type_submit_description' => __('The Submit button validates all form field values, saves them on MySQL database of your website, sends emails and performs other actions configured in Form Options. You can have more than one submit button in your form.', $this->prefix),
637
- 'type_captcha_description' => __('You can use this field as an alternative to ReCaptcha to protect your forms against spambots. It’s a random combination of numbers and letters, and users need to type them in correctly to submit the form.', $this->prefix).'<br><br>'.__('You can specify the number of symbols in Simple Captcha using Symbols (3 - 9) option.', $this->prefix),
638
- 'type_name_description' => __('This field lets the user write their name.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('Enabling Autofill with user name setting will automatically fill in Name field with the name of the logged in user.', $this->prefix).'<br><br>'.__('In case you do not wish to receive the same data for the same Name field twice, activate Allow only unique values option.', $this->prefix),
639
- 'type_email_description' => __('This field is an input field that accepts an email address.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('Using Confirmation Email setting in Advanced Options you can require the submitter to re-type their email address.', $this->prefix).'<br><br>'.__('Autofill with user email will autofill Email field with the email address of the logged in user.', $this->prefix).'<br><br>'.__('Upon successful submission of the Form, you have the option to send the submitted data (or just a confirmation message) to the email address entered here. To do this you need to set the corresponding options on Form Options > Email Options page.', $this->prefix),
640
- 'type_phone_description' => __('This field is an input for a phone number. It provides a list of country flags, which users can select and have their country code automatically added to the phone number.', $this->prefix).'<br><br>'.__('In case you do not wish to receive the same data for the same Phone field more than once, activate Allow only unique values setting from Advanced options.', $this->prefix),
641
- 'type_address_description' => __('This field lets you skip a few steps and quickly add one set for requesting the address of the submitter. Use Overall size(px) option to set the width of Address field.', $this->prefix).'<br><br>'.__('You can enable or disable elements of Address field using Disable Field(s) setting in Advanced Options.', $this->prefix).'<br><br>'.__('You can turn State/Province/Region field into a list of US states by activating Use list for US states setting from Advanced Options. Note: This only works in case United States is selected for Country select box.', $this->prefix),
642
- 'type_mark_on_map_description' => __('Mark on Map field lets users to drag the map pin and drop it on their selected location. You can specify a default address for the location pin with Address option.', $this->prefix).'<br><br>'.__('In addition, Marker Info setting allows you to provide additional details about the location. It will appear after users click on the location pin.', $this->prefix),
643
- 'type_country_list_description' => __('Country List is a select box which provides a list of all countries in alphabetical order.', $this->prefix).'<br><br>'.__('You can include/exclude specific countries from the list using the Edit country list setting in Advanced Options.', $this->prefix),
644
- 'type_date_of_birth_description' => __('Users can specify their birthday or any date with this field.', $this->prefix).'<br><br>'.__('Use Fields separator setting in Advanced options to change the divider between day, month and year boxes.', $this->prefix).'<br><br>'.__('You can set the fields to be text inputs or select boxes using Day field type, Month field type and Year field type options.', $this->prefix).'<br><br>'.__('In addition, you can specify the width of day, month and year fields using Day field size(px), Month field size(px) and Year field size(px) settings.', $this->prefix),
645
- 'type_file_upload_description' => __('You can allow users to upload single or multiple documents, images and various files through your form.', $this->prefix).'<br><br>'.__('Use Allowed file extensions option to specify all acceptable file formats. Make sure to separate them with commas.', $this->prefix).'<br><br>'.__('Mark Allow Uploading Multiple Files option in Advanced Options to allow users to select and upload multiple files.', $this->prefix),
646
- 'type_map_description' => __('Map field can be used for pinning one or more locations on Google Map and displaying them on your form.', $this->prefix).'<br><br>'.__('Press the small Plus icon to add a location pin.', $this->prefix),
647
- 'type_time_description' => __('Time field of Form Maker plugin will allow users to specify time value. Set the time format of the field to 24-hour or 12-hour using Time Format option.', $this->prefix),
648
- 'type_send_copy_description' => __('When users fill in an email address using Email Field, this checkbox will allow them to choose if they wish to receive a copy of the submission email.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Email Options of your form.', $this->prefix),
649
- 'type_stars_description' => __('Add Star rating field to your form with this field. You can display as many stars, as you will need, set the number using Number of Stars option.', $this->prefix),
650
- 'type_rating_description' => __('Place Rating field on your form to have radio buttons, which indicate rating from worst to best. You can set many radio buttons to display using Scale Range option.', $this->prefix),
651
- 'type_slider_description' => __('Slider field lets users specify the field value by dragging its handle from Min Value to Max Value.', $this->prefix),
652
- 'type_range_description' => __('You can use this field to let users choose a numeric range by providing values for 2 number inputs. Its Step option allows to set the increment/decrement of spinners’ values, when users click on up or down arrows.', $this->prefix),
653
- 'type_grades_description' => __('Users will be able to grade specified items with this field. The sum of all values will appear below the field with Total parameter.', $this->prefix).'<br><br>'.__('Items option allows you to add multiple options to your Grades field.', $this->prefix),
654
- 'type_matrix_description' => __('Table of Fields lets you place a matrix on your form, which will let the submitter to answer a few questions with one field.', $this->prefix).'<br><br>'.__('It allows you to configure the matrix with radio buttons, checkboxes, text boxes or drop-downs. Use Input Type option to set this.', $this->prefix),
655
- 'type_hidden_description' => __('Hidden Input field is similar to Single Line Text field, but it is not visible to users. Hidden Fields are handy, in case you need to run a custom Javascript and submit the result with the info on your form.', $this->prefix).'<br><br>'.__('Name option of this field is mandatory. Note: we highly recommend you to avoid using spaces or special characters in Hidden Input name. You can write the custom Javascript code using the editor on Form Options > Javascript page.', $this->prefix),
656
- 'type_button_description' => __('In case you wish to run custom Javascript on your form, you can place Custom Button on your form. Its lets you call the script with its OnClick function.', $this->prefix).'<br><br>'.__('You can write the custom Javascript code using the editor on Form Options > Javascript page.', $this->prefix),
657
- 'type_password_description' => __('Password input can be used to allow users provide secret text, such as passwords. All symbols written in this field are replaced with dots.', $this->prefix).'<br><br>'.__('You can activate Password Confirmation option to ask users to repeat the password.', $this->prefix),
658
- 'type_phone_area_code_description' => __('Phone-Area Code is a Phone type field, which allows users to write Area Code and Phone Number into separate inputs.', $this->prefix),
659
- 'type_arithmetic_captcha_description' => __('Arithmetic Captcha is quite similar to Simple Captcha. However, instead of showing random symbols, it displays arithmetic operations.', $this->prefix).'<br><br>'.__('You can set the operations using Operations option. The field can use addition (+), subtraction (-), multiplication (*) and division (/).', $this->prefix).'<br><br>'.__('Make sure to separate the operations with commas.', $this->prefix),
660
- 'type_price_description' => __('Users can set a payment amount of their choice with Price field. Assigns minimum and maximum limits on its value using Range option.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('Additionally, you can activate Readonly attribute. This way, users will not be able to edit the value of Price.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
661
- 'type_payment_select_description' => __('Payment Select field lets you create lists of products, one of which the submitter can choose to buy through your form. Add or edit list items using Options setting of the fields.', $this->prefix).'<br><br>'.__('Enable Quantity property from Advanced Options, in case you would like the users to mention the quantity of items they purchase.', $this->prefix).'<br><br>'.__('Also, you can configure custom or built-in Product Properties for your products, such as Color, T-Shirt Size or Print Size.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
662
- 'type_payment_radio_description' => __('Payment Single Choice field lets you create lists of products, one of which the submitter can choose to buy through your form. Add or edit list items using Options setting of the fields.', $this->prefix).'<br><br>'.__('Enable Quantity property from Advanced Options, in case you would like the users to mention the quantity of items they purchase.', $this->prefix).'<br><br>'.__('Also, you can configure custom or built-in Product Properties for your products, such as Color, T-Shirt Size or Print Size.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
663
- 'type_payment_checkbox_description' => __('Payment Multiple Choice field lets you create lists of products, which the submitter can choose to buy through your form. Add or edit list items using Options setting of the fields.', $this->prefix).'<br><br>'.__('Enable Quantity property from Advanced Options, in case you would like the users to mention the quantity of items they purchase.', $this->prefix).'<br><br>'.__('Also, you can configure custom or built-in Product Properties for your products, such as Color, T-Shirt Size or Print Size.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
664
- 'type_shipping_description' => __('Shipping allows you to configure shipping types, set price for each of them and display them on your form as radio buttons.', $this->prefix),
665
- 'type_total_description' => __('Please Total field to your payment form to sum up the values of Payment fields. ', $this->prefix),
666
- 'type_stripe_description' => __('This field adds the credit card details inputs (card number, expiration date, etc.) and allows you to accept direct payments made by credit cards.', $this->prefix),
667
- ));
668
-
669
- wp_register_script($this->handle_prefix . '-codemirror', $this->plugin_url . '/js/layout/codemirror.js', array(), '2.3');
670
- wp_register_script($this->handle_prefix . '-clike', $this->plugin_url . '/js/layout/clike.js', array(), '1.0.0');
671
- wp_register_script($this->handle_prefix . '-formatting', $this->plugin_url . '/js/layout/formatting.js', array(), '1.0.0');
672
- wp_register_script($this->handle_prefix . '-css', $this->plugin_url . '/js/layout/css.js', array(), '1.0.0');
673
- wp_register_script($this->handle_prefix . '-javascript', $this->plugin_url . '/js/layout/javascript.js', array(), '1.0.0');
674
- wp_register_script($this->handle_prefix . '-xml', $this->plugin_url . '/js/layout/xml.js', array(), '1.0.0');
675
- wp_register_script($this->handle_prefix . '-php', $this->plugin_url . '/js/layout/php.js', array(), '1.0.0');
676
- wp_register_script($this->handle_prefix . '-htmlmixed', $this->plugin_url . '/js/layout/htmlmixed.js', array(), '1.0.0');
677
- wp_register_script($this->handle_prefix . '-colorpicker', $this->plugin_url . '/js/spectrum.js', array(), $this->plugin_version);
678
- wp_register_script($this->handle_prefix . '-themes', $this->plugin_url . '/js/themes.js', array(), $this->plugin_version);
679
- wp_register_script($this->handle_prefix . '-submissions', $this->plugin_url . '/js/form_maker_submissions.js', array(), $this->plugin_version);
680
- wp_register_script($this->handle_prefix . '-ng-js', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js', array(), '1.5.0');
681
- wp_register_script($this->handle_prefix . '-theme-edit-ng', $this->plugin_url . '/js/fm-theme-edit-ng.js', array(), $this->plugin_version);
682
-
683
- if ( !$this->is_free ) {
684
- wp_register_script('jquery.fancybox.pack', $this->plugin_url . '/js/fancybox/jquery.fancybox.pack.js', array(), '2.1.5');
685
- }
686
- else {
687
- wp_register_style($this->handle_prefix . '-deactivate-css', $this->plugin_url . '/wd/assets/css/deactivate_popup.css', array(), $this->plugin_version);
688
- wp_register_script($this->handle_prefix . '-deactivate-popup', $this->plugin_url . '/wd/assets/js/deactivate_popup.js', array(), $this->plugin_version, true );
689
- $admin_data = wp_get_current_user();
690
- wp_localize_script( $this->handle_prefix . '-deactivate-popup', ($this->is_free == 2 ? 'cfmWDDeactivateVars' : 'fmWDDeactivateVars'), array(
691
- "prefix" => "fm" ,
692
- "deactivate_class" => 'fm_deactivate_link',
693
- "email" => $admin_data->data->user_email,
694
- "plugin_wd_url" => "https://10web.io/plugins/wordpress-form-maker/?utm_source=form_maker&utm_medium=free_plugin",
695
- ));
696
- }
697
- wp_register_style($this->handle_prefix . '-topbar', $this->plugin_url . '/css/topbar.css', array(), $this->plugin_version);
698
- wp_register_style($this->handle_prefix . '-icons', $this->plugin_url . '/fonts/style.css', array(), '1.0.0');
699
-
700
- wp_localize_script($localize_key_all, 'fm_ajax', array(
701
- 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
702
- ));
703
- wp_localize_script($localize_key_add_fields, 'fm_ajax', array(
704
- 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
705
- ));
706
- wp_localize_script($localize_key_formmaker_div, 'fm_ajax', array(
707
- 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
708
- ));
709
- }
710
-
711
- /**
712
- * Admin ajax scripts.
713
- */
714
- public function register_admin_ajax_scripts() {
715
- $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
716
- wp_register_style($this->handle_prefix . '-tables', $this->plugin_url . '/css/form_maker_tables.css', array(), $this->plugin_version);
717
- wp_register_style($this->handle_prefix . '-jquery-ui', $this->plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
718
-
719
- wp_register_script($this->handle_prefix . '-shortcode' . $this->menu_postfix, $this->plugin_url . '/js/shortcode.js', array('jquery'), $this->plugin_version);
720
- $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
721
-
722
- wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
723
- wp_register_script($this->handle_prefix . '-gmap_form', $this->plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
724
-
725
- wp_localize_script($this->handle_prefix . '-shortcode' . $this->menu_postfix, 'form_maker', array(
726
- 'insert_form' => __('You must select a form', $this->prefix),
727
- 'update' => __('Update', $this->prefix),
728
- ));
729
- wp_register_style($this->handle_prefix . '-topbar', $this->plugin_url . '/css/topbar.css', array(), $this->plugin_version);
730
- // Roboto font for submissions shortcode.
731
- wp_register_style($this->handle_prefix . '-roboto', 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700');
732
- }
733
-
734
- /**
735
- * admin-ajax actions for admin.
736
- */
737
- public function form_maker_ajax() {
738
- $page = WDW_FM_Library(self::PLUGIN)->get('action');
739
- $ajax_nonce = WDW_FM_Library(self::PLUGIN)->get('nonce');
740
-
741
- $allowed_pages = array(
742
- 'manage' . $this->menu_postfix,
743
- 'manage' . $this->plugin_postfix,
744
- 'generete_csv' . $this->plugin_postfix,
745
- 'generete_xml' . $this->plugin_postfix,
746
- 'formmakerwdcaptcha' . $this->plugin_postfix,
747
- 'formmakerwdmathcaptcha' . $this->plugin_postfix,
748
- 'product_option' . $this->plugin_postfix,
749
- 'FormMakerEditCountryinPopup' . $this->plugin_postfix,
750
- 'FormMakerMapEditinPopup' . $this->plugin_postfix,
751
- 'FormMakerIpinfoinPopup' . $this->plugin_postfix,
752
- 'show_matrix' . $this->plugin_postfix,
753
- 'FormMakerSubmits' . $this->plugin_postfix,
754
- 'FMShortocde' . $this->plugin_postfix,
755
- );
756
- if ( !$this->is_demo ) {
757
- $allowed_pages[] = 'FormMakerSQLMapping' . $this->plugin_postfix;
758
- $allowed_pages[] = 'select_data_from_db' . $this->plugin_postfix;
759
- }
760
- if ( !$this->is_free ) {
761
- $allowed_pages[] = 'paypal_info';
762
- $allowed_pages[] = 'checkpaypal';
763
- }
764
- $allowed_nonce_pages = array('checkpaypal');
765
-
766
- if ( !in_array($page, $allowed_nonce_pages) && wp_verify_nonce($ajax_nonce , 'fm_ajax_nonce') == FALSE ) {
767
- die(-1);
768
- }
769
-
770
- if ( !empty($page) && in_array($page, $allowed_pages) ) {
771
- if ( $page != 'formmakerwdcaptcha' . $this->plugin_postfix
772
- && $page != 'formmakerwdmathcaptcha' . $this->plugin_postfix
773
- && $page != 'checkpaypal' ) {
774
- if ( function_exists('current_user_can') ) {
775
- if ( !current_user_can('manage_options') ) {
776
- die('Access Denied');
777
- }
778
- }
779
- else {
780
- die('Access Denied');
781
- }
782
- }
783
- $page = ucfirst(substr($page, 0, strlen($page) - strlen($this->plugin_postfix)));
784
- $this->register_admin_ajax_scripts();
785
- require_once($this->plugin_dir . '/admin/controllers/' . $page . '.php');
786
- $controller_class = 'FMController' . $page . $this->plugin_postfix;
787
- $controller = new $controller_class();
788
- $controller->execute();
789
- }
790
- }
791
-
792
- /**
793
- * admin-ajax actions for site.
794
- */
795
- public function form_maker_ajax_frontend() {
796
- $page = WDW_FM_Library(self::PLUGIN)->get('page');
797
- $action = WDW_FM_Library(self::PLUGIN)->get('action');
798
- $ajax_nonce = WDW_FM_Library(self::PLUGIN)->get('nonce');
799
-
800
- $allowed_pages = array(
801
- 'form_submissions',
802
- 'form_maker',
803
- );
804
- $allowed_actions = array(
805
- 'frontend_generate_xml',
806
- 'frontend_generate_csv',
807
- 'frontend_paypal_info',
808
- 'frontend_show_matrix',
809
- 'frontend_show_map',
810
- 'get_frontend_stats',
811
- 'fm_reload_input',
812
- );
813
-
814
- if ( wp_verify_nonce($ajax_nonce , 'fm_ajax_nonce') == FALSE ) {
815
- die(-1);
816
- }
817
-
818
- if ( !empty($page) && in_array($page, $allowed_pages)
819
- && !empty($action) && in_array($action, $allowed_actions) ) {
820
- $this->register_frontend_ajax_scripts();
821
- require_once ($this->plugin_dir . '/frontend/controllers/' . $page . '.php');
822
- $controller_class = 'FMController' . ucfirst($page);
823
- $controller = new $controller_class();
824
- $controller->execute();
825
- }
826
- }
827
-
828
- /**
829
- * Javascript variables for admin.
830
- * todo: change to array.
831
- */
832
- public function form_maker_admin_ajax() {
833
- $upload_dir = wp_upload_dir();
834
- ?>
835
- <script>
836
- var fm_site_url = '<?php echo site_url() .'/'; ?>';
837
- var admin_url = '<?php echo admin_url('admin.php'); ?>';
838
- var plugin_url = '<?php echo $this->plugin_url; ?>';
839
- var upload_url = '<?php echo $upload_dir['baseurl']; ?>';
840
- var nonce_fm = '<?php echo wp_create_nonce($this->nonce); ?>';
841
- // Set shortcode popup dimensions.
842
- function fm_set_shortcode_popup_dimensions(tbWidth, tbHeight) {
843
- var tbWindow = jQuery('#TB_window'), H = jQuery(window).height(), W = jQuery(window).width(), w, h;
844
- w = (tbWidth && tbWidth < W - 90) ? tbWidth : W - 40;
845
- h = (tbHeight && tbHeight < H - 60) ? tbHeight : H - 40;
846
- if (tbWindow.size()) {
847
- tbWindow.width(w).height(h);
848
- jQuery('#TB_iframeContent').width(w).height(h - 27);
849
- tbWindow.css({'margin-left': '-' + parseInt((w / 2), 10) + 'px'});
850
- if (typeof document.body.style.maxWidth != 'undefined') {
851
- tbWindow.css({'top': (H - h) / 2, 'margin-top': '0'});
852
- }
853
- }
854
- }
855
- </script>
856
- <?php
857
- }
858
-
859
- /**
860
- * Form maker preview shortcode output.
861
- *
862
- * @return mixed|string
863
- */
864
- public function fm_form_preview_shortcode() {
865
- // check is adminstrator
866
- if ( !current_user_can('manage_options') ) {
867
- echo __('Sorry, you are not allowed to access this page.', $this->prefix);
868
- }
869
- else {
870
- $id = WDW_FM_Library(self::PLUGIN)->get('wdform_id', 0);
871
- $display_options = WDW_FM_Library(self::PLUGIN)->display_options( $id );
872
- $type = $display_options->type;
873
- $attrs = array( 'id' => $id );
874
- if ($type == "embedded") {
875
- ob_start();
876
- $this->FM_front_end_main($attrs, $type); // embedded popover topbar scrollbox
877
- return str_replace(array("\r\n", "\n", "\r"), '', ob_get_clean());
878
- }
879
- }
880
- }
881
-
882
- /**
883
- * Form maker shortcode output.
884
- *
885
- * @param $attrs
886
- * @return mixed|string
887
- */
888
- public function fm_shortcode($attrs) {
889
- ob_start();
890
- $this->FM_front_end_main($attrs, 'embedded');
891
-
892
- return str_replace(array("\r\n", "\n", "\r"), '', ob_get_clean());
893
- }
894
-
895
- /**
896
- * Form maker output.
897
- *
898
- * @param array $params
899
- * @param string $type
900
- */
901
- public function FM_front_end_main($params = array(), $type = '') {
902
- if ( !isset($params['type']) ) {
903
- $form_id = isset($params['id']) ? (int) $params['id'] : 0;
904
- if ($this->is_free == 2) {
905
- wd_contact_form_maker($form_id, $type);
906
- }
907
- else {
908
- wd_form_maker( $form_id, $type );
909
- }
910
- }
911
- else if (!$this->is_free) {
912
- $shortcode_deafults = array(
913
- 'id' => 0,
914
- 'startdate' => '',
915
- 'enddate' => '',
916
- 'submit_date' => '',
917
- 'submitter_ip' => '',
918
- 'username' => '',
919
- 'useremail' => '',
920
- 'form_fields' => '1',
921
- 'show' => '1,1,1,1,1,1,1,1,1,1',
922
- );
923
- shortcode_atts($shortcode_deafults, $params);
924
-
925
- require_once($this->plugin_dir . '/frontend/controllers/form_submissions.php');
926
- $controller = new FMControllerForm_submissions();
927
-
928
- $submissions = $controller->execute($params);
929
-
930
- echo $submissions;
931
- }
932
- return;
933
- }
934
-
935
- /**
936
- * Email verification output.
937
- */
938
- public function fm_email_verification_shortcode() {
939
- require_once($this->plugin_dir . '/frontend/controllers/verify_email.php');
940
- $controller_class = 'FMControllerVerify_email' . $this->plugin_postfix;
941
- $controller = new $controller_class();
942
- $controller->execute();
943
- }
944
-
945
- /**
946
- * Register email verification custom post type.
947
- */
948
- public function register_fmemailverification_cpt() {
949
- $args = array(
950
- 'label' => 'FM Mail Verification',
951
- 'public' => true,
952
- 'exclude_from_search' => true,
953
- 'show_in_menu' => false,
954
- 'show_in_nav_menus' => false,
955
- 'create_posts' => 'do_not_allow',
956
- 'capabilities' => array(
957
- 'create_posts' => FALSE,
958
- 'edit_post' => 'edit_posts',
959
- 'read_post' => 'edit_posts',
960
- 'delete_posts' => FALSE,
961
- )
962
- );
963
-
964
- register_post_type(($this->is_free == 2 ? 'cfmemailverification' : 'fmemailverification'), $args);
965
- }
966
-
967
- /**
968
- * Register form preview custom post type.
969
- */
970
- public function register_form_preview_cpt() {
971
- $args = array(
972
- 'label' => 'FM Preview',
973
- 'public' => true,
974
- 'exclude_from_search' => true,
975
- 'show_in_menu' => false,
976
- 'show_in_nav_menus' => false,
977
- 'create_posts' => 'do_not_allow',
978
- 'capabilities' => array(
979
- 'create_posts' => FALSE,
980
- 'edit_post' => 'edit_posts',
981
- 'read_post' => 'edit_posts',
982
- 'delete_posts' => FALSE,
983
- )
984
- );
985
-
986
- register_post_type('form-maker' . $this->plugin_postfix, $args);
987
- }
988
-
989
- /**
990
- * Frontend scripts/styles.
991
- */
992
- public function register_frontend_scripts() {
993
- $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
994
- $front_plugin_url = $this->front_urls['plugin_url'];
995
-
996
- $required_scripts = array(
997
- 'jquery',
998
- 'jquery-ui-widget',
999
- 'jquery-effects-shake',
1000
- );
1001
- $required_styles = array(
1002
- WDFMInstance(self::PLUGIN)->handle_prefix . '-googlefonts'
1003
- );
1004
- if ( $fm_settings['fm_developer_mode'] ) {
1005
- array_push($required_styles, $this->handle_prefix . '-jquery-ui', $this->handle_prefix . '-animate');
1006
- }
1007
-
1008
- wp_register_style($this->handle_prefix . '-jquery-ui', $front_plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
1009
- wp_register_style($this->handle_prefix . '-animate', $front_plugin_url . '/css/fm-animate.css', array(), $this->plugin_version);
1010
-
1011
- $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
1012
- wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
1013
-
1014
- wp_register_script($this->handle_prefix . '-phone_field', $front_plugin_url . '/js/intlTelInput.js', array(), $this->plugin_version);
1015
- wp_register_style($this->handle_prefix . '-phone_field_css', $front_plugin_url . '/css/intlTelInput.css', array(), $this->plugin_version);
1016
-
1017
- wp_register_script($this->handle_prefix . '-gmap_form', $front_plugin_url . '/js/if_gmap_front_end.js', array('google-maps'), $this->plugin_version);
1018
-
1019
- $google_fonts = WDW_FM_Library(self::PLUGIN)->get_google_fonts();
1020
- $fonts = implode("|", str_replace(' ', '+', $google_fonts));
1021
- wp_register_style($this->handle_prefix . '-googlefonts', 'https://fonts.googleapis.com/css?family=' . $fonts . '&subset=greek,latin,greek-ext,vietnamese,cyrillic-ext,latin-ext,cyrillic', null, null);
1022
-
1023
- wp_register_script($this->handle_prefix . '-g-recaptcha', 'https://www.google.com/recaptcha/api.js?onload=fmRecaptchaInit&render=explicit');
1024
-
1025
- // Register admin styles to use in frontend submissions.
1026
- wp_register_script('gmap_form_back', $front_plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
1027
-
1028
- if ( !$this->is_free ) {
1029
- wp_register_script($this->handle_prefix . '-file-upload', $front_plugin_url . '/js/file-upload.js', array(), $this->plugin_version);
1030
- wp_register_style($this->handle_prefix . '-submissions_css', $front_plugin_url . '/css/style_submissions.css', array(), $this->plugin_version);
1031
-
1032
- if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() && $fm_settings['fm_developer_mode'] ) {
1033
- array_push($required_styles, $this->handle_prefix . '-submissions_css');
1034
- array_push($required_scripts, $this->handle_prefix . '-file-upload', 'gmap_form_back');
1035
- }
1036
- }
1037
-
1038
- if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() ) {
1039
- array_push($required_scripts,
1040
- 'jquery-ui-spinner',
1041
- 'jquery-ui-datepicker',
1042
- 'jquery-ui-slider'
1043
- );
1044
-
1045
- if ( $fm_settings['fm_developer_mode'] ) {
1046
- array_push($required_styles, $this->handle_prefix . '-phone_field', WDFMInstance(self::PLUGIN)->handle_prefix . '-gmap_form', WDFMInstance(self::PLUGIN)->handle_prefix . '-phone_field_css');
1047
- }
1048
- }
1049
-
1050
- $style_file = '/css/styles.min.css';
1051
- $script_file = '/js/scripts.min.js';
1052
- if ( $fm_settings['fm_developer_mode'] ) {
1053
- $style_file = '/css/form_maker_frontend.css';
1054
- $script_file = '/js/main_div_front_end.js';
1055
- }
1056
-
1057
- wp_register_style($this->handle_prefix . '-frontend', $front_plugin_url . $style_file, $required_styles, $this->plugin_version);
1058
- wp_register_script($this->handle_prefix . '-frontend', $front_plugin_url . $script_file, $required_scripts, $this->plugin_version);
1059
-
1060
- if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() ) {
1061
- wp_enqueue_style(WDFMInstance(self::PLUGIN)->handle_prefix . '-frontend');
1062
- wp_enqueue_script(WDFMInstance(self::PLUGIN)->handle_prefix . '-frontend');
1063
- }
1064
-
1065
- wp_localize_script($this->handle_prefix . '-frontend', 'fm_objectL10n', array(
1066
- 'states' => WDW_FM_Library(self::PLUGIN)->get_states(),
1067
- 'provinces' => WDW_FM_Library(self::PLUGIN)->get_provinces_canada(),
1068
- 'plugin_url' => $front_plugin_url,
1069
- 'form_maker_admin_ajax' => admin_url('admin-ajax.php'),
1070
- 'fm_file_type_error' => addslashes(__('Can not upload this type of file', $this->prefix)),
1071
- 'fm_field_is_required' => addslashes(__('Field is required', $this->prefix)),
1072
- 'fm_min_max_check_1' => addslashes((__('The ', $this->prefix))),
1073
- 'fm_min_max_check_2' => addslashes((__(' value must be between ', $this->prefix))),
1074
- 'fm_spinner_check' => addslashes((__('Value must be between ', $this->prefix))),
1075
- 'fm_clear_data' => addslashes((__('Are you sure you want to clear saved data?', $this->prefix))),
1076
- 'fm_grading_text' => addslashes(__('Your score should be less than', $this->prefix)),
1077
- 'time_validation' => addslashes(__('This is not a valid time value.', $this->prefix)),
1078
- 'number_validation' => addslashes(__('This is not a valid number value.', $this->prefix)),
1079
- 'date_validation' => addslashes(__('This is not a valid date value.', $this->prefix)),
1080
- 'year_validation' => addslashes(sprintf(__('The year must be between %s and %s', $this->prefix), '%%start%%', '%%end%%')),
1081
- ));
1082
-
1083
- wp_localize_script($this->handle_prefix . '-frontend', 'fm_ajax', array(
1084
- 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
1085
- ));
1086
- }
1087
-
1088
- /**
1089
- * Frontend ajax scripts.
1090
- */
1091
- public function register_frontend_ajax_scripts() {
1092
- $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
1093
- $front_plugin_url = $this->front_urls['plugin_url'];
1094
- $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
1095
- wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
1096
- wp_register_script($this->handle_prefix . '-gmap_form_back', $front_plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
1097
- }
1098
-
1099
- /*
1100
- * Global activate.
1101
- *
1102
- * @param $networkwide
1103
- */
1104
- public function global_activate($networkwide) {
1105
- if ( function_exists('is_multisite') && is_multisite() ) {
1106
- // Check if it is a network activation - if so, run the activation function for each blog id.
1107
- if ( $networkwide ) {
1108
- global $wpdb;
1109
- // Get all blog ids.
1110
- $blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
1111
- foreach ( $blogids as $blog_id ) {
1112
- switch_to_blog($blog_id);
1113
- $this->form_maker_on_activate();
1114
- restore_current_blog();
1115
- }
1116
-
1117
- return;
1118
- }
1119
- }
1120
- $this->form_maker_on_activate();
1121
- }
1122
-
1123
- public function new_blog_added( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
1124
- if ( is_plugin_active_for_network( $this->main_file ) ) {
1125
- switch_to_blog($blog_id);
1126
- $this->form_maker_on_activate();
1127
- restore_current_blog();
1128
- }
1129
- }
1130
-
1131
- /**
1132
- * Activate plugin.
1133
- */
1134
- public function form_maker_on_activate() {
1135
- $this->form_maker_activate();
1136
- if ($this->is_free == 2) {
1137
- WDCFMInsert::install_demo_forms();
1138
- }
1139
- else {
1140
- WDFMInsert::install_demo_forms();
1141
- }
1142
- $this->init();
1143
- flush_rewrite_rules();
1144
- }
1145
-
1146
- /**
1147
- * Activate plugin.
1148
- */
1149
- public function form_maker_activate() {
1150
- global $wpdb;
1151
- if (!$this->is_free) {
1152
- deactivate_plugins("contact-form-maker/contact-form-maker.php");
1153
- delete_transient('fm_update_check');
1154
- }
1155
- $version = get_option("wd_form_maker_version");
1156
- $new_version = $this->db_version;
1157
- $option_key = ($this->is_free == 2 ? 'fmc_settings' : 'fm_settings');
1158
- require_once $this->plugin_dir . "/form_maker_insert.php";
1159
- if (!$version) {
1160
- if ($wpdb->get_var("SHOW TABLES LIKE '" . $wpdb->prefix . "formmaker'") == $wpdb->prefix . "formmaker") {
1161
- deactivate_plugins($this->main_file);
1162
- wp_die(__("Oops! Seems like you installed the update over a quite old version of Form Maker. Unfortunately, this version is deprecated.<br />Please contact 10Web support team at support@10web.io. We will take care of this issue as soon as possible.", $this->prefix));
1163
- }
1164
- else {
1165
- add_option("wd_form_maker_version", $new_version, '', 'no');
1166
- if ($this->is_free == 2) {
1167
- WDCFMInsert::form_maker_insert();
1168
- }
1169
- else {
1170
- WDFMInsert::form_maker_insert();
1171
- }
1172
- $email_verification_post = array(
1173
- 'post_title' => 'Email Verification',
1174
- 'post_content' => '[email_verification]',
1175
- 'post_status' => 'publish',
1176
- 'post_author' => 1,
1177
- 'post_type' => ($this->is_free == 2 ? 'cfmemailverification' : 'fmemailverification'),
1178
- );
1179
- $mail_verification_post_id = wp_insert_post($email_verification_post);
1180
- add_option($option_key, array('public_key' => '', 'private_key' => '', 'csv_delimiter' => ',', 'map_key' => '', 'ajax_export_per_page' => 1000));
1181
- $wpdb->update($wpdb->prefix . "formmaker", array(
1182
- 'mail_verification_post_id' => $mail_verification_post_id,
1183
- ), array('id' => 1), array(
1184
- '%d',
1185
- ), array('%d'));
1186
- }
1187
- }
1188
- elseif (version_compare($version, $new_version, '<')) {
1189
- $version = substr_replace($version, '1.', 0, 2);
1190
- require_once $this->plugin_dir . "/form_maker_update.php";
1191
- $mail_verification_post_ids = $wpdb->get_results($wpdb->prepare('SELECT mail_verification_post_id FROM ' . $wpdb->prefix . 'formmaker WHERE mail_verification_post_id!="%d"', 0));
1192
- if ($mail_verification_post_ids) {
1193
- foreach ($mail_verification_post_ids as $mail_verification_post_id) {
1194
- $update_email_ver_post_type = array(
1195
- 'ID' => (int)$mail_verification_post_id->mail_verification_post_id,
1196
- 'post_type' => ($this->is_free == 2 ? 'cfmemailverification' : 'fmemailverification'),
1197
- );
1198
- wp_update_post($update_email_ver_post_type);
1199
- }
1200
- }
1201
- if ($this->is_free == 2) {
1202
- WDCFMUpdate::form_maker_update($version);
1203
- }
1204
- else {
1205
- WDFMUpdate::form_maker_update($version);
1206
- }
1207
- update_option("wd_form_maker_version", $new_version);
1208
-
1209
- if ( FALSE === $fm_settings = get_option($option_key) ) {
1210
- $recaptcha_keys = $wpdb->get_row('SELECT `public_key`, `private_key` FROM ' . $wpdb->prefix . 'formmaker WHERE public_key!="" and private_key!=""', ARRAY_A);
1211
- $public_key = isset($recaptcha_keys['public_key']) ? $recaptcha_keys['public_key'] : '';
1212
- $private_key = isset($recaptcha_keys['private_key']) ? $recaptcha_keys['private_key'] : '';
1213
- add_option($option_key, array('public_key' => $public_key, 'private_key' => $private_key, 'csv_delimiter' => ',', 'map_key' => '', 'fm_advanced_layout' => 0, 'fm_enable_wp_editor' => 1, 'fm_developer_mode' => 0, 'ajax_export_per_page' => 1000));
1214
- }
1215
- elseif ( !isset($fm_settings['fm_enable_wp_editor']) ) {
1216
- $fm_settings['fm_enable_wp_editor'] = 1;
1217
- update_option( $option_key, $fm_settings );
1218
- }
1219
- if ( !isset($fm_settings['fm_developer_mode']) ) {
1220
- $fm_settings['fm_developer_mode'] = 0;
1221
- update_option( $option_key, $fm_settings );
1222
- }
1223
- }
1224
- }
1225
-
1226
- /**
1227
- * Form maker overview.
1228
- */
1229
- public function fm_overview() {
1230
- if (is_admin() && !isset($_REQUEST['ajax'])) {
1231
- if (!class_exists("TenWebLib")) {
1232
- $plugin_dir = apply_filters('tenweb_free_users_lib_path', array('version' => '1.1.1', 'path' => $this->plugin_dir));
1233
- require_once($plugin_dir['path'] . '/wd/start.php');
1234
- }
1235
- global $fm_options;
1236
- $fm_options = array(
1237
- "prefix" => ($this->is_free == 2 ? 'cfm' : 'fm'),
1238
- "wd_plugin_id" => ($this->is_free == 2 ? 183 : 31),
1239
- "plugin_id" => ($this->is_free == 2 ? 95 : 95),
1240
- "plugin_title" => ($this->is_free == 2 ? 'Contact Form Maker' : 'Form Maker'),
1241
- "plugin_wordpress_slug" => ($this->is_free == 2 ? 'contact-form-maker' : 'form-maker'),
1242
- "plugin_dir" => $this->plugin_dir,
1243
- "plugin_main_file" => __FILE__,
1244
- "description" => ($this->is_free == 2 ? __('WordPress Contact Form Maker is a simple contact form builder, which allows the user with almost no knowledge of programming to create and edit different type of contact forms.', $this->prefix) : __('Form Maker plugin is a modern and advanced tool for easy and fast creating of a WordPress Form. The backend interface is intuitive and user friendly which allows users far from scripting and programming to create WordPress Forms.', $this->prefix)),
1245
- "plugin_features" => array(
1246
- 0 => array(
1247
- "title" => __("Easy to Use", $this->prefix),
1248
- "description" => __("This responsive form maker plugin is one of the most easy-to-use form builder solutions available on the market. Simple, yet powerful plugin allows you to quickly and easily build any complex forms.", $this->prefix),
1249
- ),
1250
- 1 => array(
1251
- "title" => __("Customizable Fields", $this->prefix),
1252
- "description" => __("All the fields of Form Maker plugin are highly customizable, which allows you to change almost every detail in the form and make it look exactly like you want it to be.", $this->prefix),
1253
- ),
1254
- 2 => array(
1255
- "title" => __("Submissions", $this->prefix),
1256
- "description" => __("You can view the submissions for each form you have. The plugin allows to view submissions statistics, filter submission data and export in csv or xml formats.", $this->prefix),
1257
- ),
1258
- 3 => array(
1259
- "title" => __("Multi-Page Forms", $this->prefix),
1260
- "description" => __("With the form builder plugin you can create muilti-page forms. Simply use the page break field to separate the pages in your forms.", $this->prefix),
1261
- ),
1262
- 4 => array(
1263
- "title" => __("Themes", $this->prefix),
1264
- "description" => __("The WordPress Form Maker plugin comes with a wide range of customizable themes. You can choose from a list of existing themes or simply create the one that better fits your brand and website.", $this->prefix),
1265
- )
1266
- ),
1267
- "user_guide" => array(
1268
- 0 => array(
1269
- "main_title" => __("Installing", $this->prefix),
1270
- "url" => "https://help.10web.io/hc/en-us/articles/360015435831-Introducing-Form-Maker-Plugin",
1271
- "titles" => array()
1272
- ),
1273
- 1 => array(
1274
- "main_title" => __("Creating a new Form", $this->prefix),
1275
- "url" => "https://help.10web.io/hc/en-us/articles/360015244232-Creating-a-Form-on-WordPress",
1276
- "titles" => array()
1277
- ),
1278
- 2 => array(
1279
- "main_title" => __("Configuring Form Options", $this->prefix),
1280
- "url" => "https://help.10web.io/hc/en-us/articles/360015862812-Settings-General-Options",
1281
- "titles" => array()
1282
- ),
1283
- 3 => array(
1284
- "main_title" => __("Description of The Form Fields", $this->prefix),
1285
- "url" => "https://help.10web.io/hc/en-us/articles/360016081951-Form-Fields-Basic",
1286
- "titles" => array(
1287
- array(
1288
- "title" => __("Selecting Options from Database", $this->prefix),
1289
- "url" => "https://help.10web.io/hc/en-us/articles/360015862632-Selecting-Options-from-Database",
1290
- ),
1291
- )
1292
- ),
1293
- 4 => array(
1294
- "main_title" => __("Publishing the Created Form", $this->prefix),
1295
- "url" => "https://help.10web.io/hc/en-us/articles/360016083211-Additional-Publishing-Options",
1296
- "titles" => array()
1297
- ),
1298
- 5 => array(
1299
- "main_title" => __("Blocking IPs", $this->prefix),
1300
- "url" => "https://help.10web.io/hc/en-us/articles/360015863292-Managing-Form-Submissions",
1301
- "titles" => array()
1302
- ),
1303
- 6 => array(
1304
- "main_title" => __("Managing Submissions", $this->prefix),
1305
- "url" => "https://help.10web.io/hc/en-us/articles/360015863292-Managing-Form-Submissions",
1306
- "titles" => array()
1307
- ),
1308
- 7 => array(
1309
- "main_title" => __("Publishing Submissions", $this->prefix),
1310
- "url" => "https://help.10web.io/hc/en-us/articles/360016083211-Additional-Publishing-Options",
1311
- "titles" => array()
1312
- ),
1313
- ),
1314
- "video_youtube_id" => "vxxKfhxIS44",
1315
- "plugin_wd_url" => "https://10web.io/plugins/wordpress-form-maker/?utm_source=form_maker&utm_medium=free_plugin",
1316
- "plugin_wd_demo_link" => "https://demo.10web.io/form-maker",
1317
- "plugin_wd_addons_link" => "https://10web.io/plugins/wordpress-form-maker/#plugin_extensions",
1318
- "plugin_wd_docs_link" => "https://help.10web.io/hc/en-us/sections/360002133951-Form-Maker-Documentation/",
1319
- "after_subscribe" => admin_url('admin.php?page=manage_' . ($this->is_free == 2 ? 'cfm' : 'fm')), // this can be plagin overview page or set up page
1320
- "plugin_wizard_link" => '',
1321
- "plugin_menu_title" => $this->nicename,
1322
- "plugin_menu_icon" => $this->plugin_url . '/images/FormMakerLogo-16.png',
1323
- "deactivate" => ($this->is_free ? true : false),
1324
- "subscribe" => ($this->is_free ? true : false),
1325
- "custom_post" => 'manage' . $this->menu_postfix,
1326
- "menu_position" => null,
1327
- "display_overview" => false,
1328
- );
1329
-
1330
- ten_web_lib_init($fm_options);
1331
- }
1332
- }
1333
-
1334
- /**
1335
- * Add media button to Wp editor.
1336
- *
1337
- * @param $context
1338
- *
1339
- * @return string
1340
- */
1341
- function media_button($context) {
1342
- $fm_nonce = wp_create_nonce('fm_ajax_nonce');
1343
- ob_start();
1344
- $url = add_query_arg(array('action' => 'FMShortocde' . $this->plugin_postfix, 'task' => 'forms', 'nonce' => $fm_nonce, 'TB_iframe' => '1'), admin_url('admin-ajax.php'));
1345
- ?>
1346
- <a onclick="tb_click.call(this); fm_set_shortcode_popup_dimensions(400, 140); return false;" href="<?php echo $url; ?>" class="button" title="<?php _e('Insert Form', $this->prefix); ?>">
1347
- <span class="wp-media-buttons-icon" style="background: url('<?php echo $this->plugin_url; ?>/images/fm-media-form-button.png') no-repeat scroll left top rgba(0, 0, 0, 0);"></span>
1348
- <?php _e('Add Form', $this->prefix); ?>
1349
- </a>
1350
- <?php
1351
- $url = add_query_arg(array('action' => 'FMShortocde' . $this->plugin_postfix, 'task' => 'submissions', 'nonce' => $fm_nonce, 'TB_iframe' => '1'), admin_url('admin-ajax.php'));
1352
- ?>
1353
- <a onclick="tb_click.call(this); fm_set_shortcode_popup_dimensions(520, 570); return false;" href="<?php echo $url; ?>" class="button" title="<?php _e('Insert submissions', $this->prefix); ?>">
1354
- <span class="wp-media-buttons-icon" style="background: url(<?php echo $this->plugin_url; ?>/images/fm-media-submissions-button.png) no-repeat scroll left top rgba(0, 0, 0, 0);"></span>
1355
- <?php _e('Add Submissions', $this->prefix); ?>
1356
- </a>
1357
- <?php
1358
- $context .= ob_get_clean();
1359
-
1360
- return $context;
1361
- }
1362
-
1363
-
1364
- /**
1365
- * Check extensions version compatibility with FM.
1366
- *
1367
- */
1368
- function fm_check_addons_compatibility() {
1369
- // Extension last version(version which is compatible with current version of form maker).
1370
- $add_ons = array(
1371
- 'form-maker-calculator' => array('version' => '1.1.2', 'file' => 'fm_calculator.php'),
1372
- 'form-maker-conditional-emails' => array('version' => '1.1.6', 'file' => 'fm_conditional_emails.php'),
1373
- 'form-maker-dropbox-integration' => array('version' => '1.2.5', 'file' => 'fm_dropbox_integration.php'),
1374
- 'form-maker-export-import' => array('version' => '2.0.7', 'file' => 'fm_exp_imp.php'),
1375
- 'form-maker-gdrive-integration' => array('version' => '1.1.2', 'file' => 'fm_gdrive_integration.php'),
1376
- 'form-maker-mailchimp' => array('version' => '1.1.6', 'file' => 'fm_mailchimp.php'),
1377
- 'form-maker-pdf-integration' => array('version' => '1.1.7', 'file' => 'fm_pdf_integration.php'),
1378
- 'form-maker-post-generation' => array('version' => '1.1.5', 'file' => 'fm_post_generation.php'),
1379
- 'form-maker-pushover' => array('version' => '1.1.4', 'file' => 'fm_pushover.php'),
1380
- 'form-maker-reg' => array('version' => '1.2.5', 'file' => 'fm_reg.php'),
1381
- 'form-maker-save-progress' => array('version' => '1.1.6', 'file' => 'fm_save.php'),
1382
- 'form-maker-stripe' => array('version' => '1.1.6', 'file' => 'fm_stripe.php'),
1383
- );
1384
-
1385
- $add_ons_notice = array();
1386
- include_once(ABSPATH . 'wp-admin/includes/plugin.php');
1387
-
1388
- foreach ( $add_ons as $add_on_key => $add_on_value ) {
1389
- $addon_path = plugin_dir_path(dirname(__FILE__)) . $add_on_key . '/' . $add_on_value['file'];
1390
- if ( is_plugin_active($add_on_key . '/' . $add_on_value['file']) ) {
1391
- $addon = get_plugin_data($addon_path); // array
1392
- if ( version_compare($addon['Version'], $add_on_value['version'], '<') ) {
1393
- // deactivate_plugins($addon_path);
1394
- array_push($add_ons_notice, $addon['Name']);
1395
- }
1396
- }
1397
- }
1398
-
1399
- if ( !empty($add_ons_notice) ) {
1400
- $this->fm_addons_compatibility_notice($add_ons_notice);
1401
- }
1402
- }
1403
-
1404
- /**
1405
- * Incompatibility message.
1406
- *
1407
- * @param $add_ons_notice
1408
- */
1409
- function fm_addons_compatibility_notice($add_ons_notice) {
1410
- $addon_names = implode($add_ons_notice, ', ');
1411
- $count = count($add_ons_notice);
1412
- $single = __('The current version of %s extension is not compatible with Form Maker. Some functions may not work correctly. Please update the extension to fully use its features.', $this->prefix);
1413
- $plural = __('The current version of %s extensions are not compatible with Form Maker. Some functions may not work correctly. Please update the extensions to fully use its features.', $this->prefix);
1414
- echo '<div class="error"><p>' . sprintf( _n($single, $plural, $count, $this->prefix), $addon_names ) .'</p></div>';
1415
- }
1416
-
1417
- public function add_query_vars_seo($vars) {
1418
- $vars[] = 'form_id';
1419
- return $vars;
1420
- }
1421
-
1422
- /**
1423
- * Prevent adding shortcode conflict with some builders.
1424
- */
1425
- private function before_shortcode_add_builder_editor() {
1426
- if ( defined('ELEMENTOR_VERSION') ) {
1427
- add_action('elementor/editor/before_enqueue_scripts', array( $this, 'form_maker_admin_ajax' ));
1428
- }
1429
- if ( class_exists('FLBuilder') ) {
1430
- add_action('wp_enqueue_scripts', array( $this, 'form_maker_admin_ajax' ));
1431
- }
1432
- }
1433
- }
1434
-
1435
- /**
1436
- * Main instance of WDFM.
1437
- *
1438
- * @return WDFM The main instance to prevent the need to use globals.
1439
- */
1440
- if (!function_exists('WDFMInstance')) {
1441
- function WDFMInstance( $version ) {
1442
- if ( $version == 2 ) {
1443
- return WDCFM::instance();
1444
- }
1445
- return WDFM::instance();
1446
- }
1447
- }
1448
-
1449
- WDFMInstance(1);
1450
-
1451
- if (!function_exists('WDW_FM_Library')) {
1452
- function WDW_FM_Library( $version = 1 ) {
1453
- if ( $version == 2 ) {
1454
- return WDW_FMC_Library::instance();
1455
- }
1456
- return WDW_FM_Library::instance();
1457
- }
1458
- }
1459
-
1460
- /**
1461
- * Form maker output.
1462
- *
1463
- * @param $id
1464
- * @param string $type
1465
- */
1466
- function wd_form_maker($id, $type = 'embedded') {
1467
- require_once (WDFMInstance(1)->plugin_dir . '/frontend/controllers/form_maker.php');
1468
- $controller = new FMControllerForm_maker();
1469
- $form = $controller->execute($id, $type);
1470
- echo $form;
1471
- }
1472
-
1473
- function fm_add_plugin_meta_links($meta_fields, $file) {
1474
- if ( plugin_basename(__FILE__) == $file ) {
1475
- $plugin_url = "https://wordpress.org/support/plugin/form-maker";
1476
- $prefix = WDFMInstance(1)->prefix;
1477
- $meta_fields[] = "<a href='" . $plugin_url . "' target='_blank'>" . __('Support Forum', $prefix) . "</a>";
1478
- $meta_fields[] = "<a href='" . $plugin_url . "/reviews#new-post' target='_blank' title='" . __('Rate', $prefix) . "'>
1479
- <i class='wdi-rate-stars'>"
1480
- . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1481
- . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1482
- . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1483
- . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1484
- . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1485
- . "</i></a>";
1486
-
1487
- $stars_color = "#ffb900";
1488
-
1489
- echo "<style>"
1490
- . ".wdi-rate-stars{display:inline-block;color:" . $stars_color . ";position:relative;top:3px;}"
1491
- . ".wdi-rate-stars svg{fill:" . $stars_color . ";}"
1492
- . ".wdi-rate-stars svg:hover{fill:" . $stars_color . "}"
1493
- . ".wdi-rate-stars svg:hover ~ svg{fill:none;}"
1494
- . "</style>";
1495
- }
1496
-
1497
- return $meta_fields;
1498
- }
1499
-
1500
- if ( WDFMInstance(1)->is_free ) {
1501
- add_filter("plugin_row_meta", 'fm_add_plugin_meta_links', 10, 2);
1502
- }
1503
-
1504
- /**
1505
- * Show 10Web manager plugin install or activate banner.
1506
- *
1507
- * @return string
1508
- */
1509
- function wdfm_tenweb_install_notice() {
1510
- if ( ( !isset($_GET['page']) || strpos(esc_html($_GET['page']), '_fm') === FALSE ) ||
1511
- ( isset($_GET['task']) && !strpos(esc_html($_GET['task']), 'edit') === TRUE && !(strpos(esc_html($_GET['task']), 'display') > -1))) {
1512
- return '';
1513
- }
1514
-
1515
- // Remove old notice.
1516
- if ( get_option('tenweb_notice_status') !== FALSE ) {
1517
- update_option('tenweb_notice_status', '1', 'no');
1518
- }
1519
-
1520
- $meta_value = get_option('tenweb_notice_status');
1521
- if ( $meta_value === '' || $meta_value === FALSE ) {
1522
- ob_start();
1523
- $prefix = WDFMInstance(1)->prefix;
1524
- $url = WDFMInstance(1)->plugin_url;
1525
- $dismiss_url = add_query_arg(array( 'action' => 'wd_tenweb_dismiss' ), admin_url('admin-ajax.php'));
1526
- $verify_url = add_query_arg( array ('action' => 'fm_tenweb_status'), admin_url('admin-ajax.php'));
1527
- ?>
1528
- <style>
1529
- .hide {
1530
- display: none !important;
1531
- }
1532
- #verifyUrl {
1533
- display: none
1534
- }
1535
- #loading {
1536
- position: absolute;
1537
- right: 20px;
1538
- top: 50%;
1539
- transform: translateY(-50%);
1540
- margin: 0px;
1541
- background: url("<?php echo $url . '/images/spinner.gif'; ?>") no-repeat;
1542
- background-size: 20px 20px;
1543
- filter: alpha(opacity=70);
1544
- }
1545
- #wd_tenweb_logo_notice {
1546
- height: 32px;
1547
- float: left;
1548
- }
1549
- .error_install, .error_activate {
1550
- color: red;
1551
- font-size: 10px;
1552
- }
1553
- /* -------------------Version 2 styles------------------ */
1554
- #wpbody-content #v2_tenweb_notice_cont {
1555
- display: none;
1556
- flex-wrap: wrap;
1557
- background: #fff;
1558
- box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
1559
- position: relative;
1560
- margin-left: 0px;
1561
- padding: 5px 0;
1562
- overflow: hidden;
1563
- border-left: 4px solid #0073AA;
1564
- font-family: Open Sans, sans-serif;
1565
- height: 40px;
1566
- min-height: 40px;
1567
- box-sizing: initial;
1568
- }
1569
- .v2_logo {
1570
- display: flex;
1571
- flex-direction: column;
1572
- justify-content: center;
1573
- height: inherit;
1574
- }
1575
-
1576
- #v2_tenweb_notice_cont {
1577
- height: 50px;
1578
- padding: 0px;
1579
- }
1580
-
1581
- .v2_content {
1582
- flex-grow: 1;
1583
- height: inherit;
1584
- margin-left: 34px;
1585
- }
1586
- .v2_content p{
1587
- margin: 0px;
1588
- padding: 0px;
1589
- }
1590
- .v2_content p > span{
1591
- font-size: 16px;
1592
- color: #333B46;
1593
- font-weight: 600;
1594
- line-height: 40px;
1595
- margin: 0;
1596
- }
1597
- #wd_tenweb_logo_notice {
1598
- margin-left: 35px;
1599
- height: 30px;
1600
- line-height: 100%;
1601
- }
1602
-
1603
- .v2_button {
1604
- display: flex;
1605
- margin-right: 30px;
1606
- flex-direction: column;
1607
- justify-content: center;
1608
- }
1609
-
1610
- .v2_button #install_now, #activate_now {
1611
- width: 112px;
1612
- height: 32px;
1613
- line-height: 30px;
1614
- font-size: 14px;
1615
- text-align: center;
1616
- padding: 0;
1617
- }
1618
-
1619
- #v2_tenweb_notice_cont .wd_tenweb_notice_dissmiss.notice-dismiss {
1620
- top: 3px;
1621
- right: 3px;
1622
- padding: 0px;
1623
- }
1624
-
1625
- .v2_button .button {
1626
- position: relative;
1627
- }
1628
-
1629
- .v2_button .button #loading {
1630
- position: absolute;
1631
- right: 10px;
1632
- top: 50%;
1633
- transform: translateY(-50%);
1634
- margin: 0px;
1635
- background-size: 12px 12px;
1636
- filter: alpha(opacity=70);
1637
- width: 12px;
1638
- height: 12px;
1639
- }
1640
-
1641
- @media only screen and (max-width: 1200px) and (min-width: 821px) {
1642
- #wpbody-content #v2_tenweb_notice_cont {
1643
- height: 50px;
1644
- min-height: 50px;
1645
- }
1646
-
1647
- #v2_tenweb_notice_cont {
1648
- height: 60px;
1649
- }
1650
-
1651
- .v2_content {
1652
- margin-left: 25px;
1653
- }
1654
- .v2_content p {
1655
- font-size: 14px;
1656
- color: #333B46;
1657
- font-weight: 600;
1658
- line-height: 20px;
1659
- margin-top: 5px;
1660
- }
1661
- .v2_content p span {
1662
- display: block;
1663
- }
1664
-
1665
- #wd_tenweb_logo_notice {
1666
- margin-left: 25px;
1667
- height: 30px;
1668
- line-height: 100%;
1669
- }
1670
-
1671
- .v2_button {
1672
- display: flex;
1673
- margin-right: 30px;
1674
- flex-direction: column;
1675
- justify-content: center;
1676
- }
1677
-
1678
- .v2_button #install_now {
1679
- width: 112px;
1680
- height: 32px;
1681
- line-height: 30px;
1682
- font-size: 14px;
1683
- text-align: center;
1684
- padding: 0;
1685
- }
1686
-
1687
- #v2_tenweb_notice_cont .wd_tenweb_notice_dissmiss.notice-dismiss {
1688
- top: 3px;
1689
- right: 3px;
1690
- }
1691
- }
1692
-
1693
- @media only screen and (max-width: 820px) and (min-width: 781px) {
1694
-
1695
- #wpbody-content #v2_tenweb_notice_cont {
1696
- height: 50px;
1697
- min-height: 50px;
1698
- }
1699
-
1700
- #v2_tenweb_notice_cont {
1701
- height: 60px;
1702
- }
1703
-
1704
- .v2_content {
1705
- margin-left: 25px;
1706
- }
1707
-
1708
- .v2_content p {
1709
- font-size: 13px;
1710
- color: #333B46;
1711
- font-weight: 600;
1712
- line-height: 20px;
1713
- margin-top: 5px;
1714
- }
1715
-
1716
- .v2_content p span {
1717
- display: block;
1718
- }
1719
-
1720
- }
1721
-
1722
- @media only screen and (max-width: 780px) {
1723
-
1724
- #wpbody-content #v2_tenweb_notice_cont {
1725
- height: auto;
1726
- min-height: auto;
1727
- }
1728
-
1729
- #v2_tenweb_notice_cont {
1730
- height: auto;
1731
- padding: 5px;
1732
- }
1733
-
1734
- .v2_logo {
1735
- display: block;
1736
- height: auto;
1737
- width: 100%;
1738
- margin-top: 5px;
1739
- }
1740
-
1741
- .v2_content {
1742
- display: block;
1743
- margin-left: 9px;
1744
- margin-top: 10px;
1745
- width: calc(100% - 10px);
1746
- }
1747
-
1748
- .v2_content p {
1749
- line-height: unset;
1750
- font-size: 15px;
1751
- line-height: 25px;
1752
- }
1753
- .v2_content p span{
1754
- display: block
1755
- }
1756
- #wd_tenweb_logo_notice {
1757
- margin-left: 9px;
1758
- }
1759
-
1760
- .v2_button {
1761
- margin-left: 9px;
1762
- margin-top: 10px;
1763
- margin-bottom: 5px;
1764
- }
1765
- }
1766
- </style>
1767
- <div id="v2_tenweb_notice_cont" class="notice wd-notice">
1768
- <div class="v2_logo">
1769
- <img id="wd_tenweb_logo_notice" src="<?php echo $url . '/images/form-maker-logo.png'; ?>" />
1770
- </div>
1771
- <div class="v2_content">
1772
- <p>
1773
- <?php echo sprintf(__('%sForm Maker advises:%s %sUse Image Optimizer service to optimize your images quickly and easily.%s', $prefix), '<span>','</span>', '<span>','</span>'); ?>
1774
- </p>
1775
- </div>
1776
- <div class="v2_button">
1777
- <?php WDW_FM_Library::twbb_install_button(2); ?>
1778
- </div>
1779
- <button type="button" class="wd_tenweb_notice_dissmiss notice-dismiss" onclick="jQuery('#v2_tenweb_notice_cont').attr('style', 'display: none !important;'); jQuery.post('<?php echo $dismiss_url; ?>');"><span class="screen-reader-text"></span></button>
1780
- <div id="verifyUrl" data-url="<?php echo $verify_url; ?>"></div>
1781
- </div>
1782
- <?php
1783
-
1784
- echo ob_get_clean();
1785
- }
1786
- }
1787
-
1788
- if ( !function_exists('is_plugin_active') ) {
1789
- include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
1790
- }
1791
-
1792
- if ( !is_plugin_active( '10web-manager/10web-manager.php' ) && WDFMInstance(1)->is_free ) {
1793
- add_action('admin_notices', 'wdfm_tenweb_install_notice');
1794
- }
1795
-
1796
- if ( !function_exists('wd_tenwebps_install_notice_status') ) {
1797
- // Add usermeta to DB.
1798
- function wd_tenwebps_install_notice_status() {
1799
- update_option('tenweb_notice_status', '1', 'no');
1800
- }
1801
- add_action('wp_ajax_wd_tenweb_dismiss', 'wd_tenwebps_install_notice_status');
1802
- }
1803
- // Check status 10web manager install
1804
- function fm_check_tenweb_status() {
1805
- $status_install = 0;
1806
- $status_active = 0;
1807
- if ( WDW_FM_Library::is_plugin_installed('10web-manager') ) {
1808
- $status_install = 1;
1809
- }
1810
- else {
1811
- if ( is_plugin_active('10web-manager/10web-manager.php') ) {
1812
- $status_active = 1;
1813
- }
1814
- }
1815
- if ( WDW_FM_Library::is_plugin_installed('10web-manager') ) {
1816
- $old_opt_array = array();
1817
- $new_opt_array = array( 'form-maker' => 95 ); // core_id
1818
- $key = 'tenweb_manager_installed';
1819
- $option = get_option($key);
1820
- if ( !empty($option) ) {
1821
- $old_opt_array = (array) json_decode($option);
1822
- }
1823
- $array_installed = array_merge($new_opt_array, $old_opt_array);
1824
- update_option($key, json_encode($array_installed));
1825
- }
1826
- $jsondata = array( 'status_install' => $status_install, 'status_active' => $status_active );
1827
- echo json_encode($jsondata);
1828
- exit;
1829
- }
1830
  add_action('wp_ajax_fm_tenweb_status', 'fm_check_tenweb_status');
1
+ <?php
2
+ /**
3
+ * Plugin Name: Form Maker
4
+ * Plugin URI: https://10web.io/plugins/wordpress-form-maker/
5
+ * Description: This plugin is a modern and advanced tool for easy and fast creating of a WordPress Form. The backend interface is intuitive and user friendly which allows users far from scripting and programming to create WordPress Forms.
6
+ * Version: 1.13.8
7
+ * Author: 10Web Form Builder Team
8
+ * Author URI: https://10web.io/plugins/
9
+ * License: GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
10
+ */
11
+
12
+ defined('ABSPATH') || die('Access Denied');
13
+
14
+ final class WDFM {
15
+ /**
16
+ * PLUGIN = 2 points to Contact Form Maker
17
+ */
18
+ const PLUGIN = 1;
19
+
20
+ /**
21
+ * The single instance of the class.
22
+ */
23
+ protected static $_instance = null;
24
+ /**
25
+ * Plugin directory path.
26
+ */
27
+ public $plugin_dir = '';
28
+ /**
29
+ * Plugin directory url.
30
+ */
31
+ public $plugin_url = '';
32
+ /**
33
+ * Plugin front urls.
34
+ */
35
+ public $front_urls = array();
36
+ /**
37
+ * Plugin main file.
38
+ */
39
+ public $main_file = '';
40
+ /**
41
+ * Plugin version.
42
+ */
43
+ public $plugin_version = '';
44
+ /**
45
+ * Plugin database version.
46
+ */
47
+ public $db_version = '';
48
+ /**
49
+ * Plugin menu slug.
50
+ */
51
+ public $menu_slug = '';
52
+ /**
53
+ * Plugin menu slug.
54
+ */
55
+ public $prefix = '';
56
+ public $css_prefix = '';
57
+ public $js_prefix = '';
58
+
59
+ public $nicename = '';
60
+ public $nonce = 'nonce_fm';
61
+ public $fm_form_nonce = 'fm_form_nonce%d';
62
+ public $is_free = 1;
63
+ public $is_demo = false;
64
+ public $fm_settings = array();
65
+
66
+ /**
67
+ * Main WDFM Instance.
68
+ *
69
+ * Ensures only one instance is loaded or can be loaded.
70
+ *
71
+ * @static
72
+ * @return WDFM - Main instance.
73
+ */
74
+ public static function instance() {
75
+ if ( is_null( self::$_instance ) ) {
76
+ self::$_instance = new self();
77
+ }
78
+ return self::$_instance;
79
+ }
80
+
81
+ public function __construct() {
82
+ $this->define_constants();
83
+ require_once($this->plugin_dir . '/framework/WDW_FM_Library.php');
84
+ if (is_admin()) {
85
+ require_once(wp_normalize_path($this->plugin_dir . '/admin/controllers/controller.php'));
86
+ require_once(wp_normalize_path($this->plugin_dir . '/admin/models/model.php'));
87
+ require_once(wp_normalize_path($this->plugin_dir . '/admin/views/view.php'));
88
+ }
89
+ $this->add_actions();
90
+ }
91
+
92
+ /**
93
+ * Define Constants.
94
+ */
95
+ private function define_constants() {
96
+ $this->plugin_dir = WP_PLUGIN_DIR . "/" . plugin_basename(dirname(__FILE__));
97
+ $this->plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
98
+ $this->front_urls = $this->get_front_urls();
99
+ $this->main_file = plugin_basename(__FILE__);
100
+ $this->plugin_version = '1.13.8';
101
+ $this->db_version = '2.13.8';
102
+ $this->menu_postfix = ($this->is_free == 2 ? '_fmc' : '_fm');
103
+ $this->plugin_postfix = ($this->is_free == 2 ? '_fmc' : '');
104
+ $this->menu_slug = 'manage' . $this->menu_postfix;
105
+ $this->prefix = 'form_maker' . $this->plugin_postfix;
106
+ $this->css_prefix = 'fm_';
107
+ $this->js_prefix = 'fm_';
108
+ $this->handle_prefix = ($this->is_free == 2 ? 'fmc' : 'fm');
109
+ $this->nicename = ($this->is_free == 2 ? __('Contact Form', $this->prefix) : __('Form Maker', $this->prefix));
110
+ $this->slug = ($this->is_free == 2 ? 'contact-form-maker' : 'form-maker');
111
+ $this->fm_settings = get_option( $this->handle_prefix . '_settings' );
112
+ if ( empty($this->fm_settings['fm_developer_mode']) ) {
113
+ $this->fm_settings['fm_developer_mode'] = 0;
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Add actions.
119
+ */
120
+ private function add_actions() {
121
+ add_action('init', array($this, 'init'), 9);
122
+ add_action('admin_menu', array( $this, 'form_maker_options_panel' ) );
123
+
124
+ add_action('wp_ajax_manage' . $this->menu_postfix, array($this, 'form_maker_ajax')); //Post/page search on display options pages.
125
+ add_action('wp_ajax_get_stats' . $this->plugin_postfix, array($this, 'form_maker')); //Show statistics
126
+ add_action('wp_ajax_generete_csv' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Export csv.
127
+ add_action('wp_ajax_generete_xml' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Export xml.
128
+ add_action('wp_ajax_formmakerwdcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete captcha image and save it code in session.
129
+ add_action('wp_ajax_nopriv_formmakerwdcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete captcha image and save it code in session for all users.
130
+ add_action('wp_ajax_formmakerwdmathcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete math captcha image and save it code in session.
131
+ add_action('wp_ajax_nopriv_formmakerwdmathcaptcha' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Generete math captcha image and save it code in session for all users.
132
+ add_action('wp_ajax_product_option' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open product options on add paypal field.
133
+ add_action('wp_ajax_FormMakerEditCountryinPopup' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open country list.
134
+ add_action('wp_ajax_FormMakerMapEditinPopup' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open map in submissions.
135
+ add_action('wp_ajax_FormMakerIpinfoinPopup' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open ip in submissions.
136
+ add_action('wp_ajax_show_matrix' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Edit matrix in submissions.
137
+ add_action('wp_ajax_FormMakerSubmits' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Open submissions in submissions.
138
+
139
+ if ( !$this->is_demo ) {
140
+ add_action('wp_ajax_FormMakerSQLMapping' . $this->plugin_postfix, array($this, 'form_maker_ajax')); // Add/Edit SQLMaping from form options.
141
+ add_action('wp_ajax_select_data_from_db' . $this->plugin_postfix, array( $this, 'form_maker_ajax' )); // select data from db.
142
+ }
143
+
144
+ add_action('wp_ajax_manage' . $this->plugin_postfix, array($this, 'form_maker_ajax')); //Show statistics
145
+
146
+ if ( !$this->is_free ) {
147
+ add_action('wp_ajax_paypal_info', array($this, 'form_maker_ajax')); // Paypal info in submissions page.
148
+ add_action('wp_ajax_checkpaypal', array($this, 'form_maker_ajax')); // Notify url from Paypal Sandbox.
149
+ add_action('wp_ajax_nopriv_checkpaypal', array($this, 'form_maker_ajax')); // Notify url from Paypal Sandbox for all users.
150
+ add_action('wp_ajax_get_frontend_stats', array($this, 'form_maker_ajax_frontend')); //Show statistics frontend
151
+ add_action('wp_ajax_nopriv_get_frontend_stats', array($this, 'form_maker_ajax_frontend')); //Show statistics frontend
152
+ add_action('wp_ajax_frontend_show_map', array($this, 'form_maker_ajax_frontend')); //Show map frontend
153
+ add_action('wp_ajax_nopriv_frontend_show_map', array($this, 'form_maker_ajax_frontend')); //Show map frontend
154
+ add_action('wp_ajax_frontend_show_matrix', array($this, 'form_maker_ajax_frontend')); //Show matrix frontend
155
+ add_action('wp_ajax_nopriv_frontend_show_matrix', array($this, 'form_maker_ajax_frontend')); //Show matrix frontend
156
+ add_action('wp_ajax_frontend_paypal_info', array($this, 'form_maker_ajax_frontend')); //Show paypal info frontend
157
+ add_action('wp_ajax_nopriv_frontend_paypal_info', array($this, 'form_maker_ajax_frontend')); //Show paypal info frontend
158
+ add_action('wp_ajax_frontend_generate_csv', array($this, 'form_maker_ajax_frontend')); //generate csv frontend
159
+ add_action('wp_ajax_nopriv_frontend_generate_csv', array($this, 'form_maker_ajax_frontend')); //generate csv frontend
160
+ add_action('wp_ajax_frontend_generate_xml', array($this, 'form_maker_ajax_frontend')); //generate xml frontend
161
+ add_action('wp_ajax_nopriv_frontend_generate_xml', array($this, 'form_maker_ajax_frontend')); //generate xml frontend
162
+ }
163
+ add_action('wp_ajax_fm_reload_input', array($this, 'form_maker_ajax_frontend'));
164
+ add_action('wp_ajax_nopriv_fm_reload_input', array($this, 'form_maker_ajax_frontend'));
165
+
166
+ // Add media button to WP editor.
167
+ add_action('wp_ajax_FMShortocde' . $this->plugin_postfix, array($this, 'form_maker_ajax'));
168
+ add_filter('media_buttons_context', array($this, 'media_button'));
169
+
170
+ add_action('admin_head', array($this, 'form_maker_admin_ajax'));//js variables for admin.
171
+
172
+ // Form maker shortcodes.
173
+ if ( !is_admin() ) {
174
+ add_shortcode('FormPreview' . $this->plugin_postfix, array($this, 'fm_form_preview_shortcode'));
175
+ if ($this->is_free != 2) {
176
+ add_shortcode('Form', array($this, 'fm_shortcode'));
177
+ }
178
+ if (!($this->is_free == 1)) {
179
+ add_shortcode('contact_form', array($this, 'fm_shortcode'));
180
+ add_shortcode('wd_contact_form', array($this, 'fm_shortcode'));
181
+ }
182
+ add_shortcode('email_verification' . $this->plugin_postfix, array($this, 'fm_email_verification_shortcode'));
183
+ }
184
+ // Action to display not emedded type forms.
185
+ global $pagenow;
186
+ if (!is_admin() || !in_array($pagenow, array('wp-login.php', 'wp-register.php'))) {
187
+ add_action('wp_footer', array($this, 'FM_front_end_main'));
188
+ }
189
+
190
+ // Form Maker Widget.
191
+ if (class_exists('WP_Widget')) {
192
+ add_action('widgets_init', array($this, 'register_widgets'));
193
+ }
194
+
195
+ // Plugin activation.
196
+ register_activation_hook(__FILE__, array($this, 'global_activate'));
197
+ add_action('wpmu_new_blog', array($this, 'new_blog_added'), 10, 6);
198
+
199
+ if ( (!isset($_GET['action']) || $_GET['action'] != 'deactivate')
200
+ && (!isset($_GET['page']) || $_GET['page'] != 'uninstall' . $this->menu_postfix) ) {
201
+ add_action('admin_init', array($this, 'form_maker_activate'));
202
+ }
203
+
204
+ // Register scripts/styles.
205
+ add_action('wp_enqueue_scripts', array($this, 'register_frontend_scripts'));
206
+ add_action('admin_enqueue_scripts', array($this, 'register_admin_scripts'));
207
+
208
+ // Set per_page option for submissions.
209
+ add_filter('set-screen-option', array($this, 'set_option_submissions'), 10, 3);
210
+
211
+ // Check extensions versions.
212
+ if ( $this->is_free != 2 && isset( $_GET[ 'page' ] ) && strpos( esc_html( $_GET[ 'page' ] ), '_' . $this->handle_prefix ) !== FALSE ) {
213
+ add_action('admin_notices', array($this, 'fm_check_addons_compatibility'));
214
+ }
215
+
216
+ add_action('plugins_loaded', array($this, 'plugins_loaded'), 9);
217
+
218
+ add_filter('wpseo_whitelist_permalink_vars', array($this, 'add_query_vars_seo'));
219
+
220
+ // Enqueue block editor assets for Gutenberg.
221
+ add_filter('tw_get_block_editor_assets', array($this, 'register_block_editor_assets'));
222
+ add_filter('tw_get_plugin_blocks', array($this, 'register_plugin_block'));
223
+ add_action( 'enqueue_block_editor_assets', array($this, 'enqueue_block_editor_assets') );
224
+
225
+ // Privacy policy.
226
+ add_action( 'admin_init', array($this, 'add_privacy_policy_content') );
227
+
228
+ // Personal data export.
229
+ add_filter( 'wp_privacy_personal_data_exporters', array($this, 'register_privacy_personal_data_exporter') );
230
+ // Personal data erase.
231
+ add_filter( 'wp_privacy_personal_data_erasers', array($this, 'register_privacy_personal_data_eraser') );
232
+
233
+ // Register widget for Elementor builder.
234
+ add_action('elementor/widgets/widgets_registered', array($this, 'register_elementor_widget'));
235
+ // Register 10Web category for Elementor widget if 10Web builder doesn't installed.
236
+ add_action('elementor/elements/categories_registered', array($this, 'register_widget_category'), 1, 1);
237
+ //fires after elementor editor styles and scripts are enqueued.
238
+ add_action('elementor/editor/after_enqueue_styles', array($this, 'enqueue_editor_styles'), 11);
239
+ }
240
+
241
+ public function enqueue_editor_styles() {
242
+ wp_enqueue_style($this->handle_prefix . '-icons', $this->plugin_url . '/fonts/style.css', array(), '1.0.0');
243
+ }
244
+
245
+ /**
246
+ * Register widget for Elementor builder.
247
+ */
248
+ public function register_elementor_widget() {
249
+ if ( defined('ELEMENTOR_PATH') && class_exists('Elementor\Widget_Base') ) {
250
+ require_once ($this->plugin_dir . '/admin/controllers/elementorWidget.php');
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Register 10Web category for Elementor widget if 10Web builder doesn't installed.
256
+ *
257
+ * @param $elements_manager
258
+ */
259
+ public function register_widget_category( $elements_manager ) {
260
+ $elements_manager->add_category('tenweb-plugins-widgets', array(
261
+ 'title' => __('10WEB Plugins', 'tenweb-builder'),
262
+ 'icon' => 'fa fa-plug',
263
+ ));
264
+ }
265
+
266
+ function add_privacy_policy_content() {
267
+ if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) {
268
+ return;
269
+ }
270
+
271
+ $content = __( 'When you leave a comment on this site, we send your name, email
272
+ address, IP address and comment text to example.com. Example.com does
273
+ not retain your personal data.', WDFMInstance(self::PLUGIN)->prefix );
274
+
275
+ wp_add_privacy_policy_content(
276
+ WDFMInstance(self::PLUGIN)->nicename,
277
+ wp_kses_post( wpautop( $content, false ) )
278
+ );
279
+ }
280
+
281
+ public function register_privacy_personal_data_exporter( $exporters ) {
282
+ $exporters[ $this->slug ] = array(
283
+ 'exporter_friendly_name' => $this->nicename,
284
+ 'callback' => array( WDW_FM_Library(self::PLUGIN), 'privacy_personal_data_export' ),
285
+ );
286
+ return $exporters;
287
+ }
288
+
289
+ public function register_privacy_personal_data_eraser( $erasers ) {
290
+ $erasers[ $this->slug ] = array(
291
+ 'eraser_friendly_name' => $this->nicename,
292
+ 'callback' => array( WDW_FM_Library(self::PLUGIN), 'privacy_personal_data_erase' ),
293
+ );
294
+ return $erasers;
295
+ }
296
+
297
+ public function register_block_editor_assets($assets) {
298
+ $version = '2.0.3';
299
+ $js_path = $this->plugin_url . '/js/tw-gb/block.js';
300
+ $css_path = $this->plugin_url . '/css/tw-gb/block.css';
301
+ if (!isset($assets['version']) || version_compare($assets['version'], $version) === -1) {
302
+ $assets['version'] = $version;
303
+ $assets['js_path'] = $js_path;
304
+ $assets['css_path'] = $css_path;
305
+ }
306
+ return $assets;
307
+ }
308
+
309
+ public function register_plugin_block($blocks) {
310
+ if ($this->is_free == 2) {
311
+ $key = 'tw/contact-form-maker';
312
+ $key_submissions = 'tw/cfm-submissions';
313
+ }
314
+ else {
315
+ $key = 'tw/form-maker';
316
+ $key_submissions = 'tw/fm-submissions';
317
+ }
318
+ $fm_nonce = wp_create_nonce('fm_ajax_nonce');
319
+ $plugin_name = $this->nicename;
320
+ $plugin_name_submissions = __('Submissions', WDFMInstance(self::PLUGIN)->prefix);
321
+ $icon_url = $this->plugin_url . '/images/tw-gb/icon_colored.svg';
322
+ $icon_svg = $this->plugin_url . '/images/tw-gb/icon.svg';
323
+ $url = add_query_arg(array('action' => 'FMShortocde' . $this->plugin_postfix, 'task' => 'submissions', 'nonce' => $fm_nonce), admin_url('admin-ajax.php'));
324
+ $data = WDW_FM_Library(self::PLUGIN)->get_shortcode_data();
325
+ $blocks[$key] = array(
326
+ 'title' => $plugin_name,
327
+ 'titleSelect' => sprintf(__('Select %s', $this->prefix), $plugin_name),
328
+ 'iconUrl' => $icon_url,
329
+ 'iconSvg' => array('width' => 20, 'height' => 20, 'src' => $icon_svg),
330
+ 'isPopup' => false,
331
+ 'data' => $data,
332
+ );
333
+ $blocks[$key_submissions] = array(
334
+ 'title' => $plugin_name_submissions,
335
+ 'titleSelect' => sprintf(__('Select %s', $this->prefix), $plugin_name),
336
+ 'iconUrl' => $icon_url,
337
+ 'iconSvg' => array('width' => 20, 'height' => 20, 'src' => $icon_svg),
338
+ 'isPopup' => true,
339
+ 'containerClass' => 'tw-container-wrap-520-400',
340
+ 'data' => array('shortcodeUrl' => $url),
341
+ );
342
+ return $blocks;
343
+ }
344
+
345
+ public function enqueue_block_editor_assets() {
346
+ // Remove previously registered or enqueued versions
347
+ $wp_scripts = wp_scripts();
348
+ foreach ($wp_scripts->registered as $key => $value) {
349
+ // Check for an older versions with prefix.
350
+ if (strpos($key, 'tw-gb-block') > 0) {
351
+ wp_deregister_script( $key );
352
+ wp_deregister_style( $key );
353
+ }
354
+ }
355
+ // Get plugin blocks from all 10Web plugins.
356
+ $blocks = apply_filters('tw_get_plugin_blocks', array());
357
+ // Get the last version from all 10Web plugins.
358
+ $assets = apply_filters('tw_get_block_editor_assets', array());
359
+ // Not performing unregister or unenqueue as in old versions all are with prefixes.
360
+ wp_enqueue_script('tw-gb-block', $assets['js_path'], array( 'wp-blocks', 'wp-element' ), $assets['version']);
361
+ wp_localize_script('tw-gb-block', 'tw_obj_translate', array(
362
+ 'nothing_selected' => __('Nothing selected.', $this->prefix),
363
+ 'empty_item' => __('- Select -', $this->prefix),
364
+ 'blocks' => json_encode($blocks)
365
+ ));
366
+ wp_enqueue_style('tw-gb-block', $assets['css_path'], array( 'wp-edit-blocks' ), $assets['version']);
367
+ }
368
+
369
+ /**
370
+ * Wordpress init actions.
371
+ */
372
+ public function init() {
373
+ ob_start();
374
+ $this->fm_overview();
375
+
376
+ // Register fmemailverification post type
377
+ $this->register_fmemailverification_cpt();
378
+
379
+ // Register fmformpreview post type
380
+ $this->register_form_preview_cpt();
381
+ }
382
+
383
+ /**
384
+ * Plugins loaded actions.
385
+ */
386
+ public function plugins_loaded() {
387
+ // Languages localization.
388
+ load_plugin_textdomain($this->prefix, FALSE, basename(dirname(__FILE__)) . '/languages');
389
+
390
+ if ($this->is_free != 2 && !function_exists('WDFM')) {
391
+ require_once($this->plugin_dir . '/WDFM.php');
392
+ }
393
+
394
+ // Initialize extensions.
395
+ if ($this->is_free != 2) {
396
+ do_action('fm_init_addons');
397
+ }
398
+ // Prevent adding shortcode conflict with some builders.
399
+ $this->before_shortcode_add_builder_editor();
400
+ }
401
+
402
+ /**
403
+ * Plugin menu.
404
+ */
405
+ public function form_maker_options_panel() {
406
+ $parent_slug = !$this->is_free ? $this->menu_slug : null;
407
+ if( !$this->is_free || ($this->is_free == 1 && get_option( "fm_subscribe_done" ) == 1) || ($this->is_free == 2 && get_option( "cfm_subscribe_done" ) == 1) ) {
408
+ add_menu_page($this->nicename, $this->nicename, 'manage_options', $this->menu_slug, array( $this, 'form_maker' ), $this->plugin_url . '/images/FormMakerLogo-16.png');
409
+ $parent_slug = $this->menu_slug;
410
+ }
411
+ add_submenu_page($parent_slug, __('Forms', $this->prefix), __('Forms', $this->prefix), 'manage_options', $this->menu_slug, array($this, 'form_maker'));
412
+ $submissions_page = add_submenu_page($parent_slug, __('Submissions', $this->prefix), __('Submissions', $this->prefix), 'manage_options', 'submissions' . $this->menu_postfix, array($this, 'form_maker'));
413
+ add_action('load-' . $submissions_page, array($this, 'submissions_per_page'));
414
+
415
+ add_submenu_page(null, __('Blocked IPs', $this->prefix), __('Blocked IPs', $this->prefix), 'manage_options', 'blocked_ips' . $this->menu_postfix, array($this, 'form_maker'));
416
+ add_submenu_page($parent_slug, __('Themes', $this->prefix), __('Themes', $this->prefix), 'manage_options', 'themes' . $this->menu_postfix, array($this, 'form_maker'));
417
+ add_submenu_page($parent_slug, __('Options', $this->prefix), __('Options', $this->prefix), 'manage_options', 'options' . $this->menu_postfix, array($this, 'form_maker'));
418
+ add_submenu_page(null, __('Uninstall', $this->prefix), __('Uninstall', $this->prefix), 'manage_options', 'uninstall' . $this->menu_postfix, array($this, 'form_maker'));
419
+ }
420
+
421
+ /**
422
+ * Set front plugin url.
423
+ *
424
+ * return string $plugin_url
425
+ */
426
+ private function set_front_plugin_url() {
427
+ $plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
428
+
429
+ return $plugin_url;
430
+ }
431
+
432
+ /**
433
+ * Set front upload url.
434
+ *
435
+ * return string $upload_url
436
+ */
437
+ private function set_front_upload_url() {
438
+ $wp_upload_dir = wp_upload_dir();
439
+ $upload_url = $wp_upload_dir['baseurl'];
440
+ $http = 'http://';
441
+ $https = 'https://';
442
+ if ( $_SERVER['SERVER_PORT'] == 443 || strpos(get_option('home'), $https) > -1 ) {
443
+ $upload_url = str_replace($http, $https, $wp_upload_dir['baseurl']);
444
+ }
445
+
446
+ return $upload_url;
447
+ }
448
+
449
+ /**
450
+ * Get front urls.
451
+ *
452
+ * return array $urls
453
+ */
454
+ public function get_front_urls() {
455
+ $urls = array();
456
+ $urls['plugin_url'] = $this->set_front_plugin_url();
457
+ $urls['upload_url'] = $this->set_front_upload_url();
458
+
459
+ return $urls;
460
+ }
461
+
462
+ /**
463
+ * Add per_page screen option for submissions page.
464
+ */
465
+ function submissions_per_page() {
466
+ $option = 'per_page';
467
+ $args_rates = array(
468
+ 'label' => __('Number of items per page:', $this->prefix),
469
+ 'default' => 20,
470
+ 'option' => 'fm_submissions_per_page'
471
+ );
472
+ add_screen_option( $option, $args_rates );
473
+ }
474
+
475
+ /**
476
+ * Set per_page option for submissions page.
477
+ *
478
+ * @param $status
479
+ * @param $option
480
+ * @param $value
481
+ * @return mixed
482
+ */
483
+ function set_option_submissions($status, $option, $value) {
484
+ if ( 'fm_submissions_per_page' == $option ) return $value;
485
+ return $status;
486
+ }
487
+
488
+ /**
489
+ * Output for admin pages.
490
+ */
491
+ public function form_maker() {
492
+ if (function_exists('current_user_can')) {
493
+ if (!current_user_can('manage_options')) {
494
+ die('Access Denied');
495
+ }
496
+ }
497
+ else {
498
+ die('Access Denied');
499
+ }
500
+ $page = WDW_FM_Library(self::PLUGIN)->get('page');
501
+ if (($page != '') && (($page == 'manage' . $this->menu_postfix) || ($page == 'options' . $this->menu_postfix) || ($page == 'submissions' . $this->menu_postfix) || ($page == 'blocked_ips' . $this->menu_postfix) || ($page == 'themes' . $this->menu_postfix) || ($page == 'uninstall' . $this->menu_postfix))) {
502
+ $page = ucfirst(substr($page, 0, strlen($page) - strlen($this->menu_postfix)));
503
+ echo '<div id="fm_loading"></div>';
504
+ echo '<div id="fm_admin_container" class="fm-form-container" style="display: none;">';
505
+ try {
506
+ require_once ($this->plugin_dir . '/admin/controllers/' . $page . '_fm.php');
507
+ $controller_class = 'FMController' . $page . $this->menu_postfix;
508
+ $controller = new $controller_class();
509
+ $controller->execute();
510
+ } catch (Exception $e) {
511
+ ob_start();
512
+ debug_print_backtrace();
513
+ error_log(ob_get_clean());
514
+ }
515
+ echo '</div>';
516
+ }
517
+ }
518
+
519
+ /**
520
+ * Register widgets.
521
+ */
522
+ public function register_widgets() {
523
+ require_once($this->plugin_dir . '/admin/controllers/Widget.php');
524
+ register_widget('FMControllerWidget' . $this->plugin_postfix);
525
+ }
526
+
527
+ /**
528
+ * Register Admin styles/scripts.
529
+ */
530
+ public function register_admin_scripts() {
531
+ $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
532
+ // Admin styles.
533
+ wp_register_style($this->handle_prefix . '-tables', $this->plugin_url . '/css/form_maker_tables.css', array(), $this->plugin_version);
534
+ wp_register_style($this->handle_prefix . '-phone_field_css', $this->plugin_url . '/css/intlTelInput.css', array(), $this->plugin_version);
535
+ wp_register_style($this->handle_prefix . '-jquery-ui', $this->plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
536
+ wp_register_style($this->handle_prefix . '-codemirror', $this->plugin_url . '/css/codemirror.css', array(), $this->plugin_version);
537
+ wp_register_style($this->handle_prefix . '-layout', $this->plugin_url . '/css/form_maker_layout.css', array(), $this->plugin_version);
538
+ wp_register_style($this->handle_prefix . '-bootstrap', $this->plugin_url . '/css/fm-bootstrap.css', array(), $this->plugin_version);
539
+ wp_register_style($this->handle_prefix . '-colorpicker', $this->plugin_url . '/css/spectrum.css', array(), $this->plugin_version);
540
+ // Roboto font for top bar.
541
+ wp_register_style($this->handle_prefix . '-roboto', 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700');
542
+
543
+ if ( !$this->is_free ) {
544
+ wp_register_style('jquery.fancybox', $this->plugin_url . '/js/fancybox/jquery.fancybox.css', array(), '2.1.5');
545
+ }
546
+ // Admin scripts.
547
+ $localize_key_all = $this->handle_prefix . '-admin';
548
+ $localize_key_manage = $this->handle_prefix . '-manage';
549
+ $localize_key_add_fields = $this->handle_prefix . '-add-fields';
550
+ $localize_key_formmaker_div = $this->handle_prefix . '-formmaker_div';
551
+
552
+ if ( ! $fm_settings['fm_developer_mode'] ) {
553
+ $localize_key_all = $this->handle_prefix . ( ( WDW_FM_Library(self::PLUGIN)->get('page') == 'submissions_' . $this->handle_prefix ) ? '-submission' : '-scripts');
554
+ $localize_key_manage .= '-edit';
555
+ $localize_key_add_fields = $localize_key_manage;
556
+ $localize_key_formmaker_div = $localize_key_manage;
557
+ wp_register_style($this->handle_prefix . '-styles', $this->plugin_url . '/css/fm-styles.min.css', array(), $this->plugin_version);
558
+ wp_register_script($this->handle_prefix . '-scripts', $this->plugin_url . '/js/fm-scripts.min.js', array(), $this->plugin_version);
559
+
560
+ wp_register_style($this->handle_prefix . '-manage', $this->plugin_url . '/css/manage-styles.min.css', array(), $this->plugin_version);
561
+ wp_register_script($this->handle_prefix . '-manage', $this->plugin_url . '/js/manage-scripts.min.js', array(), $this->plugin_version);
562
+
563
+ wp_register_style($this->handle_prefix . '-manage-edit', $this->plugin_url . '/css/manage-edit-styles.min.css', array(), $this->plugin_version);
564
+ wp_register_script($this->handle_prefix . '-manage-edit', $this->plugin_url . '/js/manage-edit-scripts.min.js', array(), $this->plugin_version);
565
+
566
+ wp_register_style($this->handle_prefix . '-submission', $this->plugin_url . '/css/submission-styles.min.css', array(), $this->plugin_version);
567
+ wp_register_script($this->handle_prefix . '-submission', $this->plugin_url . '/js/submission-scripts.min.js', array(), $this->plugin_version);
568
+
569
+ wp_register_style($this->handle_prefix . '-theme-edit', $this->plugin_url . '/css/theme-edit-styles.min.css', array(), $this->plugin_version);
570
+ wp_register_script($this->handle_prefix . '-theme-edit', $this->plugin_url . '/js/theme-edit-scripts.min.js', array(), $this->plugin_version);
571
+ }
572
+
573
+ $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
574
+ wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
575
+ wp_register_script($this->handle_prefix . '-gmap_form', $this->plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
576
+
577
+ wp_register_script($this->handle_prefix . '-phone_field', $this->plugin_url . '/js/intlTelInput.js', array(), '11.0.0');
578
+
579
+ // For drag and drop on mobiles.
580
+ wp_register_script($this->handle_prefix . '_jquery.ui.touch-punch.min', $this->plugin_url . '/js/jquery.ui.touch-punch.min.js', array('jquery'), '0.2.3');
581
+
582
+ wp_register_script($this->handle_prefix . '-admin', $this->plugin_url . '/js/form_maker_admin.js', array(), $this->plugin_version);
583
+ wp_register_script($localize_key_manage, $this->plugin_url . '/js/form_maker_manage.js', array(), $this->plugin_version);
584
+ wp_register_script($this->handle_prefix . '-manage-edit', $this->plugin_url . '/js/form_maker_manage_edit.js', array(), $this->plugin_version);
585
+ wp_register_script($localize_key_formmaker_div, $this->plugin_url . '/js/formmaker_div.js', array(), $this->plugin_version);
586
+ wp_register_script($this->handle_prefix . '-form-options', $this->plugin_url . '/js/form_maker_form_options.js', array(), $this->plugin_version);
587
+ wp_register_script($this->handle_prefix . '-form-advanced-layout', $this->plugin_url . '/js/form_maker_form_advanced_layout.js', array(), $this->plugin_version);
588
+ wp_register_script($localize_key_add_fields, $this->plugin_url . '/js/add_field.js', array($this->handle_prefix . '-formmaker_div'), $this->plugin_version);
589
+
590
+ wp_localize_script($localize_key_manage, 'form_maker_manage', array(
591
+ 'add_new_field' => __('Add Field', $this->prefix),
592
+ 'add_column' => __('Add Column', $this->prefix),
593
+ 'required_field' => __('Field is required.', $this->prefix),
594
+ 'not_valid_value' => __('Enter a valid value.', $this->prefix),
595
+ 'not_valid_email' => __('Enter a valid email address.', $this->prefix),
596
+ ));
597
+
598
+ wp_localize_script($localize_key_all, 'form_maker', array(
599
+ 'countries' => WDW_FM_Library(self::PLUGIN)->get_countries(),
600
+ 'delete_confirmation' => __('Do you want to delete selected items?', $this->prefix),
601
+ 'select_at_least_one_item' => __('You must select at least one item.', $this->prefix),
602
+ 'add_placeholder' => __('Add placeholder', $this->prefix),
603
+ ));
604
+
605
+ wp_localize_script($localize_key_add_fields, 'form_maker', array(
606
+ 'countries' => WDW_FM_Library(self::PLUGIN)->get_countries(),
607
+ 'states' => WDW_FM_Library(self::PLUGIN)->get_states(),
608
+ 'provinces' => WDW_FM_Library(self::PLUGIN)->get_provinces_canada(),
609
+ 'plugin_url' => $this->plugin_url,
610
+ 'nothing_found' => __('Nothing found.', $this->prefix),
611
+ 'captcha_created' => __('The captcha already has been created.', $this->prefix),
612
+ 'update' => __('Update', $this->prefix),
613
+ 'add' => __('Add', $this->prefix),
614
+ 'add_field' => __('Add Field', $this->prefix),
615
+ 'edit_field' => __('Edit Field', $this->prefix),
616
+ 'stripe3' => __('To use this feature, please go to Form Options > Payment Options and select "Stripe" as the Payment Method.', $this->prefix),
617
+ 'sunday' => __('Sunday', $this->prefix),
618
+ 'monday' => __('Monday', $this->prefix),
619
+ 'tuesday' => __('Tuesday', $this->prefix),
620
+ 'wednesday' => __('Wednesday', $this->prefix),
621
+ 'thursday' => __('Thursday', $this->prefix),
622
+ 'friday' => __('Friday', $this->prefix),
623
+ 'saturday' => __('Saturday', $this->prefix),
624
+ 'leave_empty' => __('Leave empty to set the width to 100%.', $this->prefix),
625
+ 'is_demo' => $this->is_demo,
626
+ 'important_message' => __('The free version is limited up to 7 fields to add. If you need this functionality, you need to buy the commercial version.', $this->prefix),
627
+ 'no_preview' => __('No preview available for reCAPTCHA.', $this->prefix),
628
+ 'invisible_recaptcha_error' => sprintf( __('%s Old reCAPTCHA keys will not work for %s. Please make sure to enable the API keys for Invisible reCAPTCHA.', $this->prefix), '<b>'. __('Note:', $this->prefix) .'</b>', '<b>'. __('Invisible reCAPTCHA', $this->prefix) .'</b>' ),
629
+ 'type_text_description' => __('This field is a single line text input.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('You can set the text input as Required, making sure the submitter provides a value for it.', $this->prefix).'<br><br>'.__('Validation (RegExp.) option in Advanced options lets you configure Regular Expression for your Single Line Text field. Use Common Regular Expressions select box to use built-in validation patterns. For instance, in case you can add a validation for decimal number, IP address or zip code by selecting corresponding options of Common Regular Expressions drop-down.', $this->prefix) .'<br><br>'.__('Additionally, you can add HTML attributes to your form fields with Additional Attributes.', $this->prefix),
630
+ 'type_textarea_description' => __('This field adds a textarea box to your form. Users can write alphanumeric text, special characters and line breaks.', $this->prefix).'<br><br>'.__('You can set the text input as Required, making sure the submitter provides a value for it.', $this->prefix).'<br><br>'.__('Set the width and height of the textarea box using Size(px) option.', $this->prefix),
631
+ 'type_number_description' => __('This is an input text that accepts only numbers. Users can type a number directly, or use the spinner arrows to specify it.', $this->prefix).'<br><br>'.__('Step option defines the number to increment/decrement the spinner value, when the users press up or down arrows.', $this->prefix).'<br><br>'.__('Use Min Value and Max Value options to set lower and upper limitation for the value of this Number field.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix),
632
+ 'type_select_description' => __('This field allows the submitter to choose values from select box. Just click (+) Option button and fill in all options you will need or click (+) From Database to fill the options from a database table.', $this->prefix) .'<br><br>'.__('In case you need to have option values to be different from option names, mark Enable option\'s value from Advanced options as checked.', $this->prefix),
633
+ 'type_radio_description' => __('Using this field you can add a list of Radio buttons to your form. Just click (+) Option button and fill in all options you will need or click (+) From Database to fill the options from a database table.', $this->prefix).'<br><br>'.__('Relative Position lets you choose the position of options in relation to each other. Whereas Option Label Position lets you select the position of radio button label.', $this->prefix).'<br><br>'.__('In case you need to have option values to be different from option names, mark Enable option\'s value from Advanced options as checked.', $this->prefix).'<br><br>'.__('And by enabling Allow other, you can let the user to write their own specific value.', $this->prefix),
634
+ 'type_checkbox_description' => __('Multiple Choice field lets you have a list of Checkboxes. This field allows the submitter to choose more than one values.', $this->prefix).'<br><br>'.__('Just click (+) Option button and fill in all options you will need or click (+) From Database to fill the options from a database table.', $this->prefix).'<br><br>'.__('Relative Position lets you choose the position of options in relation to each other. Whereas Option Label Position lets you select the position of radio button label.', $this->prefix).'<br><br>'.__('In case you need to have option values to be different from option names, mark Enable option\'s value from Advanced options as checked.', $this->prefix).'<br><br>'.__('And by enabling Allow other, you can let the user to write their own specific value.', $this->prefix),
635
+ 'type_recaptcha_description' => sprintf(__('Form Maker is integrated with Google ReCaptcha, which protects your forms from spam bots. Before adding ReCaptcha to your form, you need to configure Site and Secret Keys by registering your website on %s', $this->prefix),'<a href="https://www.google.com/recaptcha/intro/" target="_blank">'. __('Google ReCaptcha website', $this->prefix) .'</a>').'<br><br>'.__('After registering and creating the keys, copy them to Form Maker > Options page.', $this->prefix),
636
+ 'type_submit_description' => __('The Submit button validates all form field values, saves them on MySQL database of your website, sends emails and performs other actions configured in Form Options. You can have more than one submit button in your form.', $this->prefix),
637
+ 'type_captcha_description' => __('You can use this field as an alternative to ReCaptcha to protect your forms against spambots. It’s a random combination of numbers and letters, and users need to type them in correctly to submit the form.', $this->prefix).'<br><br>'.__('You can specify the number of symbols in Simple Captcha using Symbols (3 - 9) option.', $this->prefix),
638
+ 'type_name_description' => __('This field lets the user write their name.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('Enabling Autofill with user name setting will automatically fill in Name field with the name of the logged in user.', $this->prefix).'<br><br>'.__('In case you do not wish to receive the same data for the same Name field twice, activate Allow only unique values option.', $this->prefix),
639
+ 'type_email_description' => __('This field is an input field that accepts an email address.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('Using Confirmation Email setting in Advanced Options you can require the submitter to re-type their email address.', $this->prefix).'<br><br>'.__('Autofill with user email will autofill Email field with the email address of the logged in user.', $this->prefix).'<br><br>'.__('Upon successful submission of the Form, you have the option to send the submitted data (or just a confirmation message) to the email address entered here. To do this you need to set the corresponding options on Form Options > Email Options page.', $this->prefix),
640
+ 'type_phone_description' => __('This field is an input for a phone number. It provides a list of country flags, which users can select and have their country code automatically added to the phone number.', $this->prefix).'<br><br>'.__('In case you do not wish to receive the same data for the same Phone field more than once, activate Allow only unique values setting from Advanced options.', $this->prefix),
641
+ 'type_address_description' => __('This field lets you skip a few steps and quickly add one set for requesting the address of the submitter. Use Overall size(px) option to set the width of Address field.', $this->prefix).'<br><br>'.__('You can enable or disable elements of Address field using Disable Field(s) setting in Advanced Options.', $this->prefix).'<br><br>'.__('You can turn State/Province/Region field into a list of US states by activating Use list for US states setting from Advanced Options. Note: This only works in case United States is selected for Country select box.', $this->prefix),
642
+ 'type_mark_on_map_description' => __('Mark on Map field lets users to drag the map pin and drop it on their selected location. You can specify a default address for the location pin with Address option.', $this->prefix).'<br><br>'.__('In addition, Marker Info setting allows you to provide additional details about the location. It will appear after users click on the location pin.', $this->prefix),
643
+ 'type_country_list_description' => __('Country List is a select box which provides a list of all countries in alphabetical order.', $this->prefix).'<br><br>'.__('You can include/exclude specific countries from the list using the Edit country list setting in Advanced Options.', $this->prefix),
644
+ 'type_date_of_birth_description' => __('Users can specify their birthday or any date with this field.', $this->prefix).'<br><br>'.__('Use Fields separator setting in Advanced options to change the divider between day, month and year boxes.', $this->prefix).'<br><br>'.__('You can set the fields to be text inputs or select boxes using Day field type, Month field type and Year field type options.', $this->prefix).'<br><br>'.__('In addition, you can specify the width of day, month and year fields using Day field size(px), Month field size(px) and Year field size(px) settings.', $this->prefix),
645
+ 'type_file_upload_description' => __('You can allow users to upload single or multiple documents, images and various files through your form.', $this->prefix).'<br><br>'.__('Use Allowed file extensions option to specify all acceptable file formats. Make sure to separate them with commas.', $this->prefix).'<br><br>'.__('Mark Allow Uploading Multiple Files option in Advanced Options to allow users to select and upload multiple files.', $this->prefix),
646
+ 'type_map_description' => __('Map field can be used for pinning one or more locations on Google Map and displaying them on your form.', $this->prefix).'<br><br>'.__('Press the small Plus icon to add a location pin.', $this->prefix),
647
+ 'type_time_description' => __('Time field of Form Maker plugin will allow users to specify time value. Set the time format of the field to 24-hour or 12-hour using Time Format option.', $this->prefix),
648
+ 'type_send_copy_description' => __('When users fill in an email address using Email Field, this checkbox will allow them to choose if they wish to receive a copy of the submission email.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Email Options of your form.', $this->prefix),
649
+ 'type_stars_description' => __('Add Star rating field to your form with this field. You can display as many stars, as you will need, set the number using Number of Stars option.', $this->prefix),
650
+ 'type_rating_description' => __('Place Rating field on your form to have radio buttons, which indicate rating from worst to best. You can set many radio buttons to display using Scale Range option.', $this->prefix),
651
+ 'type_slider_description' => __('Slider field lets users specify the field value by dragging its handle from Min Value to Max Value.', $this->prefix),
652
+ 'type_range_description' => __('You can use this field to let users choose a numeric range by providing values for 2 number inputs. Its Step option allows to set the increment/decrement of spinners’ values, when users click on up or down arrows.', $this->prefix),
653
+ 'type_grades_description' => __('Users will be able to grade specified items with this field. The sum of all values will appear below the field with Total parameter.', $this->prefix).'<br><br>'.__('Items option allows you to add multiple options to your Grades field.', $this->prefix),
654
+ 'type_matrix_description' => __('Table of Fields lets you place a matrix on your form, which will let the submitter to answer a few questions with one field.', $this->prefix).'<br><br>'.__('It allows you to configure the matrix with radio buttons, checkboxes, text boxes or drop-downs. Use Input Type option to set this.', $this->prefix),
655
+ 'type_hidden_description' => __('Hidden Input field is similar to Single Line Text field, but it is not visible to users. Hidden Fields are handy, in case you need to run a custom Javascript and submit the result with the info on your form.', $this->prefix).'<br><br>'.__('Name option of this field is mandatory. Note: we highly recommend you to avoid using spaces or special characters in Hidden Input name. You can write the custom Javascript code using the editor on Form Options > Javascript page.', $this->prefix),
656
+ 'type_button_description' => __('In case you wish to run custom Javascript on your form, you can place Custom Button on your form. Its lets you call the script with its OnClick function.', $this->prefix).'<br><br>'.__('You can write the custom Javascript code using the editor on Form Options > Javascript page.', $this->prefix),
657
+ 'type_password_description' => __('Password input can be used to allow users provide secret text, such as passwords. All symbols written in this field are replaced with dots.', $this->prefix).'<br><br>'.__('You can activate Password Confirmation option to ask users to repeat the password.', $this->prefix),
658
+ 'type_phone_area_code_description' => __('Phone-Area Code is a Phone type field, which allows users to write Area Code and Phone Number into separate inputs.', $this->prefix),
659
+ 'type_arithmetic_captcha_description' => __('Arithmetic Captcha is quite similar to Simple Captcha. However, instead of showing random symbols, it displays arithmetic operations.', $this->prefix).'<br><br>'.__('You can set the operations using Operations option. The field can use addition (+), subtraction (-), multiplication (*) and division (/).', $this->prefix).'<br><br>'.__('Make sure to separate the operations with commas.', $this->prefix),
660
+ 'type_price_description' => __('Users can set a payment amount of their choice with Price field. Assigns minimum and maximum limits on its value using Range option.', $this->prefix).'<br><br>'.__('To set a default value, just fill the field above.', $this->prefix).'<br><br>'.__('Additionally, you can activate Readonly attribute. This way, users will not be able to edit the value of Price.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
661
+ 'type_payment_select_description' => __('Payment Select field lets you create lists of products, one of which the submitter can choose to buy through your form. Add or edit list items using Options setting of the fields.', $this->prefix).'<br><br>'.__('Enable Quantity property from Advanced Options, in case you would like the users to mention the quantity of items they purchase.', $this->prefix).'<br><br>'.__('Also, you can configure custom or built-in Product Properties for your products, such as Color, T-Shirt Size or Print Size.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
662
+ 'type_payment_radio_description' => __('Payment Single Choice field lets you create lists of products, one of which the submitter can choose to buy through your form. Add or edit list items using Options setting of the fields.', $this->prefix).'<br><br>'.__('Enable Quantity property from Advanced Options, in case you would like the users to mention the quantity of items they purchase.', $this->prefix).'<br><br>'.__('Also, you can configure custom or built-in Product Properties for your products, such as Color, T-Shirt Size or Print Size.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
663
+ 'type_payment_checkbox_description' => __('Payment Multiple Choice field lets you create lists of products, which the submitter can choose to buy through your form. Add or edit list items using Options setting of the fields.', $this->prefix).'<br><br>'.__('Enable Quantity property from Advanced Options, in case you would like the users to mention the quantity of items they purchase.', $this->prefix).'<br><br>'.__('Also, you can configure custom or built-in Product Properties for your products, such as Color, T-Shirt Size or Print Size.', $this->prefix).'<br><br>'.__('Note: Make sure to configure Form Options > Payment Options of your form.', $this->prefix),
664
+ 'type_shipping_description' => __('Shipping allows you to configure shipping types, set price for each of them and display them on your form as radio buttons.', $this->prefix),
665
+ 'type_total_description' => __('Please Total field to your payment form to sum up the values of Payment fields. ', $this->prefix),
666
+ 'type_stripe_description' => __('This field adds the credit card details inputs (card number, expiration date, etc.) and allows you to accept direct payments made by credit cards.', $this->prefix),
667
+ ));
668
+
669
+ wp_register_script($this->handle_prefix . '-codemirror', $this->plugin_url . '/js/layout/codemirror.js', array(), '2.3');
670
+ wp_register_script($this->handle_prefix . '-clike', $this->plugin_url . '/js/layout/clike.js', array(), '1.0.0');
671
+ wp_register_script($this->handle_prefix . '-formatting', $this->plugin_url . '/js/layout/formatting.js', array(), '1.0.0');
672
+ wp_register_script($this->handle_prefix . '-css', $this->plugin_url . '/js/layout/css.js', array(), '1.0.0');
673
+ wp_register_script($this->handle_prefix . '-javascript', $this->plugin_url . '/js/layout/javascript.js', array(), '1.0.0');
674
+ wp_register_script($this->handle_prefix . '-xml', $this->plugin_url . '/js/layout/xml.js', array(), '1.0.0');
675
+ wp_register_script($this->handle_prefix . '-php', $this->plugin_url . '/js/layout/php.js', array(), '1.0.0');
676
+ wp_register_script($this->handle_prefix . '-htmlmixed', $this->plugin_url . '/js/layout/htmlmixed.js', array(), '1.0.0');
677
+ wp_register_script($this->handle_prefix . '-colorpicker', $this->plugin_url . '/js/spectrum.js', array(), $this->plugin_version);
678
+ wp_register_script($this->handle_prefix . '-themes', $this->plugin_url . '/js/themes.js', array(), $this->plugin_version);
679
+ wp_register_script($this->handle_prefix . '-submissions', $this->plugin_url . '/js/form_maker_submissions.js', array(), $this->plugin_version);
680
+ wp_register_script($this->handle_prefix . '-ng-js', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js', array(), '1.5.0');
681
+ wp_register_script($this->handle_prefix . '-theme-edit-ng', $this->plugin_url . '/js/fm-theme-edit-ng.js', array(), $this->plugin_version);
682
+
683
+ if ( !$this->is_free ) {
684
+ wp_register_script('jquery.fancybox.pack', $this->plugin_url . '/js/fancybox/jquery.fancybox.pack.js', array(), '2.1.5');
685
+ }
686
+ else {
687
+ wp_register_style($this->handle_prefix . '-deactivate-css', $this->plugin_url . '/wd/assets/css/deactivate_popup.css', array(), $this->plugin_version);
688
+ wp_register_script($this->handle_prefix . '-deactivate-popup', $this->plugin_url . '/wd/assets/js/deactivate_popup.js', array(), $this->plugin_version, true );
689
+ $admin_data = wp_get_current_user();
690
+ wp_localize_script( $this->handle_prefix . '-deactivate-popup', ($this->is_free == 2 ? 'cfmWDDeactivateVars' : 'fmWDDeactivateVars'), array(
691
+ "prefix" => "fm" ,
692
+ "deactivate_class" => 'fm_deactivate_link',
693
+ "email" => $admin_data->data->user_email,
694
+ "plugin_wd_url" => "https://10web.io/plugins/wordpress-form-maker/?utm_source=form_maker&utm_medium=free_plugin",
695
+ ));
696
+ }
697
+ wp_register_style($this->handle_prefix . '-topbar', $this->plugin_url . '/css/topbar.css', array(), $this->plugin_version);
698
+ wp_register_style($this->handle_prefix . '-icons', $this->plugin_url . '/fonts/style.css', array(), '1.0.0');
699
+
700
+ wp_localize_script($localize_key_all, 'fm_ajax', array(
701
+ 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
702
+ ));
703
+ wp_localize_script($localize_key_add_fields, 'fm_ajax', array(
704
+ 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
705
+ ));
706
+ wp_localize_script($localize_key_formmaker_div, 'fm_ajax', array(
707
+ 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
708
+ ));
709
+ }
710
+
711
+ /**
712
+ * Admin ajax scripts.
713
+ */
714
+ public function register_admin_ajax_scripts() {
715
+ $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
716
+ wp_register_style($this->handle_prefix . '-tables', $this->plugin_url . '/css/form_maker_tables.css', array(), $this->plugin_version);
717
+ wp_register_style($this->handle_prefix . '-jquery-ui', $this->plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
718
+
719
+ wp_register_script($this->handle_prefix . '-shortcode' . $this->menu_postfix, $this->plugin_url . '/js/shortcode.js', array('jquery'), $this->plugin_version);
720
+ $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
721
+
722
+ wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
723
+ wp_register_script($this->handle_prefix . '-gmap_form', $this->plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
724
+
725
+ wp_localize_script($this->handle_prefix . '-shortcode' . $this->menu_postfix, 'form_maker', array(
726
+ 'insert_form' => __('You must select a form', $this->prefix),
727
+ 'update' => __('Update', $this->prefix),
728
+ ));
729
+ wp_register_style($this->handle_prefix . '-topbar', $this->plugin_url . '/css/topbar.css', array(), $this->plugin_version);
730
+ // Roboto font for submissions shortcode.
731
+ wp_register_style($this->handle_prefix . '-roboto', 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700');
732
+ }
733
+
734
+ /**
735
+ * admin-ajax actions for admin.
736
+ */
737
+ public function form_maker_ajax() {
738
+ $page = WDW_FM_Library(self::PLUGIN)->get('action');
739
+ $ajax_nonce = WDW_FM_Library(self::PLUGIN)->get('nonce');
740
+
741
+ $allowed_pages = array(
742
+ 'manage' . $this->menu_postfix,
743
+ 'manage' . $this->plugin_postfix,
744
+ 'generete_csv' . $this->plugin_postfix,
745
+ 'generete_xml' . $this->plugin_postfix,
746
+ 'formmakerwdcaptcha' . $this->plugin_postfix,
747
+ 'formmakerwdmathcaptcha' . $this->plugin_postfix,
748
+ 'product_option' . $this->plugin_postfix,
749
+ 'FormMakerEditCountryinPopup' . $this->plugin_postfix,
750
+ 'FormMakerMapEditinPopup' . $this->plugin_postfix,
751
+ 'FormMakerIpinfoinPopup' . $this->plugin_postfix,
752
+ 'show_matrix' . $this->plugin_postfix,
753
+ 'FormMakerSubmits' . $this->plugin_postfix,
754
+ 'FMShortocde' . $this->plugin_postfix,
755
+ );
756
+ if ( !$this->is_demo ) {
757
+ $allowed_pages[] = 'FormMakerSQLMapping' . $this->plugin_postfix;
758
+ $allowed_pages[] = 'select_data_from_db' . $this->plugin_postfix;
759
+ }
760
+ if ( !$this->is_free ) {
761
+ $allowed_pages[] = 'paypal_info';
762
+ $allowed_pages[] = 'checkpaypal';
763
+ }
764
+ $allowed_nonce_pages = array('checkpaypal');
765
+
766
+ if ( !in_array($page, $allowed_nonce_pages) && wp_verify_nonce($ajax_nonce , 'fm_ajax_nonce') == FALSE ) {
767
+ die(-1);
768
+ }
769
+
770
+ if ( !empty($page) && in_array($page, $allowed_pages) ) {
771
+ if ( $page != 'formmakerwdcaptcha' . $this->plugin_postfix
772
+ && $page != 'formmakerwdmathcaptcha' . $this->plugin_postfix
773
+ && $page != 'checkpaypal' ) {
774
+ if ( function_exists('current_user_can') ) {
775
+ if ( !current_user_can('manage_options') ) {
776
+ die('Access Denied');
777
+ }
778
+ }
779
+ else {
780
+ die('Access Denied');
781
+ }
782
+ }
783
+ $page = ucfirst(substr($page, 0, strlen($page) - strlen($this->plugin_postfix)));
784
+ $this->register_admin_ajax_scripts();
785
+ require_once($this->plugin_dir . '/admin/controllers/' . $page . '.php');
786
+ $controller_class = 'FMController' . $page . $this->plugin_postfix;
787
+ $controller = new $controller_class();
788
+ $controller->execute();
789
+ }
790
+ }
791
+
792
+ /**
793
+ * admin-ajax actions for site.
794
+ */
795
+ public function form_maker_ajax_frontend() {
796
+ $page = WDW_FM_Library(self::PLUGIN)->get('page');
797
+ $action = WDW_FM_Library(self::PLUGIN)->get('action');
798
+ $ajax_nonce = WDW_FM_Library(self::PLUGIN)->get('nonce');
799
+
800
+ $allowed_pages = array(
801
+ 'form_submissions',
802
+ 'form_maker',
803
+ );
804
+ $allowed_actions = array(
805
+ 'frontend_generate_xml',
806
+ 'frontend_generate_csv',
807
+ 'frontend_paypal_info',
808
+ 'frontend_show_matrix',
809
+ 'frontend_show_map',
810
+ 'get_frontend_stats',
811
+ 'fm_reload_input',
812
+ );
813
+
814
+ if ( wp_verify_nonce($ajax_nonce , 'fm_ajax_nonce') == FALSE ) {
815
+ die(-1);
816
+ }
817
+
818
+ if ( !empty($page) && in_array($page, $allowed_pages)
819
+ && !empty($action) && in_array($action, $allowed_actions) ) {
820
+ $this->register_frontend_ajax_scripts();
821
+ require_once ($this->plugin_dir . '/frontend/controllers/' . $page . '.php');
822
+ $controller_class = 'FMController' . ucfirst($page);
823
+ $controller = new $controller_class();
824
+ $controller->execute();
825
+ }
826
+ }
827
+
828
+ /**
829
+ * Javascript variables for admin.
830
+ * todo: change to array.
831
+ */
832
+ public function form_maker_admin_ajax() {
833
+ $upload_dir = wp_upload_dir();
834
+ ?>
835
+ <script>
836
+ var fm_site_url = '<?php echo site_url() .'/'; ?>';
837
+ var admin_url = '<?php echo admin_url('admin.php'); ?>';
838
+ var plugin_url = '<?php echo $this->plugin_url; ?>';
839
+ var upload_url = '<?php echo $upload_dir['baseurl']; ?>';
840
+ var nonce_fm = '<?php echo wp_create_nonce($this->nonce); ?>';
841
+ // Set shortcode popup dimensions.
842
+ function fm_set_shortcode_popup_dimensions(tbWidth, tbHeight) {
843
+ var tbWindow = jQuery('#TB_window'), H = jQuery(window).height(), W = jQuery(window).width(), w, h;
844
+ w = (tbWidth && tbWidth < W - 90) ? tbWidth : W - 40;
845
+ h = (tbHeight && tbHeight < H - 60) ? tbHeight : H - 40;
846
+ if (tbWindow.size()) {
847
+ tbWindow.width(w).height(h);
848
+ jQuery('#TB_iframeContent').width(w).height(h - 27);
849
+ tbWindow.css({'margin-left': '-' + parseInt((w / 2), 10) + 'px'});
850
+ if (typeof document.body.style.maxWidth != 'undefined') {
851
+ tbWindow.css({'top': (H - h) / 2, 'margin-top': '0'});
852
+ }
853
+ }
854
+ }
855
+ </script>
856
+ <?php
857
+ }
858
+
859
+ /**
860
+ * Form maker preview shortcode output.
861
+ *
862
+ * @return mixed|string
863
+ */
864
+ public function fm_form_preview_shortcode() {
865
+ // check is adminstrator
866
+ if ( !current_user_can('manage_options') ) {
867
+ echo __('Sorry, you are not allowed to access this page.', $this->prefix);
868
+ }
869
+ else {
870
+ $id = WDW_FM_Library(self::PLUGIN)->get('wdform_id', 0);
871
+ $display_options = WDW_FM_Library(self::PLUGIN)->display_options( $id );
872
+ $type = $display_options->type;
873
+ $attrs = array( 'id' => $id );
874
+ if ($type == "embedded") {
875
+ ob_start();
876
+ $this->FM_front_end_main($attrs, $type); // embedded popover topbar scrollbox
877
+ return str_replace(array("\r\n", "\n", "\r"), '', ob_get_clean());
878
+ }
879
+ }
880
+ }
881
+
882
+ /**
883
+ * Form maker shortcode output.
884
+ *
885
+ * @param $attrs
886
+ * @return mixed|string
887
+ */
888
+ public function fm_shortcode($attrs) {
889
+ ob_start();
890
+ $this->FM_front_end_main($attrs, 'embedded');
891
+
892
+ return str_replace(array("\r\n", "\n", "\r"), '', ob_get_clean());
893
+ }
894
+
895
+ /**
896
+ * Form maker output.
897
+ *
898
+ * @param array $params
899
+ * @param string $type
900
+ */
901
+ public function FM_front_end_main($params = array(), $type = '') {
902
+ if ( !isset($params['type']) ) {
903
+ $form_id = isset($params['id']) ? (int) $params['id'] : 0;
904
+ if ($this->is_free == 2) {
905
+ wd_contact_form_maker($form_id, $type);
906
+ }
907
+ else {
908
+ wd_form_maker( $form_id, $type );
909
+ }
910
+ }
911
+ else if (!$this->is_free) {
912
+ $shortcode_deafults = array(
913
+ 'id' => 0,
914
+ 'startdate' => '',
915
+ 'enddate' => '',
916
+ 'submit_date' => '',
917
+ 'submitter_ip' => '',
918
+ 'username' => '',
919
+ 'useremail' => '',
920
+ 'form_fields' => '1',
921
+ 'show' => '1,1,1,1,1,1,1,1,1,1',
922
+ );
923
+ shortcode_atts($shortcode_deafults, $params);
924
+
925
+ require_once($this->plugin_dir . '/frontend/controllers/form_submissions.php');
926
+ $controller = new FMControllerForm_submissions();
927
+
928
+ $submissions = $controller->execute($params);
929
+
930
+ echo $submissions;
931
+ }
932
+ return;
933
+ }
934
+
935
+ /**
936
+ * Email verification output.
937
+ */
938
+ public function fm_email_verification_shortcode() {
939
+ require_once($this->plugin_dir . '/frontend/controllers/verify_email.php');
940
+ $controller_class = 'FMControllerVerify_email' . $this->plugin_postfix;
941
+ $controller = new $controller_class();
942
+ $controller->execute();
943
+ }
944
+
945
+ /**
946
+ * Register email verification custom post type.
947
+ */
948
+ public function register_fmemailverification_cpt() {
949
+ $args = array(
950
+ 'label' => 'FM Mail Verification',
951
+ 'public' => true,
952
+ 'exclude_from_search' => true,
953
+ 'show_in_menu' => false,
954
+ 'show_in_nav_menus' => false,
955
+ 'create_posts' => 'do_not_allow',
956
+ 'capabilities' => array(
957
+ 'create_posts' => FALSE,
958
+ 'edit_post' => 'edit_posts',
959
+ 'read_post' => 'edit_posts',
960
+ 'delete_posts' => FALSE,
961
+ )
962
+ );
963
+
964
+ register_post_type(($this->is_free == 2 ? 'cfmemailverification' : 'fmemailverification'), $args);
965
+ }
966
+
967
+ /**
968
+ * Register form preview custom post type.
969
+ */
970
+ public function register_form_preview_cpt() {
971
+ $args = array(
972
+ 'label' => 'FM Preview',
973
+ 'public' => true,
974
+ 'exclude_from_search' => true,
975
+ 'show_in_menu' => false,
976
+ 'show_in_nav_menus' => false,
977
+ 'create_posts' => 'do_not_allow',
978
+ 'capabilities' => array(
979
+ 'create_posts' => FALSE,
980
+ 'edit_post' => 'edit_posts',
981
+ 'read_post' => 'edit_posts',
982
+ 'delete_posts' => FALSE,
983
+ )
984
+ );
985
+
986
+ register_post_type('form-maker' . $this->plugin_postfix, $args);
987
+ }
988
+
989
+ /**
990
+ * Frontend scripts/styles.
991
+ */
992
+ public function register_frontend_scripts() {
993
+ $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
994
+ $front_plugin_url = $this->front_urls['plugin_url'];
995
+
996
+ $required_scripts = array(
997
+ 'jquery',
998
+ 'jquery-ui-widget',
999
+ 'jquery-effects-shake',
1000
+ );
1001
+ $required_styles = array(
1002
+ WDFMInstance(self::PLUGIN)->handle_prefix . '-googlefonts'
1003
+ );
1004
+ if ( $fm_settings['fm_developer_mode'] ) {
1005
+ array_push($required_styles, $this->handle_prefix . '-jquery-ui', $this->handle_prefix . '-animate');
1006
+ }
1007
+
1008
+ wp_register_style($this->handle_prefix . '-jquery-ui', $front_plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
1009
+ wp_register_style($this->handle_prefix . '-animate', $front_plugin_url . '/css/fm-animate.css', array(), $this->plugin_version);
1010
+
1011
+ $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
1012
+ wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
1013
+
1014
+ wp_register_script($this->handle_prefix . '-phone_field', $front_plugin_url . '/js/intlTelInput.js', array(), $this->plugin_version);
1015
+ wp_register_style($this->handle_prefix . '-phone_field_css', $front_plugin_url . '/css/intlTelInput.css', array(), $this->plugin_version);
1016
+
1017
+ wp_register_script($this->handle_prefix . '-gmap_form', $front_plugin_url . '/js/if_gmap_front_end.js', array('google-maps'), $this->plugin_version);
1018
+
1019
+ $google_fonts = WDW_FM_Library(self::PLUGIN)->get_google_fonts();
1020
+ $fonts = implode("|", str_replace(' ', '+', $google_fonts));
1021
+ wp_register_style($this->handle_prefix . '-googlefonts', 'https://fonts.googleapis.com/css?family=' . $fonts . '&subset=greek,latin,greek-ext,vietnamese,cyrillic-ext,latin-ext,cyrillic', null, null);
1022
+
1023
+ wp_register_script($this->handle_prefix . '-g-recaptcha', 'https://www.google.com/recaptcha/api.js?onload=fmRecaptchaInit&render=explicit');
1024
+
1025
+ // Register admin styles to use in frontend submissions.
1026
+ wp_register_script('gmap_form_back', $front_plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
1027
+
1028
+ if ( !$this->is_free ) {
1029
+ wp_register_script($this->handle_prefix . '-file-upload', $front_plugin_url . '/js/file-upload.js', array(), $this->plugin_version);
1030
+ wp_register_style($this->handle_prefix . '-submissions_css', $front_plugin_url . '/css/style_submissions.css', array(), $this->plugin_version);
1031
+
1032
+ if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() && $fm_settings['fm_developer_mode'] ) {
1033
+ array_push($required_styles, $this->handle_prefix . '-submissions_css');
1034
+ array_push($required_scripts, $this->handle_prefix . '-file-upload', 'gmap_form_back');
1035
+ }
1036
+ }
1037
+
1038
+ if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() ) {
1039
+ array_push($required_scripts,
1040
+ 'jquery-ui-spinner',
1041
+ 'jquery-ui-datepicker',
1042
+ 'jquery-ui-slider'
1043
+ );
1044
+
1045
+ if ( $fm_settings['fm_developer_mode'] ) {
1046
+ array_push($required_styles, $this->handle_prefix . '-phone_field', WDFMInstance(self::PLUGIN)->handle_prefix . '-gmap_form', WDFMInstance(self::PLUGIN)->handle_prefix . '-phone_field_css');
1047
+ }
1048
+ }
1049
+
1050
+ $style_file = '/css/styles.min.css';
1051
+ $script_file = '/js/scripts.min.js';
1052
+ if ( $fm_settings['fm_developer_mode'] ) {
1053
+ $style_file = '/css/form_maker_frontend.css';
1054
+ $script_file = '/js/main_div_front_end.js';
1055
+ }
1056
+
1057
+ wp_register_style($this->handle_prefix . '-frontend', $front_plugin_url . $style_file, $required_styles, $this->plugin_version);
1058
+ wp_register_script($this->handle_prefix . '-frontend', $front_plugin_url . $script_file, $required_scripts, $this->plugin_version);
1059
+
1060
+ if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() ) {
1061
+ wp_enqueue_style(WDFMInstance(self::PLUGIN)->handle_prefix . '-frontend');
1062
+ wp_enqueue_script(WDFMInstance(self::PLUGIN)->handle_prefix . '-frontend');
1063
+ }
1064
+
1065
+ wp_localize_script($this->handle_prefix . '-frontend', 'fm_objectL10n', array(
1066
+ 'states' => WDW_FM_Library(self::PLUGIN)->get_states(),
1067
+ 'provinces' => WDW_FM_Library(self::PLUGIN)->get_provinces_canada(),
1068
+ 'plugin_url' => $front_plugin_url,
1069
+ 'form_maker_admin_ajax' => admin_url('admin-ajax.php'),
1070
+ 'fm_file_type_error' => addslashes(__('Can not upload this type of file', $this->prefix)),
1071
+ 'fm_field_is_required' => addslashes(__('Field is required', $this->prefix)),
1072
+ 'fm_min_max_check_1' => addslashes((__('The ', $this->prefix))),
1073
+ 'fm_min_max_check_2' => addslashes((__(' value must be between ', $this->prefix))),
1074
+ 'fm_spinner_check' => addslashes((__('Value must be between ', $this->prefix))),
1075
+ 'fm_clear_data' => addslashes((__('Are you sure you want to clear saved data?', $this->prefix))),
1076
+ 'fm_grading_text' => addslashes(__('Your score should be less than', $this->prefix)),
1077
+ 'time_validation' => addslashes(__('This is not a valid time value.', $this->prefix)),
1078
+ 'number_validation' => addslashes(__('This is not a valid number value.', $this->prefix)),
1079
+ 'date_validation' => addslashes(__('This is not a valid date value.', $this->prefix)),
1080
+ 'year_validation' => addslashes(sprintf(__('The year must be between %s and %s', $this->prefix), '%%start%%', '%%end%%')),
1081
+ ));
1082
+
1083
+ wp_localize_script($this->handle_prefix . '-frontend', 'fm_ajax', array(
1084
+ 'ajaxnonce' => wp_create_nonce('fm_ajax_nonce'),
1085
+ ));
1086
+ }
1087
+
1088
+ /**
1089
+ * Frontend ajax scripts.
1090
+ */
1091
+ public function register_frontend_ajax_scripts() {
1092
+ $fm_settings = WDFMInstance(self::PLUGIN)->fm_settings;
1093
+ $front_plugin_url = $this->front_urls['plugin_url'];
1094
+ $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
1095
+ wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
1096
+ wp_register_script($this->handle_prefix . '-gmap_form_back', $front_plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
1097
+ }
1098
+
1099
+ /*
1100
+ * Global activate.
1101
+ *
1102
+ * @param $networkwide
1103
+ */
1104
+ public function global_activate($networkwide) {
1105
+ if ( function_exists('is_multisite') && is_multisite() ) {
1106
+ // Check if it is a network activation - if so, run the activation function for each blog id.
1107
+ if ( $networkwide ) {
1108
+ global $wpdb;
1109
+ // Get all blog ids.
1110
+ $blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
1111
+ foreach ( $blogids as $blog_id ) {
1112
+ switch_to_blog($blog_id);
1113
+ $this->form_maker_on_activate();
1114
+ restore_current_blog();
1115
+ }
1116
+
1117
+ return;
1118
+ }
1119
+ }
1120
+ $this->form_maker_on_activate();
1121
+ }
1122
+
1123
+ public function new_blog_added( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
1124
+ if ( is_plugin_active_for_network( $this->main_file ) ) {
1125
+ switch_to_blog($blog_id);
1126
+ $this->form_maker_on_activate();
1127
+ restore_current_blog();
1128
+ }
1129
+ }
1130
+
1131
+ /**
1132
+ * Activate plugin.
1133
+ */
1134
+ public function form_maker_on_activate() {
1135
+ $this->form_maker_activate();
1136
+ if ($this->is_free == 2) {
1137
+ WDCFMInsert::install_demo_forms();
1138
+ }
1139
+ else {
1140
+ WDFMInsert::install_demo_forms();
1141
+ }
1142
+ $this->init();
1143
+ flush_rewrite_rules();
1144
+ }
1145
+
1146
+ /**
1147
+ * Activate plugin.
1148
+ */
1149
+ public function form_maker_activate() {
1150
+ global $wpdb;
1151
+ if (!$this->is_free) {
1152
+ deactivate_plugins("contact-form-maker/contact-form-maker.php");
1153
+ delete_transient('fm_update_check');
1154
+ }
1155
+ $version = get_option("wd_form_maker_version");
1156
+ $new_version = $this->db_version;
1157
+ $option_key = ($this->is_free == 2 ? 'fmc_settings' : 'fm_settings');
1158
+ require_once $this->plugin_dir . "/form_maker_insert.php";
1159
+ if (!$version) {
1160
+ if ($wpdb->get_var("SHOW TABLES LIKE '" . $wpdb->prefix . "formmaker'") == $wpdb->prefix . "formmaker") {
1161
+ deactivate_plugins($this->main_file);
1162
+ wp_die(__("Oops! Seems like you installed the update over a quite old version of Form Maker. Unfortunately, this version is deprecated.<br />Please contact 10Web support team at support@10web.io. We will take care of this issue as soon as possible.", $this->prefix));
1163
+ }
1164
+ else {
1165
+ add_option("wd_form_maker_version", $new_version, '', 'no');
1166
+ if ($this->is_free == 2) {
1167
+ WDCFMInsert::form_maker_insert();
1168
+ }
1169
+ else {
1170
+ WDFMInsert::form_maker_insert();
1171
+ }
1172
+ $email_verification_post = array(
1173
+ 'post_title' => 'Email Verification',
1174
+ 'post_content' => '[email_verification]',
1175
+ 'post_status' => 'publish',
1176
+ 'post_author' => 1,
1177
+ 'post_type' => ($this->is_free == 2 ? 'cfmemailverification' : 'fmemailverification'),
1178
+ );
1179
+ $mail_verification_post_id = wp_insert_post($email_verification_post);
1180
+ add_option($option_key, array('public_key' => '', 'private_key' => '', 'csv_delimiter' => ',', 'map_key' => '', 'ajax_export_per_page' => 1000));
1181
+ $wpdb->update($wpdb->prefix . "formmaker", array(
1182
+ 'mail_verification_post_id' => $mail_verification_post_id,
1183
+ ), array('id' => 1), array(
1184
+ '%d',
1185
+ ), array('%d'));
1186
+ }
1187
+ }
1188
+ elseif (version_compare($version, $new_version, '<')) {
1189
+ $version = substr_replace($version, '1.', 0, 2);
1190
+ require_once $this->plugin_dir . "/form_maker_update.php";
1191
+ $mail_verification_post_ids = $wpdb->get_results($wpdb->prepare('SELECT mail_verification_post_id FROM ' . $wpdb->prefix . 'formmaker WHERE mail_verification_post_id!="%d"', 0));
1192
+ if ($mail_verification_post_ids) {
1193
+ foreach ($mail_verification_post_ids as $mail_verification_post_id) {
1194
+ $update_email_ver_post_type = array(
1195
+ 'ID' => (int)$mail_verification_post_id->mail_verification_post_id,
1196
+ 'post_type' => ($this->is_free == 2 ? 'cfmemailverification' : 'fmemailverification'),
1197
+ );
1198
+ wp_update_post($update_email_ver_post_type);
1199
+ }
1200
+ }
1201
+ if ($this->is_free == 2) {
1202
+ WDCFMUpdate::form_maker_update($version);
1203
+ }
1204
+ else {
1205
+ WDFMUpdate::form_maker_update($version);
1206
+ }
1207
+ update_option("wd_form_maker_version", $new_version);
1208
+
1209
+ if ( FALSE === $fm_settings = get_option($option_key) ) {
1210
+ $recaptcha_keys = $wpdb->get_row('SELECT `public_key`, `private_key` FROM ' . $wpdb->prefix . 'formmaker WHERE public_key!="" and private_key!=""', ARRAY_A);
1211
+ $public_key = isset($recaptcha_keys['public_key']) ? $recaptcha_keys['public_key'] : '';
1212
+ $private_key = isset($recaptcha_keys['private_key']) ? $recaptcha_keys['private_key'] : '';
1213
+ add_option($option_key, array('public_key' => $public_key, 'private_key' => $private_key, 'csv_delimiter' => ',', 'map_key' => '', 'fm_advanced_layout' => 0, 'fm_enable_wp_editor' => 1, 'fm_developer_mode' => 0, 'ajax_export_per_page' => 1000));
1214
+ }
1215
+ elseif ( !isset($fm_settings['fm_enable_wp_editor']) ) {
1216
+ $fm_settings['fm_enable_wp_editor'] = 1;
1217
+ update_option( $option_key, $fm_settings );
1218
+ }
1219
+ if ( !isset($fm_settings['fm_developer_mode']) ) {
1220
+ $fm_settings['fm_developer_mode'] = 0;
1221
+ update_option( $option_key, $fm_settings );
1222
+ }
1223
+ }
1224
+ }
1225
+
1226
+ /**
1227
+ * Form maker overview.
1228
+ */
1229
+ public function fm_overview() {
1230
+ if (is_admin() && !isset($_REQUEST['ajax'])) {
1231
+ if (!class_exists("TenWebLib")) {
1232
+ $plugin_dir = apply_filters('tenweb_free_users_lib_path', array('version' => '1.1.1', 'path' => $this->plugin_dir));
1233
+ require_once($plugin_dir['path'] . '/wd/start.php');
1234
+ }
1235
+ global $fm_options;
1236
+ $fm_options = array(
1237
+ "prefix" => ($this->is_free == 2 ? 'cfm' : 'fm'),
1238
+ "wd_plugin_id" => ($this->is_free == 2 ? 183 : 31),
1239
+ "plugin_id" => ($this->is_free == 2 ? 95 : 95),
1240
+ "plugin_title" => ($this->is_free == 2 ? 'Contact Form Maker' : 'Form Maker'),
1241
+ "plugin_wordpress_slug" => ($this->is_free == 2 ? 'contact-form-maker' : 'form-maker'),
1242
+ "plugin_dir" => $this->plugin_dir,
1243
+ "plugin_main_file" => __FILE__,
1244
+ "description" => ($this->is_free == 2 ? __('WordPress Contact Form Maker is a simple contact form builder, which allows the user with almost no knowledge of programming to create and edit different type of contact forms.', $this->prefix) : __('Form Maker plugin is a modern and advanced tool for easy and fast creating of a WordPress Form. The backend interface is intuitive and user friendly which allows users far from scripting and programming to create WordPress Forms.', $this->prefix)),
1245
+ "plugin_features" => array(
1246
+ 0 => array(
1247
+ "title" => __("Easy to Use", $this->prefix),
1248
+ "description" => __("This responsive form maker plugin is one of the most easy-to-use form builder solutions available on the market. Simple, yet powerful plugin allows you to quickly and easily build any complex forms.", $this->prefix),
1249
+ ),
1250
+ 1 => array(
1251
+ "title" => __("Customizable Fields", $this->prefix),
1252
+ "description" => __("All the fields of Form Maker plugin are highly customizable, which allows you to change almost every detail in the form and make it look exactly like you want it to be.", $this->prefix),
1253
+ ),
1254
+ 2 => array(
1255
+ "title" => __("Submissions", $this->prefix),
1256
+ "description" => __("You can view the submissions for each form you have. The plugin allows to view submissions statistics, filter submission data and export in csv or xml formats.", $this->prefix),
1257
+ ),
1258
+ 3 => array(
1259
+ "title" => __("Multi-Page Forms", $this->prefix),
1260
+ "description" => __("With the form builder plugin you can create muilti-page forms. Simply use the page break field to separate the pages in your forms.", $this->prefix),
1261
+ ),
1262
+ 4 => array(
1263
+ "title" => __("Themes", $this->prefix),
1264
+ "description" => __("The WordPress Form Maker plugin comes with a wide range of customizable themes. You can choose from a list of existing themes or simply create the one that better fits your brand and website.", $this->prefix),
1265
+ )
1266
+ ),
1267
+ "user_guide" => array(
1268
+ 0 => array(
1269
+ "main_title" => __("Installing", $this->prefix),
1270
+ "url" => "https://help.10web.io/hc/en-us/articles/360015435831-Introducing-Form-Maker-Plugin",
1271
+ "titles" => array()
1272
+ ),
1273
+ 1 => array(
1274
+ "main_title" => __("Creating a new Form", $this->prefix),
1275
+ "url" => "https://help.10web.io/hc/en-us/articles/360015244232-Creating-a-Form-on-WordPress",
1276
+ "titles" => array()
1277
+ ),
1278
+ 2 => array(
1279
+ "main_title" => __("Configuring Form Options", $this->prefix),
1280
+ "url" => "https://help.10web.io/hc/en-us/articles/360015862812-Settings-General-Options",
1281
+ "titles" => array()
1282
+ ),
1283
+ 3 => array(
1284
+ "main_title" => __("Description of The Form Fields", $this->prefix),
1285
+ "url" => "https://help.10web.io/hc/en-us/articles/360016081951-Form-Fields-Basic",
1286
+ "titles" => array(
1287
+ array(
1288
+ "title" => __("Selecting Options from Database", $this->prefix),
1289
+ "url" => "https://help.10web.io/hc/en-us/articles/360015862632-Selecting-Options-from-Database",
1290
+ ),
1291
+ )
1292
+ ),
1293
+ 4 => array(
1294
+ "main_title" => __("Publishing the Created Form", $this->prefix),
1295
+ "url" => "https://help.10web.io/hc/en-us/articles/360016083211-Additional-Publishing-Options",
1296
+ "titles" => array()
1297
+ ),
1298
+ 5 => array(
1299
+ "main_title" => __("Blocking IPs", $this->prefix),
1300
+ "url" => "https://help.10web.io/hc/en-us/articles/360015863292-Managing-Form-Submissions",
1301
+ "titles" => array()
1302
+ ),
1303
+ 6 => array(
1304
+ "main_title" => __("Managing Submissions", $this->prefix),
1305
+ "url" => "https://help.10web.io/hc/en-us/articles/360015863292-Managing-Form-Submissions",
1306
+ "titles" => array()
1307
+ ),
1308
+ 7 => array(
1309
+ "main_title" => __("Publishing Submissions", $this->prefix),
1310
+ "url" => "https://help.10web.io/hc/en-us/articles/360016083211-Additional-Publishing-Options",
1311
+ "titles" => array()
1312
+ ),
1313
+ ),
1314
+ "video_youtube_id" => "vxxKfhxIS44",
1315
+ "plugin_wd_url" => "https://10web.io/plugins/wordpress-form-maker/?utm_source=form_maker&utm_medium=free_plugin",
1316
+ "plugin_wd_demo_link" => "https://demo.10web.io/form-maker",
1317
+ "plugin_wd_addons_link" => "https://10web.io/plugins/wordpress-form-maker/#plugin_extensions",
1318
+ "plugin_wd_docs_link" => "https://help.10web.io/hc/en-us/sections/360002133951-Form-Maker-Documentation/",
1319
+ "after_subscribe" => admin_url('admin.php?page=manage_' . ($this->is_free == 2 ? 'cfm' : 'fm')), // this can be plagin overview page or set up page
1320
+ "plugin_wizard_link" => '',
1321
+ "plugin_menu_title" => $this->nicename,
1322
+ "plugin_menu_icon" => $this->plugin_url . '/images/FormMakerLogo-16.png',
1323
+ "deactivate" => ($this->is_free ? true : false),
1324
+ "subscribe" => ($this->is_free ? true : false),
1325
+ "custom_post" => 'manage' . $this->menu_postfix,
1326
+ "menu_position" => null,
1327
+ "display_overview" => false,
1328
+ );
1329
+
1330
+ ten_web_lib_init($fm_options);
1331
+ }
1332
+ }
1333
+
1334
+ /**
1335
+ * Add media button to Wp editor.
1336
+ *
1337
+ * @param $context
1338
+ *
1339
+ * @return string
1340
+ */
1341
+ function media_button($context) {
1342
+ $fm_nonce = wp_create_nonce('fm_ajax_nonce');
1343
+ ob_start();
1344
+ $url = add_query_arg(array('action' => 'FMShortocde' . $this->plugin_postfix, 'task' => 'forms', 'nonce' => $fm_nonce, 'TB_iframe' => '1'), admin_url('admin-ajax.php'));
1345
+ ?>
1346
+ <a onclick="tb_click.call(this); fm_set_shortcode_popup_dimensions(400, 140); return false;" href="<?php echo $url; ?>" class="button" title="<?php _e('Insert Form', $this->prefix); ?>">
1347
+ <span class="wp-media-buttons-icon" style="background: url('<?php echo $this->plugin_url; ?>/images/fm-media-form-button.png') no-repeat scroll left top rgba(0, 0, 0, 0);"></span>
1348
+ <?php _e('Add Form', $this->prefix); ?>
1349
+ </a>
1350
+ <?php
1351
+ $url = add_query_arg(array('action' => 'FMShortocde' . $this->plugin_postfix, 'task' => 'submissions', 'nonce' => $fm_nonce, 'TB_iframe' => '1'), admin_url('admin-ajax.php'));
1352
+ ?>
1353
+ <a onclick="tb_click.call(this); fm_set_shortcode_popup_dimensions(520, 570); return false;" href="<?php echo $url; ?>" class="button" title="<?php _e('Insert submissions', $this->prefix); ?>">
1354
+ <span class="wp-media-buttons-icon" style="background: url(<?php echo $this->plugin_url; ?>/images/fm-media-submissions-button.png) no-repeat scroll left top rgba(0, 0, 0, 0);"></span>
1355
+ <?php _e('Add Submissions', $this->prefix); ?>
1356
+ </a>
1357
+ <?php
1358
+ $context .= ob_get_clean();
1359
+
1360
+ return $context;
1361
+ }
1362
+
1363
+
1364
+ /**
1365
+ * Check extensions version compatibility with FM.
1366
+ *
1367
+ */
1368
+ function fm_check_addons_compatibility() {
1369
+ // Extension last version(version which is compatible with current version of form maker).
1370
+ $add_ons = array(
1371
+ 'form-maker-calculator' => array('version' => '1.1.2', 'file' => 'fm_calculator.php'),
1372
+ 'form-maker-conditional-emails' => array('version' => '1.1.6', 'file' => 'fm_conditional_emails.php'),
1373
+ 'form-maker-dropbox-integration' => array('version' => '1.2.5', 'file' => 'fm_dropbox_integration.php'),
1374
+ 'form-maker-export-import' => array('version' => '2.0.7', 'file' => 'fm_exp_imp.php'),
1375
+ 'form-maker-gdrive-integration' => array('version' => '1.1.2', 'file' => 'fm_gdrive_integration.php'),
1376
+ 'form-maker-mailchimp' => array('version' => '1.1.6', 'file' => 'fm_mailchimp.php'),
1377
+ 'form-maker-pdf-integration' => array('version' => '1.1.7', 'file' => 'fm_pdf_integration.php'),
1378
+ 'form-maker-post-generation' => array('version' => '1.1.5', 'file' => 'fm_post_generation.php'),
1379
+ 'form-maker-pushover' => array('version' => '1.1.4', 'file' => 'fm_pushover.php'),
1380
+ 'form-maker-reg' => array('version' => '1.2.5', 'file' => 'fm_reg.php'),
1381
+ 'form-maker-save-progress' => array('version' => '1.1.6', 'file' => 'fm_save.php'),
1382
+ 'form-maker-stripe' => array('version' => '1.1.6', 'file' => 'fm_stripe.php'),
1383
+ );
1384
+
1385
+ $add_ons_notice = array();
1386
+ include_once(ABSPATH . 'wp-admin/includes/plugin.php');
1387
+
1388
+ foreach ( $add_ons as $add_on_key => $add_on_value ) {
1389
+ $addon_path = plugin_dir_path(dirname(__FILE__)) . $add_on_key . '/' . $add_on_value['file'];
1390
+ if ( is_plugin_active($add_on_key . '/' . $add_on_value['file']) ) {
1391
+ $addon = get_plugin_data($addon_path); // array
1392
+ if ( version_compare($addon['Version'], $add_on_value['version'], '<') ) {
1393
+ // deactivate_plugins($addon_path);
1394
+ array_push($add_ons_notice, $addon['Name']);
1395
+ }
1396
+ }
1397
+ }
1398
+
1399
+ if ( !empty($add_ons_notice) ) {
1400
+ $this->fm_addons_compatibility_notice($add_ons_notice);
1401
+ }
1402
+ }
1403
+
1404
+ /**
1405
+ * Incompatibility message.
1406
+ *
1407
+ * @param $add_ons_notice
1408
+ */
1409
+ function fm_addons_compatibility_notice($add_ons_notice) {
1410
+ $addon_names = implode($add_ons_notice, ', ');
1411
+ $count = count($add_ons_notice);
1412
+ $single = __('The current version of %s extension is not compatible with Form Maker. Some functions may not work correctly. Please update the extension to fully use its features.', $this->prefix);
1413
+ $plural = __('The current version of %s extensions are not compatible with Form Maker. Some functions may not work correctly. Please update the extensions to fully use its features.', $this->prefix);
1414
+ echo '<div class="error"><p>' . sprintf( _n($single, $plural, $count, $this->prefix), $addon_names ) .'</p></div>';
1415
+ }
1416
+
1417
+ public function add_query_vars_seo($vars) {
1418
+ $vars[] = 'form_id';
1419
+ return $vars;
1420
+ }
1421
+
1422
+ /**
1423
+ * Prevent adding shortcode conflict with some builders.
1424
+ */
1425
+ private function before_shortcode_add_builder_editor() {
1426
+ if ( defined('ELEMENTOR_VERSION') ) {
1427
+ add_action('elementor/editor/before_enqueue_scripts', array( $this, 'form_maker_admin_ajax' ));
1428
+ }
1429
+ if ( class_exists('FLBuilder') ) {
1430
+ add_action('wp_enqueue_scripts', array( $this, 'form_maker_admin_ajax' ));
1431
+ }
1432
+ }
1433
+ }
1434
+
1435
+ /**
1436
+ * Main instance of WDFM.
1437
+ *
1438
+ * @return WDFM The main instance to prevent the need to use globals.
1439
+ */
1440
+ if (!function_exists('WDFMInstance')) {
1441
+ function WDFMInstance( $version ) {
1442
+ if ( $version == 2 ) {
1443
+ return WDCFM::instance();
1444
+ }
1445
+ return WDFM::instance();
1446
+ }
1447
+ }
1448
+
1449
+ WDFMInstance(1);
1450
+
1451
+ if (!function_exists('WDW_FM_Library')) {
1452
+ function WDW_FM_Library( $version = 1 ) {
1453
+ if ( $version == 2 ) {
1454
+ return WDW_FMC_Library::instance();
1455
+ }
1456
+ return WDW_FM_Library::instance();
1457
+ }
1458
+ }
1459
+
1460
+ /**
1461
+ * Form maker output.
1462
+ *
1463
+ * @param $id
1464
+ * @param string $type
1465
+ */
1466
+ function wd_form_maker($id, $type = 'embedded') {
1467
+ require_once (WDFMInstance(1)->plugin_dir . '/frontend/controllers/form_maker.php');
1468
+ $controller = new FMControllerForm_maker();
1469
+ $form = $controller->execute($id, $type);
1470
+ echo $form;
1471
+ }
1472
+
1473
+ function fm_add_plugin_meta_links($meta_fields, $file) {
1474
+ if ( plugin_basename(__FILE__) == $file ) {
1475
+ $plugin_url = "https://wordpress.org/support/plugin/form-maker";
1476
+ $prefix = WDFMInstance(1)->prefix;
1477
+ $meta_fields[] = "<a href='" . $plugin_url . "' target='_blank'>" . __('Support Forum', $prefix) . "</a>";
1478
+ $meta_fields[] = "<a href='" . $plugin_url . "/reviews#new-post' target='_blank' title='" . __('Rate', $prefix) . "'>
1479
+ <i class='wdi-rate-stars'>"
1480
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1481
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1482
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1483
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1484
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1485
+ . "</i></a>";
1486
+
1487
+ $stars_color = "#ffb900";
1488
+
1489
+ echo "<style>"
1490
+ . ".wdi-rate-stars{display:inline-block;color:" . $stars_color . ";position:relative;top:3px;}"
1491
+ . ".wdi-rate-stars svg{fill:" . $stars_color . ";}"
1492
+ . ".wdi-rate-stars svg:hover{fill:" . $stars_color . "}"
1493
+ . ".wdi-rate-stars svg:hover ~ svg{fill:none;}"
1494
+ . "</style>";
1495
+ }
1496
+
1497
+ return $meta_fields;
1498
+ }
1499
+
1500
+ if ( WDFMInstance(1)->is_free ) {
1501
+ add_filter("plugin_row_meta", 'fm_add_plugin_meta_links', 10, 2);
1502
+ }
1503
+
1504
+ /**
1505
+ * Show 10Web manager plugin install or activate banner.
1506
+ *
1507
+ * @return string
1508
+ */
1509
+ function wdfm_tenweb_install_notice() {
1510
+ if ( ( !isset($_GET['page']) || strpos(esc_html($_GET['page']), '_fm') === FALSE ) ||
1511
+ ( isset($_GET['task']) && !strpos(esc_html($_GET['task']), 'edit') === TRUE && !(strpos(esc_html($_GET['task']), 'display') > -1))) {
1512
+ return '';
1513
+ }
1514
+
1515
+ // Remove old notice.
1516
+ if ( get_option('tenweb_notice_status') !== FALSE ) {
1517
+ update_option('tenweb_notice_status', '1', 'no');
1518
+ }
1519
+
1520
+ $meta_value = get_option('tenweb_notice_status');
1521
+ if ( $meta_value === '' || $meta_value === FALSE ) {
1522
+ ob_start();
1523
+ $prefix = WDFMInstance(1)->prefix;
1524
+ $url = WDFMInstance(1)->plugin_url;
1525
+ $dismiss_url = add_query_arg(array( 'action' => 'wd_tenweb_dismiss' ), admin_url('admin-ajax.php'));
1526
+ $verify_url = add_query_arg( array ('action' => 'fm_tenweb_status'), admin_url('admin-ajax.php'));
1527
+ ?>
1528
+ <style>
1529
+ .hide {
1530
+ display: none !important;
1531
+ }
1532
+ #verifyUrl {
1533
+ display: none
1534
+ }
1535
+ #loading {
1536
+ position: absolute;
1537
+ right: 20px;
1538
+ top: 50%;
1539
+ transform: translateY(-50%);
1540
+ margin: 0px;
1541
+ background: url("<?php echo $url . '/images/spinner.gif'; ?>") no-repeat;
1542
+ background-size: 20px 20px;
1543
+ filter: alpha(opacity=70);
1544
+ }
1545
+ #wd_tenweb_logo_notice {
1546
+ height: 32px;
1547
+ float: left;
1548
+ }
1549
+ .error_install, .error_activate {
1550
+ color: red;
1551
+ font-size: 10px;
1552
+ }
1553
+ /* -------------------Version 2 styles------------------ */
1554
+ #wpbody-content #v2_tenweb_notice_cont {
1555
+ display: none;
1556
+ flex-wrap: wrap;
1557
+ background: #fff;
1558
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
1559
+ position: relative;
1560
+ margin-left: 0px;
1561
+ padding: 5px 0;
1562
+ overflow: hidden;
1563
+ border-left: 4px solid #0073AA;
1564
+ font-family: Open Sans, sans-serif;
1565
+ height: 40px;
1566
+ min-height: 40px;
1567
+ box-sizing: initial;
1568
+ }
1569
+ .v2_logo {
1570
+ display: flex;
1571
+ flex-direction: column;
1572
+ justify-content: center;
1573
+ height: inherit;
1574
+ }
1575
+
1576
+ #v2_tenweb_notice_cont {
1577
+ height: 50px;
1578
+ padding: 0px;
1579
+ }
1580
+
1581
+ .v2_content {
1582
+ flex-grow: 1;
1583
+ height: inherit;
1584
+ margin-left: 34px;
1585
+ }
1586
+ .v2_content p{
1587
+ margin: 0px;
1588
+ padding: 0px;
1589
+ }
1590
+ .v2_content p > span{
1591
+ font-size: 16px;
1592
+ color: #333B46;
1593
+ font-weight: 600;
1594
+ line-height: 40px;
1595
+ margin: 0;
1596
+ }
1597
+ #wd_tenweb_logo_notice {
1598
+ margin-left: 35px;
1599
+ height: 30px;
1600
+ line-height: 100%;
1601
+ }
1602
+
1603
+ .v2_button {
1604
+ display: flex;
1605
+ margin-right: 30px;
1606
+ flex-direction: column;
1607
+ justify-content: center;
1608
+ }
1609
+
1610
+ .v2_button #install_now, #activate_now {
1611
+ width: 112px;
1612
+ height: 32px;
1613
+ line-height: 30px;
1614
+ font-size: 14px;
1615
+ text-align: center;
1616
+ padding: 0;
1617
+ }
1618
+
1619
+ #v2_tenweb_notice_cont .wd_tenweb_notice_dissmiss.notice-dismiss {
1620
+ top: 3px;
1621
+ right: 3px;
1622
+ padding: 0px;
1623
+ }
1624
+
1625
+ .v2_button .button {
1626
+ position: relative;
1627
+ }
1628
+
1629
+ .v2_button .button #loading {
1630
+ position: absolute;
1631
+ right: 10px;
1632
+ top: 50%;
1633
+ transform: translateY(-50%);
1634
+ margin: 0px;
1635
+ background-size: 12px 12px;
1636
+ filter: alpha(opacity=70);
1637
+ width: 12px;
1638
+ height: 12px;
1639
+ }
1640
+
1641
+ @media only screen and (max-width: 1200px) and (min-width: 821px) {
1642
+ #wpbody-content #v2_tenweb_notice_cont {
1643
+ height: 50px;
1644
+ min-height: 50px;
1645
+ }
1646
+
1647
+ #v2_tenweb_notice_cont {
1648
+ height: 60px;
1649
+ }
1650
+
1651
+ .v2_content {
1652
+ margin-left: 25px;
1653
+ }
1654
+ .v2_content p {
1655
+ font-size: 14px;
1656
+ color: #333B46;
1657
+ font-weight: 600;
1658
+ line-height: 20px;
1659
+ margin-top: 5px;
1660
+ }
1661
+ .v2_content p span {
1662
+ display: block;
1663
+ }
1664
+
1665
+ #wd_tenweb_logo_notice {
1666
+ margin-left: 25px;
1667
+ height: 30px;
1668
+ line-height: 100%;
1669
+ }
1670
+
1671
+ .v2_button {
1672
+ display: flex;
1673
+ margin-right: 30px;
1674
+ flex-direction: column;
1675
+ justify-content: center;
1676
+ }
1677
+
1678
+ .v2_button #install_now {
1679
+ width: 112px;
1680
+ height: 32px;
1681
+ line-height: 30px;
1682
+ font-size: 14px;
1683
+ text-align: center;
1684
+ padding: 0;
1685
+ }
1686
+
1687
+ #v2_tenweb_notice_cont .wd_tenweb_notice_dissmiss.notice-dismiss {
1688
+ top: 3px;
1689
+ right: 3px;
1690
+ }
1691
+ }
1692
+
1693
+ @media only screen and (max-width: 820px) and (min-width: 781px) {
1694
+
1695
+ #wpbody-content #v2_tenweb_notice_cont {
1696
+ height: 50px;
1697
+ min-height: 50px;
1698
+ }
1699
+
1700
+ #v2_tenweb_notice_cont {
1701
+ height: 60px;
1702
+ }
1703
+
1704
+ .v2_content {
1705
+ margin-left: 25px;
1706
+ }
1707
+
1708
+ .v2_content p {
1709
+ font-size: 13px;
1710
+ color: #333B46;
1711
+ font-weight: 600;
1712
+ line-height: 20px;
1713
+ margin-top: 5px;
1714
+ }
1715
+
1716
+ .v2_content p span {
1717
+ display: block;
1718
+ }
1719
+
1720
+ }
1721
+
1722
+ @media only screen and (max-width: 780px) {
1723
+
1724
+ #wpbody-content #v2_tenweb_notice_cont {
1725
+ height: auto;
1726
+ min-height: auto;
1727
+ }
1728
+
1729
+ #v2_tenweb_notice_cont {
1730
+ height: auto;
1731
+ padding: 5px;
1732
+ }
1733
+
1734
+ .v2_logo {
1735
+ display: block;
1736
+ height: auto;
1737
+ width: 100%;
1738
+ margin-top: 5px;
1739
+ }
1740
+
1741
+ .v2_content {
1742
+ display: block;
1743
+ margin-left: 9px;
1744
+ margin-top: 10px;
1745
+ width: calc(100% - 10px);
1746
+ }
1747
+
1748
+ .v2_content p {
1749
+ line-height: unset;
1750
+ font-size: 15px;
1751
+ line-height: 25px;
1752
+ }
1753
+ .v2_content p span{
1754
+ display: block
1755
+ }
1756
+ #wd_tenweb_logo_notice {
1757
+ margin-left: 9px;
1758
+ }
1759
+
1760
+ .v2_button {
1761
+ margin-left: 9px;
1762
+ margin-top: 10px;
1763
+ margin-bottom: 5px;
1764
+ }
1765
+ }
1766
+ </style>
1767
+ <div id="v2_tenweb_notice_cont" class="notice wd-notice">
1768
+ <div class="v2_logo">
1769
+ <img id="wd_tenweb_logo_notice" src="<?php echo $url . '/images/form-maker-logo.png'; ?>" />
1770
+ </div>
1771
+ <div class="v2_content">
1772
+ <p>
1773
+ <?php echo sprintf(__('%sForm Maker advises:%s %sUse Image Optimizer service to optimize your images quickly and easily.%s', $prefix), '<span>','</span>', '<span>','</span>'); ?>
1774
+ </p>
1775
+ </div>
1776
+ <div class="v2_button">
1777
+ <?php WDW_FM_Library::twbb_install_button(2); ?>
1778
+ </div>
1779
+ <button type="button" class="wd_tenweb_notice_dissmiss notice-dismiss" onclick="jQuery('#v2_tenweb_notice_cont').attr('style', 'display: none !important;'); jQuery.post('<?php echo $dismiss_url; ?>');"><span class="screen-reader-text"></span></button>
1780
+ <div id="verifyUrl" data-url="<?php echo $verify_url; ?>"></div>
1781
+ </div>
1782
+ <?php
1783
+
1784
+ echo ob_get_clean();
1785
+ }
1786
+ }
1787
+
1788
+ if ( !function_exists('is_plugin_active') ) {
1789
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
1790
+ }
1791
+
1792
+ if ( !is_plugin_active( '10web-manager/10web-manager.php' ) && WDFMInstance(1)->is_free ) {
1793
+ add_action('admin_notices', 'wdfm_tenweb_install_notice');
1794
+ }
1795
+
1796
+ if ( !function_exists('wd_tenwebps_install_notice_status') ) {
1797
+ // Add usermeta to DB.
1798
+ function wd_tenwebps_install_notice_status() {
1799
+ update_option('tenweb_notice_status', '1', 'no');
1800
+ }
1801
+ add_action('wp_ajax_wd_tenweb_dismiss', 'wd_tenwebps_install_notice_status');
1802
+ }
1803
+ // Check status 10web manager install
1804
+ function fm_check_tenweb_status() {
1805
+ $status_install = 0;
1806
+ $status_active = 0;
1807
+ if ( WDW_FM_Library::is_plugin_installed('10web-manager') ) {
1808
+ $status_install = 1;
1809
+ }
1810
+ else {
1811
+ if ( is_plugin_active('10web-manager/10web-manager.php') ) {
1812
+ $status_active = 1;
1813
+ }
1814
+ }
1815
+ if ( WDW_FM_Library::is_plugin_installed('10web-manager') ) {
1816
+ $old_opt_array = array();
1817
+ $new_opt_array = array( 'form-maker' => 95 ); // core_id
1818
+ $key = 'tenweb_manager_installed';
1819
+ $option = get_option($key);
1820
+ if ( !empty($option) ) {
1821
+ $old_opt_array = (array) json_decode($option);
1822
+ }
1823
+ $array_installed = array_merge($new_opt_array, $old_opt_array);
1824
+ update_option($key, json_encode($array_installed));
1825
+ }
1826
+ $jsondata = array( 'status_install' => $status_install, 'status_active' => $status_active );
1827
+ echo json_encode($jsondata);
1828
+ exit;
1829
+ }
1830
  add_action('wp_ajax_fm_tenweb_status', 'fm_check_tenweb_status');
frontend/models/form_maker.php CHANGED
@@ -1183,10 +1183,11 @@ class FMModelForm_maker {
1183
  else {
1184
  $correct = TRUE;
1185
  }
1186
-
1187
- if ( !$this->fm_empty_field_validation($id) ||
1188
- !$this->check_http_referer() ||
1189
- (isset($_POST[WDFMInstance(self::PLUGIN)->fm_form_nonce]) && !wp_verify_nonce($_POST[WDFMInstance(self::PLUGIN)->fm_form_nonce], WDFMInstance(self::PLUGIN)->fm_form_nonce))
 
1190
  ) {
1191
  $_SESSION['massage_after_submit' . $id] = addslashes(addslashes(__('Error, something went wrong.', WDFMInstance(self::PLUGIN)->prefix)));
1192
  $_SESSION['error_or_no' . $id] = 1;
1183
  else {
1184
  $correct = TRUE;
1185
  }
1186
+ if (
1187
+ (isset($_POST[WDFMInstance(self::PLUGIN)->fm_form_nonce]) && !wp_verify_nonce($_POST[WDFMInstance(self::PLUGIN)->fm_form_nonce], WDFMInstance(self::PLUGIN)->fm_form_nonce))
1188
+ // @TODO should be fixed to the next version!!!
1189
+ // || ! $this->fm_empty_field_validation($id)
1190
+ || ! $this->check_http_referer()
1191
  ) {
1192
  $_SESSION['massage_after_submit' . $id] = addslashes(addslashes(__('Error, something went wrong.', WDFMInstance(self::PLUGIN)->prefix)));
1193
  $_SESSION['error_or_no' . $id] = 1;
readme.txt CHANGED
@@ -1,1485 +1,1488 @@
1
- === Form Maker by 10Web - Mobile-Friendly Drag & Drop Contact Form Builder ===
2
- Contributors: webdorado,10web,wdsupport,formmakersupport
3
- Tags: form, forms, form builder, contact form, feedback, custom form, contact, web contact form, captcha, email, form manager, survey
4
- Requires at least: 4.6
5
- Tested up to: 5.1
6
- Stable tag: 1.13.7
7
- License: GPLv2 or later
8
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
-
10
- Form Maker is the leading drag & drop plugin for building forms of any complexity in just a few clicks.
11
-
12
- == Description ==
13
-
14
- Form Maker is the leading drag & drop plugin for building forms of any complexity in just a few clicks.
15
-
16
- = Useful Links: =
17
-
18
- [Live Demo](https://demo.10web.io/form-maker/)
19
-
20
-
21
- [Demo Admin](https://admindemo.10web.io/?product_name=form-maker)
22
-
23
-
24
- [Premium Form Maker by 10Web](https://10web.io/plugins/wordpress-form-maker/)
25
-
26
-
27
- [Special Offer for all Premium Plugins](https://10web.io/plugins-bundle-pricing/)
28
-
29
- https://www.youtube.com/watch?v=vxxKfhxIS44
30
-
31
-
32
- Looking for the perfect form plugin that’ll save you time and effort?
33
-
34
- Is matching your website design with your forms difficult?
35
-
36
- Finding it hard to build lengthy and advanced forms?
37
-
38
-
39
- == Form Maker Features ==
40
-
41
- **Intuitive Interface**
42
- Drag and drop to build complex forms with just a few clicks.
43
-
44
- **Mobile-Friendly and Responsive**
45
- Your forms will look great on all resolutions and devices: mobile, tablet, and desktop.
46
-
47
- **Field Types**
48
- 43 different form field types to help you create just the form you need.
49
-
50
- **Embed Easily**
51
- Display your forms as popups, top bars or scroll boxes or embed them into blog posts.
52
-
53
- **Pre-built Templates**
54
- Pick from five form template options to save time.
55
-
56
- **Fully Customizable Themes**
57
- Use one of our fifteen beautiful themes to make your forms match website design.
58
-
59
- **Manage Submissions**
60
- Set automatic email replies, track and export all your entries, and more.
61
-
62
- **Protection from Spam**
63
- Block IPs and set captchas to avoid spam.
64
-
65
- **Receive Payments\***
66
- Get payments and donations using integrated PayPal and Stripe gateways.
67
-
68
- **Conditional Logic**
69
- Build forms with complex conditional logic.
70
-
71
- **Multi-Page Forms**
72
- Divide up lengthy forms into pages to provide better user experience.
73
-
74
- **File Upload\***
75
- Your users can upload files to your forms.
76
-
77
- _\* Premium version only_
78
-
79
- == Form Maker Extensions ==
80
- _[Available in Plugins Bundle](https://10web.io/plugins/wordpress-form-maker/#product_pricing)_
81
-
82
- **Save Form Progress**
83
- Your users can save unfinished entries and continue anytime.
84
-
85
- **Conditional Mailing**
86
- Send out emails to user groups based on submitted forms.
87
-
88
- **Export/Import**
89
- Export form entries and forms in the XML format and import them into another site afterwards.
90
-
91
- **Pushover**
92
- Get a notification on your phone whenever there is an entry submission.
93
-
94
- **Mailchimp Integration**
95
- Create Mailchimp signup forms and expand your lead list.
96
-
97
- **WordPress Registration**
98
- Build WP user registration forms and expand the user base of your site.
99
-
100
- **Post Generation**
101
- Use a form to invite your users to submit guest posts.
102
-
103
- **Dropbox Integration**
104
- Store attachments received from form entries in your Dropbox.
105
-
106
- **Google Drive Integration**
107
- Upload received form attachments straight to your Google Drive.
108
-
109
- **PDF Integration**
110
- Use content from submitted entries to create PDFs.
111
-
112
- **Stripe**
113
- Your users can make credit card payments via Stripe, and we’ll transfer them to your bank account automatically.
114
-
115
- **Calculator**
116
- Build forms that contain automatically calculated fields.
117
-
118
-
119
- == World Class Customer Support ==
120
- * Low response time
121
- We always respond within a few hours.
122
- * Quick issue resolution
123
- Resolving an issue never takes more than 24 hours.
124
-
125
-
126
- == Just ask our users ==
127
-
128
- > I had tried several form plugins but I was always searching for a better one.
129
- > Then I stumbled Formmaker just by chance and thought to give a try.
130
- > I was thrilled to see its features. It has more than everything I expected. Very customizable and easy to use.
131
- > Now I don’t search for form plugin anymore
132
- > Lots of thanks to the developers of this plugin.
133
- > **by [@mayank0522](https://wordpress.org/support/topic/a-must-have-plugin-223/)**
134
-
135
-
136
- > If I could give this plugin more than 5 stars I would!
137
- > The level of control is extremely nice – even with the free version – though I quickly purchased the PRO version!
138
- > And the level of customer service in troubleshooting forum questions is incredible!
139
- > Very impressed with the plugin – but even more so with the way they interact with and help users get to what they need!
140
- > Great job guys!!
141
- > **by [@JonathanWilson99](https://wordpress.org/support/topic/amazing-form-plugin/)**
142
-
143
-
144
- > This is the best plugin for creating functional forms and very user friendly even for the none technical users.
145
- > Absolutely recommend everyone to use this one.
146
- > Thanks a lot guys!!!
147
- > **by [@denisecox](https://wordpress.org/support/topic/wonderful-form-builder-plugin/)**
148
-
149
- == Steps for creating a website form ==
150
- 1. Install Form Maker by 10Web.
151
- 2. Create a form in a few clicks.
152
- 3. Publish your form.
153
-
154
-
155
- > **[Premium version adds](https://10web.io/plugins/wordpress-form-maker/)**
156
- >
157
- > * Unlimited fields in one form
158
- > * File Upload field
159
- > * PayPal Integration
160
- > * Stripe Integration with Extension
161
- > * Google Maps API Integration
162
- > * Front-End Submissions
163
-
164
-
165
- == SETTINGS/CUSTOMIZATION ==
166
-
167
- _\*Some customizations described here are available in Premium version. Please refer to feature summary for additional info._
168
-
169
- Form Maker plugin provides a full range of options and features you can tailor to your needs. Each of the entries you create will have its own set of options and display settings. Under the options you can choose a theme for each form, adjust email options, choose what happens after the user submits, set conditional logic, and choose one of the available payment options, such as PayPal and Stripe (Extension). Under the display settings you can adjust the options for each form display type.
170
-
171
- The available themes are fully configurable, allowing you make the necessary adjustments to the header, content, input box, buttons, choices, pagination, and add custom CSS. You can change the header background color, adjust the parameters for title, description and header image,customize the parameters for buttons, adjust the settings for single and multiple choice questions, and many more. The changes you make to the settings will immediately be displayed in the form preview next to the settings box.
172
-
173
- With conditional fields option you can set to hide/show specific fields based on the selections your visitors make. You just choose the field you want to show or hide, then set the conditions based on which the field will appear or will be hidden. The plugin features a user-friendly interface, which makes it easy to create, style and customize the forms.
174
-
175
-
176
-
177
- == Privacy Notices ==
178
-
179
- Form Maker plugin does not collect and store any data of your users on 10Web's end. All data submitted by your website visitors is stored in your website database. With every form submission Form Maker plugin collects users' IP address and WordPress user ID for logged in users. From this perspective, you may be subject to GDPR compliance.
180
-
181
- Form Maker forms imply interaction between website visitors and website owner. As such you may publish forms that require input of Private data. You need to get explicit consent from your users to comply with GDPR. Under GDPR your users may request access and/or erasure of their entry data at any time. Here you can find how to export and/or delete submissions.
182
-
183
-
184
-
185
- == Installation ==
186
-
187
- After downloading the ZIP file,
188
-
189
- 1. Log in to the administrator panel.
190
- 1. Go to Plugins Add &gt; New &gt; Upload.
191
- 1. Click &quot;Choose file&quot; (&quot;Browse&quot;) and select the downloaded zip file.
192
- _For Mac Users_
193
- _Go to your Downloads folder and locate the folder with the plugin. Right-click on the folder and select Compress. Now you have a newly created .zip file which can be installed as described here._
194
- 1. Click &quot;Install Now&quot; button.
195
- 1. Click &quot;Activate Plugin&quot; button for activating the plugin.
196
-
197
- If the installation does not succeed, please contact us for help.
198
-
199
- After the installation is finished, you can go ahead and start working on your contact forms. Navigate to **Form Maker &gt; Forms** page to build your very first form. Form Maker plugin provides a few sample forms, which you can quickly edit and publish.
200
-
201
- Using **Form Maker &gt; Forms** page, you can manage existing forms, perform Bulk Actions, such as Publish, Unpublish, Duplicate or Delete. Select the necessary form, choose the bulk action, then press Apply. Also, you can search for your form by writing its title in the top Search input.
202
-
203
- **Adding Fields**
204
- To add a new field to your form, drag New Field button to the area where you wish to place the field. The field editor toolbox will be opened automatically. Click on the field set from which you are going to choose the field, for instance, User Info Fields. Press Name button from this field set to add a Name input to your contact form. Then click Add and the field will be placed to the area you selected initially.
205
-
206
- It is also possible to search among the fields when adding a new field to your form. Use Filter input at the top left corner of fields toolbox. For example, you can search &quot;phone&quot; and all Phone fields will be filtered.
207
-
208
- You can edit your form fields anytime by double-clicking on them. Alternatively, you can open field editor toolbox by clicking on a field once, then pressing the small pencil icon above. To change the placement of your fields, simply drag the field to the necessary area.
209
-
210
- After adding your form fields and updating your form, you are able to Undo or Redo the changes you have made. Please note, that these two buttons appear at the top of your form only after you modify the form and save the changes.
211
-
212
- == Screenshots ==
213
- 1. Reservation form created using Form Maker
214
- 2. Pop-up form created using Form Maker
215
- 3. Product Survey with radio buttons, evaluation, star rating, etc.
216
- 4. Feedback form with number range sliders, radio buttons, etc.
217
- 5. Form Maker - Drag and Drop Form builder interface
218
- 6. Form Maker - searching field types and adding a field to a form
219
- 7. Form Maker Options - Save data to database, save uploads, etc.
220
- 8. Form Maker - Manage form submissions, export, block ips
221
-
222
-
223
- == Frequently Asked Questions ==
224
-
225
- = What is Form Maker used for? =
226
-
227
- **Form Maker** is a modern and intuitive free online application form creator plugin developed for WordPress. It lets you build personalized, perfect-looking responsive forms with its elegant drag and drop interface.
228
-
229
- You can create web forms free of additional coding, with just a few clicks. The functionality of Form Maker is excellent for any kind of online questionnaires.
230
-
231
- Form Maker can be used for creating multiple types of forms, including contact forms, evaluation form, application forms, quizzes/tests or survey forms, online order forms and etc. Form Maker includes various types of fields which can be modified and/or edited.
232
-
233
- Whether you are a WordPress beginner or a web guru, Form Maker is the perfect choice. The dynamic web form builder tool comes with clean visual tools and options, and you do not need to have any web development skills to build a form.
234
-
235
- = How can I create a contact form with Form Maker? =
236
-
237
- Navigate to **Form Maker > Forms** page to build your very first contact form. This contact form creator plugin provides a few sample forms, which you can quickly edit and publish.
238
-
239
- Using **Form Maker > Forms** page, you can manage existing forms, perform **Bulk Actions,** such as **Publish, Unpublish, Duplicate** or **Delete.** Select the necessary form, choose the bulk action, then press **Apply.** Also, you can search for your contact form by writing its title in the top **Search** input.
240
-
241
- Press **Add New** button from **Forms** page, and you will be redirected to **Form Editor** page. Make sure to write a **Title** for this contact form, then choose the **Theme** which sets the appearance of your form. In case you wish to display the contact form with the same style as your website theme, select **Inherit From Website Theme** option from **Theme** select box.
242
-
243
- To add a new field with this application form creator, drag **New Field** button to the area where you wish to place the field. The field editor toolbox of Form Maker will be opened automatically. Click on the field set from which you are going to choose the form field, for instance, **User Info Fields.** Press **Name** button from this field set to add a Name input to your form. Then click **Add** and the field will be placed to the area of the form you selected initially.
244
-
245
- It is also possible to search among the form builder fields when adding a new field to your form. Use **Filter** input at the top left corner of fields toolbox. For example, you can search "phone" and all Phone fields will be filtered.
246
-
247
- = Can I add a custom header with text and image above my contact form? =
248
-
249
- This dynamic contact form builder lets you have a nice header section on your forms, which can contain additional content, as well as images with animations. Click on **Form Header** bar of your form to open its toolbox and provide a **Title.** This is the form heading, which will appear above your form. In addition, you can write a **Description** to appear right below the Title of your form. This comes handy, in case you need to write an introduction for your form.
250
-
251
- You can also have an image on your form header and set it to appear with an animation effect. Press **Add Image** button to upload and select a picture from **WordPress Media Library.** Then choose the animation effect using Image Animation option.
252
-
253
- In case you don't want the **Header Image** of your forms to appear on smartphones and tablets, mark **Hide Image on Mobile** option as checked.
254
-
255
- Make sure to **Publish/Update** the form to save the change you made.
256
-
257
- = Does Form Maker support conditional logic and how can I use it? =
258
-
259
- Yes, another fantastic feature of this custom form creator plugin is its **Conditional Fields.** This lets you **show** or **hide** fields of your form based on certain selections submitter makes.
260
-
261
- The structure of conditional fields in this contact form generator form builder is the following: You can specify and/or show/hide a field, when condition is true and provide conditions below, e.g. Show "How many visitors will you have" if "Will you have visitors" is "Yes".
262
-
263
- Go to **Form Options** of your form, then click **Conditional Fields** tab to start the setup. Press **Add Condition** button to configure the first condition of your form.
264
-
265
- **Show/Hide** select box of this form builder plugin represents the action which will be completed, if all or any of the condition statements are fulfilled. Use the second drop-down menu to select the form builder field which will be shown or hidden.
266
-
267
- Click the little **Plus (+)** icon to add the statement of your form condition.
268
-
269
- For example, let's assume there is a **Single Choice** field on your form titled **Inquiry type.** And you wish to show **Message** field in case users choose **Support Request** as the type of their inquiry. The condition you configure needs to have the following logic:
270
-
271
- *Show [Message] if [all] of the following match:*
272
- *[Inquiry type] is [Support request]*
273
-
274
- Make sure to hit **Update** after setting up Conditional Fields on your Form Maker.
275
-
276
- = What styling options do the forms include? =
277
-
278
- This secure form builder plugin comes with **14 customizable themes,** which you can use to design your forms. Each theme of Form Maker provides a set of user-friendly options to change font size, alignment of the form, colors, modify paddings and more. You can edit the existing themes, or create your own by clicking **Add New** button.
279
-
280
- To set a initial default theme for your forms, press on the star icon next to the theme you would like to use. You can always change the theme by editing your forms.
281
-
282
- Options of Form Maker Themes are divided into the following sections:
283
-
284
- * Global Parameters
285
- * Form Header
286
- * Content
287
- * Inputbox
288
- * Choices (Multiple and Single)
289
- * General Buttons
290
- * Pagination
291
- * Form Buttons
292
- * Close (Minimize) Button
293
- * Minimize Text
294
- * Other
295
- * Custom CSS
296
-
297
- You can preview the design of each form theme under Preview block. In case you created forms with multiple pages, you can change its Pagination Type, setting it to Step, Percentage or None.
298
-
299
- Custom CSS option in Themes of this offline form builder lets you write additional CSS code and customize your forms further. All CSS rules apply to this editor. Make sure to press Save after modifying the form theme.
300
-
301
- = Does Form Maker use auto-respondent feature? =
302
-
303
- You can use **Email Options** of Form Maker to send a fully customizable letter to the submitter. The entries can be included within the email. Just select the form you want to edit, then navigate to **Form Options &gt; Email Options.**
304
-
305
- This html5 form builder plugin lets you send submitted information to one or multiple email addresses. Furthermore, you can also send a confirmation email to the submitter and let them know you have received their application.
306
-
307
- Enable Send E-mail from **Form Options &gt; Email Options** tab and start configuring mailing settings. Most options require the same configuration for Email to Administrator and Email to User on the forms. However, there are a few settings which are unique.
308
-
309
- **Email to Administrator**
310
-
311
- This section of Email Options allows you to set up notifications of form submissions for website owners.
312
-
313
- **Email to User**
314
-
315
- **Send to.** Use this setting to select the email field of your form, to which the submissions will be sent.
316
-
317
- Important! In case you do not have an email input created from User Info Fields &gt; Email type on your form, the following error message will appear:
318
-
319
- &quot;There is no email field&quot;.
320
-
321
- **Email Verification.** Activate this option, in case you would like the users to verify their email addresses. If it&#39;s enabled, the user email will contain a verification link. Clicking on this link set the user email address as verified.
322
-
323
- **Verification link expires in.** Use this option to specify a time period (hours), during which the user will be able to verify their email address.
324
-
325
- **Edit Post.** Click this link to edit the content of Email Verification post. This is is the page, where users will be redirected after they click on the verification link in user email.
326
-
327
- = Can I create an online order form with this plugin? =
328
-
329
- *Payment support is available in the Premium version of the plugin.*
330
-
331
- In order to have a functional payment form, first and foremost, you need to have **Payment Fields** added to it. This way, Form Maker plugin will turn into an online order form creator quickly and easily. Build compact shopping forms, hotel reservation, online application or ticket sales forms with this feature.
332
-
333
- Note: You need to set up **Form Options > Payment Options** of your form in order to receive payments on your account. Follow the steps described on this section to do that.
334
-
335
- Configuring Payment Options, you can use Form Maker as an order form generator and let users make payments through your form. Default payment gateway of Form Maker is **PayPal.** Select **PayPal** as **Payment Method** from Form **Options &gt; Payment Options** tab and configure corresponding options.
336
-
337
- Also, you can easily integrate the forms builder plugin with Stripe using its Stripe Integration extension ( [Available in Plugins Bundle](https://10web.io/plugins/wordpress-form-maker/#product_pricing) ).
338
-
339
- **Payment Currency.** Choose the currency to be used for the payments made through your form. Note, that the selected currency symbol will only display on the front-end of the published form.
340
-
341
- **Tax (%).** Specify the percentage of the tax for your payment form. It will be calculated from the total payment amount of your form, and will be added to the grand total.
342
-
343
- **Checkout Mode.** Select the checkout mode for your form. Testmode will display PayPal Sandbox after submission, which allows you to run payment tests. When you are ready to receive payments, enable Production mode.
344
-
345
- **Paypal email.** Provide the email address of a valid PayPal account. This account will be used as the recipient of payments through your form.
346
-
347
- = Where can I check the submissions of my forms? =
348
-
349
- **Submissions** page of this HTML form generator plugin lets you view the full record of submissions of each form. Choose your form from **Select a form** drop-down box to display its submitted information. Furthermore, you are able to view **Statistics** of **Single/Multiple Choice** and **Select Box** fields.
350
-
351
- **Entries / Conversion Rate / Views.** These attributes of **Submissions** page will help you quickly view the statistics of the selected form.
352
-
353
- **Export to CSV / Export to XML.** You are able to download all submissions of each contact form in **CSV** or **XML** format by clicking on these buttons.
354
-
355
- **Show Filters.** Form Maker lets you filter form submissions by values provided by user, e.g. submitter's email address, name and more. Press **Show Filters** button on form submissions, write the values you wish to search with, then press **Search.** Click **Reset** button to clear the filters.
356
-
357
- **Add/Remove Columns.** This button will help you customize the columns which display in submissions of the selected contact form. Click on the button and unmark the columns you wish to hide.
358
-
359
- *Note: Adding/Removing columns does not delete columns from the submissions table of your contact forms. It just hides them until you activate them again.*
360
-
361
- **Block IPs / Unblock IPs.** In case you are receiving spam submissions from certain IP addresses, you can block these addresses. Mark all spam submissions as checked, choose **Block IPs** option from **Bulk Actions** and press **Apply.** You are able to unblock these IP addresses anytime.
362
-
363
- **Delete.** If you wish to remove some or all submissions of a contact form, mark them as checked and select **Delete** option from **Bulk Actions.** Clicking **Apply** will delete these entries permanently.
364
-
365
- = Can user be redirected to another page after submitting the form? =
366
-
367
- Form Maker plugin allows you to configure different actions which occur after form submission. For instance, you can display a &quot;Thank you&quot; message after users submit the form, or redirect them to another page, or more.
368
-
369
- Navigate to Form Options &gt; Actions After Submissions tab, and select one of the options below to set up the action that occurs after users submit your form.
370
-
371
- * **Stay on Form.** This action will reload the form page and keep the submitter on the same page.
372
- * **Post.** Select this option to redirect users to a specific post after they hit Submit. You will then be able to select the post from Post dropdown menu.
373
- * **Page.** You can also redirect users to a selected page. Choose this option and specify the destination using Page dropdown menu.
374
- * **Custom text.** Use this action in case you wish to display a &quot;Thank you&quot; message after users submit the form. The editor box accepts text, basic HTML, as well as values of form fields. Include them to the content by pressing on the top buttons indicating form fields.
375
- * **URL.** Configure redirection from your forms to any page with this action after submission. Mark URL option, then provide the absolute path of the link to the input that appears.
376
-
377
- = What verification methods does Form Maker use? =
378
-
379
- Form Maker uses modern verification methods, such as ReCaptcha and invisible ReCaptcha. Please note that will need to obtain ReCaptcha keys to use these options. Otherwise you can use Simple Captcha and Arithmetical Captcha which use standard word verification and arithmetical expressions respectively.
380
-
381
- = Can I use Form Maker to create a registration form? =
382
-
383
- You can register users on your website with the help of Form Maker WordPress Registration Extension ( [Available in Plugins Bundle](https://10web.io/plugins/wordpress-form-maker/#product_pricing) ). Install the Extension and use it alongside the free version of Form Maker plugin.
384
-
385
- You are able to ask users to provide username, email address and password for their account. The registration of users is done upon completing the form created by this visual form builder plugin.
386
-
387
- = Is it possible to publish a contact form as a widget? =
388
-
389
- You can publish your form not only using **Display Options** of the web form builder tool, but also as a widget. Go to **Appearance > Widgets** page to place your form on any widget area of your website theme.
390
-
391
- Search for **Form Maker widget** and drag it to the widget area where you wish to place your form. Specify a **Title** for the widget and choose the form you wish to publish. Press **Save** after making these changes.
392
-
393
- = Can the form submissions be shown to site visitors? =
394
-
395
- **Premium version** of Form Maker plugin allows you to publish submissions on front-end of your website.
396
-
397
- This form creator plugin lets you select user roles which will be able to view the published submissions. This can be done from **Form Options > General Options** section. Also, in the same section, you are able to choose fields to hide from front-end submissions.
398
-
399
- Firstly, add/edit the page or post, where you wish to publish the submissions of form. Then press **Add Submission** button from the top of the post editor.
400
-
401
- **Select a Form.** Use this drop-down to choose the form, submissions of which you would like to publish.
402
-
403
- **Select Date Range.** You can display form submissions from a specific date range. Use this option to select **From** and **To** dates.
404
-
405
- **Select fields.** Use this option to choose which columns to show on the form. Uncheck the options, which you need to hide on front-end submissions.
406
-
407
- **Export to / Show.** These two settings are responsible for showing the rest of the attributes of front-end submissions. You can enable/disable **CSV/XML** export buttons, **Statistics, Views, Conversion Rate** and other additional information.
408
-
409
- After configuring all necessary options, press **Insert.** Publish your page with form submissions, and you will be able to view them on front-end.
410
-
411
- = Can I let users choose between PayPal or offline payments when submitting the form? =
412
-
413
- **Premium version** of this handy forms plugin has the features and functions to achieve this. You need to use **Conditional Fields** and **Payment Fields** of the plugin. Here are the necessary steps.
414
-
415
- Firstly, add one **Single Choice** field from **Basic Fields** of Form Maker plugin. It should contain the following two options:
416
-
417
- * Pay with PayPal
418
- * Pay offline
419
-
420
- Afterwards, add two sets of almost identical fields, one of them created with regular form fields, second - with **Payment fields.**
421
-
422
- Then you can set conditions from **Form Options > Conditional Fields,** if the user chooses PayPal, payment fields will appear, otherwise, regular fields will.
423
-
424
- The user will not be redirected to PayPal if they make their selections using regular form fields.
425
-
426
- = How can a migrate Form Maker from one site to another? =
427
-
428
- If you want to migrate Form Maker database tables from one WordPress site to another, you need to follow the instructions below.
429
-
430
- *Please uninstall Form Maker if you have it installed on your second site first, then proceed with these steps:*
431
-
432
- **On your first WordPress site:**
433
-
434
- 1. Go to **PHPMyAdmin** of your site,
435
- 2. open your WordPress site database,
436
- 3. select **Export** menu item,
437
- 4. change the radio button from **Quick** to **Custom,**
438
- 5. unselect all tables and select the following 7 tables:
439
-
440
- *[wp1_prefix]_formmaker*
441
- *[wp1_prefix]_formmaker_blocked*
442
- *[wp1_prefix]_formmaker_query*
443
- *[wp1_prefix]_formmaker_sessions*
444
- *[wp1_prefix]_formmaker_submits*
445
- *[wp1_prefix]_formmaker_themes*
446
- *[wp1_prefix]_formmaker_views*
447
-
448
- (where **[wp1_prefix]** is your WordPress database prefix)
449
-
450
- 6. scroll all the way down and press the **Go** button. This should export an SQL file containing those 7 tables.
451
-
452
- **On your second WordPress site:**
453
-
454
- 7. Go to your WordPress database,
455
- 8. select **Import** menu item,
456
- 9. browse for the exported SQL file,
457
- 10. scroll all the way down and press **Go** button. This should import Form Maker tables to your WordPress database.
458
-
459
- Now you need to change the prefix for those tables to the one that is set for your second WordPress database.
460
-
461
- 11. Select **[wp1_prefix]_formmaker** table from the left pane of PHPMyAdmin of your second WordPress database,
462
- 12. select **Operations** menu item from the top menu
463
- 13. scroll to **Table Options** box and edit the value of **Rename table to** field with the second WordPress database prefix, so that the table name now looks like this: **[wp2_prefix]_formmaker** (where **[wp2_prefix]** is your second WordPress database prefix)
464
- 14. do the same for other 6 tables.
465
- 15. go to your second WordPress administration panel and install the Form Maker.
466
-
467
- That's it! Now you should have your forms, submissions, and themes all set up.
468
-
469
- = Characters in the submission CSV file do not appear correctly. How can I fix this? =
470
-
471
- Please note, that this problem is not caused by Form Maker plugin. It is rather a formatting issue in Excel. However, you can prevent it the following way:
472
-
473
- * Please open a new Microsoft Excel document first. Then go to **Data** tab from the menu and click on **From Text.**
474
- * Choose the CSV file you need to view. You'll see a pop-up window with several options, you'll find the **File Origin** option along with them.
475
- * Please select **Unicode (UTF-8)** for this dropdown and click **Next** if you need to edit other options, or just **Finish** to insert the document.
476
-
477
- The special characters in the CSV submissions of your contact forms should appear correctly afterwards.
478
-
479
- = I do not receive any submission emails of my forms. How can this be fixed? =
480
-
481
- This might be a problem related to the hosting configurations of your website. You can check that the following way.
482
-
483
- Please install [WP SMTP](https://wordpress.org/plugins/wp-smtp/) plugin and go to **Settings > WP SMTP** page. Scroll down to the bottom and send a test mail to your email address.
484
-
485
- If the test email will be sent, then the issue is triggered by Form Maker plugin. Please contact [10Web Customer Care at WordPress.org Support Forums](https://wordpress.org/support/plugin/form-maker/). Our developers will have a closer look.
486
-
487
- But if the test mail fails, the problem is on the server of your website. Please contact your hosting provider in this case, and ask them to enable mail functions on your site.
488
-
489
- = My forms do not submit due to Javascript errors. How can they be eliminated? =
490
-
491
- This problem could be related to permission settings of Form Maker files on your web server. Please check that the following way.
492
-
493
- Connect to your website files via FTP connection and open the following two directories:
494
-
495
- *wp-content/uploads/form-maker-frontend/js/*
496
- *wp-content/uploads/form-maker-frontend/css/*
497
-
498
- Please make sure all **.css** and **.js** files in these folders have their permissions set to **777.**
499
-
500
- If the permissions are correct, please do not hesitate to contact [10Web Customer Care at WordPress.org Support Forums](https://wordpress.org/support/plugin/form-maker/).
501
-
502
- = Is it possible to pass parameters from the page URL to form fields? =
503
-
504
- To fill in values of parameters from a URL into Form Maker fields, it is necessary to implement a custom script. Please navigate to **Form Options > Javascript** page and add the following code inside **before_load()** function:
505
-
506
- `function getParameterByName(name, url) {
507
- if (!url) {
508
- url = window.location.href;
509
- }
510
- name = name.replace(/[[]]/g, "$&");
511
- var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
512
- results = regex.exec(url);
513
- if (!results) return null;
514
- if (!results[2]) return '';
515
- return decodeURIComponent(results[2].replace('/+/g', " "));
516
- }
517
- jQuery("#{{field_id}}").val(getParameterByName("{{param_name}}"));
518
- jQuery("#{{field_id}}").attr("class", "input_active");`
519
-
520
- Where **{{field_id}}** is the ID of the field you wish to prefill. Also, **{{param_name}}** is the name of the parameter in the URL.
521
-
522
-
523
- == Changelog ==
524
-
525
- = 1.13.7 =
526
- * Added: Support for 'all' placeholder in actions after submission.
527
- * Added: Provinces for Canada.
528
- * Improved: Spam protection.
529
- * Improved: Minify js, css.
530
- * Changed: Some country names.
531
- * Fixed: Two required "Table of fields" fields on a page.
532
- * Fixed: Error on uninstalling from multisite.
533
- * Fixed: Preview in themes edit page.
534
- * Fixed: User guide links for tabs in form edit page.
535
- * Fixed: Empty Simple Captcha input after form reset.
536
- * Fixed: Remove unnecessary container from placeholders popup.
537
-
538
- = 1.13.6 =
539
- * Fixed: Payment info is not retrieved.
540
-
541
- = 1.13.5 =
542
- * Fixed: CSRF issue.
543
- * Added: Banner to install 10Web manager.
544
-
545
- = 1.13.4 =
546
- * Fixed: Vulnerability on submissions page.
547
-
548
- = 1.13.3 =
549
- * Added: Functionality to add placeholders in "Select options from database" Where selector.
550
- * Added: Functionality to use "Star rating" as a condition.
551
- * Fixed: Security issue.
552
- * Fixed: Link for attachment in email.
553
- * Fixed: Allow "0" value for required fields.
554
- * Fixed: Don't use the same title for the duplicated form.
555
- * Fixed: Adding field to incorrect position.
556
- * Fixed: Scroll to required address field.
557
- * Fixed: Broken multiple pages.
558
- * Fixed: MySQL mapping edit functionality.
559
- * Fixed: Multisite support for add-ons.
560
- * Fixed: Saving advanced layout.
561
- * Fixed: 0 value is not saved in submissions for Payment single choice and Shipping fields.
562
-
563
- = 1.13.2 =
564
- * Changed: Links to 10Web.io.
565
-
566
- = 1.13.1 =
567
- * Fixed: Bug on checking if Address field is required.
568
-
569
- = 1.13.0 =
570
- * Added: Enable/Disable option for Form header.
571
- * Added: Tax option for Stripe payments.
572
- * Added: "Class name" option for "Single Line Text" field to allow add a css class for the field.
573
- * Added: "Palestine" to country list field.
574
- * Changed: Form editing page layout.
575
- * Changed: Form Revisions functionality.
576
- * Changed: Settings (Form Options) tab new design.
577
- * Changed: Form Publishing tab new design.
578
- * Changed: Selecting a Theme moved to Appearance.
579
- * Changed: Make email options a separate tab.
580
- * Changed: Remove required mark color from "Default" and "Inherit from site" themes.
581
- * Changed: Inherit styles (font, color) from Elementor for Form maker widget.
582
- * Fixed: Try to reproduce, try/catch curl part of code.
583
- * Fixed: Requirement of table field should be affected on all rows of it.
584
- * Fixed: The Like/Starting With options in WHERE of Select options from Database.
585
- * Fixed: Remove the link of the word "Privacy Policy" when there is no Privacy Policy page.
586
- * Fixed: Styles for rtl languages.
587
- * Fixed: Addons settings for duplicated forms.
588
- * Fixed: Required validation not allow space.
589
- * Fixed: Error when clicking allow or skip to collect some usage data more then once.
590
-
591
- = 1.12.42 =
592
- * Fixed: Remove the link from "Privacy Policy" text in the form when there is no Privacy Policy page.
593
-
594
- = 1.12.41 =
595
- * Added: WHERE selectors in "Options from database" (Select, Single and Multiple choice fields).
596
- * Added: Placeholders (User ID, Submitter's IP, etc.) in WHERE clause in "Options from database" and MySQL Mapping.
597
- * Improved: Parsing images in post content in Post Generation extension.
598
- * Improved: Automatically deactivate plugin after uninstall.
599
- * Fixed: Scroll issues on Safari (MacOS).
600
- * Fixed: "Receive Copy" field checkbox with Form maker some themes.
601
- * Fixed: "Custom text" after form submit.
602
-
603
- = 1.12.39 =
604
- * Added: Drag & Drop of Columns in form editor
605
- * Added: Drag & Drop of Pages in form editor
606
- * Added: New icon in Elementor plugin
607
- * Improved: Drag & Drop of fields in form editor
608
- * Fixed: Conditional fields flickering during page loading
609
-
610
- = 1.12.38 =
611
- * Improved: GDPR compliance options.
612
- * Added: Step option for slider field.
613
- * Fixed: Error on form front end when Privacy Policy checkbox is enabled.
614
- * Fixed: Bug on Actions after submission when Redirect to URL option is empty.
615
- * Fixed: Notice on form submit.
616
- * Fixed: Minor issues on Themes.
617
-
618
- = 1.12.37 =
619
- * Fixed: Compatibility with PHP version 5.3.
620
-
621
- = 1.12.36 =
622
- * Improved: Uninstall Form Maker interface and texts.
623
- * Fixed: "New Form Field" button drag and drop issue in Firefox and Safari.
624
- * Fixed: Do not show hidden amounts in total.
625
- * Fixed: Failed to import form submissions when there is a single quote in the form title.
626
- * Fixed: Can not submit contact form when there is a condition on stripe field and stripe is not visible.
627
- * Added: GDPR compliance required checkbox on the front end.
628
- * Added: Warn user if the email address does not belong to the site domain.
629
-
630
- = 1.12.35 =
631
- * Fixed: PDF should be generated even if sending emails is off.
632
- * Fixed: Form field validation issues on multi-page forms.
633
- * Fixed: Issue with Exporting/Importing a form with special characters in header.
634
-
635
- = 1.12.34 =
636
- * Added: Additional security check to block form submissions from bots.
637
- * Improved: Submissions CSV/XML export for bigger forms.
638
- * Improved: Rendering of forms in Elementor front-end builder preview.
639
- * Improved: Optimized the back end Scripts and CSS for faster loading.
640
- * Fixed: Form Submissions page responsiveness issue on mobile devices.
641
-
642
- = 1.12.33 =
643
- * Added: Option to enable/disable WP Editor.
644
- * Added: Additional security checks against bots.
645
- * Changed: Form field validation on form options page.
646
- * Fixed: Error on deactivation.
647
- * Fixed: Port for connecting to a remote Database with SQL mapping.
648
- * Fixed: Displaying Form on all posts instead of the selected.
649
- * Fixed: Filled values of payment form fields should not be lost on an error.
650
- * Fixed: Form is not saved if you click Publish before the page is loaded.
651
- * Fixed: Table of fields validation on form submission.
652
- * Fixed: Add shortcode functionality on Beaver, Elementor, SiteOrigin and Visual Composer builders.
653
- * Fixed: If you Sort/Filter the data via some column, then hit next page button, the sort reverts to the default sort order.
654
- * Fixed: Select all in Submissions should apply to the current page only.
655
- * Fixed: Do not change the page after IP block in submissions page.
656
- * Fixed: Do not change the page after deleting submission in submissions page.
657
-
658
- = 1.12.32 =
659
- * Fixed: Include styles/scripts on form pages only.
660
-
661
- = 1.12.31 =
662
- * Improved: CSV, XML export.
663
- * Improved: default email design
664
- * Improved: Minor improvements in email options
665
- * Fixed: PHP validation for email.
666
- * Fixed: Preserve the list of columns displayed when changing the page.
667
- * Fixed: Do not display ScrollBox form after Successful submission.
668
-
669
- = 1.12.30 =
670
- * Changed: Separate buttons for deactivation.
671
-
672
- = 1.12.29 =
673
- * Fixed: Bug on empty values for some form field types.
674
-
675
- = 1.12.28 =
676
- * Added: Custom javascript event, occurs after form is submitted.
677
- * Changed: Code structure refactoring.
678
- * Fixed: Bug on required form fields PHP validation.
679
- * Fixed: Bug on saving a theme.
680
-
681
- = 1.12.27 =
682
- * Added: Help and suggestions text for Privacy Policy (for GDPR compliance)
683
- * Added: Privacy related text to readme.
684
-
685
- = 1.12.26 =
686
- * Fixed: Vulnerabilities reported by Neven Biruski from DefenseCode (using the tool ThunderScan).
687
- * Fixed: "The loopback request to your site failed" error.
688
-
689
- = 1.12.25 =
690
- * Changed: Updated translations.
691
- * Added: Gutenberg integration.
692
- * Fixed: Required mark for "Receive Copy" form field.
693
- * Fixed: Bug on selecting options from database.
694
-
695
- = 1.12.24 =
696
- * Minor fix: an incorrect link
697
-
698
- = 1.12.23 =
699
- * Improved: Insert placeholder functionality.
700
- * Fixed: Action after submission text for popup forms.
701
- * Fixed: Do not allow negative numbers as quantity.
702
- * Added: Loading for add-ons options.
703
- * Added: Premium version page new style.
704
- * Added: Add-ons page new style.
705
- * Fixed: Submission id bug.
706
- * Fixed: Security issue reported by Sairam Jetty.
707
-
708
- = 1.12.22 =
709
- * Fixed: Security issue with CSV export.
710
-
711
- = 1.12.21 =
712
- * Changed: DB field length.
713
-
714
- = 1.12.20 =
715
- * Added: New file types for Form Maker file upload form field.
716
- * Improved: Editing empty mini labels.
717
- * Fixed: Form Submissions CSV export.
718
-
719
- = 1.12.19 =
720
- * Fixed: Form Submissions table view for long texts.
721
- * Fixed: Displaying phone field value in form email notification.
722
- * Fixed: Bug on deleting a Page break.
723
-
724
- = 1.12.18 =
725
- * Changed: improved Form Submissions view: added tooltips for long labels of form fields.
726
- * Added: detailed descriptions of form fields inside the form editor
727
- * Fixed: UTF-8 text in Email body.
728
-
729
- = 1.12.17 =
730
- * Fixed: UTF-8 text for Email subject and Email from name.
731
-
732
- = 1.12.16 =
733
- * Improved: Email functionality of Form Maker.
734
- * Fixed: Multiple choice and single choice with long labels.
735
- * Fixed: Form submissions CSV export with UTF-8 encoding.
736
-
737
- = 1.12.15 =
738
- * Fixed: Error on adding a form field.
739
-
740
- = 1.12.14 =
741
- * Fixed: Form submissions page.
742
-
743
- = 1.12.13 =
744
- * Fixed: Bug on Popup forms on mobile.
745
- * Fixed: Major bug.
746
- * Fixed: Exclude Stripe field from submissions export.
747
- * Fixed: "Custom HTML" field label in conditional fields list.
748
- * Fixed: Edit table of form fields in submissions.
749
- * Fixed: Trim data inserted by MySQL mapping.
750
- * Fixed: Default values for payment multiple and payment single choices.
751
- * Changed: Prevent default on form enter.
752
-
753
- = 1.12.12 =
754
- * Changed: Improved query to get number of form submissions.
755
- * Changed: Email field length in DB.
756
-
757
- = 1.12.11 =
758
- * Fixed: Form preview does not show with widget on page with some Wordpress themes.
759
- * Fixed: Do not check conditionally hidden required fields.
760
- * Fixed: Not embedded forms do not show on form preview page.
761
- * Fixed: Post/page search on display options pages.
762
- * Fixed: Tooltip in "Add query" popup.
763
- * Fixed: Insert demo forms only on activate.
764
- * Changed: Edit country list popup design.
765
- * Fixed: Emailing fields with apostrophes in label.
766
- * Fixed: Popup forms background.
767
- * Changed: Czech translation.
768
- * Changed: Italian translation.
769
- * Fixed: Matrix field in email.
770
- * Changed: Disable widget in preview page.
771
- * Fixed: Widget functionality with Contact Form Maker.
772
- * Fixed: Form Maker user manual links.
773
- * Fixed: Default values for multiple and single choices.
774
- * Fixed: Add new theme.
775
- * Fixed: Redirect from Paypal.
776
-
777
- = 1.12.10 =
778
- * Fixed: a minor bug.
779
-
780
- = 1.12.9 =
781
- * Fixed: Date range field buttons position.
782
- * Fixed: Forms count in backend.
783
- * Fixed: Placeholder notice with password fields.
784
- * Added: Puerto Rico, Wales to country list.
785
-
786
-
787
- = 1.12.8 =
788
- * Updated: WD Library.
789
- * Updated: Support forum link.
790
-
791
- = 1.12.7 =
792
- * Added: Invisibe reCAPTCHA.
793
- * Improved: Compatibility with Contact Form Maker.
794
- * Improved: Stripe add-on styles.
795
- * Fixed: Some frontend styles.
796
- * Fixed: Fields width in forms manage page.
797
- * Changed: Field edit buttons place.
798
-
799
- = 1.12.6 =
800
- * Added: Full width functionality for fields.
801
- * Added: New Default Theme.
802
- * Added: Support forum and Review links.
803
- * Changed: Date field calendar icon.
804
- * Changed: Field manage functionality.
805
- * Changed: jQuery-UI styles.
806
- * Changed: Three form changed in new formats.
807
- * Improved: Responsiveness.
808
- * Fixed: Time, Date of Birth and Number fields validation also on mobile.
809
- * Fixed: Scroll to field on error.
810
- * Fixed: Right to left styles.
811
- * Fixed: Conflict with Yoast SEO plugin.
812
-
813
- = 1.12.5 =
814
- * Added: Hong Kong to country list.
815
- * Fixed: List of US states.
816
-
817
- = 1.12.4 =
818
- * Changed: Email validation field now allows + symbol
819
- * Changed: Remove Font Awesome.
820
- * Changed: Italian translation.
821
-
822
- = 1.12.3 =
823
- * Fixed: Get editor by id instead of active.
824
- * Fixed: Not found form id redirect to main page.
825
-
826
- = 1.12.2 =
827
- * Fixed: Border types bug
828
- * Fixed: Bug with PayPal IPN
829
- * Fixed: Date format syncronization with Save Progress add-on
830
-
831
- = 1.12.1 =
832
- * Changed: Add field button design.
833
- * Added: Show popup notice to install Backup WD plugin.
834
-
835
- = 1.12.0 =
836
- * Changed: Improved user interface of forms, submissions and options.
837
- * Changed: Separated field types into Basic, User Info, Layout, Advanced and Payment sections.
838
- * Changed: Simplified the structure of Form Options tabs.
839
- * Added: Drag and Drop builder button.
840
-
841
- = 1.11.11 =
842
- * Fixed: Conflict with Jetpack Contact Form module.
843
-
844
- = 1.11.8 =
845
- * Updated: WD Library.
846
-
847
- = 1.11.7 =
848
- * Fixed: Theme version control.
849
-
850
- = 1.11.6 =
851
- * Fixed: Shortcode editor pop-up styles.
852
- * Fixed: Scripts enqueue in Manage Forms page.
853
- * Fixed: MySQL Mapping fields list scrolling.
854
-
855
- = 1.11.5 =
856
- * Fixed: Bug on CSV/XML export.
857
- * Fixed: Google maps api conflict with other plugins.
858
- * Changed: Improved Matrix type field view in submissions.
859
- * Fixed: File upload field styles with "Inherit from website theme".
860
-
861
- = 1.11.4 =
862
- * Fixed: Bug on color picker when choosing transparency
863
- * Fixed: Bug on submissions edit
864
- * Fixed: Bug on "Inherit from website" theme
865
- * Fixed: Bug on Paypal notifications
866
- * Changed: Form Options tab id to avoid conflict with some plugins
867
-
868
-
869
- = 1.11.3 =
870
- * Added: Global option to enable Advanced Layout
871
- * Changed: Themes table field name: `params` to `css`
872
- * Fixed: Bug on PHP 5.2
873
- * Fixed: Uninstall bug in free version
874
- * Fixed: bug on generating Theme css
875
- * Fixed: CSS conflict with some ajax themes
876
-
877
- = 1.11.2 =
878
- * Added: Overview page
879
- * Removed: Featured Plugins, Featured Themes pages
880
- * Fixed: Security issue
881
- * Fixed: Themes - bug on save as copy
882
-
883
-
884
- = 1.11.1 =
885
- * Removed: Old forms support (created with Form Maker versions < 1.7.0)
886
- * Added: Form Header
887
- * Added: New Themes
888
- * Added: New Theme Editor
889
- * Added: Form Display Options (Embedded, Popup, Topbar, Scrollbox)
890
- * Fixed: Database creation on some versions of MySQL
891
- * Fixed: Removed html tags from csv and xml
892
-
893
- = 1.10.11 =
894
- * Added: Support forum links.
895
-
896
- = 1.10.10 =
897
- * Fixed: Bug on arithmetic captcha
898
-
899
- = 1.10.9 =
900
- * Changed: New logo
901
-
902
- = 1.10.8 =
903
- * Added: New form field type: Phone with flag
904
- * Fixed: Bug on captcha reset
905
-
906
- = 1.10.7 =
907
- * Changed: Improved captcha security
908
- * Fixed: Bug on matrix field
909
- * Fixed: Bug on conditional fields (for date field)
910
- * Added: Notification about old forms
911
-
912
- = 1.10.6 =
913
- * Fixed: Bug on spinner field
914
- * Fixed: Bug on matrix field
915
-
916
- = 1.10.5 =
917
- * Fixed: JS conflict on contact form submission
918
-
919
- = 1.10.4 =
920
- * Fixed: Conflict with Yoast SEO plugin
921
- * Fixed: Line breaks in textarea after incorrect captcha
922
-
923
- = 1.10.3 =
924
- * Fixed: Bug on PHP 5.3
925
-
926
- = 1.10.2 =
927
- * Added: New Global option "Use an alternative version of JS code on front-end:". Checking this box fixes JS conflicts with some themes, that alter inline JS.
928
-
929
- = 1.10.1 =
930
- * Added: Verified emails list in csv, xml files
931
-
932
- = 1.10 =
933
- * Changed: Field validation errors and notifications
934
- * Added: Realtime field validation
935
- * Changed: Improved NL translation
936
- * Fixed: Bug on verified emails
937
-
938
- = 1.9.18 =
939
- * Added: Filter verified emails and Export submissions with verified emails
940
-
941
- = 1.9.17 =
942
- * Fixed: Bug with search by ID in Submissions
943
- * Fixed: Bug with Validation (Regular Exp.)
944
-
945
- = 1.9.16 =
946
- * Fixed: Bug with Hidden field in custom text in Email
947
- * Fixed: Bug on email verification custom post
948
- * Added: Field type in field edit page
949
-
950
- = 1.9.15 =
951
- * Added: Password Confirmation field
952
-
953
- = 1.9.14 =
954
- * Fixed: Bug on CSV and XML export
955
-
956
- = 1.9.13 =
957
- * Fixed: Bug on Field label position (Left/Top)
958
- * Fixed: JS error on IE 11 and Microsoft Edge
959
-
960
- = 1.9.12 =
961
- * Added: Email Confirmation field
962
- * Fixed: Bug on CSV and XML export
963
-
964
- = 1.9.11 =
965
- * Changed: Filters now apply to CSV and XML export
966
-
967
- = 1.9.10 =
968
- * Fixed: Bug on "Advanced Layout"
969
-
970
- = 1.9.9 =
971
- * Changed: Featured plugins page
972
-
973
- = 1.9.8 =
974
- * Fixed: Unexpected behavior on pressing "Enter" key on back end form creator page
975
-
976
- = 1.9.7 =
977
- * Fixed: JS error on incorrect Google Maps API key
978
- * Added: Alert about incorrect Google Maps API key
979
-
980
- = 1.9.6 =
981
- * Added: Global option for Google Maps API key
982
- * Fixed: Google Maps API key warning in browser
983
-
984
- = 1.9.5 =
985
- * Changed: Improvements in "Select options from database" pop-up window for Select box, single and multiple choices
986
- * Fixed: Back end minor style issues
987
-
988
- = 1.9.3 =
989
- * Fixed: Bug with Date field in custom text in Email
990
- * Fixed: Bug on editing submissions with checkbox and radio fields with customized values
991
-
992
- = 1.9.2 =
993
- * Added: "View" button on submissions to open a sigle submission in a separate pop-up window
994
- * Fixed: Minor bugs on editing submissions
995
-
996
- = 1.9.1 =
997
- * Fixed: bug on date field on some browsers (Safari, Edge)
998
-
999
- = 1.9 =
1000
- * Changed: Improved Date picker functionality (new options: Dates to exclude, Default, Minimum, Maximum dates)
1001
- * Added: New field type: Date Range
1002
-
1003
- = 1.8.41 =
1004
- * Fixed: Bug on conditional fields (for multiple contact forms on the same page)
1005
-
1006
- = 1.8.40 =
1007
- * Changed: Style of required field asterisk
1008
- * Changed: Display the correct IDs and Names of the fields in the back end (Add/Edit field interface) to use in js/css
1009
-
1010
- = 1.8.39 =
1011
- * Fixed: Bug on Matrix field (additional attributes)
1012
-
1013
- = 1.8.38 =
1014
- * Fixed: Bug on Matrix field (special characters in row/column labels)
1015
-
1016
- = 1.8.36 =
1017
- * Fixed: Bug on long content in textarea fields
1018
-
1019
- = 1.8.35 =
1020
- * Fixed: Browser warning on Google Maps API version
1021
- * Fixed: Phone field style issue on Mac OS
1022
-
1023
- = 1.8.34 =
1024
- * Fixed: Some minor style issues
1025
-
1026
- = 1.8.33 =
1027
- * Fixed: Bug in Address field
1028
- * Fixed: Bug with Additional Attributes in Email field
1029
- * Changed: before_submit() function functionality
1030
-
1031
- = 1.8.32 =
1032
- * New Add-on: Calculator
1033
- Removed: deprecated Number field
1034
-
1035
- = 1.8.31 =
1036
- * Fixed: Issue with search in Submissions page
1037
-
1038
- = 1.8.30 =
1039
- * Added: Submission ID in csv export
1040
-
1041
- = 1.8.29 =
1042
- * Changed: Featured Plugins, Featured Themes pages design.
1043
-
1044
- = 1.8.28 =
1045
- * Fixed: Bug in Email Options
1046
- * Fixed: Bug in Conditional Fields
1047
- * Fixed: Bug in date field
1048
-
1049
- = 1.8.27 =
1050
- * Fixed: Bug in Conditional Fields
1051
- * Fixed: Bug with Additional Attributs in Multiple Choice
1052
-
1053
- = 1.8.26 =
1054
- * Fixed: Submissions page styles
1055
- * Fixed: Issue with IPv6
1056
-
1057
- = 1.8.25 =
1058
- * Fixed: Bug in conditional fields.
1059
- * Changed: Featured Plugins, Featured Themes pages design.
1060
-
1061
- = 1.8.24 =
1062
- * Added: File upload as a link in email
1063
-
1064
- = 1.8.23 =
1065
- * Fixed: Bug in textarea field with line breaks
1066
-
1067
- = 1.8.22 =
1068
- * Fixed: Conflict with some plugins
1069
-
1070
- = 1.8.21 =
1071
- * Fixed: Bug in selectbox
1072
-
1073
- = 1.8.20 =
1074
- * Added: Autofill with user data for email address and name fields
1075
-
1076
- = 1.8.19 =
1077
- * Changed: Back End design
1078
-
1079
- = 1.8.18 =
1080
- * Added: Date format validation
1081
- * Fixed: Recaptcha Validation bug
1082
-
1083
- = 1.8.17 =
1084
- * Added: Global Options
1085
-
1086
- = 1.8.16 =
1087
- * Fixed: User guide links
1088
-
1089
- = 1.8.15 =
1090
- * Changed: Back End Design for old forms
1091
-
1092
- = 1.8.14 =
1093
- * Fixed: Bug in PayPal field
1094
- * Changed: Matrix field display in email
1095
-
1096
- = 1.8.13 =
1097
- * Fixed: Style in form builder edit page
1098
- * Fixed: Bug in PayPal options
1099
-
1100
- = 1.8.12 =
1101
- * Changed: Submissions page styles
1102
-
1103
- = 1.8.11 =
1104
- * New Add-on: Stripe Integration
1105
-
1106
- = 1.8.10 =
1107
- * Fixed: Bug in name field
1108
- * Fixed: Bug in captcha
1109
-
1110
- = 1.8.9 =
1111
- * New Add-on: Save Progress
1112
-
1113
- = 1.8.8 =
1114
- * Fixed: Minor bug
1115
-
1116
- = 1.8.7 =
1117
- * New: New year promo
1118
-
1119
- = 1.8.6 =
1120
- * Changed: Reset button
1121
- * Fixed: Bug with scrolling in new field pop up
1122
- * Fixed: Bug in MySql mapping on firefox browser
1123
-
1124
- = 1.8.5 =
1125
- * Fixed: Bug in mysql mapping.
1126
- * Changed: Featured themes page.
1127
-
1128
- = 1.8.4 =
1129
- * Fixed: Bug in submissions
1130
-
1131
- = 1.8.3 =
1132
- * Changed: Backend design
1133
-
1134
- = 1.8.2 =
1135
- * New Add-on: Pushover Integration
1136
-
1137
- = 1.8.1 =
1138
- * Fixed: Bug in email options
1139
- * Changed: Backend design
1140
-
1141
- = 1.8.0 =
1142
- * Changed: Backend design
1143
-
1144
- = 1.7.97 =
1145
- * Fixed: Bug in CSV/XML export
1146
-
1147
- = 1.7.96 =
1148
- * Added: Preview button
1149
- * Changed: Conditional fields limitation
1150
-
1151
- = 1.7.95 =
1152
- * Changed: csv/xml export file directory
1153
-
1154
- = 1.7.94 =
1155
- * Added: Progress bar for csv/xml export
1156
-
1157
- = 1.7.93 =
1158
- * Fixed: Bug in mailing
1159
- * Changed: Calendar styles
1160
-
1161
- = 1.7.92 =
1162
- * Fixed: Bug in mailing
1163
-
1164
- = 1.7.91 =
1165
- * Changed: Themes
1166
- * Fixed: Bug in block ip
1167
-
1168
- = 1.7.90 =
1169
- * Fixed: Bug in CSV/XML export
1170
-
1171
- = 1.7.89 =
1172
- * Fixed: Conflict with some plugins
1173
- * Changed: Styles
1174
-
1175
- = 1.7.88 =
1176
- * New: Doublescroll in submissions page
1177
- * New: Delete confirmation
1178
- * Fixed: Bug in mysql mapping for conditional fields
1179
-
1180
- = 1.7.87 =
1181
- * Fixed: Bug in CSV/XML export
1182
-
1183
- = 1.7.86 =
1184
- * Changed: CSV/XML export
1185
-
1186
- = 1.7.85 =
1187
- * Fixed: Bug in conditional fields
1188
-
1189
- = 1.7.84 =
1190
- * New Add-on: PDF Integration
1191
-
1192
- = 1.7.83 =
1193
- * New: Google Drive Integration Add-on
1194
-
1195
- = 1.7.82 =
1196
- * Fixed: Bug in demo forms
1197
-
1198
- = 1.7.81 =
1199
- * Fixed: Bug in update
1200
-
1201
- = 1.7.80 =
1202
- * Changed: Notices
1203
-
1204
- = 1.7.79 =
1205
- * Fixed: Bug in update
1206
-
1207
- = 1.7.78 =
1208
- * Changed: Themes
1209
-
1210
- = 1.7.77 =
1211
- * New: Dropbox Integration Add-on
1212
-
1213
- = 1.7.76 =
1214
- * Changed: Licensing/Donation page
1215
- * Changed: Notices
1216
-
1217
- = 1.7.75 =
1218
- * Changed: Submissions default ordering
1219
- * Changed: Featured Plugins page
1220
-
1221
- = 1.7.74 =
1222
- * Fixed: Minor bugs
1223
-
1224
- = 1.7.73 =
1225
- * New: Notices
1226
-
1227
- = 1.7.71 =
1228
- * New Add-on: Conditional Emails
1229
-
1230
- = 1.7.70 =
1231
- * Changed: Styles
1232
-
1233
- = 1.7.69 =
1234
- Minor bug fixed
1235
-
1236
- = 1.7.68 =
1237
- * Changed: Compability with WordPress 4.3
1238
-
1239
- = 1.7.67 =
1240
- * Fixed: Bug in slider field
1241
- * Fixed: Bug in address field
1242
- * Fixed: Bug in mysql mapping
1243
-
1244
- = 1.7.66 =
1245
- * Fixed: Bug in Undo/Rendo
1246
-
1247
- = 1.7.65 =
1248
- * New: Post Generation Add-on
1249
-
1250
- = 1.7.64 =
1251
- * Fixed: Minor bug
1252
-
1253
- = 1.7.63 =
1254
- * New: Add-ons page logo
1255
-
1256
- = 1.7.62 =
1257
- * New Add-on: User Registration
1258
-
1259
- = 1.7.61 =
1260
- * New: Form Maker Add-ons page
1261
-
1262
- = 1.7.60 =
1263
- * Fixed: Minor bug
1264
-
1265
- = 1.7.59 =
1266
- * Fixed: Bug in csv/xml export
1267
-
1268
- = 1.7.58 =
1269
- * Fixed: Minor bugs
1270
- * Added: Email verification custom post
1271
-
1272
- = 1.7.57 =
1273
- * Fixed: Security issue
1274
-
1275
- = 1.7.56 =
1276
- * New: ReCaptcha version 2.0
1277
- * New: Arithmetic Captcha
1278
-
1279
- = 1.7.55 =
1280
- * New: Undo/Redo form
1281
-
1282
- = 1.7.54 =
1283
- bug in conditional fields fixed
1284
-
1285
- = 1.7.53 =
1286
- bug in select field fixed
1287
-
1288
- = 1.7.52 =
1289
- minor bugs fixed
1290
-
1291
- = 1.7.51 =
1292
- * Changed: Featured plugins page.
1293
- * New: Featured themes page.
1294
-
1295
- = 1.7.50 =
1296
- minor bugs fixed
1297
-
1298
- = 1.7.49 =
1299
- Limited up to 7 fields to add
1300
- Bug fixed
1301
-
1302
- = 1.7.48 =
1303
- bug in radio and matrix fields fixed
1304
-
1305
- = 1.7.47 =
1306
- Show custom html and section break id
1307
-
1308
- = 1.7.46 =
1309
- Limited up to 9 fields to add
1310
- * New: Enable/Disable Title and Middle Name for Name field
1311
-
1312
- = 1.7.45 =
1313
- * New: Option to disable past days in date picker
1314
-
1315
- = 1.7.44 =
1316
- security issue fixed
1317
-
1318
- = 1.7.43 =
1319
- * New: Email verification
1320
-
1321
- = 1.7.42 =
1322
- bug in recaprcha fixed
1323
- change links
1324
-
1325
- = 1.7.40 =
1326
- Allow to use entry values in "Custom text after submission"
1327
-
1328
- = 1.7.39 =
1329
- * New: User informetion in mysql mapping
1330
- * Fixed: Country names
1331
-
1332
- = 1.7.38 =
1333
- bug fixed in stats
1334
- change field value type to longtext
1335
-
1336
- = 1.7.37 =
1337
- Optimize csv/xml export
1338
-
1339
- = 1.7.35 =
1340
- * New: Email empty fields option
1341
-
1342
- = 1.7.34 =
1343
- * New: Validation (Regular Exp.)
1344
- * Fixed: Select field duplication
1345
-
1346
- = 1.7.33 =
1347
- bug in address field fixed
1348
-
1349
- = 1.7.32 =
1350
- bug fixed
1351
-
1352
- = 1.7.31 =
1353
- Bug fixed: Hidden field save to DB.
1354
- * New: Drag and drop options in multiple, single choices and select box.
1355
- * New: Select options from database.
1356
- * New: Add image in email as image.
1357
- * New: Additional clauses within conditional fields.
1358
- * New: Search submissions by ID.
1359
- * New: Submission ID in email.
1360
-
1361
- = 1.7.30 =
1362
- Cache issue fixed
1363
-
1364
- = 1.7.29 =
1365
- Bug fixed: Empty email "From name".
1366
- Bug fixed: Delete theme.
1367
-
1368
- = 1.7.28 =
1369
- Bug fixed: Edit submissions.
1370
- Bug fixed: Conditional fielsd with quota in labels
1371
-
1372
- = 1.7.27 =
1373
- bug fixed in csv\xml export
1374
-
1375
- = 1.7.26 =
1376
- bug fixed in email content
1377
-
1378
- = 1.7.25 =
1379
- remove fancybox lightbox
1380
-
1381
- = 1.7.24 =
1382
- display php function to publish contact form
1383
-
1384
- = 1.7.23 =
1385
- bug in Recaptcha fixed
1386
-
1387
- = 1.7.22 =
1388
- Form field reordering using Drag&Drop
1389
-
1390
- = 1.7.21 =
1391
- wp 4.0.1 shortcode issue fixed
1392
-
1393
- = 1.7.18 =
1394
- pagination with input
1395
-
1396
- = 1.7.17 =
1397
- bug fixed in condition fileds
1398
-
1399
- = 1.7.16 =
1400
- show submitter information in popup (Country, CountryCode, City, Latitude, Longitude)
1401
-
1402
- = 1.7.15 =
1403
- bug fixed
1404
-
1405
- = 1.7.14 =
1406
- csv, xml export mark on map
1407
-
1408
- = 1.7.13 =
1409
- sql mapping
1410
-
1411
- = 1.7.12 =
1412
- extended name edit bug fixed (if first input is empty)
1413
-
1414
- = 1.7.11 =
1415
- hidden field edit bug fixed
1416
-
1417
- = 1.7.10 =
1418
- security issue fixed
1419
-
1420
- = 1.7.9 =
1421
- line break in custom text in email
1422
-
1423
- = 1.7.8 =
1424
- bug fixed in required radio field
1425
-
1426
- = 1.7.7 =
1427
- bug fixed in adding new contact form
1428
-
1429
- = 1.7.6 =
1430
- new email options, conditional fileds
1431
-
1432
- = 1.7.5 =
1433
- conflict with Jetpack Contact Form module fixed
1434
-
1435
- = 1.7.4 =
1436
- bug fixed in form options
1437
-
1438
- = 1.7.2 =
1439
- improve themes
1440
-
1441
- = 1.7.1 =
1442
- bug fixed in email options
1443
-
1444
- = 1.7 =
1445
- Div structured, responsive form
1446
- Editable html form layout
1447
- New themes
1448
-
1449
- = 1.6.6 =
1450
- * fix security issue which was reported by Mateusz Lach
1451
- = 1.6.4 =
1452
- * Added featured plugins
1453
- = 1.6.3 =
1454
- * From Name, From Email in Form options
1455
- = 1.5.0 =
1456
- * Survey Tools (Star Rating, Scale Rating, Spinner, Slider, Range, Grading, Matrix)
1457
- = 1.4.0 =
1458
- * Customizable Email message for Administrator and Users
1459
- = 1.3.0 =
1460
- * Actions after form Submission:
1461
- - Stay on form:
1462
- - To go to Post,Page after the form submission:
1463
- - Custom text after the form submission:
1464
- - URL: The user is redirected to the provided URL after the form submission.
1465
- * Edit javascript of the form:
1466
- * Save as the copy of the form:
1467
- * Themes: There are 43 standard themes included in Form Maker
1468
- * New form fields:
1469
- - Address field
1470
- - Address mark on map form field
1471
- - Number form field
1472
- - Phone form field
1473
- - Date 3 different form field
1474
- - Time form field
1475
- - Country list form field
1476
- - Recapthca form field
1477
- * Pagebreak of the [Wordpress Form](http://wordpress.org/plugins/form-maker/) Maker: This can be used to break the form into distinct pages.
1478
- * Section Break of the Form Maker: This option allows adding a section break to the form page.
1479
- * For each form certain types of statistical data are available in the form builder tool:
1480
- * Entries of a form: The number of submitted forms in the form builder tool.
1481
- * Views of a form: The number of times the form has been viewed.
1482
- * Conversion Rate of a form: The percentage of submitted forms to the overall number of views.
1483
-
1484
- = 1.0.0 =
1485
- Initial version
 
 
 
1
+ === Form Maker by 10Web - Mobile-Friendly Drag & Drop Contact Form Builder ===
2
+ Contributors: webdorado,10web,wdsupport,formmakersupport
3
+ Tags: form, forms, form builder, contact form, feedback, custom form, contact, web contact form, captcha, email, form manager, survey
4
+ Requires at least: 4.6
5
+ Tested up to: 5.1
6
+ Stable tag: 1.13.8
7
+ License: GPLv2 or later
8
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
+
10
+ Form Maker is the leading drag & drop plugin for building forms of any complexity in just a few clicks.
11
+
12
+ == Description ==
13
+
14
+ Form Maker is the leading drag & drop plugin for building forms of any complexity in just a few clicks.
15
+
16
+ = Useful Links: =
17
+
18
+ [Live Demo](https://demo.10web.io/form-maker/)
19
+
20
+
21
+ [Demo Admin](https://admindemo.10web.io/?product_name=form-maker)
22
+
23
+
24
+ [Premium Form Maker by 10Web](https://10web.io/plugins/wordpress-form-maker/)
25
+
26
+
27
+ [Special Offer for all Premium Plugins](https://10web.io/plugins-bundle-pricing/)
28
+
29
+ https://www.youtube.com/watch?v=vxxKfhxIS44
30
+
31
+
32
+ Looking for the perfect form plugin that’ll save you time and effort?
33
+
34
+ Is matching your website design with your forms difficult?
35
+
36
+ Finding it hard to build lengthy and advanced forms?
37
+
38
+
39
+ == Form Maker Features ==
40
+
41
+ **Intuitive Interface**
42
+ Drag and drop to build complex forms with just a few clicks.
43
+
44
+ **Mobile-Friendly and Responsive**
45
+ Your forms will look great on all resolutions and devices: mobile, tablet, and desktop.
46
+
47
+ **Field Types**
48
+ 43 different form field types to help you create just the form you need.
49
+
50
+ **Embed Easily**
51
+ Display your forms as popups, top bars or scroll boxes or embed them into blog posts.
52
+
53
+ **Pre-built Templates**
54
+ Pick from five form template options to save time.
55
+
56
+ **Fully Customizable Themes**
57
+ Use one of our fifteen beautiful themes to make your forms match website design.
58
+
59
+ **Manage Submissions**
60
+ Set automatic email replies, track and export all your entries, and more.
61
+
62
+ **Protection from Spam**
63
+ Block IPs and set captchas to avoid spam.
64
+
65
+ **Receive Payments\***
66
+ Get payments and donations using integrated PayPal and Stripe gateways.
67
+
68
+ **Conditional Logic**
69
+ Build forms with complex conditional logic.
70
+
71
+ **Multi-Page Forms**
72
+ Divide up lengthy forms into pages to provide better user experience.
73
+
74
+ **File Upload\***
75
+ Your users can upload files to your forms.
76
+
77
+ _\* Premium version only_
78
+
79
+ == Form Maker Extensions ==
80
+ _[Available in Plugins Bundle](https://10web.io/plugins/wordpress-form-maker/#product_pricing)_
81
+
82
+ **Save Form Progress**
83
+ Your users can save unfinished entries and continue anytime.
84
+
85
+ **Conditional Mailing**
86
+ Send out emails to user groups based on submitted forms.
87
+
88
+ **Export/Import**
89
+ Export form entries and forms in the XML format and import them into another site afterwards.
90
+
91
+ **Pushover**
92
+ Get a notification on your phone whenever there is an entry submission.
93
+
94
+ **Mailchimp Integration**
95
+ Create Mailchimp signup forms and expand your lead list.
96
+
97
+ **WordPress Registration**
98
+ Build WP user registration forms and expand the user base of your site.
99
+
100
+ **Post Generation**
101
+ Use a form to invite your users to submit guest posts.
102
+
103
+ **Dropbox Integration**
104
+ Store attachments received from form entries in your Dropbox.
105
+
106
+ **Google Drive Integration**
107
+ Upload received form attachments straight to your Google Drive.
108
+
109
+ **PDF Integration**
110
+ Use content from submitted entries to create PDFs.
111
+
112
+ **Stripe**
113
+ Your users can make credit card payments via Stripe, and we’ll transfer them to your bank account automatically.
114
+
115
+ **Calculator**
116
+ Build forms that contain automatically calculated fields.
117
+
118
+
119
+ == World Class Customer Support ==
120
+ * Low response time
121
+ We always respond within a few hours.
122
+ * Quick issue resolution
123
+ Resolving an issue never takes more than 24 hours.
124
+
125
+
126
+ == Just ask our users ==
127
+
128
+ > I had tried several form plugins but I was always searching for a better one.
129
+ > Then I stumbled Formmaker just by chance and thought to give a try.
130
+ > I was thrilled to see its features. It has more than everything I expected. Very customizable and easy to use.
131
+ > Now I don’t search for form plugin anymore
132
+ > Lots of thanks to the developers of this plugin.
133
+ > **by [@mayank0522](https://wordpress.org/support/topic/a-must-have-plugin-223/)**
134
+
135
+
136
+ > If I could give this plugin more than 5 stars I would!
137
+ > The level of control is extremely nice – even with the free version – though I quickly purchased the PRO version!
138
+ > And the level of customer service in troubleshooting forum questions is incredible!
139
+ > Very impressed with the plugin – but even more so with the way they interact with and help users get to what they need!
140
+ > Great job guys!!
141
+ > **by [@JonathanWilson99](https://wordpress.org/support/topic/amazing-form-plugin/)**
142
+
143
+
144
+ > This is the best plugin for creating functional forms and very user friendly even for the none technical users.
145
+ > Absolutely recommend everyone to use this one.
146
+ > Thanks a lot guys!!!
147
+ > **by [@denisecox](https://wordpress.org/support/topic/wonderful-form-builder-plugin/)**
148
+
149
+ == Steps for creating a website form ==
150
+ 1. Install Form Maker by 10Web.
151
+ 2. Create a form in a few clicks.
152
+ 3. Publish your form.
153
+
154
+
155
+ > **[Premium version adds](https://10web.io/plugins/wordpress-form-maker/)**
156
+ >
157
+ > * Unlimited fields in one form
158
+ > * File Upload field
159
+ > * PayPal Integration
160
+ > * Stripe Integration with Extension
161
+ > * Google Maps API Integration
162
+ > * Front-End Submissions
163
+
164
+
165
+ == SETTINGS/CUSTOMIZATION ==
166
+
167
+ _\*Some customizations described here are available in Premium version. Please refer to feature summary for additional info._
168
+
169
+ Form Maker plugin provides a full range of options and features you can tailor to your needs. Each of the entries you create will have its own set of options and display settings. Under the options you can choose a theme for each form, adjust email options, choose what happens after the user submits, set conditional logic, and choose one of the available payment options, such as PayPal and Stripe (Extension). Under the display settings you can adjust the options for each form display type.
170
+
171
+ The available themes are fully configurable, allowing you make the necessary adjustments to the header, content, input box, buttons, choices, pagination, and add custom CSS. You can change the header background color, adjust the parameters for title, description and header image,customize the parameters for buttons, adjust the settings for single and multiple choice questions, and many more. The changes you make to the settings will immediately be displayed in the form preview next to the settings box.
172
+
173
+ With conditional fields option you can set to hide/show specific fields based on the selections your visitors make. You just choose the field you want to show or hide, then set the conditions based on which the field will appear or will be hidden. The plugin features a user-friendly interface, which makes it easy to create, style and customize the forms.
174
+
175
+
176
+
177
+ == Privacy Notices ==
178
+
179
+ Form Maker plugin does not collect and store any data of your users on 10Web's end. All data submitted by your website visitors is stored in your website database. With every form submission Form Maker plugin collects users' IP address and WordPress user ID for logged in users. From this perspective, you may be subject to GDPR compliance.
180
+
181
+ Form Maker forms imply interaction between website visitors and website owner. As such you may publish forms that require input of Private data. You need to get explicit consent from your users to comply with GDPR. Under GDPR your users may request access and/or erasure of their entry data at any time. Here you can find how to export and/or delete submissions.
182
+
183
+
184
+
185
+ == Installation ==
186
+
187
+ After downloading the ZIP file,
188
+
189
+ 1. Log in to the administrator panel.
190
+ 1. Go to Plugins Add &gt; New &gt; Upload.
191
+ 1. Click &quot;Choose file&quot; (&quot;Browse&quot;) and select the downloaded zip file.
192
+ _For Mac Users_
193
+ _Go to your Downloads folder and locate the folder with the plugin. Right-click on the folder and select Compress. Now you have a newly created .zip file which can be installed as described here._
194
+ 1. Click &quot;Install Now&quot; button.
195
+ 1. Click &quot;Activate Plugin&quot; button for activating the plugin.
196
+
197
+ If the installation does not succeed, please contact us for help.
198
+
199
+ After the installation is finished, you can go ahead and start working on your contact forms. Navigate to **Form Maker &gt; Forms** page to build your very first form. Form Maker plugin provides a few sample forms, which you can quickly edit and publish.
200
+
201
+ Using **Form Maker &gt; Forms** page, you can manage existing forms, perform Bulk Actions, such as Publish, Unpublish, Duplicate or Delete. Select the necessary form, choose the bulk action, then press Apply. Also, you can search for your form by writing its title in the top Search input.
202
+
203
+ **Adding Fields**
204
+ To add a new field to your form, drag New Field button to the area where you wish to place the field. The field editor toolbox will be opened automatically. Click on the field set from which you are going to choose the field, for instance, User Info Fields. Press Name button from this field set to add a Name input to your contact form. Then click Add and the field will be placed to the area you selected initially.
205
+
206
+ It is also possible to search among the fields when adding a new field to your form. Use Filter input at the top left corner of fields toolbox. For example, you can search &quot;phone&quot; and all Phone fields will be filtered.
207
+
208
+ You can edit your form fields anytime by double-clicking on them. Alternatively, you can open field editor toolbox by clicking on a field once, then pressing the small pencil icon above. To change the placement of your fields, simply drag the field to the necessary area.
209
+
210
+ After adding your form fields and updating your form, you are able to Undo or Redo the changes you have made. Please note, that these two buttons appear at the top of your form only after you modify the form and save the changes.
211
+
212
+ == Screenshots ==
213
+ 1. Reservation form created using Form Maker
214
+ 2. Pop-up form created using Form Maker
215
+ 3. Product Survey with radio buttons, evaluation, star rating, etc.
216
+ 4. Feedback form with number range sliders, radio buttons, etc.
217
+ 5. Form Maker - Drag and Drop Form builder interface
218
+ 6. Form Maker - searching field types and adding a field to a form
219
+ 7. Form Maker Options - Save data to database, save uploads, etc.
220
+ 8. Form Maker - Manage form submissions, export, block ips
221
+
222
+
223
+ == Frequently Asked Questions ==
224
+
225
+ = What is Form Maker used for? =
226
+
227
+ **Form Maker** is a modern and intuitive free online application form creator plugin developed for WordPress. It lets you build personalized, perfect-looking responsive forms with its elegant drag and drop interface.
228
+
229
+ You can create web forms free of additional coding, with just a few clicks. The functionality of Form Maker is excellent for any kind of online questionnaires.
230
+
231
+ Form Maker can be used for creating multiple types of forms, including contact forms, evaluation form, application forms, quizzes/tests or survey forms, online order forms and etc. Form Maker includes various types of fields which can be modified and/or edited.
232
+
233
+ Whether you are a WordPress beginner or a web guru, Form Maker is the perfect choice. The dynamic web form builder tool comes with clean visual tools and options, and you do not need to have any web development skills to build a form.
234
+
235
+ = How can I create a contact form with Form Maker? =
236
+
237
+ Navigate to **Form Maker > Forms** page to build your very first contact form. This contact form creator plugin provides a few sample forms, which you can quickly edit and publish.
238
+
239
+ Using **Form Maker > Forms** page, you can manage existing forms, perform **Bulk Actions,** such as **Publish, Unpublish, Duplicate** or **Delete.** Select the necessary form, choose the bulk action, then press **Apply.** Also, you can search for your contact form by writing its title in the top **Search** input.
240
+
241
+ Press **Add New** button from **Forms** page, and you will be redirected to **Form Editor** page. Make sure to write a **Title** for this contact form, then choose the **Theme** which sets the appearance of your form. In case you wish to display the contact form with the same style as your website theme, select **Inherit From Website Theme** option from **Theme** select box.
242
+
243
+ To add a new field with this application form creator, drag **New Field** button to the area where you wish to place the field. The field editor toolbox of Form Maker will be opened automatically. Click on the field set from which you are going to choose the form field, for instance, **User Info Fields.** Press **Name** button from this field set to add a Name input to your form. Then click **Add** and the field will be placed to the area of the form you selected initially.
244
+
245
+ It is also possible to search among the form builder fields when adding a new field to your form. Use **Filter** input at the top left corner of fields toolbox. For example, you can search "phone" and all Phone fields will be filtered.
246
+
247
+ = Can I add a custom header with text and image above my contact form? =
248
+
249
+ This dynamic contact form builder lets you have a nice header section on your forms, which can contain additional content, as well as images with animations. Click on **Form Header** bar of your form to open its toolbox and provide a **Title.** This is the form heading, which will appear above your form. In addition, you can write a **Description** to appear right below the Title of your form. This comes handy, in case you need to write an introduction for your form.
250
+
251
+ You can also have an image on your form header and set it to appear with an animation effect. Press **Add Image** button to upload and select a picture from **WordPress Media Library.** Then choose the animation effect using Image Animation option.
252
+
253
+ In case you don't want the **Header Image** of your forms to appear on smartphones and tablets, mark **Hide Image on Mobile** option as checked.
254
+
255
+ Make sure to **Publish/Update** the form to save the change you made.
256
+
257
+ = Does Form Maker support conditional logic and how can I use it? =
258
+
259
+ Yes, another fantastic feature of this custom form creator plugin is its **Conditional Fields.** This lets you **show** or **hide** fields of your form based on certain selections submitter makes.
260
+
261
+ The structure of conditional fields in this contact form generator form builder is the following: You can specify and/or show/hide a field, when condition is true and provide conditions below, e.g. Show "How many visitors will you have" if "Will you have visitors" is "Yes".
262
+
263
+ Go to **Form Options** of your form, then click **Conditional Fields** tab to start the setup. Press **Add Condition** button to configure the first condition of your form.
264
+
265
+ **Show/Hide** select box of this form builder plugin represents the action which will be completed, if all or any of the condition statements are fulfilled. Use the second drop-down menu to select the form builder field which will be shown or hidden.
266
+
267
+ Click the little **Plus (+)** icon to add the statement of your form condition.
268
+
269
+ For example, let's assume there is a **Single Choice** field on your form titled **Inquiry type.** And you wish to show **Message** field in case users choose **Support Request** as the type of their inquiry. The condition you configure needs to have the following logic:
270
+
271
+ *Show [Message] if [all] of the following match:*
272
+ *[Inquiry type] is [Support request]*
273
+
274
+ Make sure to hit **Update** after setting up Conditional Fields on your Form Maker.
275
+
276
+ = What styling options do the forms include? =
277
+
278
+ This secure form builder plugin comes with **14 customizable themes,** which you can use to design your forms. Each theme of Form Maker provides a set of user-friendly options to change font size, alignment of the form, colors, modify paddings and more. You can edit the existing themes, or create your own by clicking **Add New** button.
279
+
280
+ To set a initial default theme for your forms, press on the star icon next to the theme you would like to use. You can always change the theme by editing your forms.
281
+
282
+ Options of Form Maker Themes are divided into the following sections:
283
+
284
+ * Global Parameters
285
+ * Form Header
286
+ * Content
287
+ * Inputbox
288
+ * Choices (Multiple and Single)
289
+ * General Buttons
290
+ * Pagination
291
+ * Form Buttons
292
+ * Close (Minimize) Button
293
+ * Minimize Text
294
+ * Other
295
+ * Custom CSS
296
+
297
+ You can preview the design of each form theme under Preview block. In case you created forms with multiple pages, you can change its Pagination Type, setting it to Step, Percentage or None.
298
+
299
+ Custom CSS option in Themes of this offline form builder lets you write additional CSS code and customize your forms further. All CSS rules apply to this editor. Make sure to press Save after modifying the form theme.
300
+
301
+ = Does Form Maker use auto-respondent feature? =
302
+
303
+ You can use **Email Options** of Form Maker to send a fully customizable letter to the submitter. The entries can be included within the email. Just select the form you want to edit, then navigate to **Form Options &gt; Email Options.**
304
+
305
+ This html5 form builder plugin lets you send submitted information to one or multiple email addresses. Furthermore, you can also send a confirmation email to the submitter and let them know you have received their application.
306
+
307
+ Enable Send E-mail from **Form Options &gt; Email Options** tab and start configuring mailing settings. Most options require the same configuration for Email to Administrator and Email to User on the forms. However, there are a few settings which are unique.
308
+
309
+ **Email to Administrator**
310
+
311
+ This section of Email Options allows you to set up notifications of form submissions for website owners.
312
+
313
+ **Email to User**
314
+
315
+ **Send to.** Use this setting to select the email field of your form, to which the submissions will be sent.
316
+
317
+ Important! In case you do not have an email input created from User Info Fields &gt; Email type on your form, the following error message will appear:
318
+
319
+ &quot;There is no email field&quot;.
320
+
321
+ **Email Verification.** Activate this option, in case you would like the users to verify their email addresses. If it&#39;s enabled, the user email will contain a verification link. Clicking on this link set the user email address as verified.
322
+
323
+ **Verification link expires in.** Use this option to specify a time period (hours), during which the user will be able to verify their email address.
324
+
325
+ **Edit Post.** Click this link to edit the content of Email Verification post. This is is the page, where users will be redirected after they click on the verification link in user email.
326
+
327
+ = Can I create an online order form with this plugin? =
328
+
329
+ *Payment support is available in the Premium version of the plugin.*
330
+
331
+ In order to have a functional payment form, first and foremost, you need to have **Payment Fields** added to it. This way, Form Maker plugin will turn into an online order form creator quickly and easily. Build compact shopping forms, hotel reservation, online application or ticket sales forms with this feature.
332
+
333
+ Note: You need to set up **Form Options > Payment Options** of your form in order to receive payments on your account. Follow the steps described on this section to do that.
334
+
335
+ Configuring Payment Options, you can use Form Maker as an order form generator and let users make payments through your form. Default payment gateway of Form Maker is **PayPal.** Select **PayPal** as **Payment Method** from Form **Options &gt; Payment Options** tab and configure corresponding options.
336
+
337
+ Also, you can easily integrate the forms builder plugin with Stripe using its Stripe Integration extension ( [Available in Plugins Bundle](https://10web.io/plugins/wordpress-form-maker/#product_pricing) ).
338
+
339
+ **Payment Currency.** Choose the currency to be used for the payments made through your form. Note, that the selected currency symbol will only display on the front-end of the published form.
340
+
341
+ **Tax (%).** Specify the percentage of the tax for your payment form. It will be calculated from the total payment amount of your form, and will be added to the grand total.
342
+
343
+ **Checkout Mode.** Select the checkout mode for your form. Testmode will display PayPal Sandbox after submission, which allows you to run payment tests. When you are ready to receive payments, enable Production mode.
344
+
345
+ **Paypal email.** Provide the email address of a valid PayPal account. This account will be used as the recipient of payments through your form.
346
+
347
+ = Where can I check the submissions of my forms? =
348
+
349
+ **Submissions** page of this HTML form generator plugin lets you view the full record of submissions of each form. Choose your form from **Select a form** drop-down box to display its submitted information. Furthermore, you are able to view **Statistics** of **Single/Multiple Choice** and **Select Box** fields.
350
+
351
+ **Entries / Conversion Rate / Views.** These attributes of **Submissions** page will help you quickly view the statistics of the selected form.
352
+
353
+ **Export to CSV / Export to XML.** You are able to download all submissions of each contact form in **CSV** or **XML** format by clicking on these buttons.
354
+
355
+ **Show Filters.** Form Maker lets you filter form submissions by values provided by user, e.g. submitter's email address, name and more. Press **Show Filters** button on form submissions, write the values you wish to search with, then press **Search.** Click **Reset** button to clear the filters.
356
+
357
+ **Add/Remove Columns.** This button will help you customize the columns which display in submissions of the selected contact form. Click on the button and unmark the columns you wish to hide.
358
+
359
+ *Note: Adding/Removing columns does not delete columns from the submissions table of your contact forms. It just hides them until you activate them again.*
360
+
361
+ **Block IPs / Unblock IPs.** In case you are receiving spam submissions from certain IP addresses, you can block these addresses. Mark all spam submissions as checked, choose **Block IPs** option from **Bulk Actions** and press **Apply.** You are able to unblock these IP addresses anytime.
362
+
363
+ **Delete.** If you wish to remove some or all submissions of a contact form, mark them as checked and select **Delete** option from **Bulk Actions.** Clicking **Apply** will delete these entries permanently.
364
+
365
+ = Can user be redirected to another page after submitting the form? =
366
+
367
+ Form Maker plugin allows you to configure different actions which occur after form submission. For instance, you can display a &quot;Thank you&quot; message after users submit the form, or redirect them to another page, or more.
368
+
369
+ Navigate to Form Options &gt; Actions After Submissions tab, and select one of the options below to set up the action that occurs after users submit your form.
370
+
371
+ * **Stay on Form.** This action will reload the form page and keep the submitter on the same page.
372
+ * **Post.** Select this option to redirect users to a specific post after they hit Submit. You will then be able to select the post from Post dropdown menu.
373
+ * **Page.** You can also redirect users to a selected page. Choose this option and specify the destination using Page dropdown menu.
374
+ * **Custom text.** Use this action in case you wish to display a &quot;Thank you&quot; message after users submit the form. The editor box accepts text, basic HTML, as well as values of form fields. Include them to the content by pressing on the top buttons indicating form fields.
375
+ * **URL.** Configure redirection from your forms to any page with this action after submission. Mark URL option, then provide the absolute path of the link to the input that appears.
376
+
377
+ = What verification methods does Form Maker use? =
378
+
379
+ Form Maker uses modern verification methods, such as ReCaptcha and invisible ReCaptcha. Please note that will need to obtain ReCaptcha keys to use these options. Otherwise you can use Simple Captcha and Arithmetical Captcha which use standard word verification and arithmetical expressions respectively.
380
+
381
+ = Can I use Form Maker to create a registration form? =
382
+
383
+ You can register users on your website with the help of Form Maker WordPress Registration Extension ( [Available in Plugins Bundle](https://10web.io/plugins/wordpress-form-maker/#product_pricing) ). Install the Extension and use it alongside the free version of Form Maker plugin.
384
+
385
+ You are able to ask users to provide username, email address and password for their account. The registration of users is done upon completing the form created by this visual form builder plugin.
386
+
387
+ = Is it possible to publish a contact form as a widget? =
388
+
389
+ You can publish your form not only using **Display Options** of the web form builder tool, but also as a widget. Go to **Appearance > Widgets** page to place your form on any widget area of your website theme.
390
+
391
+ Search for **Form Maker widget** and drag it to the widget area where you wish to place your form. Specify a **Title** for the widget and choose the form you wish to publish. Press **Save** after making these changes.
392
+
393
+ = Can the form submissions be shown to site visitors? =
394
+
395
+ **Premium version** of Form Maker plugin allows you to publish submissions on front-end of your website.
396
+
397
+ This form creator plugin lets you select user roles which will be able to view the published submissions. This can be done from **Form Options > General Options** section. Also, in the same section, you are able to choose fields to hide from front-end submissions.
398
+
399
+ Firstly, add/edit the page or post, where you wish to publish the submissions of form. Then press **Add Submission** button from the top of the post editor.
400
+
401
+ **Select a Form.** Use this drop-down to choose the form, submissions of which you would like to publish.
402
+
403
+ **Select Date Range.** You can display form submissions from a specific date range. Use this option to select **From** and **To** dates.
404
+
405
+ **Select fields.** Use this option to choose which columns to show on the form. Uncheck the options, which you need to hide on front-end submissions.
406
+
407
+ **Export to / Show.** These two settings are responsible for showing the rest of the attributes of front-end submissions. You can enable/disable **CSV/XML** export buttons, **Statistics, Views, Conversion Rate** and other additional information.
408
+
409
+ After configuring all necessary options, press **Insert.** Publish your page with form submissions, and you will be able to view them on front-end.
410
+
411
+ = Can I let users choose between PayPal or offline payments when submitting the form? =
412
+
413
+ **Premium version** of this handy forms plugin has the features and functions to achieve this. You need to use **Conditional Fields** and **Payment Fields** of the plugin. Here are the necessary steps.
414
+
415
+ Firstly, add one **Single Choice** field from **Basic Fields** of Form Maker plugin. It should contain the following two options:
416
+
417
+ * Pay with PayPal
418
+ * Pay offline
419
+
420
+ Afterwards, add two sets of almost identical fields, one of them created with regular form fields, second - with **Payment fields.**
421
+
422
+ Then you can set conditions from **Form Options > Conditional Fields,** if the user chooses PayPal, payment fields will appear, otherwise, regular fields will.
423
+
424
+ The user will not be redirected to PayPal if they make their selections using regular form fields.
425
+
426
+ = How can a migrate Form Maker from one site to another? =
427
+
428
+ If you want to migrate Form Maker database tables from one WordPress site to another, you need to follow the instructions below.
429
+
430
+ *Please uninstall Form Maker if you have it installed on your second site first, then proceed with these steps:*
431
+
432
+ **On your first WordPress site:**
433
+
434
+ 1. Go to **PHPMyAdmin** of your site,
435
+ 2. open your WordPress site database,
436
+ 3. select **Export** menu item,
437
+ 4. change the radio button from **Quick** to **Custom,**
438
+ 5. unselect all tables and select the following 7 tables:
439
+
440
+ *[wp1_prefix]_formmaker*
441
+ *[wp1_prefix]_formmaker_blocked*
442
+ *[wp1_prefix]_formmaker_query*
443
+ *[wp1_prefix]_formmaker_sessions*
444
+ *[wp1_prefix]_formmaker_submits*
445
+ *[wp1_prefix]_formmaker_themes*
446
+ *[wp1_prefix]_formmaker_views*
447
+
448
+ (where **[wp1_prefix]** is your WordPress database prefix)
449
+
450
+ 6. scroll all the way down and press the **Go** button. This should export an SQL file containing those 7 tables.
451
+
452
+ **On your second WordPress site:**
453
+
454
+ 7. Go to your WordPress database,
455
+ 8. select **Import** menu item,
456
+ 9. browse for the exported SQL file,
457
+ 10. scroll all the way down and press **Go** button. This should import Form Maker tables to your WordPress database.
458
+
459
+ Now you need to change the prefix for those tables to the one that is set for your second WordPress database.
460
+
461
+ 11. Select **[wp1_prefix]_formmaker** table from the left pane of PHPMyAdmin of your second WordPress database,
462
+ 12. select **Operations** menu item from the top menu
463
+ 13. scroll to **Table Options** box and edit the value of **Rename table to** field with the second WordPress database prefix, so that the table name now looks like this: **[wp2_prefix]_formmaker** (where **[wp2_prefix]** is your second WordPress database prefix)
464
+ 14. do the same for other 6 tables.
465
+ 15. go to your second WordPress administration panel and install the Form Maker.
466
+
467
+ That's it! Now you should have your forms, submissions, and themes all set up.
468
+
469
+ = Characters in the submission CSV file do not appear correctly. How can I fix this? =
470
+
471
+ Please note, that this problem is not caused by Form Maker plugin. It is rather a formatting issue in Excel. However, you can prevent it the following way:
472
+
473
+ * Please open a new Microsoft Excel document first. Then go to **Data** tab from the menu and click on **From Text.**
474
+ * Choose the CSV file you need to view. You'll see a pop-up window with several options, you'll find the **File Origin** option along with them.
475
+ * Please select **Unicode (UTF-8)** for this dropdown and click **Next** if you need to edit other options, or just **Finish** to insert the document.
476
+
477
+ The special characters in the CSV submissions of your contact forms should appear correctly afterwards.
478
+
479
+ = I do not receive any submission emails of my forms. How can this be fixed? =
480
+
481
+ This might be a problem related to the hosting configurations of your website. You can check that the following way.
482
+
483
+ Please install [WP SMTP](https://wordpress.org/plugins/wp-smtp/) plugin and go to **Settings > WP SMTP** page. Scroll down to the bottom and send a test mail to your email address.
484
+
485
+ If the test email will be sent, then the issue is triggered by Form Maker plugin. Please contact [10Web Customer Care at WordPress.org Support Forums](https://wordpress.org/support/plugin/form-maker/). Our developers will have a closer look.
486
+
487
+ But if the test mail fails, the problem is on the server of your website. Please contact your hosting provider in this case, and ask them to enable mail functions on your site.
488
+
489
+ = My forms do not submit due to Javascript errors. How can they be eliminated? =
490
+
491
+ This problem could be related to permission settings of Form Maker files on your web server. Please check that the following way.
492
+
493
+ Connect to your website files via FTP connection and open the following two directories:
494
+
495
+ *wp-content/uploads/form-maker-frontend/js/*
496
+ *wp-content/uploads/form-maker-frontend/css/*
497
+
498
+ Please make sure all **.css** and **.js** files in these folders have their permissions set to **777.**
499
+
500
+ If the permissions are correct, please do not hesitate to contact [10Web Customer Care at WordPress.org Support Forums](https://wordpress.org/support/plugin/form-maker/).
501
+
502
+ = Is it possible to pass parameters from the page URL to form fields? =
503
+
504
+ To fill in values of parameters from a URL into Form Maker fields, it is necessary to implement a custom script. Please navigate to **Form Options > Javascript** page and add the following code inside **before_load()** function:
505
+
506
+ `function getParameterByName(name, url) {
507
+ if (!url) {
508
+ url = window.location.href;
509
+ }
510
+ name = name.replace(/[[]]/g, "$&");
511
+ var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
512
+ results = regex.exec(url);
513
+ if (!results) return null;
514
+ if (!results[2]) return '';
515
+ return decodeURIComponent(results[2].replace('/+/g', " "));
516
+ }
517
+ jQuery("#{{field_id}}").val(getParameterByName("{{param_name}}"));
518
+ jQuery("#{{field_id}}").attr("class", "input_active");`
519
+
520
+ Where **{{field_id}}** is the ID of the field you wish to prefill. Also, **{{param_name}}** is the name of the parameter in the URL.
521
+
522
+
523
+ == Changelog ==
524
+
525
+ = 1.13.8 =
526
+ * Fixed: Form submit bug.
527
+
528
+ = 1.13.7 =
529
+ * Added: Support for 'all' placeholder in actions after submission.
530
+ * Added: Provinces for Canada.
531
+ * Improved: Spam protection.
532
+ * Improved: Minify js, css.
533
+ * Changed: Some country names.
534
+ * Fixed: Two required "Table of fields" fields on a page.
535
+ * Fixed: Error on uninstalling from multisite.
536
+ * Fixed: Preview in themes edit page.
537
+ * Fixed: User guide links for tabs in form edit page.
538
+ * Fixed: Empty Simple Captcha input after form reset.
539
+ * Fixed: Remove unnecessary container from placeholders popup.
540
+
541
+ = 1.13.6 =
542
+ * Fixed: Payment info is not retrieved.
543
+
544
+ = 1.13.5 =
545
+ * Fixed: CSRF issue.
546
+ * Added: Banner to install 10Web manager.
547
+
548
+ = 1.13.4 =
549
+ * Fixed: Vulnerability on submissions page.
550
+
551
+ = 1.13.3 =
552
+ * Added: Functionality to add placeholders in "Select options from database" Where selector.
553
+ * Added: Functionality to use "Star rating" as a condition.
554
+ * Fixed: Security issue.
555
+ * Fixed: Link for attachment in email.
556
+ * Fixed: Allow "0" value for required fields.
557
+ * Fixed: Don't use the same title for the duplicated form.
558
+ * Fixed: Adding field to incorrect position.
559
+ * Fixed: Scroll to required address field.
560
+ * Fixed: Broken multiple pages.
561
+ * Fixed: MySQL mapping edit functionality.
562
+ * Fixed: Multisite support for add-ons.
563
+ * Fixed: Saving advanced layout.
564
+ * Fixed: 0 value is not saved in submissions for Payment single choice and Shipping fields.
565
+
566
+ = 1.13.2 =
567
+ * Changed: Links to 10Web.io.
568
+
569
+ = 1.13.1 =
570
+ * Fixed: Bug on checking if Address field is required.
571
+
572
+ = 1.13.0 =
573
+ * Added: Enable/Disable option for Form header.
574
+ * Added: Tax option for Stripe payments.
575
+ * Added: "Class name" option for "Single Line Text" field to allow add a css class for the field.
576
+ * Added: "Palestine" to country list field.
577
+ * Changed: Form editing page layout.
578
+ * Changed: Form Revisions functionality.
579
+ * Changed: Settings (Form Options) tab new design.
580
+ * Changed: Form Publishing tab new design.
581
+ * Changed: Selecting a Theme moved to Appearance.
582
+ * Changed: Make email options a separate tab.
583
+ * Changed: Remove required mark color from "Default" and "Inherit from site" themes.
584
+ * Changed: Inherit styles (font, color) from Elementor for Form maker widget.
585
+ * Fixed: Try to reproduce, try/catch curl part of code.
586
+ * Fixed: Requirement of table field should be affected on all rows of it.
587
+ * Fixed: The Like/Starting With options in WHERE of Select options from Database.
588
+ * Fixed: Remove the link of the word "Privacy Policy" when there is no Privacy Policy page.
589
+ * Fixed: Styles for rtl languages.
590
+ * Fixed: Addons settings for duplicated forms.
591
+ * Fixed: Required validation not allow space.
592
+ * Fixed: Error when clicking allow or skip to collect some usage data more then once.
593
+
594
+ = 1.12.42 =
595
+ * Fixed: Remove the link from "Privacy Policy" text in the form when there is no Privacy Policy page.
596
+
597
+ = 1.12.41 =
598
+ * Added: WHERE selectors in "Options from database" (Select, Single and Multiple choice fields).
599
+ * Added: Placeholders (User ID, Submitter's IP, etc.) in WHERE clause in "Options from database" and MySQL Mapping.
600
+ * Improved: Parsing images in post content in Post Generation extension.
601
+ * Improved: Automatically deactivate plugin after uninstall.
602
+ * Fixed: Scroll issues on Safari (MacOS).
603
+ * Fixed: "Receive Copy" field checkbox with Form maker some themes.
604
+ * Fixed: "Custom text" after form submit.
605
+
606
+ = 1.12.39 =
607
+ * Added: Drag & Drop of Columns in form editor
608
+ * Added: Drag & Drop of Pages in form editor
609
+ * Added: New icon in Elementor plugin
610
+ * Improved: Drag & Drop of fields in form editor
611
+ * Fixed: Conditional fields flickering during page loading
612
+
613
+ = 1.12.38 =
614
+ * Improved: GDPR compliance options.
615
+ * Added: Step option for slider field.
616
+ * Fixed: Error on form front end when Privacy Policy checkbox is enabled.
617
+ * Fixed: Bug on Actions after submission when Redirect to URL option is empty.
618
+ * Fixed: Notice on form submit.
619
+ * Fixed: Minor issues on Themes.
620
+
621
+ = 1.12.37 =
622
+ * Fixed: Compatibility with PHP version 5.3.
623
+
624
+ = 1.12.36 =
625
+ * Improved: Uninstall Form Maker interface and texts.
626
+ * Fixed: "New Form Field" button drag and drop issue in Firefox and Safari.
627
+ * Fixed: Do not show hidden amounts in total.
628
+ * Fixed: Failed to import form submissions when there is a single quote in the form title.
629
+ * Fixed: Can not submit contact form when there is a condition on stripe field and stripe is not visible.
630
+ * Added: GDPR compliance required checkbox on the front end.
631
+ * Added: Warn user if the email address does not belong to the site domain.
632
+
633
+ = 1.12.35 =
634
+ * Fixed: PDF should be generated even if sending emails is off.
635
+ * Fixed: Form field validation issues on multi-page forms.
636
+ * Fixed: Issue with Exporting/Importing a form with special characters in header.
637
+
638
+ = 1.12.34 =
639
+ * Added: Additional security check to block form submissions from bots.
640
+ * Improved: Submissions CSV/XML export for bigger forms.
641
+ * Improved: Rendering of forms in Elementor front-end builder preview.
642
+ * Improved: Optimized the back end Scripts and CSS for faster loading.
643
+ * Fixed: Form Submissions page responsiveness issue on mobile devices.
644
+
645
+ = 1.12.33 =
646
+ * Added: Option to enable/disable WP Editor.
647
+ * Added: Additional security checks against bots.
648
+ * Changed: Form field validation on form options page.
649
+ * Fixed: Error on deactivation.
650
+ * Fixed: Port for connecting to a remote Database with SQL mapping.
651
+ * Fixed: Displaying Form on all posts instead of the selected.
652
+ * Fixed: Filled values of payment form fields should not be lost on an error.
653
+ * Fixed: Form is not saved if you click Publish before the page is loaded.
654
+ * Fixed: Table of fields validation on form submission.
655
+ * Fixed: Add shortcode functionality on Beaver, Elementor, SiteOrigin and Visual Composer builders.
656
+ * Fixed: If you Sort/Filter the data via some column, then hit next page button, the sort reverts to the default sort order.
657
+ * Fixed: Select all in Submissions should apply to the current page only.
658
+ * Fixed: Do not change the page after IP block in submissions page.
659
+ * Fixed: Do not change the page after deleting submission in submissions page.
660
+
661
+ = 1.12.32 =
662
+ * Fixed: Include styles/scripts on form pages only.
663
+
664
+ = 1.12.31 =
665
+ * Improved: CSV, XML export.
666
+ * Improved: default email design
667
+ * Improved: Minor improvements in email options
668
+ * Fixed: PHP validation for email.
669
+ * Fixed: Preserve the list of columns displayed when changing the page.
670
+ * Fixed: Do not display ScrollBox form after Successful submission.
671
+
672
+ = 1.12.30 =
673
+ * Changed: Separate buttons for deactivation.
674
+
675
+ = 1.12.29 =
676
+ * Fixed: Bug on empty values for some form field types.
677
+
678
+ = 1.12.28 =
679
+ * Added: Custom javascript event, occurs after form is submitted.
680
+ * Changed: Code structure refactoring.
681
+ * Fixed: Bug on required form fields PHP validation.
682
+ * Fixed: Bug on saving a theme.
683
+
684
+ = 1.12.27 =
685
+ * Added: Help and suggestions text for Privacy Policy (for GDPR compliance)
686
+ * Added: Privacy related text to readme.
687
+
688
+ = 1.12.26 =
689
+ * Fixed: Vulnerabilities reported by Neven Biruski from DefenseCode (using the tool ThunderScan).
690
+ * Fixed: "The loopback request to your site failed" error.
691
+
692
+ = 1.12.25 =
693
+ * Changed: Updated translations.
694
+ * Added: Gutenberg integration.
695
+ * Fixed: Required mark for "Receive Copy" form field.
696
+ * Fixed: Bug on selecting options from database.
697
+
698
+ = 1.12.24 =
699
+ * Minor fix: an incorrect link
700
+
701
+ = 1.12.23 =
702
+ * Improved: Insert placeholder functionality.
703
+ * Fixed: Action after submission text for popup forms.
704
+ * Fixed: Do not allow negative numbers as quantity.
705
+ * Added: Loading for add-ons options.
706
+ * Added: Premium version page new style.
707
+ * Added: Add-ons page new style.
708
+ * Fixed: Submission id bug.
709
+ * Fixed: Security issue reported by Sairam Jetty.
710
+
711
+ = 1.12.22 =
712
+ * Fixed: Security issue with CSV export.
713
+
714
+ = 1.12.21 =
715
+ * Changed: DB field length.
716
+
717
+ = 1.12.20 =
718
+ * Added: New file types for Form Maker file upload form field.
719
+ * Improved: Editing empty mini labels.
720
+ * Fixed: Form Submissions CSV export.
721
+
722
+ = 1.12.19 =
723
+ * Fixed: Form Submissions table view for long texts.
724
+ * Fixed: Displaying phone field value in form email notification.
725
+ * Fixed: Bug on deleting a Page break.
726
+
727
+ = 1.12.18 =
728
+ * Changed: improved Form Submissions view: added tooltips for long labels of form fields.
729
+ * Added: detailed descriptions of form fields inside the form editor
730
+ * Fixed: UTF-8 text in Email body.
731
+
732
+ = 1.12.17 =
733
+ * Fixed: UTF-8 text for Email subject and Email from name.
734
+
735
+ = 1.12.16 =
736
+ * Improved: Email functionality of Form Maker.
737
+ * Fixed: Multiple choice and single choice with long labels.
738
+ * Fixed: Form submissions CSV export with UTF-8 encoding.
739
+
740
+ = 1.12.15 =
741
+ * Fixed: Error on adding a form field.
742
+
743
+ = 1.12.14 =
744
+ * Fixed: Form submissions page.
745
+
746
+ = 1.12.13 =
747
+ * Fixed: Bug on Popup forms on mobile.
748
+ * Fixed: Major bug.
749
+ * Fixed: Exclude Stripe field from submissions export.
750
+ * Fixed: "Custom HTML" field label in conditional fields list.
751
+ * Fixed: Edit table of form fields in submissions.
752
+ * Fixed: Trim data inserted by MySQL mapping.
753
+ * Fixed: Default values for payment multiple and payment single choices.
754
+ * Changed: Prevent default on form enter.
755
+
756
+ = 1.12.12 =
757
+ * Changed: Improved query to get number of form submissions.
758
+ * Changed: Email field length in DB.
759
+
760
+ = 1.12.11 =
761
+ * Fixed: Form preview does not show with widget on page with some Wordpress themes.
762
+ * Fixed: Do not check conditionally hidden required fields.
763
+ * Fixed: Not embedded forms do not show on form preview page.
764
+ * Fixed: Post/page search on display options pages.
765
+ * Fixed: Tooltip in "Add query" popup.
766
+ * Fixed: Insert demo forms only on activate.
767
+ * Changed: Edit country list popup design.
768
+ * Fixed: Emailing fields with apostrophes in label.
769
+ * Fixed: Popup forms background.
770
+ * Changed: Czech translation.
771
+ * Changed: Italian translation.
772
+ * Fixed: Matrix field in email.
773
+ * Changed: Disable widget in preview page.
774
+ * Fixed: Widget functionality with Contact Form Maker.
775
+ * Fixed: Form Maker user manual links.
776
+ * Fixed: Default values for multiple and single choices.
777
+ * Fixed: Add new theme.
778
+ * Fixed: Redirect from Paypal.
779
+
780
+ = 1.12.10 =
781
+ * Fixed: a minor bug.
782
+
783
+ = 1.12.9 =
784
+ * Fixed: Date range field buttons position.
785
+ * Fixed: Forms count in backend.
786
+ * Fixed: Placeholder notice with password fields.
787
+ * Added: Puerto Rico, Wales to country list.
788
+
789
+
790
+ = 1.12.8 =
791
+ * Updated: WD Library.
792
+ * Updated: Support forum link.
793
+
794
+ = 1.12.7 =
795
+ * Added: Invisibe reCAPTCHA.
796
+ * Improved: Compatibility with Contact Form Maker.
797
+ * Improved: Stripe add-on styles.
798
+ * Fixed: Some frontend styles.
799
+ * Fixed: Fields width in forms manage page.
800
+ * Changed: Field edit buttons place.
801
+
802
+ = 1.12.6 =
803
+ * Added: Full width functionality for fields.
804
+ * Added: New Default Theme.
805
+ * Added: Support forum and Review links.
806
+ * Changed: Date field calendar icon.
807
+ * Changed: Field manage functionality.
808
+ * Changed: jQuery-UI styles.
809
+ * Changed: Three form changed in new formats.
810
+ * Improved: Responsiveness.
811
+ * Fixed: Time, Date of Birth and Number fields validation also on mobile.
812
+ * Fixed: Scroll to field on error.
813
+ * Fixed: Right to left styles.
814
+ * Fixed: Conflict with Yoast SEO plugin.
815
+
816
+ = 1.12.5 =
817
+ * Added: Hong Kong to country list.
818
+ * Fixed: List of US states.
819
+
820
+ = 1.12.4 =
821
+ * Changed: Email validation field now allows + symbol
822
+ * Changed: Remove Font Awesome.
823
+ * Changed: Italian translation.
824
+
825
+ = 1.12.3 =
826
+ * Fixed: Get editor by id instead of active.
827
+ * Fixed: Not found form id redirect to main page.
828
+
829
+ = 1.12.2 =
830
+ * Fixed: Border types bug
831
+ * Fixed: Bug with PayPal IPN
832
+ * Fixed: Date format syncronization with Save Progress add-on
833
+
834
+ = 1.12.1 =
835
+ * Changed: Add field button design.
836
+ * Added: Show popup notice to install Backup WD plugin.
837
+
838
+ = 1.12.0 =
839
+ * Changed: Improved user interface of forms, submissions and options.
840
+ * Changed: Separated field types into Basic, User Info, Layout, Advanced and Payment sections.
841
+ * Changed: Simplified the structure of Form Options tabs.
842
+ * Added: Drag and Drop builder button.
843
+
844
+ = 1.11.11 =
845
+ * Fixed: Conflict with Jetpack Contact Form module.
846
+
847
+ = 1.11.8 =
848
+ * Updated: WD Library.
849
+
850
+ = 1.11.7 =
851
+ * Fixed: Theme version control.
852
+
853
+ = 1.11.6 =
854
+ * Fixed: Shortcode editor pop-up styles.
855
+ * Fixed: Scripts enqueue in Manage Forms page.
856
+ * Fixed: MySQL Mapping fields list scrolling.
857
+
858
+ = 1.11.5 =
859
+ * Fixed: Bug on CSV/XML export.
860
+ * Fixed: Google maps api conflict with other plugins.
861
+ * Changed: Improved Matrix type field view in submissions.
862
+ * Fixed: File upload field styles with "Inherit from website theme".
863
+
864
+ = 1.11.4 =
865
+ * Fixed: Bug on color picker when choosing transparency
866
+ * Fixed: Bug on submissions edit
867
+ * Fixed: Bug on "Inherit from website" theme
868
+ * Fixed: Bug on Paypal notifications
869
+ * Changed: Form Options tab id to avoid conflict with some plugins
870
+
871
+
872
+ = 1.11.3 =
873
+ * Added: Global option to enable Advanced Layout
874
+ * Changed: Themes table field name: `params` to `css`
875
+ * Fixed: Bug on PHP 5.2
876
+ * Fixed: Uninstall bug in free version
877
+ * Fixed: bug on generating Theme css
878
+ * Fixed: CSS conflict with some ajax themes
879
+
880
+ = 1.11.2 =
881
+ * Added: Overview page
882
+ * Removed: Featured Plugins, Featured Themes pages
883
+ * Fixed: Security issue
884
+ * Fixed: Themes - bug on save as copy
885
+
886
+
887
+ = 1.11.1 =
888
+ * Removed: Old forms support (created with Form Maker versions < 1.7.0)
889
+ * Added: Form Header
890
+ * Added: New Themes
891
+ * Added: New Theme Editor
892
+ * Added: Form Display Options (Embedded, Popup, Topbar, Scrollbox)
893
+ * Fixed: Database creation on some versions of MySQL
894
+ * Fixed: Removed html tags from csv and xml
895
+
896
+ = 1.10.11 =
897
+ * Added: Support forum links.
898
+
899
+ = 1.10.10 =
900
+ * Fixed: Bug on arithmetic captcha
901
+
902
+ = 1.10.9 =
903
+ * Changed: New logo
904
+
905
+ = 1.10.8 =
906
+ * Added: New form field type: Phone with flag
907
+ * Fixed: Bug on captcha reset
908
+
909
+ = 1.10.7 =
910
+ * Changed: Improved captcha security
911
+ * Fixed: Bug on matrix field
912
+ * Fixed: Bug on conditional fields (for date field)
913
+ * Added: Notification about old forms
914
+
915
+ = 1.10.6 =
916
+ * Fixed: Bug on spinner field
917
+ * Fixed: Bug on matrix field
918
+
919
+ = 1.10.5 =
920
+ * Fixed: JS conflict on contact form submission
921
+
922
+ = 1.10.4 =
923
+ * Fixed: Conflict with Yoast SEO plugin
924
+ * Fixed: Line breaks in textarea after incorrect captcha
925
+
926
+ = 1.10.3 =
927
+ * Fixed: Bug on PHP 5.3
928
+
929
+ = 1.10.2 =
930
+ * Added: New Global option "Use an alternative version of JS code on front-end:". Checking this box fixes JS conflicts with some themes, that alter inline JS.
931
+
932
+ = 1.10.1 =
933
+ * Added: Verified emails list in csv, xml files
934
+
935
+ = 1.10 =
936
+ * Changed: Field validation errors and notifications
937
+ * Added: Realtime field validation
938
+ * Changed: Improved NL translation
939
+ * Fixed: Bug on verified emails
940
+
941
+ = 1.9.18 =
942
+ * Added: Filter verified emails and Export submissions with verified emails
943
+
944
+ = 1.9.17 =
945
+ * Fixed: Bug with search by ID in Submissions
946
+ * Fixed: Bug with Validation (Regular Exp.)
947
+
948
+ = 1.9.16 =
949
+ * Fixed: Bug with Hidden field in custom text in Email
950
+ * Fixed: Bug on email verification custom post
951
+ * Added: Field type in field edit page
952
+
953
+ = 1.9.15 =
954
+ * Added: Password Confirmation field
955
+
956
+ = 1.9.14 =
957
+ * Fixed: Bug on CSV and XML export
958
+
959
+ = 1.9.13 =
960
+ * Fixed: Bug on Field label position (Left/Top)
961
+ * Fixed: JS error on IE 11 and Microsoft Edge
962
+
963
+ = 1.9.12 =
964
+ * Added: Email Confirmation field
965
+ * Fixed: Bug on CSV and XML export
966
+
967
+ = 1.9.11 =
968
+ * Changed: Filters now apply to CSV and XML export
969
+
970
+ = 1.9.10 =
971
+ * Fixed: Bug on "Advanced Layout"
972
+
973
+ = 1.9.9 =
974
+ * Changed: Featured plugins page
975
+
976
+ = 1.9.8 =
977
+ * Fixed: Unexpected behavior on pressing "Enter" key on back end form creator page
978
+
979
+ = 1.9.7 =
980
+ * Fixed: JS error on incorrect Google Maps API key
981
+ * Added: Alert about incorrect Google Maps API key
982
+
983
+ = 1.9.6 =
984
+ * Added: Global option for Google Maps API key
985
+ * Fixed: Google Maps API key warning in browser
986
+
987
+ = 1.9.5 =
988
+ * Changed: Improvements in "Select options from database" pop-up window for Select box, single and multiple choices
989
+ * Fixed: Back end minor style issues
990
+
991
+ = 1.9.3 =
992
+ * Fixed: Bug with Date field in custom text in Email
993
+ * Fixed: Bug on editing submissions with checkbox and radio fields with customized values
994
+
995
+ = 1.9.2 =
996
+ * Added: "View" button on submissions to open a sigle submission in a separate pop-up window
997
+ * Fixed: Minor bugs on editing submissions
998
+
999
+ = 1.9.1 =
1000
+ * Fixed: bug on date field on some browsers (Safari, Edge)
1001
+
1002
+ = 1.9 =
1003
+ * Changed: Improved Date picker functionality (new options: Dates to exclude, Default, Minimum, Maximum dates)
1004
+ * Added: New field type: Date Range
1005
+
1006
+ = 1.8.41 =
1007
+ * Fixed: Bug on conditional fields (for multiple contact forms on the same page)
1008
+
1009
+ = 1.8.40 =
1010
+ * Changed: Style of required field asterisk
1011
+ * Changed: Display the correct IDs and Names of the fields in the back end (Add/Edit field interface) to use in js/css
1012
+
1013
+ = 1.8.39 =
1014
+ * Fixed: Bug on Matrix field (additional attributes)
1015
+
1016
+ = 1.8.38 =
1017
+ * Fixed: Bug on Matrix field (special characters in row/column labels)
1018
+
1019
+ = 1.8.36 =
1020
+ * Fixed: Bug on long content in textarea fields
1021
+
1022
+ = 1.8.35 =
1023
+ * Fixed: Browser warning on Google Maps API version
1024
+ * Fixed: Phone field style issue on Mac OS
1025
+
1026
+ = 1.8.34 =
1027
+ * Fixed: Some minor style issues
1028
+
1029
+ = 1.8.33 =
1030
+ * Fixed: Bug in Address field
1031
+ * Fixed: Bug with Additional Attributes in Email field
1032
+ * Changed: before_submit() function functionality
1033
+
1034
+ = 1.8.32 =
1035
+ * New Add-on: Calculator
1036
+ Removed: deprecated Number field
1037
+
1038
+ = 1.8.31 =
1039
+ * Fixed: Issue with search in Submissions page
1040
+
1041
+ = 1.8.30 =
1042
+ * Added: Submission ID in csv export
1043
+
1044
+ = 1.8.29 =
1045
+ * Changed: Featured Plugins, Featured Themes pages design.
1046
+
1047
+ = 1.8.28 =
1048
+ * Fixed: Bug in Email Options
1049
+ * Fixed: Bug in Conditional Fields
1050
+ * Fixed: Bug in date field
1051
+
1052
+ = 1.8.27 =
1053
+ * Fixed: Bug in Conditional Fields
1054
+ * Fixed: Bug with Additional Attributs in Multiple Choice
1055
+
1056
+ = 1.8.26 =
1057
+ * Fixed: Submissions page styles
1058
+ * Fixed: Issue with IPv6
1059
+
1060
+ = 1.8.25 =
1061
+ * Fixed: Bug in conditional fields.
1062
+ * Changed: Featured Plugins, Featured Themes pages design.
1063
+
1064
+ = 1.8.24 =
1065
+ * Added: File upload as a link in email
1066
+
1067
+ = 1.8.23 =
1068
+ * Fixed: Bug in textarea field with line breaks
1069
+
1070
+ = 1.8.22 =
1071
+ * Fixed: Conflict with some plugins
1072
+
1073
+ = 1.8.21 =
1074
+ * Fixed: Bug in selectbox
1075
+
1076
+ = 1.8.20 =
1077
+ * Added: Autofill with user data for email address and name fields
1078
+
1079
+ = 1.8.19 =
1080
+ * Changed: Back End design
1081
+
1082
+ = 1.8.18 =
1083
+ * Added: Date format validation
1084
+ * Fixed: Recaptcha Validation bug
1085
+
1086
+ = 1.8.17 =
1087
+ * Added: Global Options
1088
+
1089
+ = 1.8.16 =
1090
+ * Fixed: User guide links
1091
+
1092
+ = 1.8.15 =
1093
+ * Changed: Back End Design for old forms
1094
+
1095
+ = 1.8.14 =
1096
+ * Fixed: Bug in PayPal field
1097
+ * Changed: Matrix field display in email
1098
+
1099
+ = 1.8.13 =
1100
+ * Fixed: Style in form builder edit page
1101
+ * Fixed: Bug in PayPal options
1102
+
1103
+ = 1.8.12 =
1104
+ * Changed: Submissions page styles
1105
+
1106
+ = 1.8.11 =
1107
+ * New Add-on: Stripe Integration
1108
+
1109
+ = 1.8.10 =
1110
+ * Fixed: Bug in name field
1111
+ * Fixed: Bug in captcha
1112
+
1113
+ = 1.8.9 =
1114
+ * New Add-on: Save Progress
1115
+
1116
+ = 1.8.8 =
1117
+ * Fixed: Minor bug
1118
+
1119
+ = 1.8.7 =
1120
+ * New: New year promo
1121
+
1122
+ = 1.8.6 =
1123
+ * Changed: Reset button
1124
+ * Fixed: Bug with scrolling in new field pop up
1125
+ * Fixed: Bug in MySql mapping on firefox browser
1126
+
1127
+ = 1.8.5 =
1128
+ * Fixed: Bug in mysql mapping.
1129
+ * Changed: Featured themes page.
1130
+
1131
+ = 1.8.4 =
1132
+ * Fixed: Bug in submissions
1133
+
1134
+ = 1.8.3 =
1135
+ * Changed: Backend design
1136
+
1137
+ = 1.8.2 =
1138
+ * New Add-on: Pushover Integration
1139
+
1140
+ = 1.8.1 =
1141
+ * Fixed: Bug in email options
1142
+ * Changed: Backend design
1143
+
1144
+ = 1.8.0 =
1145
+ * Changed: Backend design
1146
+
1147
+ = 1.7.97 =
1148
+ * Fixed: Bug in CSV/XML export
1149
+
1150
+ = 1.7.96 =
1151
+ * Added: Preview button
1152
+ * Changed: Conditional fields limitation
1153
+
1154
+ = 1.7.95 =
1155
+ * Changed: csv/xml export file directory
1156
+
1157
+ = 1.7.94 =
1158
+ * Added: Progress bar for csv/xml export
1159
+
1160
+ = 1.7.93 =
1161
+ * Fixed: Bug in mailing
1162
+ * Changed: Calendar styles
1163
+
1164
+ = 1.7.92 =
1165
+ * Fixed: Bug in mailing
1166
+
1167
+ = 1.7.91 =
1168
+ * Changed: Themes
1169
+ * Fixed: Bug in block ip
1170
+
1171
+ = 1.7.90 =
1172
+ * Fixed: Bug in CSV/XML export
1173
+
1174
+ = 1.7.89 =
1175
+ * Fixed: Conflict with some plugins
1176
+ * Changed: Styles
1177
+
1178
+ = 1.7.88 =
1179
+ * New: Doublescroll in submissions page
1180
+ * New: Delete confirmation
1181
+ * Fixed: Bug in mysql mapping for conditional fields
1182
+
1183
+ = 1.7.87 =
1184
+ * Fixed: Bug in CSV/XML export
1185
+
1186
+ = 1.7.86 =
1187
+ * Changed: CSV/XML export
1188
+
1189
+ = 1.7.85 =
1190
+ * Fixed: Bug in conditional fields
1191
+
1192
+ = 1.7.84 =
1193
+ * New Add-on: PDF Integration
1194
+
1195
+ = 1.7.83 =
1196
+ * New: Google Drive Integration Add-on
1197
+
1198
+ = 1.7.82 =
1199
+ * Fixed: Bug in demo forms
1200
+
1201
+ = 1.7.81 =
1202
+ * Fixed: Bug in update
1203
+
1204
+ = 1.7.80 =
1205
+ * Changed: Notices
1206
+
1207
+ = 1.7.79 =
1208
+ * Fixed: Bug in update
1209
+
1210
+ = 1.7.78 =
1211
+ * Changed: Themes
1212
+
1213
+ = 1.7.77 =
1214
+ * New: Dropbox Integration Add-on
1215
+
1216
+ = 1.7.76 =
1217
+ * Changed: Licensing/Donation page
1218
+ * Changed: Notices
1219
+
1220
+ = 1.7.75 =
1221
+ * Changed: Submissions default ordering
1222
+ * Changed: Featured Plugins page
1223
+
1224
+ = 1.7.74 =
1225
+ * Fixed: Minor bugs
1226
+
1227
+ = 1.7.73 =
1228
+ * New: Notices
1229
+
1230
+ = 1.7.71 =
1231
+ * New Add-on: Conditional Emails
1232
+
1233
+ = 1.7.70 =
1234
+ * Changed: Styles
1235
+
1236
+ = 1.7.69 =
1237
+ Minor bug fixed
1238
+
1239
+ = 1.7.68 =
1240
+ * Changed: Compability with WordPress 4.3
1241
+
1242
+ = 1.7.67 =
1243
+ * Fixed: Bug in slider field
1244
+ * Fixed: Bug in address field
1245
+ * Fixed: Bug in mysql mapping
1246
+
1247
+ = 1.7.66 =
1248
+ * Fixed: Bug in Undo/Rendo
1249
+
1250
+ = 1.7.65 =
1251
+ * New: Post Generation Add-on
1252
+
1253
+ = 1.7.64 =
1254
+ * Fixed: Minor bug
1255
+
1256
+ = 1.7.63 =
1257
+ * New: Add-ons page logo
1258
+
1259
+ = 1.7.62 =
1260
+ * New Add-on: User Registration
1261
+
1262
+ = 1.7.61 =
1263
+ * New: Form Maker Add-ons page
1264
+
1265
+ = 1.7.60 =
1266
+ * Fixed: Minor bug
1267
+
1268
+ = 1.7.59 =
1269
+ * Fixed: Bug in csv/xml export
1270
+
1271
+ = 1.7.58 =
1272
+ * Fixed: Minor bugs
1273
+ * Added: Email verification custom post
1274
+
1275
+ = 1.7.57 =
1276
+ * Fixed: Security issue
1277
+
1278
+ = 1.7.56 =
1279
+ * New: ReCaptcha version 2.0
1280
+ * New: Arithmetic Captcha
1281
+
1282
+ = 1.7.55 =
1283
+ * New: Undo/Redo form
1284
+
1285
+ = 1.7.54 =
1286
+ bug in conditional fields fixed
1287
+
1288
+ = 1.7.53 =
1289
+ bug in select field fixed
1290
+
1291
+ = 1.7.52 =
1292
+ minor bugs fixed
1293
+
1294
+ = 1.7.51 =
1295
+ * Changed: Featured plugins page.
1296
+ * New: Featured themes page.
1297
+
1298
+ = 1.7.50 =
1299
+ minor bugs fixed
1300
+
1301
+ = 1.7.49 =
1302
+ Limited up to 7 fields to add
1303
+ Bug fixed
1304
+
1305
+ = 1.7.48 =
1306
+ bug in radio and matrix fields fixed
1307
+
1308
+ = 1.7.47 =
1309
+ Show custom html and section break id
1310
+
1311
+ = 1.7.46 =
1312
+ Limited up to 9 fields to add
1313
+ * New: Enable/Disable Title and Middle Name for Name field
1314
+
1315
+ = 1.7.45 =
1316
+ * New: Option to disable past days in date picker
1317
+
1318
+ = 1.7.44 =
1319
+ security issue fixed
1320
+
1321
+ = 1.7.43 =
1322
+ * New: Email verification
1323
+
1324
+ = 1.7.42 =
1325
+ bug in recaprcha fixed
1326
+ change links
1327
+
1328
+ = 1.7.40 =
1329
+ Allow to use entry values in "Custom text after submission"
1330
+
1331
+ = 1.7.39 =
1332
+ * New: User informetion in mysql mapping
1333
+ * Fixed: Country names
1334
+
1335
+ = 1.7.38 =
1336
+ bug fixed in stats
1337
+ change field value type to longtext
1338
+
1339
+ = 1.7.37 =
1340
+ Optimize csv/xml export
1341
+
1342
+ = 1.7.35 =
1343
+ * New: Email empty fields option
1344
+
1345
+ = 1.7.34 =
1346
+ * New: Validation (Regular Exp.)
1347
+ * Fixed: Select field duplication
1348
+
1349
+ = 1.7.33 =
1350
+ bug in address field fixed
1351
+
1352
+ = 1.7.32 =
1353
+ bug fixed
1354
+
1355
+ = 1.7.31 =
1356
+ Bug fixed: Hidden field save to DB.
1357
+ * New: Drag and drop options in multiple, single choices and select box.
1358
+ * New: Select options from database.
1359
+ * New: Add image in email as image.
1360
+ * New: Additional clauses within conditional fields.
1361
+ * New: Search submissions by ID.
1362
+ * New: Submission ID in email.
1363
+
1364
+ = 1.7.30 =
1365
+ Cache issue fixed
1366
+
1367
+ = 1.7.29 =
1368
+ Bug fixed: Empty email "From name".
1369
+ Bug fixed: Delete theme.
1370
+
1371
+ = 1.7.28 =
1372
+ Bug fixed: Edit submissions.
1373
+ Bug fixed: Conditional fielsd with quota in labels
1374
+
1375
+ = 1.7.27 =
1376
+ bug fixed in csv\xml export
1377
+
1378
+ = 1.7.26 =
1379
+ bug fixed in email content
1380
+
1381
+ = 1.7.25 =
1382
+ remove fancybox lightbox
1383
+
1384
+ = 1.7.24 =
1385
+ display php function to publish contact form
1386
+
1387
+ = 1.7.23 =
1388
+ bug in Recaptcha fixed
1389
+
1390
+ = 1.7.22 =
1391
+ Form field reordering using Drag&Drop
1392
+
1393
+ = 1.7.21 =
1394
+ wp 4.0.1 shortcode issue fixed
1395
+
1396
+ = 1.7.18 =
1397
+ pagination with input
1398
+
1399
+ = 1.7.17 =
1400
+ bug fixed in condition fileds
1401
+
1402
+ = 1.7.16 =
1403
+ show submitter information in popup (Country, CountryCode, City, Latitude, Longitude)
1404
+
1405
+ = 1.7.15 =
1406
+ bug fixed
1407
+
1408
+ = 1.7.14 =
1409
+ csv, xml export mark on map
1410
+
1411
+ = 1.7.13 =
1412
+ sql mapping
1413
+
1414
+ = 1.7.12 =
1415
+ extended name edit bug fixed (if first input is empty)
1416
+
1417
+ = 1.7.11 =
1418
+ hidden field edit bug fixed
1419
+
1420
+ = 1.7.10 =
1421
+ security issue fixed
1422
+
1423
+ = 1.7.9 =
1424
+ line break in custom text in email
1425
+
1426
+ = 1.7.8 =
1427
+ bug fixed in required radio field
1428
+
1429
+ = 1.7.7 =
1430
+ bug fixed in adding new contact form
1431
+
1432
+ = 1.7.6 =
1433
+ new email options, conditional fileds
1434
+
1435
+ = 1.7.5 =
1436
+ conflict with Jetpack Contact Form module fixed
1437
+
1438
+ = 1.7.4 =
1439
+ bug fixed in form options
1440
+
1441
+ = 1.7.2 =
1442
+ improve themes
1443
+
1444
+ = 1.7.1 =
1445
+ bug fixed in email options
1446
+
1447
+ = 1.7 =
1448
+ Div structured, responsive form
1449
+ Editable html form layout
1450
+ New themes
1451
+
1452
+ = 1.6.6 =
1453
+ * fix security issue which was reported by Mateusz Lach
1454
+ = 1.6.4 =
1455
+ * Added featured plugins
1456
+ = 1.6.3 =
1457
+ * From Name, From Email in Form options
1458
+ = 1.5.0 =
1459
+ * Survey Tools (Star Rating, Scale Rating, Spinner, Slider, Range, Grading, Matrix)
1460
+ = 1.4.0 =
1461
+ * Customizable Email message for Administrator and Users
1462
+ = 1.3.0 =
1463
+ * Actions after form Submission:
1464
+ - Stay on form:
1465
+ - To go to Post,Page after the form submission:
1466
+ - Custom text after the form submission:
1467
+ - URL: The user is redirected to the provided URL after the form submission.
1468
+ * Edit javascript of the form:
1469
+ * Save as the copy of the form:
1470
+ * Themes: There are 43 standard themes included in Form Maker
1471
+ * New form fields:
1472
+ - Address field
1473
+ - Address mark on map form field
1474
+ - Number form field
1475
+ - Phone form field
1476
+ - Date 3 different form field
1477
+ - Time form field
1478
+ - Country list form field
1479
+ - Recapthca form field
1480
+ * Pagebreak of the [Wordpress Form](http://wordpress.org/plugins/form-maker/) Maker: This can be used to break the form into distinct pages.
1481
+ * Section Break of the Form Maker: This option allows adding a section break to the form page.
1482
+ * For each form certain types of statistical data are available in the form builder tool:
1483
+ * Entries of a form: The number of submitted forms in the form builder tool.
1484
+ * Views of a form: The number of times the form has been viewed.
1485
+ * Conversion Rate of a form: The percentage of submitted forms to the overall number of views.
1486
+
1487
+ = 1.0.0 =
1488
+ Initial version