PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.5.0
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.5.0
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
weforms / weforms.php

weforms.php in weForms – Easy Drag & Drop Contact Form Builder For WordPress 1.5.0, at weforms.php

503 lines 16.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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.5.0
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.4.9';
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 $instance = new WeForms();
143 }
144
145 return $instance;
146 }
147
148 /**
149 * Define the constants
150 *
151 * @return void
152 */
153 private function define_constants() {
154 define( 'WEFORMS_VERSION', $this->version );
155 define( 'WEFORMS_FILE', __FILE__ );
156 define( 'WEFORMS_ROOT', __DIR__ );
157 define( 'WEFORMS_INCLUDES', WEFORMS_ROOT . '/includes' );
158 define( 'WEFORMS_ROOT_URI', plugins_url( '', __FILE__ ) );
159 define( 'WEFORMS_ASSET_URI', WEFORMS_ROOT_URI . '/assets' );
160 }
161
162 /**
163 * Load the plugin after WP User Frontend is loaded
164 *
165 * @return void
166 */
167 public function init_plugin() {
168 $this->includes();
169 $this->init_hooks();
170
171 do_action( 'weforms_loaded' );
172 }
173
174 /**
175 * Placeholder for activation function
176 */
177 public function activate() {
178
179 // prepare the environment
180 require_once WEFORMS_INCLUDES . '/functions.php';
181 require_once WEFORMS_INCLUDES . '/class-installer.php';
182 require_once WEFORMS_INCLUDES . '/class-field-manager.php';
183 require_once WEFORMS_INCLUDES . '/class-form-manager.php';
184 require_once WEFORMS_INCLUDES . '/class-template-manager.php';
185
186 if ( !array_key_exists( 'fields', $this->container ) ) {
187 $this->container['fields'] = new WeForms_Field_Manager();
188 }
189
190 if ( !array_key_exists( 'form', $this->container ) ) {
191 $this->container['form'] = new WeForms_Form_Manager();
192 }
193
194 if ( !array_key_exists( 'templates', $this->container ) ) {
195 $this->container['templates'] = new WeForms_Template_Manager();
196 }
197
198 $installer = new WeForms_Installer();
199 $installer->install();
200 }
201
202 /**
203 * Placeholder for deactivation function
204 *
205 * Nothing being called here yet.
206 */
207 public function deactivate() {
208 }
209
210 /**
211 * Include the required classes
212 *
213 * @return void
214 */
215 public function includes() {
216 require_once WEFORMS_INCLUDES . '/compat/class-abstract-wpuf-integration.php';
217
218 if ( $this->is_request( 'admin' ) ) {
219 // compatibility
220 require_once WEFORMS_INCLUDES . '/class-template-manager.php';
221
222 require_once WEFORMS_INCLUDES . '/admin/class-admin.php';
223 require_once WEFORMS_INCLUDES . '/admin/class-admin-welcome.php';
224 require_once WEFORMS_INCLUDES . '/class-importer-manager.php';
225
226 require_once WEFORMS_INCLUDES . '/admin/class-pro-upgrades.php';
227 require_once WEFORMS_INCLUDES . '/admin/class-promotion.php';
228 require_once WEFORMS_INCLUDES . '/admin/class-shortcode-button.php';
229 require_once WEFORMS_INCLUDES . '/admin/class-privacy.php';
230 } else {
231
232 // add reCaptcha library if not found
233 if ( !function_exists( 'recaptcha_get_html' ) ) {
234 require_once WEFORMS_INCLUDES . '/library/reCaptcha/recaptchalib.php';
235 require_once WEFORMS_INCLUDES . '/library/reCaptcha/recaptchalib_noCaptcha.php';
236 }
237 }
238
239 if ( $this->is_request( 'frontend' ) || $this->is_request( 'ajax' ) ) {
240 require_once WEFORMS_INCLUDES . '/class-frontend-form.php';
241 }
242 require_once WEFORMS_INCLUDES . '/api/class-weforms-api-rest-controller.php';
243 require_once WEFORMS_INCLUDES . '/class-weforms-api.php';
244 require_once WEFORMS_INCLUDES . '/class-scripts-styles.php';
245 require_once WEFORMS_INCLUDES . '/admin/class-gutenblock.php';
246 require_once WEFORMS_INCLUDES . '/class-emailer.php';
247 require_once WEFORMS_INCLUDES . '/class-field-manager.php';
248 require_once WEFORMS_INCLUDES . '/class-form-manager.php';
249 require_once WEFORMS_INCLUDES . '/class-form-entry-manager.php';
250 require_once WEFORMS_INCLUDES . '/class-form-entry.php';
251 require_once WEFORMS_INCLUDES . '/class-form.php';
252 require_once WEFORMS_INCLUDES . '/class-form-widget.php';
253
254 require_once WEFORMS_INCLUDES . '/integrations/class-abstract-integration.php';
255 require_once WEFORMS_INCLUDES . '/class-integration-manager.php';
256
257 require_once WEFORMS_INCLUDES . '/class-ajax.php';
258 require_once WEFORMS_INCLUDES . '/class-ajax-upload.php';
259 require_once WEFORMS_INCLUDES . '/class-notification.php';
260 require_once WEFORMS_INCLUDES . '/class-form-preview.php';
261 require_once WEFORMS_INCLUDES . '/class-dokan-integration.php';
262 require_once WEFORMS_INCLUDES . '/functions.php';
263 }
264
265 /**
266 * Do plugin upgrades
267 *
268 * @since 1.1.2
269 *
270 * @return void
271 */
272 public function plugin_upgrades() {
273 if ( !current_user_can( 'manage_options' ) ) {
274 return;
275 }
276
277 require_once WEFORMS_INCLUDES . '/class-upgrades.php';
278
279 $upgrader = new WeForms_Upgrades();
280
281 if ( $upgrader->needs_update() ) {
282 $upgrader->perform_updates();
283 }
284 }
285
286 /**
287 * Initialize the hooks
288 *
289 * @return void
290 */
291 public function init_hooks() {
292
293 // Localize our plugin
294 add_action( 'init', [ $this, 'localization_setup' ] );
295
296 // initialize the classes
297 add_action( 'init', [ $this, 'init_classes' ] );
298 add_action( 'init', [ $this, 'wpdb_table_shortcuts' ], 0 );
299
300 add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), [ $this, 'plugin_action_links' ] );
301 }
302
303 /**
304 * Set WPDB table shortcut names
305 *
306 * @return void
307 */
308 public function wpdb_table_shortcuts() {
309 global $wpdb;
310
311 $wpdb->weforms_entries = $wpdb->prefix . 'weforms_entries';
312 $wpdb->weforms_entrymeta = $wpdb->prefix . 'weforms_entrymeta';
313 }
314
315 /**
316 * Initialize plugin for localization
317 *
318 * @uses load_plugin_textdomain()
319 */
320 public function localization_setup() {
321 load_plugin_textdomain( 'weforms', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
322 }
323
324 /**
325 * Instantiate the required classes
326 *
327 * @return void
328 */
329 public function init_classes() {
330 if ( $this->is_request( 'admin' ) ) {
331 $this->container['admin'] = new WeForms_Admin();
332 // $this->container['welcome'] = new WeForms_Admin_Welcome();
333 $this->container['templates'] = new WeForms_Template_Manager();
334 $this->container['pro_upgrades'] = new WeForms_Pro_Upgrades();
335 $this->container['importer'] = new WeForms_Importer_Manager();
336 $this->container['promo_offer'] = new WeForms_Admin_Promotion();
337 $this->container['privacy'] = new WeForms_Privacy();
338 }
339
340 if ( $this->is_request( 'frontend' ) || $this->is_request( 'ajax' ) ) {
341 $this->container['frontend'] = new WeForms_Frontend_Form();
342 }
343
344 $this->container['emailer'] = new WeForms_Emailer();
345 $this->container['form'] = new WeForms_Form_Manager();
346 $this->container['fields'] = new WeForms_Field_Manager();
347 $this->container['integrations'] = new WeForms_Integration_Manager();
348 $this->container['preview'] = new WeForms_Form_Preview();
349 $this->container['scripts'] = new WeForms_Scripts_Styles();
350 $this->container['block'] = new weForms_FormBlock();
351 $this->container['dokan_integration'] = new weForms_Dokan_Integration();
352 // instantiate the integrations
353 $this->integrations->get_integrations();
354
355 if ( $this->is_request( 'ajax' ) ) {
356 $this->container['ajax'] = new WeForms_Ajax();
357 $this->container['ajax_upload'] = new WeForms_Ajax_Upload();
358 }
359 $this->container['weforms_api'] = new WeForms_Api();
360 }
361
362 /**
363 * The main logging function
364 *
365 * @uses error_log
366 *
367 * @param string $type type of the error. e.g: debug, error, info
368 * @param string $msg
369 */
370 public static function log( $type = '', $msg = '' ) {
371
372 // default we are turning the debug mood on, but can be turned off
373 if ( defined( 'WEFORMS_DEBUG_LOG' ) && false === WEFORMS_DEBUG_LOG ) {
374 return;
375 }
376
377 $msg = sprintf( "[%s][%s] %s\n", date( 'd.m.Y h:i:s' ), $type, $msg );
378 @error_log( $msg, 3, weforms_log_file_path() );
379 }
380
381 /**
382 * Plugin action links
383 *
384 * @param array $links
385 *
386 * @return array
387 */
388 public function plugin_action_links( $links ) {
389 $links[] = '<a href="https://weformspro.com/?utm_source=weforms-action-link&utm_medium=textlink&utm_campaign=plugin-docs-link" target="_blank">' . __( 'Docs', 'weforms' ) . '</a>';
390 $links[] = '<a href="' . admin_url( 'admin.php?page=weforms' ) . '">' . __( 'Settings', 'weforms' ) . '</a>';
391
392 return $links;
393 }
394
395 /**
396 * Check if the PHP version is supported
397 *
398 * @return bool
399 */
400 public function is_supported_php( $min_php = null ) {
401 $min_php = $min_php ? $min_php : $this->min_php;
402
403 if ( version_compare( PHP_VERSION, $min_php, '<=' ) ) {
404 return false;
405 }
406
407 return true;
408 }
409
410 /**
411 * Show notice about PHP version
412 *
413 * @return void
414 */
415 public function php_version_notice() {
416 if ( $this->is_supported_php() || !current_user_can( 'manage_options' ) ) {
417 return;
418 }
419
420 $error = __( 'Your installed PHP Version is: ', 'weforms' ) . PHP_VERSION . '. ';
421 $error .= __( 'The <strong>weForms</strong> plugin requires PHP version <strong>', 'weforms' ) . $this->min_php . __( '</strong> or greater.', 'weforms' ); ?>
422 <div class="error">
423 <p><?php printf( wp_kses_post ( $error ) ); ?></p>
424 </div>
425 <?php
426 }
427
428 /**
429 * Bail out if the php version is lower than
430 *
431 * @return void
432 */
433 public function auto_deactivate() {
434 if ( $this->is_supported_php() ) {
435 return;
436 }
437
438 deactivate_plugins( plugin_basename( __FILE__ ) );
439
440 $error = __( '<h1>An Error Occured</h1>', 'weforms' );
441 $error .= __( '<h2>Your installed PHP Version is: ', 'weforms' ) . PHP_VERSION . '</h2>';
442 $error .= __( '<p>The <strong>weforms</strong> plugin requires PHP version <strong>', 'weforms' ) . $this->min_php . __( '</strong> or greater', 'weforms' );
443 $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>.';
444 $error .= __( 'You should update your PHP software or contact your host regarding this matter.</p>', 'weforms' );
445
446 wp_die( wp_kses_post( $error ), esc_html_e( 'Plugin Activation Error', 'weforms' ), [ 'back_link' => true ] );
447 }
448
449 /**
450 * What type of request is this?
451 *
452 * @since 1.2.3
453 *
454 * @param string $type admin, ajax, cron, api or frontend
455 *
456 * @return bool
457 */
458 private function is_request( $type ) {
459 switch ( $type ) {
460 case 'admin':
461 return is_admin();
462
463 case 'ajax':
464 return defined( 'DOING_AJAX' );
465
466 case 'cron':
467 return defined( 'DOING_CRON' );
468
469 case 'api':
470 return defined( 'REST_REQUEST' );
471
472 case 'frontend':
473 return ( !is_admin() || defined( 'DOING_AJAX' ) ) && !defined( 'DOING_CRON' );
474 }
475 }
476
477 /**
478 * Init appsero tracker
479 */
480 private function init_appsero() {
481 if ( ! class_exists( 'Appsero\Client' ) ) {
482 require_once WEFORMS_INCLUDES . '/library/appsero/Client.php';
483 }
484
485 $client = new Appsero\Client( '213fd70e-0bf3-4710-a35e-934b5a376e13', 'weForms', __FILE__ );
486
487 // Active insights
488 $client->insights()->init();
489 }
490 } // WeForms
491
492 /**
493 * Initialize the plugin
494 *
495 * @return \WeForms
496 */
497 function weforms() {
498 return WeForms::init();
499 }
500
501 // kick-off
502 weforms();
503