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

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

507 lines 16.1 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.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();
507