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

523 lines 16.2 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://wedevs.com/weforms/
6 * Author: weDevs
7 * Author URI: https://wedevs.com/
8 * Version: 1.0.1
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.1';
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();
523