1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
<?php
use WPForms\Tasks\Meta;
/** * Handle plugin installation upon activation. * * @since 1.0.0 */ class WPForms_Install {
/** * Primary class constructor. * * @since 1.0.0 */ public function __construct() {
// When activated, trigger install method. register_activation_hook( WPFORMS_PLUGIN_FILE, array( $this, 'install' ) ); register_deactivation_hook( WPFORMS_PLUGIN_FILE, array( $this, 'deactivate' ) );
// Watch for new multisite blogs. add_action( 'wpmu_new_blog', array( $this, 'new_multisite_blog' ), 10, 6 );
// Watch for delayed admin install. add_action( 'admin_init', array( $this, 'admin' ) ); }
/** * Perform certain actions on plugin activation. * * @since 1.0.0 * * @param bool $network_wide Whether to enable the plugin for all sites in the network * or just the current site. Multisite only. Default is false. */ public function install( $network_wide = false ) {
// Check if we are on multisite and network activating. if ( is_multisite() && $network_wide ) {
// Multisite - go through each subsite and run the installer. $sites = get_sites( [ 'fields' => 'ids', 'number' => 0, ] );
foreach ( $sites as $blog_id ) { switch_to_blog( $blog_id ); $this->run(); restore_current_blog(); } } else {
// Normal single site. $this->run(); }
// Abort so we only set the transient for single site installs. if ( isset( $_GET['activate-multi'] ) || is_network_admin() ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended return; }
// Add transient to trigger redirect to the Welcome screen. set_transient( 'wpforms_activation_redirect', true, 30 ); }
/** * Run manual installation. * * @since 1.5.4.2 * * @param bool $silent Silent install, disables welcome page. */ public function manual( $silent = false ) {
$this->install( is_plugin_active_for_network( plugin_basename( WPFORMS_PLUGIN_FILE ) ) );
if ( $silent ) { delete_transient( 'wpforms_activation_redirect' ); } }
/** * Perform certain actions on plugin deactivation. * * @since 1.5.9 */ public function deactivate() {
// Unschedule all ActionScheduler actions by group. wpforms()->get( 'tasks' )->cancel_all(); }
/** * Watch for delayed install procedure from WPForms admin. * * @since 1.5.4.2 */ public function admin() {
if ( ! is_admin() ) { return; }
$install = get_option( 'wpforms_install', false );
if ( empty( $install ) ) { return; }
$this->manual( true );
delete_option( 'wpforms_install' ); }
/** * Run the actual installer. * * @since 1.5.4.2 */ protected function run() {
$meta = new Meta();
// Create the table if it doesn't exist. if ( ! $meta->table_exists() ) { $meta->create_table(); }
// Hook for Pro users. do_action( 'wpforms_install' );
/* * Set current version, to be referenced in future updates. */ // Used by Pro migrations. update_option( 'wpforms_version', WPFORMS_VERSION ); // Used by Lite migrations. update_option( 'wpforms_version_lite', WPFORMS_VERSION );
// Store the date when the initial activation was performed. $type = class_exists( 'WPForms_Lite', false ) ? 'lite' : 'pro'; $activated = get_option( 'wpforms_activated', array() ); if ( empty( $activated[ $type ] ) ) { $activated[ $type ] = time(); update_option( 'wpforms_activated', $activated ); } }
/** * When a new site is created in multisite, see if we are network activated, * and if so run the installer. * * @since 1.3.0 * * @param int $blog_id Blog ID. * @param int $user_id User ID. * @param string $domain Site domain. * @param string $path Site path. * @param int $site_id Site ID. Only relevant on multi-network installs. * @param array $meta Meta data. Used to set initial site options. */ public function new_multisite_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
if ( is_plugin_active_for_network( plugin_basename( WPFORMS_PLUGIN_FILE ) ) ) { switch_to_blog( $blog_id ); $this->run(); restore_current_blog(); } } }
new WPForms_Install();
|