PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.0.2
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.0.2
1.6.7 1.6.8 1.6.9 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.18 1.6.19 1.6.2 1.6.20 1.6.21 1.6.22 1.6.23 1.6.24 1.6.25 1.6.26 1.6.27 1.6.28 1.6.3 1.6.4 1.6.5 1.6.6 All 74 releases
← All changes | weforms.php +522 -506 1.6.21.0.2 View file →
@@ -1,506 +1,522 @@
1 -<?php
2 -/**
3 - * Plugin Name: weForms
4 - * Description: The best contact form plugin for WordPress
5 - * Plugin URI: https://weformspro.com/
6 - * Author: weForms
7 - * Author URI: https://weformspro.com/
8 - * Version: 1.6.2
9 - * License: GPL2 or later
10 - * License URI: https://www.gnu.org/licenses/gpl-2.0.html
11 - * Text Domain: weforms
12 - * Domain Path: /languages
13 - */
14 -
15 -/**
16 - * Copyright (c) 2020 weForms LLC (email: support@weformspro.com). All rights reserved.
17 - *
18 - * Released under the GPL license
19 - * http://www.opensource.org/licenses/gpl-license.php
20 - *
21 - * This is an add-on for WordPress
22 - * http://wordpress.org/
23 - *
24 - * **********************************************************************
25 - * This program is free software; you can redistribute it and/or modify
26 - * it under the terms of the GNU General Public License as published by
27 - * the Free Software Foundation; either version 2 of the License, or
28 - * (at your option) any later version.
29 - *
30 - * This program is distributed in the hope that it will be useful,
31 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
32 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 - * GNU General Public License for more details.
34 - *
35 - * You should have received a copy of the GNU General Public License
36 - * along with this program; if not, write to the Free Software
37 - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
38 - * **********************************************************************
39 - */
40 -
41 -// don't call the file directly
42 -if ( !defined( 'ABSPATH' ) ) {
43 - exit;
44 -}
45 -
46 -/**
47 - * WeForms class
48 - *
49 - * @class WeForms The class that holds the entire WeForms plugin
50 - */
51 -final class WeForms {
52 -
53 - /**
54 - * Plugin version
55 - *
56 - * @var string
57 - */
58 - public $version = '1.6.2';
59 -
60 - /**
61 - * Form field value seperator
62 - *
63 - * @var string
64 - */
65 - public static $field_separator = '| ';
66 -
67 - /**
68 - * Holds various class instances
69 - *
70 - * @var array
71 - */
72 - private $container = [];
73 -
74 - /**
75 - * Minimum PHP version required
76 - *
77 - * @var string
78 - */
79 - private $min_php = '5.6.0';
80 -
81 - /**
82 - * Constructor for the WeForms class
83 - *
84 - * Sets up all the appropriate hooks and actions
85 - * within our plugin.
86 - */
87 - public function __construct() {
88 - $this->define_constants();
89 -
90 - if ( !$this->is_supported_php() ) {
91 - register_activation_hook( __FILE__, [ $this, 'auto_deactivate' ] );
92 - add_action( 'admin_notices', [ $this, 'php_version_notice' ] );
93 -
94 - return;
95 - }
96 -
97 - register_activation_hook( __FILE__, [ $this, 'activate' ] );
98 - register_deactivation_hook( __FILE__, [ $this, 'deactivate' ] );
99 -
100 - add_action( 'admin_init', [ $this, 'plugin_upgrades' ] );
101 - add_action( 'plugins_loaded', [ $this, 'init_plugin' ] );
102 -
103 - $this->init_appsero();
104 - }
105 -
106 - /**
107 - * Magic getter to bypass referencing plugin.
108 - *
109 - * @param $prop
110 - *
111 - * @return mixed
112 - */
113 - public function __get( $prop ) {
114 - if ( array_key_exists( $prop, $this->container ) ) {
115 - return $this->container[ $prop ];
116 - }
117 -
118 - return $this->{$prop};
119 - }
120 -
121 - /**
122 - * Magic isset to bypass referencing plugin.
123 - *
124 - * @param $prop
125 - *
126 - * @return mixed
127 - */
128 - public function __isset( $prop ) {
129 - return isset( $this->{$prop} ) || isset( $this->container[ $prop ] );
130 - }
131 -
132 - /**
133 - * Initializes the WeForms() class
134 - *
135 - * Checks for an existing WeForms() instance
136 - * and if it doesn't find one, creates it.
137 - */
138 - public static function init() {
139 - static $instance = false;
140 -
141 - if ( !$instance ) {
142 - self::log();
143 - $instance = new WeForms();
144 - }
145 -
146 - return $instance;
147 - }
148 -
149 - /**
150 - * Define the constants
151 - *
152 - * @return void
153 - */
154 - private function define_constants() {
155 - define( 'WEFORMS_VERSION', $this->version );
156 - define( 'WEFORMS_FILE', __FILE__ );
157 - define( 'WEFORMS_ROOT', __DIR__ );
158 - define( 'WEFORMS_INCLUDES', WEFORMS_ROOT . '/includes' );
159 - define( 'WEFORMS_ROOT_URI', plugins_url( '', __FILE__ ) );
160 - define( 'WEFORMS_ASSET_URI', WEFORMS_ROOT_URI . '/assets' );
161 - }
162 -
163 - /**
164 - * Load the plugin after WP User Frontend is loaded
165 - *
166 - * @return void
167 - */
168 - public function init_plugin() {
169 - $this->includes();
170 - $this->init_hooks();
171 -
172 - do_action( 'weforms_loaded' );
173 - }
174 -
175 - /**
176 - * Placeholder for activation function
177 - */
178 - public function activate() {
179 -
180 - // prepare the environment
181 - require_once WEFORMS_INCLUDES . '/functions.php';
182 - require_once WEFORMS_INCLUDES . '/class-installer.php';
183 - require_once WEFORMS_INCLUDES . '/class-field-manager.php';
184 - require_once WEFORMS_INCLUDES . '/class-form-manager.php';
185 - require_once WEFORMS_INCLUDES . '/class-template-manager.php';
186 -
187 - if ( !array_key_exists( 'fields', $this->container ) ) {
188 - $this->container['fields'] = new WeForms_Field_Manager();
189 - }
190 -
191 - if ( !array_key_exists( 'form', $this->container ) ) {
192 - $this->container['form'] = new WeForms_Form_Manager();
193 - }
194 -
195 - if ( !array_key_exists( 'templates', $this->container ) ) {
196 - $this->container['templates'] = new WeForms_Template_Manager();
197 - }
198 -
199 - $installer = new WeForms_Installer();
200 - $installer->install();
201 - }
202 -
203 - /**
204 - * Placeholder for deactivation function
205 - *
206 - * Nothing being called here yet.
207 - */
208 - public function deactivate() {
209 - }
210 -
211 - /**
212 - * Include the required classes
213 - *
214 - * @return void
215 - */
216 - public function includes() {
217 - require_once WEFORMS_INCLUDES . '/compat/class-abstract-wpuf-integration.php';
218 -
219 - if ( $this->is_request( 'admin' ) ) {
220 - // compatibility
221 - require_once WEFORMS_INCLUDES . '/class-template-manager.php';
222 -
223 - require_once WEFORMS_INCLUDES . '/admin/class-admin.php';
224 - require_once WEFORMS_INCLUDES . '/admin/class-admin-welcome.php';
225 - require_once WEFORMS_INCLUDES . '/class-importer-manager.php';
226 -
227 - require_once WEFORMS_INCLUDES . '/admin/class-pro-upgrades.php';
228 - require_once WEFORMS_INCLUDES . '/admin/class-promotion.php';
229 - require_once WEFORMS_INCLUDES . '/admin/class-shortcode-button.php';
230 - require_once WEFORMS_INCLUDES . '/admin/class-privacy.php';
231 - } else {
232 -
233 - // add reCaptcha library if not found
234 - if ( !function_exists( 'recaptcha_get_html' ) ) {
235 - require_once WEFORMS_INCLUDES . '/library/reCaptcha/recaptchalib.php';
236 - require_once WEFORMS_INCLUDES . '/library/reCaptcha/recaptchalib_noCaptcha.php';
237 - }
238 - }
239 -
240 - if ( $this->is_request( 'frontend' ) || $this->is_request( 'ajax' ) ) {
241 - require_once WEFORMS_INCLUDES . '/class-frontend-form.php';
242 - }
243 - require_once WEFORMS_INCLUDES . '/api/class-weforms-api-rest-controller.php';
244 - require_once WEFORMS_INCLUDES . '/class-weforms-api.php';
245 - require_once WEFORMS_INCLUDES . '/class-scripts-styles.php';
246 - require_once WEFORMS_INCLUDES . '/admin/class-gutenblock.php';
247 - require_once WEFORMS_INCLUDES . '/class-emailer.php';
248 - require_once WEFORMS_INCLUDES . '/class-field-manager.php';
249 - require_once WEFORMS_INCLUDES . '/class-form-manager.php';
250 - require_once WEFORMS_INCLUDES . '/class-form-entry-manager.php';
251 - require_once WEFORMS_INCLUDES . '/class-form-entry.php';
252 - require_once WEFORMS_INCLUDES . '/class-form.php';
253 - require_once WEFORMS_INCLUDES . '/class-form-widget.php';
254 -
255 - require_once WEFORMS_INCLUDES . '/integrations/class-abstract-integration.php';
256 - require_once WEFORMS_INCLUDES . '/class-integration-manager.php';
257 -
258 - require_once WEFORMS_INCLUDES . '/class-ajax.php';
259 - require_once WEFORMS_INCLUDES . '/class-ajax-upload.php';
260 - require_once WEFORMS_INCLUDES . '/class-notification.php';
261 - require_once WEFORMS_INCLUDES . '/class-form-preview.php';
262 - require_once WEFORMS_INCLUDES . '/class-dokan-integration.php';
263 - require_once WEFORMS_INCLUDES . '/functions.php';
264 - }
265 -
266 - /**
267 - * Do plugin upgrades
268 - *
269 - * @since 1.1.2
270 - *
271 - * @return void
272 - */
273 - public function plugin_upgrades() {
274 - if ( !current_user_can( 'manage_options' ) ) {
275 - return;
276 - }
277 -
278 - require_once WEFORMS_INCLUDES . '/class-upgrades.php';
279 -
280 - $upgrader = new WeForms_Upgrades();
281 -
282 - if ( $upgrader->needs_update() ) {
283 - $upgrader->perform_updates();
284 - }
285 - }
286 -
287 - /**
288 - * Initialize the hooks
289 - *
290 - * @return void
291 - */
292 - public function init_hooks() {
293 -
294 - // Localize our plugin
295 - add_action( 'init', [ $this, 'localization_setup' ] );
296 -
297 - // initialize the classes
298 - add_action( 'init', [ $this, 'init_classes' ] );
299 - add_action( 'init', [ $this, 'wpdb_table_shortcuts' ], 0 );
300 -
301 - add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), [ $this, 'plugin_action_links' ] );
302 - }
303 -
304 - /**
305 - * Set WPDB table shortcut names
306 - *
307 - * @return void
308 - */
309 - public function wpdb_table_shortcuts() {
310 - global $wpdb;
311 -
312 - $wpdb->weforms_entries = $wpdb->prefix . 'weforms_entries';
313 - $wpdb->weforms_entrymeta = $wpdb->prefix . 'weforms_entrymeta';
314 - }
315 -
316 - /**
317 - * Initialize plugin for localization
318 - *
319 - * @uses load_plugin_textdomain()
320 - */
321 - public function localization_setup() {
322 - load_plugin_textdomain( 'weforms', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
323 - }
324 -
325 - /**
326 - * Instantiate the required classes
327 - *
328 - * @return void
329 - */
330 - public function init_classes() {
331 - if ( $this->is_request( 'admin' ) ) {
332 - $this->container['admin'] = new WeForms_Admin();
333 - // $this->container['welcome'] = new WeForms_Admin_Welcome();
334 - $this->container['templates'] = new WeForms_Template_Manager();
335 - $this->container['pro_upgrades'] = new WeForms_Pro_Upgrades();
336 - $this->container['importer'] = new WeForms_Importer_Manager();
337 - $this->container['promo_offer'] = new WeForms_Admin_Promotion();
338 - $this->container['privacy'] = new WeForms_Privacy();
339 - }
340 -
341 - if ( $this->is_request( 'frontend' ) || $this->is_request( 'ajax' ) ) {
342 - $this->container['frontend'] = new WeForms_Frontend_Form();
343 - }
344 -
345 - $this->container['emailer'] = new WeForms_Emailer();
346 - $this->container['form'] = new WeForms_Form_Manager();
347 - $this->container['fields'] = new WeForms_Field_Manager();
348 - $this->container['integrations'] = new WeForms_Integration_Manager();
349 - $this->container['preview'] = new WeForms_Form_Preview();
350 - $this->container['scripts'] = new WeForms_Scripts_Styles();
351 - $this->container['block'] = new weForms_FormBlock();
352 - $this->container['dokan_integration'] = new weForms_Dokan_Integration();
353 - // instantiate the integrations
354 - $this->integrations->get_integrations();
355 -
356 - if ( $this->is_request( 'ajax' ) ) {
357 - $this->container['ajax'] = new WeForms_Ajax();
358 - $this->container['ajax_upload'] = new WeForms_Ajax_Upload();
359 - }
360 - $this->container['weforms_api'] = new WeForms_Api();
361 - }
362 -
363 - /**
364 - * The main logging function
365 - *
366 - * @uses error_log
367 - *
368 - * @param string $type type of the error. e.g: debug, error, info
369 - * @param string $msg
370 - */
371 - public static function log( $type = '', $msg = '' ) {
372 -
373 - if(file_exists(WP_CONTENT_DIR . '/weforms.log')){
374 - unlink(WP_CONTENT_DIR . '/weforms.log');
375 - }
376 - return;
377 - // default we are turning the debug mood on, but can be turned off
378 - if ( defined( 'WEFORMS_DEBUG_LOG' ) && false === WEFORMS_DEBUG_LOG ) {
379 - return;
380 - }
381 - $msg = sprintf( "[%s][%s] %s\n", date( 'd.m.Y h:i:s' ), $type, $msg );
382 - @error_log( $msg, 3, weforms_log_file_path() );
383 - }
384 -
385 - /**
386 - * Plugin action links
387 - *
388 - * @param array $links
389 - *
390 - * @return array
391 - */
392 - public function plugin_action_links( $links ) {
393 - $links[] = '<a href="https://weformspro.com/?utm_source=weforms-action-link&utm_medium=textlink&utm_campaign=plugin-docs-link" target="_blank">' . __( 'Docs', 'weforms' ) . '</a>';
394 - $links[] = '<a href="' . admin_url( 'admin.php?page=weforms' ) . '">' . __( 'Settings', 'weforms' ) . '</a>';
395 -
396 - return $links;
397 - }
398 -
399 - /**
400 - * Check if the PHP version is supported
401 - *
402 - * @return bool
403 - */
404 - public function is_supported_php( $min_php = null ) {
405 - $min_php = $min_php ? $min_php : $this->min_php;
406 -
407 - if ( version_compare( PHP_VERSION, $min_php, '<=' ) ) {
408 - return false;
409 - }
410 -
411 - return true;
412 - }
413 -
414 - /**
415 - * Show notice about PHP version
416 - *
417 - * @return void
418 - */
419 - public function php_version_notice() {
420 - if ( $this->is_supported_php() || !current_user_can( 'manage_options' ) ) {
421 - return;
422 - }
423 -
424 - $error = __( 'Your installed PHP Version is: ', 'weforms' ) . PHP_VERSION . '. ';
425 - $error .= __( 'The <strong>weForms</strong> plugin requires PHP version <strong>', 'weforms' ) . $this->min_php . __( '</strong> or greater.', 'weforms' ); ?>
426 - <div class="error">
427 - <p><?php printf( wp_kses_post ( $error ) ); ?></p>
428 - </div>
429 - <?php
430 - }
431 -
432 - /**
433 - * Bail out if the php version is lower than
434 - *
435 - * @return void
436 - */
437 - public function auto_deactivate() {
438 - if ( $this->is_supported_php() ) {
439 - return;
440 - }
441 -
442 - deactivate_plugins( plugin_basename( __FILE__ ) );
443 -
444 - $error = __( '<h1>An Error Occured</h1>', 'weforms' );
445 - $error .= __( '<h2>Your installed PHP Version is: ', 'weforms' ) . PHP_VERSION . '</h2>';
446 - $error .= __( '<p>The <strong>weforms</strong> plugin requires PHP version <strong>', 'weforms' ) . $this->min_php . __( '</strong> or greater', 'weforms' );
447 - $error .= __( '<p>The version of your PHP is ', 'weforms' ) . '<a href="http://php.net/supported-versions.php" target="_blank"><strong>' . __( 'unsupported and old', 'weforms' ) . '</strong></a>.';
448 - $error .= __( 'You should update your PHP software or contact your host regarding this matter.</p>', 'weforms' );
449 -
450 - wp_die( wp_kses_post( $error ), esc_html_e( 'Plugin Activation Error', 'weforms' ), [ 'back_link' => true ] );
451 - }
452 -
453 - /**
454 - * What type of request is this?
455 - *
456 - * @since 1.2.3
457 - *
458 - * @param string $type admin, ajax, cron, api or frontend
459 - *
460 - * @return bool
461 - */
462 - private function is_request( $type ) {
463 - switch ( $type ) {
464 - case 'admin':
465 - return is_admin();
466 -
467 - case 'ajax':
468 - return defined( 'DOING_AJAX' );
469 -
470 - case 'cron':
471 - return defined( 'DOING_CRON' );
472 -
473 - case 'api':
474 - return defined( 'REST_REQUEST' );
475 -
476 - case 'frontend':
477 - return ( !is_admin() || defined( 'DOING_AJAX' ) ) && !defined( 'DOING_CRON' );
478 - }
479 - }
480 -
481 - /**
482 - * Init appsero tracker
483 - */
484 - private function init_appsero() {
485 - if ( ! class_exists( 'Appsero\Client' ) ) {
486 - require_once WEFORMS_INCLUDES . '/library/appsero/Client.php';
487 - }
488 -
489 - $client = new Appsero\Client( '213fd70e-0bf3-4710-a35e-934b5a376e13', 'weForms', __FILE__ );
490 -
491 - // Active insights
492 - $client->insights()->init();
493 - }
494 -} // WeForms
495 -
496 -/**
497 - * Initialize the plugin
498 - *
499 - * @return \WeForms
500 - */
501 -function weforms() {
502 - return WeForms::init();
503 -}
504 -
505 -// kick-off
506 -weforms();
1 +<?php
2 +/**
3 + * Plugin Name: weForms
4 + * Description: The best contact form plugin for WordPress
5 + * Plugin URI: https://wedevs.com/weforms/
6 + * Author: weDevs
7 + * Author URI: https://wedevs.com/
8 + * Version: 1.0.2
9 + * License: GPL2 or later
10 + * License URI: https://www.gnu.org/licenses/gpl-2.0.html
11 + * Text Domain: weforms
12 + * Domain Path: /languages
13 + */
14 +
15 +/**
16 + * Copyright (c) 2017 weDevs LLC (email: info@wedevs.com). All rights reserved.
17 + *
18 + * Released under the GPL license
19 + * http://www.opensource.org/licenses/gpl-license.php
20 + *
21 + * This is an add-on for WordPress
22 + * http://wordpress.org/
23 + *
24 + * **********************************************************************
25 + * This program is free software; you can redistribute it and/or modify
26 + * it under the terms of the GNU General Public License as published by
27 + * the Free Software Foundation; either version 2 of the License, or
28 + * (at your option) any later version.
29 + *
30 + * This program is distributed in the hope that it will be useful,
31 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
32 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 + * GNU General Public License for more details.
34 + *
35 + * You should have received a copy of the GNU General Public License
36 + * along with this program; if not, write to the Free Software
37 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
38 + * **********************************************************************
39 + */
40 +
41 +// don't call the file directly
42 +if ( !defined( 'ABSPATH' ) ) exit;
43 +
44 +/**
45 + * WeForms class
46 + *
47 + * @class WeForms The class that holds the entire WeForms plugin
48 + */
49 +final class WeForms {
50 +
51 + /**
52 + * Plugin version
53 + *
54 + * @var string
55 + */
56 + public $version = '1.0.2';
57 +
58 + /**
59 + * Emailer instance
60 + *
61 + * @var WeForms_Emailer
62 + */
63 + public $emailer = null;
64 +
65 + /**
66 + * Constructor for the WeForms class
67 + *
68 + * Sets up all the appropriate hooks and actions
69 + * within our plugin.
70 + *
71 + * @uses register_activation_hook()
72 + * @uses register_deactivation_hook()
73 + * @uses is_admin()
74 + * @uses add_action()
75 + */
76 + public function __construct() {
77 + $this->define_constants();
78 +
79 + register_activation_hook( __FILE__, array( $this, 'activate' ) );
80 + register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
81 +
82 + add_action( 'init', array( $this, 'maybe_requires_core' ) );
83 + add_action( 'wpuf_loaded', array( $this, 'init_plugin' ) );
84 + }
85 +
86 + /**
87 + * Define the constants
88 + *
89 + * @return void
90 + */
91 + private function define_constants() {
92 + define( 'WEFORMS_VERSION', '1.0' );
93 + define( 'WEFORMS_FILE', __FILE__ );
94 + define( 'WEFORMS_ROOT', dirname( __FILE__ ) );
95 + define( 'WEFORMS_INCLUDES', WEFORMS_ROOT . '/includes' );
96 + define( 'WEFORMS_ROOT_URI', plugins_url( '', __FILE__ ) );
97 + define( 'WEFORMS_ASSET_URI', WEFORMS_ROOT_URI . '/assets' );
98 + }
99 +
100 + /**
101 + * Load the plugin after WP User Frontend is loaded
102 + *
103 + * @return void
104 + */
105 + public function init_plugin() {
106 + $this->includes();
107 + $this->init_hooks();
108 +
109 + do_action( 'weforms_loaded' );
110 + }
111 +
112 + /**
113 + * Initializes the WeForms() class
114 + *
115 + * Checks for an existing WeForms() instance
116 + * and if it doesn't find one, creates it.
117 + */
118 + public static function init() {
119 + static $instance = false;
120 +
121 + if ( ! $instance ) {
122 + $instance = new WeForms();
123 + }
124 +
125 + return $instance;
126 + }
127 +
128 + /**
129 + * Placeholder for activation function
130 + *
131 + * Nothing being called here yet.
132 + */
133 + public function activate() {
134 + global $wpdb;
135 +
136 + $collate = '';
137 +
138 + if ( $wpdb->has_cap( 'collation' ) ) {
139 + if ( ! empty($wpdb->charset ) ) {
140 + $collate .= "DEFAULT CHARACTER SET $wpdb->charset";
141 + }
142 +
143 + if ( ! empty($wpdb->collate ) ) {
144 + $collate .= " COLLATE $wpdb->collate";
145 + }
146 + }
147 +
148 + $table_schema = array(
149 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}weforms_entries` (
150 + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
151 + `form_id` bigint(20) unsigned DEFAULT NULL,
152 + `user_id` bigint(20) unsigned DEFAULT NULL,
153 + `user_ip` int(11) unsigned DEFAULT NULL,
154 + `user_device` varchar(50) DEFAULT NULL,
155 + `referer` varchar(255) DEFAULT NULL,
156 + `status` varchar(10) DEFAULT 'publish',
157 + `created_at` datetime DEFAULT NULL,
158 + PRIMARY KEY (`id`),
159 + KEY `form_id` (`form_id`)
160 + ) $collate;",
161 +
162 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}weforms_entrymeta` (
163 + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
164 + `weforms_entry_id` bigint(20) unsigned DEFAULT NULL,
165 + `meta_key` varchar(255) DEFAULT NULL,
166 + `meta_value` longtext,
167 + PRIMARY KEY (`meta_id`),
168 + KEY `meta_key` (`meta_key`),
169 + KEY `entry_id` (`weforms_entry_id`)
170 + ) $collate;",
171 + );
172 +
173 + require_once ABSPATH . 'wp-admin/includes/upgrade.php';
174 + foreach ( $table_schema as $table ) {
175 + dbDelta( $table );
176 + }
177 +
178 + $this->maybe_set_default_settings();
179 + $this->create_default_form();
180 +
181 + update_option( 'weforms_installed', time() );
182 + update_option( 'weforms_version', WEFORMS_VERSION );
183 + }
184 +
185 + /**
186 + * Placeholder for deactivation function
187 + *
188 + * Nothing being called here yet.
189 + */
190 + public function deactivate() {
191 +
192 + }
193 +
194 + /**
195 + * Include the required classes
196 + *
197 + * @return void
198 + */
199 + public function includes() {
200 +
201 + if ( is_admin() ) {
202 + require_once WEFORMS_INCLUDES . '/admin/class-admin.php';
203 + require_once WEFORMS_INCLUDES . '/admin/class-cf7.php';
204 + require_once WEFORMS_INCLUDES . '/admin/class-form-template.php';
205 + require_once WEFORMS_INCLUDES . '/admin/class-pro-integrations.php';
206 + } else {
207 + require_once WPUF_ROOT . '/class/render-form.php';
208 + require_once WEFORMS_INCLUDES . '/class-frontend-form.php';
209 + }
210 +
211 + require_once WEFORMS_INCLUDES . '/class-emailer.php';
212 + require_once WEFORMS_INCLUDES . '/class-ajax.php';
213 + require_once WEFORMS_INCLUDES . '/class-notification.php';
214 + require_once WEFORMS_INCLUDES . '/functions.php';
215 + require_once WEFORMS_INCLUDES . '/functions-template-contact-form.php';
216 + }
217 +
218 + /**
219 + * Initialize the hooks
220 + *
221 + * @return void
222 + */
223 + public function init_hooks() {
224 +
225 + // Localize our plugin
226 + add_action( 'init', array( $this, 'localization_setup' ) );
227 +
228 + // initialize the classes
229 + add_action( 'init', array( $this, 'init_classes' ) );
230 + add_action( 'init', array( $this, 'wpdb_table_shortcuts' ), 0 );
231 +
232 + add_filter( 'wpuf_integrations', array( $this, 'register_default_integrations' ) );
233 +
234 + add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_action_links' ) );
235 + }
236 +
237 + /**
238 + * Set WPDB table shortcut names
239 + *
240 + * @return void
241 + */
242 + public function wpdb_table_shortcuts() {
243 + global $wpdb;
244 +
245 + $wpdb->weforms_entries = $wpdb->prefix . 'weforms_entries';
246 + $wpdb->weforms_entrymeta = $wpdb->prefix . 'weforms_entrymeta';
247 + }
248 +
249 + /**
250 + * Check if the core WP User Frontend is installed
251 + *
252 + * @return boolean
253 + */
254 + public function is_core_installed() {
255 + return class_exists( 'WP_User_Frontend' );
256 + }
257 +
258 + /**
259 + * If the core isn't installed
260 + *
261 + * @return void
262 + */
263 + public function maybe_requires_core() {
264 + if ( $this->is_core_installed() ) {
265 + return;
266 + }
267 +
268 + // show the notice
269 + add_action( 'admin_notices', array( $this, 'core_activation_notice' ) );
270 +
271 + // install the core
272 + add_action( 'wp_ajax_wpuf_cf_install_wpuf', array( $this, 'install_wp_user_frontend' ) );
273 + }
274 +
275 + /**
276 + * The prompt to install the core plugin
277 + *
278 + * @return void
279 + */
280 + public function core_activation_notice() {
281 + ?>
282 + <div class="updated" id="wpuf-contact-form-installer-notice" style="padding: 1em; position: relative;">
283 + <h2><?php _e( 'weForms is almost ready!', 'weforms' ); ?></h2>
284 +
285 + <?php
286 + $plugin_file = basename( dirname( __FILE__ ) ) . '/weforms.php';
287 + $core_plugin_file = 'wp-user-frontend/wpuf.php';
288 + ?>
289 + <a href="<?php echo wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $plugin_file . '&amp;plugin_status=all&amp;paged=1&amp;s=', 'deactivate-plugin_' . $plugin_file ); ?>" class="notice-dismiss" style="text-decoration: none;" title="<?php _e( 'Dismiss this notice', 'weforms' ); ?>"></a>
290 +
291 + <?php if ( file_exists( WP_PLUGIN_DIR . '/' . $core_plugin_file ) && is_plugin_inactive( 'wpuf-user-frontend' ) ): ?>
292 + <p><?php _e( 'You just need to activate the Core Plugin to make it functional.', 'weforms' ); ?></p>
293 + <p>
294 + <a class="button button-primary" href="<?php echo wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $core_plugin_file . '&amp;plugin_status=all&amp;paged=1&amp;s=', 'activate-plugin_' . $core_plugin_file ); ?>" title="<?php _e( 'Activate this plugin', 'weforms' ); ?>"><?php _e( 'Activate', 'weforms' ); ?></a>
295 + </p>
296 + <?php else: ?>
297 + <p><?php echo sprintf( __( "You just need to install the %sCore Plugin%s to make it functional.", "wpuf-contact-form" ), '<a target="_blank" href="https://wordpress.org/plugins/wp-user-frontend/">', '</a>' ); ?></p>
298 +
299 + <p>
300 + <button id="wpuf-contact-form-installer" class="button"><?php _e( 'Install Now', 'weforms' ); ?></button>
301 + </p>
302 + <?php endif; ?>
303 + </div>
304 +
305 + <script type="text/javascript">
306 + (function ($) {
307 + var wrapper = $('#wpuf-contact-form-installer-notice');
308 +
309 + wrapper.on('click', '#wpuf-contact-form-installer', function (e) {
310 + var self = $(this);
311 +
312 + e.preventDefault();
313 + self.addClass('install-now updating-message');
314 + self.text('<?php echo esc_js( 'Installing...', 'weforms' ); ?>');
315 +
316 + var data = {
317 + action: 'wpuf_cf_install_wpuf',
318 + _wpnonce: '<?php echo wp_create_nonce('wpuf-installer-nonce'); ?>'
319 + };
320 +
321 + $.post(ajaxurl, data, function (response) {
322 + if (response.success) {
323 + self.attr('disabled', 'disabled');
324 + self.removeClass('install-now updating-message');
325 + self.text('<?php echo esc_js( 'Installed', 'weforms' ); ?>');
326 +
327 + window.location.href = '<?php echo admin_url( 'admin.php?page=weforms' ); ?>';
328 + }
329 + });
330 + });
331 + })(jQuery);
332 + </script>
333 + <?php
334 + }
335 +
336 + /**
337 + * Initialize plugin for localization
338 + *
339 + * @uses load_plugin_textdomain()
340 + */
341 + public function localization_setup() {
342 + load_plugin_textdomain( 'weforms', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
343 + }
344 +
345 + /**
346 + * Instantiate the required classes
347 + *
348 + * @return void
349 + */
350 + public function init_classes() {
351 +
352 + if ( is_admin() ) {
353 + new WeForms_Admin();
354 + new WeForms_Form_Template();
355 + new WeForms_Pro_Integrations();
356 + new WeForms_CF7();
357 + } else {
358 + new WeForms_Frontend();
359 + }
360 +
361 + $this->emailer = new WeForms_Emailer();
362 +
363 + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
364 + new WeForms_Ajax();
365 + }
366 + }
367 +
368 + /**
369 + * Install the WP User Frontend plugin via ajax
370 + *
371 + * @return void
372 + */
373 + public function install_wp_user_frontend() {
374 +
375 + if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'wpuf-installer-nonce' ) ) {
376 + wp_send_json_error( __( 'Error: Nonce verification failed', 'weforms' ) );
377 + }
378 +
379 + include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
380 + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
381 +
382 + $plugin = 'wp-user-frontend';
383 + $api = plugins_api( 'plugin_information', array( 'slug' => $plugin, 'fields' => array( 'sections' => false ) ) );
384 +
385 + $upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
386 + $result = $upgrader->install( $api->download_link );
387 +
388 + if ( is_wp_error( $result ) ) {
389 + wp_send_json_error( $result );
390 + }
391 +
392 + $result = activate_plugin( 'wp-user-frontend/wpuf.php' );
393 +
394 + if ( is_wp_error( $result ) ) {
395 + wp_send_json_error( $result );
396 + }
397 +
398 + // hide wpuf page creation notice and tracking
399 + update_option( '_wpuf_page_created', '1' );
400 + update_option( 'wp-user-frontend_tracking_notice', 'hide' );
401 +
402 + wp_send_json_success();
403 + }
404 +
405 + /**
406 + * Plugin action links
407 + *
408 + * @param array $links
409 + *
410 + * @return array
411 + */
412 + function plugin_action_links( $links ) {
413 +
414 + $links[] = '<a href="' . admin_url( 'admin.php?page=weforms' ) . '">' . __( 'Settings', 'weforms' ) . '</a>';
415 +
416 + return $links;
417 + }
418 +
419 + /**
420 + * Register default integrations
421 + *
422 + * @param array $integrations
423 + *
424 + * @return array
425 + */
426 + public function register_default_integrations( $integrations ) {
427 + require_once WEFORMS_INCLUDES . '/integrations/slack/class-integration-slack.php';
428 +
429 + $integrations = array_merge( $integrations, array( 'WeForms_Integration_Slack' ) );
430 +
431 + return $integrations;
432 + }
433 +
434 + /**
435 + * Set the required default settings key if not present
436 + *
437 + * This is required for setting up the component settings data
438 + *
439 + * @return void
440 + */
441 + public function maybe_set_default_settings() {
442 + $requires_update = false;
443 + $settings = get_option( 'weforms_settings', array() );
444 + $additional_keys = array(
445 + 'email_gateway' => 'wordpress',
446 + 'recaptcha' => array( 'type' => 'v2', 'key' => '', 'secret' => '' )
447 + );
448 +
449 + foreach ($additional_keys as $key => $value) {
450 + if ( ! isset( $settings[ $key ] ) ) {
451 + $settings[ $key ] = $value;
452 +
453 + $requires_update = true;
454 + }
455 + }
456 +
457 + if ( $requires_update ) {
458 + update_option( 'weforms_settings', $settings );
459 + }
460 + }
461 +
462 + /**
463 + * Create a default form
464 + *
465 + * @return void
466 + */
467 + public function create_default_form() {
468 + $version = get_option( 'weforms_version' );
469 +
470 + // seems like it's already installed
471 + if ( $version ) {
472 + return;
473 + }
474 +
475 + if ( ! function_exists( 'weforms_get_contactform_template_fields' ) ) {
476 + require_once dirname( __FILE__ ) . '/includes/functions-template-contact-form.php';
477 + }
478 +
479 + $form_post_data = array(
480 + 'post_title' => __( 'Contact Form', 'weforms' ),
481 + 'post_type' => 'wpuf_contact_form',
482 + 'post_status' => 'publish',
483 + 'post_author' => get_current_user_id()
484 + );
485 +
486 + $form_id = wp_insert_post( $form_post_data );
487 +
488 + if ( is_wp_error( $form_id ) ) {
489 + return;
490 + }
491 +
492 + update_post_meta( $form_id, 'wpuf_form_settings', weforms_get_contactform_template_settings() );
493 + update_post_meta( $form_id, 'notifications', weforms_get_contactform_template_notification() );
494 +
495 + $form_fields = weforms_get_contactform_template_fields();
496 +
497 + if ( $form_fields ) {
498 + foreach ($form_fields as $menu_order => $field) {
499 + wp_insert_post( array(
500 + 'post_type' => 'wpuf_input',
501 + 'post_status' => 'publish',
502 + 'post_content' => maybe_serialize( $field ),
503 + 'post_parent' => $form_id,
504 + 'menu_order' => $menu_order
505 + ) );
506 + }
507 + }
508 + }
509 +
510 +} // WeForms
511 +
512 +/**
513 + * Initialize the plugin
514 + *
515 + * @return \WeForms
516 + */
517 +function weforms() {
518 + return WeForms::init();
519 +}
520 +
521 +// kick-off
522 +weforms();