PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.0.0-beta.3
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.0.0-beta.3
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 +509 -506 1.6.31.0.0-beta.3 View file →
@@ -1,506 +1,509 @@
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.3
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.3';
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.0-beta.3
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.0-beta.3';
57 +
58 + /**
59 + * Constructor for the WeForms class
60 + *
61 + * Sets up all the appropriate hooks and actions
62 + * within our plugin.
63 + *
64 + * @uses register_activation_hook()
65 + * @uses register_deactivation_hook()
66 + * @uses is_admin()
67 + * @uses add_action()
68 + */
69 + public function __construct() {
70 + $this->define_constants();
71 +
72 + register_activation_hook( __FILE__, array( $this, 'activate' ) );
73 + register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
74 +
75 + add_action( 'init', array( $this, 'maybe_requires_core' ) );
76 + add_action( 'wpuf_loaded', array( $this, 'init_plugin' ) );
77 + }
78 +
79 + /**
80 + * Define the constants
81 + *
82 + * @return void
83 + */
84 + private function define_constants() {
85 + define( 'WEFORMS_VERSION', '1.0' );
86 + define( 'WEFORMS_FILE', __FILE__ );
87 + define( 'WEFORMS_ROOT', dirname( __FILE__ ) );
88 + define( 'WEFORMS_INCLUDES', WEFORMS_ROOT . '/includes' );
89 + define( 'WEFORMS_ROOT_URI', plugins_url( '', __FILE__ ) );
90 + define( 'WEFORMS_ASSET_URI', WEFORMS_ROOT_URI . '/assets' );
91 + }
92 +
93 + /**
94 + * Load the plugin after WP User Frontend is loaded
95 + *
96 + * @return void
97 + */
98 + public function init_plugin() {
99 + $this->includes();
100 + $this->init_hooks();
101 + }
102 +
103 + /**
104 + * Initializes the WeForms() class
105 + *
106 + * Checks for an existing WeForms() instance
107 + * and if it doesn't find one, creates it.
108 + */
109 + public static function init() {
110 + static $instance = false;
111 +
112 + if ( ! $instance ) {
113 + $instance = new WeForms();
114 + }
115 +
116 + return $instance;
117 + }
118 +
119 + /**
120 + * Placeholder for activation function
121 + *
122 + * Nothing being called here yet.
123 + */
124 + public function activate() {
125 + global $wpdb;
126 +
127 + $collate = '';
128 +
129 + if ( $wpdb->has_cap( 'collation' ) ) {
130 + if ( ! empty($wpdb->charset ) ) {
131 + $collate .= "DEFAULT CHARACTER SET $wpdb->charset";
132 + }
133 +
134 + if ( ! empty($wpdb->collate ) ) {
135 + $collate .= " COLLATE $wpdb->collate";
136 + }
137 + }
138 +
139 + $table_schema = array(
140 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}weforms_entries` (
141 + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
142 + `form_id` bigint(20) unsigned DEFAULT NULL,
143 + `user_id` bigint(20) unsigned DEFAULT NULL,
144 + `user_ip` int(11) unsigned DEFAULT NULL,
145 + `user_device` varchar(50) DEFAULT NULL,
146 + `referer` varchar(255) DEFAULT NULL,
147 + `status` varchar(10) DEFAULT 'publish',
148 + `created_at` datetime DEFAULT NULL,
149 + PRIMARY KEY (`id`),
150 + KEY `form_id` (`form_id`)
151 + ) $collate;",
152 +
153 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}weforms_entrymeta` (
154 + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
155 + `weforms_entry_id` bigint(20) unsigned DEFAULT NULL,
156 + `meta_key` varchar(255) DEFAULT NULL,
157 + `meta_value` longtext,
158 + PRIMARY KEY (`meta_id`),
159 + KEY `meta_key` (`meta_key`),
160 + KEY `entry_id` (`weforms_entry_id`)
161 + ) $collate;",
162 + );
163 +
164 + require_once ABSPATH . 'wp-admin/includes/upgrade.php';
165 + foreach ( $table_schema as $table ) {
166 + dbDelta( $table );
167 + }
168 +
169 + $this->maybe_set_default_settings();
170 + $this->create_default_form();
171 +
172 + update_option( 'weforms_installed', time() );
173 + update_option( 'weforms_version', WEFORMS_VERSION );
174 + }
175 +
176 + /**
177 + * Placeholder for deactivation function
178 + *
179 + * Nothing being called here yet.
180 + */
181 + public function deactivate() {
182 +
183 + }
184 +
185 + /**
186 + * Include the required classes
187 + *
188 + * @return void
189 + */
190 + public function includes() {
191 +
192 + if ( is_admin() ) {
193 + require_once WEFORMS_INCLUDES . '/admin/class-admin.php';
194 + require_once WEFORMS_INCLUDES . '/admin/class-cf7.php';
195 + require_once WEFORMS_INCLUDES . '/admin/class-form-template.php';
196 + require_once WEFORMS_INCLUDES . '/admin/class-pro-integrations.php';
197 + } else {
198 + require_once WPUF_ROOT . '/class/render-form.php';
199 + require_once WEFORMS_INCLUDES . '/class-frontend-form.php';
200 + }
201 +
202 + require_once WEFORMS_INCLUDES . '/class-ajax.php';
203 + require_once WEFORMS_INCLUDES . '/class-notification.php';
204 + require_once WEFORMS_INCLUDES . '/functions.php';
205 + require_once WEFORMS_INCLUDES . '/functions-template-contact-form.php';
206 + }
207 +
208 + /**
209 + * Initialize the hooks
210 + *
211 + * @return void
212 + */
213 + public function init_hooks() {
214 + // Localize our plugin
215 + add_action( 'init', array( $this, 'localization_setup' ) );
216 +
217 + // initialize the classes
218 + add_action( 'init', array( $this, 'init_classes' ) );
219 + add_action( 'init', array( $this, 'wpdb_table_shortcuts' ), 0 );
220 +
221 + add_filter( 'wpuf_integrations', array( $this, 'register_default_integrations' ) );
222 +
223 + add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_action_links' ) );
224 + }
225 +
226 + /**
227 + * Set WPDB table shortcut names
228 + *
229 + * @return void
230 + */
231 + public function wpdb_table_shortcuts() {
232 + global $wpdb;
233 +
234 + $wpdb->weforms_entries = $wpdb->prefix . 'weforms_entries';
235 + $wpdb->weforms_entrymeta = $wpdb->prefix . 'weforms_entrymeta';
236 + }
237 +
238 + /**
239 + * Check if the core WP User Frontend is installed
240 + *
241 + * @return boolean
242 + */
243 + public function is_core_installed() {
244 + return class_exists( 'WP_User_Frontend' );
245 + }
246 +
247 + /**
248 + * If the core isn't installed
249 + *
250 + * @return void
251 + */
252 + public function maybe_requires_core() {
253 + if ( $this->is_core_installed() ) {
254 + return;
255 + }
256 +
257 + // show the notice
258 + add_action( 'admin_notices', array( $this, 'core_activation_notice' ) );
259 +
260 + // install the core
261 + add_action( 'wp_ajax_wpuf_cf_install_wpuf', array( $this, 'install_wp_user_frontend' ) );
262 + }
263 +
264 + /**
265 + * The prompt to install the core plugin
266 + *
267 + * @return void
268 + */
269 + public function core_activation_notice() {
270 + ?>
271 + <div class="updated" id="wpuf-contact-form-installer-notice" style="padding: 1em; position: relative;">
272 + <h2><?php _e( 'weForms is almost ready!', 'weforms' ); ?></h2>
273 +
274 + <?php
275 + $plugin_file = basename( dirname( __FILE__ ) ) . '/contact-form.php';
276 + $core_plugin_file = 'wp-user-frontend/wpuf.php';
277 + ?>
278 + <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>
279 +
280 + <?php if ( file_exists( WP_PLUGIN_DIR . '/' . $core_plugin_file ) && is_plugin_inactive( 'wpuf-user-frontend' ) ): ?>
281 + <p><?php _e( 'You just need to activate the Core Plugin to make it functional.', 'weforms' ); ?></p>
282 + <p>
283 + <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>
284 + </p>
285 + <?php else: ?>
286 + <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>
287 +
288 + <p>
289 + <button id="wpuf-contact-form-installer" class="button"><?php _e( 'Install Now', 'weforms' ); ?></button>
290 + </p>
291 + <?php endif; ?>
292 + </div>
293 +
294 + <script type="text/javascript">
295 + (function ($) {
296 + var wrapper = $('#wpuf-contact-form-installer-notice');
297 +
298 + wrapper.on('click', '#wpuf-contact-form-installer', function (e) {
299 + var self = $(this);
300 +
301 + e.preventDefault();
302 + self.addClass('install-now updating-message');
303 + self.text('<?php echo esc_js( 'Installing...', 'weforms' ); ?>');
304 +
305 + var data = {
306 + action: 'wpuf_cf_install_wpuf',
307 + _wpnonce: '<?php echo wp_create_nonce('wpuf-installer-nonce'); ?>'
308 + };
309 +
310 + $.post(ajaxurl, data, function (response) {
311 + if (response.success) {
312 + self.attr('disabled', 'disabled');
313 + self.removeClass('install-now updating-message');
314 + self.text('<?php echo esc_js( 'Installed', 'weforms' ); ?>');
315 +
316 + window.location.href = '<?php echo admin_url( 'admin.php?page=weforms' ); ?>';
317 + }
318 + });
319 + });
320 + })(jQuery);
321 + </script>
322 + <?php
323 + }
324 +
325 + /**
326 + * Initialize plugin for localization
327 + *
328 + * @uses load_plugin_textdomain()
329 + */
330 + public function localization_setup() {
331 + load_plugin_textdomain( 'weforms', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
332 + }
333 +
334 + /**
335 + * Instantiate the required classes
336 + *
337 + * @return void
338 + */
339 + public function init_classes() {
340 +
341 + if ( is_admin() ) {
342 + new WeForms_Admin();
343 + new WeForms_Form_Template();
344 + new WeForms_Pro_Integrations();
345 + new WeForms_CF7();
346 + } else {
347 + new WeForms_Frontend();
348 + }
349 +
350 + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
351 + new WeForms_Ajax();
352 + }
353 + }
354 +
355 + /**
356 + * Install the WP User Frontend plugin via ajax
357 + *
358 + * @return void
359 + */
360 + public function install_wp_user_frontend() {
361 +
362 + if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'wpuf-installer-nonce' ) ) {
363 + wp_send_json_error( __( 'Error: Nonce verification failed', 'weforms' ) );
364 + }
365 +
366 + include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
367 + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
368 +
369 + $plugin = 'wp-user-frontend';
370 + $api = plugins_api( 'plugin_information', array( 'slug' => $plugin, 'fields' => array( 'sections' => false ) ) );
371 +
372 + $upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
373 + $result = $upgrader->install( $api->download_link );
374 +
375 + if ( is_wp_error( $result ) ) {
376 + wp_send_json_error( $result );
377 + }
378 +
379 + $result = activate_plugin( 'wp-user-frontend/wpuf.php' );
380 +
381 + if ( is_wp_error( $result ) ) {
382 + wp_send_json_error( $result );
383 + }
384 +
385 + // hide wpuf page creation notice and tracking
386 + update_option( '_wpuf_page_created', '1' );
387 + update_option( 'wp-user-frontend_tracking_notice', 'hide' );
388 +
389 + wp_send_json_success();
390 + }
391 +
392 + /**
393 + * Plugin action links
394 + *
395 + * @param array $links
396 + *
397 + * @return array
398 + */
399 + function plugin_action_links( $links ) {
400 +
401 + $links[] = '<a href="' . admin_url( 'admin.php?page=weforms' ) . '">' . __( 'Settings', 'weforms' ) . '</a>';
402 +
403 + return $links;
404 + }
405 +
406 + /**
407 + * Register default integrations
408 + *
409 + * @param array $integrations
410 + *
411 + * @return array
412 + */
413 + public function register_default_integrations( $integrations ) {
414 + require_once WEFORMS_INCLUDES . '/integrations/slack/class-integration-slack.php';
415 +
416 + $integrations = array_merge( $integrations, array( 'WeForms_Integration_Slack' ) );
417 +
418 + return $integrations;
419 + }
420 +
421 + /**
422 + * Set the required default settings key if not present
423 + *
424 + * This is required for setting up the component settings data
425 + *
426 + * @return void
427 + */
428 + public function maybe_set_default_settings() {
429 + $requires_update = false;
430 + $settings = get_option( 'weforms_settings', array() );
431 + $additional_keys = array(
432 + 'email_gateway' => 'wordpress',
433 + 'recaptcha' => array( 'type' => 'v2', 'key' => '', 'secret' => '' )
434 + );
435 +
436 + foreach ($additional_keys as $key => $value) {
437 + if ( ! isset( $settings[ $key ] ) ) {
438 + $settings[ $key ] = $value;
439 +
440 + $requires_update = true;
441 + }
442 + }
443 +
444 + if ( $requires_update ) {
445 + update_option( 'weforms_settings', $settings );
446 + }
447 + }
448 +
449 + /**
450 + * Create a default form
451 + *
452 + * @return void
453 + */
454 + public function create_default_form() {
455 + $version = get_option( 'weforms_version' );
456 +
457 + // seems like it's already installed
458 + if ( $version ) {
459 + return;
460 + }
461 +
462 + if ( ! function_exists( 'weforms_get_contactform_template_fields' ) ) {
463 + require_once dirname( __FILE__ ) . '/includes/functions-template-contact-form.php';
464 + }
465 +
466 + $form_post_data = array(
467 + 'post_title' => __( 'Contact Form', 'weforms' ),
468 + 'post_type' => 'wpuf_contact_form',
469 + 'post_status' => 'publish',
470 + 'post_author' => get_current_user_id()
471 + );
472 +
473 + $form_id = wp_insert_post( $form_post_data );
474 +
475 + if ( is_wp_error( $form_id ) ) {
476 + return;
477 + }
478 +
479 + update_post_meta( $form_id, 'wpuf_form_settings', weforms_get_contactform_template_settings() );
480 + update_post_meta( $form_id, 'notifications', weforms_get_contactform_template_notification() );
481 +
482 + $form_fields = weforms_get_contactform_template_fields();
483 +
484 + if ( $form_fields ) {
485 + foreach ($form_fields as $menu_order => $field) {
486 + wp_insert_post( array(
487 + 'post_type' => 'wpuf_input',
488 + 'post_status' => 'publish',
489 + 'post_content' => maybe_serialize( $field ),
490 + 'post_parent' => $form_id,
491 + 'menu_order' => $menu_order
492 + ) );
493 + }
494 + }
495 + }
496 +
497 +} // WeForms
498 +
499 +/**
500 + * Initialize the plugin
501 + *
502 + * @return \WeForms
503 + */
504 +function weforms() {
505 + return WeForms::init();
506 +}
507 +
508 +// kick-off
509 +weforms();