Completed
Push — release/1.8 ( 480f0b...47be0b )
by Ravinder
19:11
created

install.php ➔ give_get_default_settings()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 50
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 32
nc 1
nop 0
dl 0
loc 50
rs 9.3333
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 29 and the first side effect is on line 14.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
/**
3
 * Install Function
4
 *
5
 * @package     Give
6
 * @subpackage  Functions/Install
7
 * @copyright   Copyright (c) 2016, WordImpress
8
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
9
 * @since       1.0
10
 */
11
12
// Exit if accessed directly.
13
if ( ! defined( 'ABSPATH' ) ) {
14
	exit;
15
}
16
17
/**
18
 * Install
19
 *
20
 * Runs on plugin install by setting up the post types, custom taxonomies, flushing rewrite rules to initiate the new 'donations' slug and also creates the plugin and populates the settings fields for those plugin pages. After successful install, the user is redirected to the Give Welcome screen.
21
 *
22
 * @since 1.0
23
 *
24
 * @param bool $network_wide
25
 *
26
 * @global     $wpdb
27
 * @return void
28
 */
29
function give_install( $network_wide = false ) {
30
31
	global $wpdb;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
32
33
	if ( is_multisite() && $network_wide ) {
34
35
		foreach ( $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs LIMIT 100" ) as $blog_id ) {
36
37
			switch_to_blog( $blog_id );
38
			give_run_install();
39
			restore_current_blog();
40
41
		}
42
43
	} else {
44
45
		give_run_install();
46
47
	}
48
49
}
50
51
register_activation_hook( GIVE_PLUGIN_FILE, 'give_install' );
52
53
/**
54
 * Run the Give Install process.
55
 *
56
 * @since  1.5
57
 * @return void
58
 */
59
function give_run_install() {
60
61
	$give_options = give_get_settings();
62
63
	// Setup the Give Custom Post Types.
64
	give_setup_post_types();
65
66
	// Clear the permalinks.
67
	flush_rewrite_rules( false );
68
69
	// Add Upgraded From Option.
70
	$current_version = get_option( 'give_version' );
71
	if ( $current_version ) {
72
		update_option( 'give_version_upgraded_from', $current_version );
73
	}
74
75
	// Setup some default options.
76
	$options = array();
77
78
	// Checks if the Success Page option exists AND that the page exists.
79
	if ( ! get_post( give_get_option( 'success_page' ) ) ) {
80
81
		// Donation Confirmation (Success) Page
82
		$success = wp_insert_post(
83
			array(
84
				'post_title'     => esc_html__( 'Donation Confirmation', 'give' ),
85
				'post_content'   => '[give_receipt]',
86
				'post_status'    => 'publish',
87
				'post_author'    => 1,
88
				'post_type'      => 'page',
89
				'comment_status' => 'closed'
90
			)
91
		);
92
93
		// Store our page IDs
94
		$options['success_page'] = $success;
95
	}
96
97
	// Checks if the Failure Page option exists AND that the page exists.
98
	if ( ! get_post( give_get_option( 'failure_page' ) ) ) {
99
100
		// Failed Donation Page
101
		$failed = wp_insert_post(
102
			array(
103
				'post_title'     => esc_html__( 'Donation Failed', 'give' ),
104
				'post_content'   => esc_html__( 'We\'re sorry, your donation failed to process. Please try again or contact site support.', 'give' ),
105
				'post_status'    => 'publish',
106
				'post_author'    => 1,
107
				'post_type'      => 'page',
108
				'comment_status' => 'closed'
109
			)
110
		);
111
112
		$options['failure_page'] = $failed;
113
	}
114
115
	// Checks if the History Page option exists AND that the page exists.
116
	if ( ! get_post( give_get_option( 'history_page' ) ) ) {
117
		// Donation History Page
118
		$history = wp_insert_post(
119
			array(
120
				'post_title'     => esc_html__( 'Donation History', 'give' ),
121
				'post_content'   => '[donation_history]',
122
				'post_status'    => 'publish',
123
				'post_author'    => 1,
124
				'post_type'      => 'page',
125
				'comment_status' => 'closed'
126
			)
127
		);
128
129
		$options['history_page'] = $history;
130
	}
131
132
	//Fresh Install? Setup Test Mode, Base Country (US), Test Gateway, Currency.
133
	if ( empty( $current_version ) ) {
134
		$options = array_merge( $options, give_get_default_settings() );
135
	}
136
137
	// Populate the default values.
138
	update_option( 'give_settings', array_merge( $give_options, $options ) );
139
	update_option( 'give_version', GIVE_VERSION );
140
141
	// Create Give roles.
142
	$roles = new Give_Roles();
143
	$roles->add_roles();
144
	$roles->add_caps();
145
146
	$api = new Give_API();
147
	update_option( 'give_default_api_version', 'v' . $api->get_version() );
148
149
	// Create the customers databases.
150
	@Give()->customers->create_table();
151
	@Give()->customer_meta->create_table();
152
153
	// Check for PHP Session support, and enable if available.
154
	Give()->session->use_php_sessions();
155
156
	// Add a temporary option to note that Give pages have been created.
157
	set_transient( '_give_installed', $options, 30 );
158
159
	if ( ! $current_version ) {
160
161
		require_once GIVE_PLUGIN_DIR . 'includes/admin/upgrades/upgrade-functions.php';
162
163
		// When new upgrade routines are added, mark them as complete on fresh install.
164
		$upgrade_routines = array(
165
			'upgrade_give_user_caps_cleanup',
166
			'upgrade_give_payment_customer_id',
167
			'upgrade_give_offline_status'
168
		);
169
170
		foreach ( $upgrade_routines as $upgrade ) {
171
			give_set_upgrade_complete( $upgrade );
172
		}
173
	}
174
175
	// Bail if activating from network, or bulk.
176
	if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
177
		return;
178
	}
179
180
	// Add the transient to redirect.
181
	set_transient( '_give_activation_redirect', true, 30 );
182
183
}
184
185
register_activation_hook( GIVE_PLUGIN_FILE, 'give_install' );
186
187
/**
188
 * Network Activated New Site Setup.
189
 *
190
 * When a new site is created when Give is network activated this function runs the appropriate install function to set up the site for Give.
191
 *
192
 * @since      1.3.5
193
 *
194
 * @param  int    $blog_id The Blog ID created.
195
 * @param  int    $user_id The User ID set as the admin.
196
 * @param  string $domain  The URL.
197
 * @param  string $path    Site Path.
198
 * @param  int    $site_id The Site ID.
199
 * @param  array  $meta    Blog Meta.
200
 */
201
function on_create_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
0 ignored issues
show
Unused Code introduced by
The parameter $user_id is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $domain is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $path is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $site_id is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $meta is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
202
203
	if ( is_plugin_active_for_network( GIVE_PLUGIN_BASENAME ) ) {
204
205
		switch_to_blog( $blog_id );
206
		give_install();
207
		restore_current_blog();
208
209
	}
210
211
}
212
213
add_action( 'wpmu_new_blog', 'on_create_blog', 10, 6 );
214
215
216
/**
217
 * Drop Give's custom tables when a mu site is deleted.
218
 *
219
 * @since  1.4.3
220
 *
221
 * @param  array $tables  The tables to drop.
222
 * @param  int   $blog_id The Blog ID being deleted.
223
 *
224
 * @return array          The tables to drop.
225
 */
226
function give_wpmu_drop_tables( $tables, $blog_id ) {
227
228
	switch_to_blog( $blog_id );
229
	$customers_db     = new Give_DB_Customers();
230
	$customer_meta_db = new Give_DB_Customer_Meta();
231
232
	if ( $customers_db->installed() ) {
233
		$tables[] = $customers_db->table_name;
234
		$tables[] = $customer_meta_db->table_name;
235
	}
236
	restore_current_blog();
237
238
	return $tables;
239
240
}
241
242
add_filter( 'wpmu_drop_tables', 'give_wpmu_drop_tables', 10, 2 );
243
244
/**
245
 * Post-installation
246
 *
247
 * Runs just after plugin installation and exposes the give_after_install hook.
248
 *
249
 * @since 1.0
250
 * @return void
251
 */
252
function give_after_install() {
253
254
	if ( ! is_admin() ) {
255
		return;
256
	}
257
258
	$give_options     = get_transient( '_give_installed' );
259
	$give_table_check = get_option( '_give_table_check', false );
260
261
	if ( false === $give_table_check || current_time( 'timestamp' ) > $give_table_check ) {
262
263
		if ( ! @Give()->customer_meta->installed() ) {
264
265
			// Create the customer meta database
266
			// (this ensures it creates it on multisite instances where it is network activated).
267
			@Give()->customer_meta->create_table();
268
269
		}
270
271
		if ( ! @Give()->customers->installed() ) {
272
			// Create the customers database
273
			// (this ensures it creates it on multisite instances where it is network activated).
274
			@Give()->customers->create_table();
275
276
			/**
277
			 * Fires after plugin installation.
278
			 *
279
			 * @since 1.0
280
			 *
281
			 * @param array $give_options Give plugin options.
282
			 */
283
			do_action( 'give_after_install', $give_options );
284
		}
285
286
		update_option( '_give_table_check', ( current_time( 'timestamp' ) + WEEK_IN_SECONDS ) );
287
288
	}
289
290
	// Delete the transient
291
	if ( false !== $give_options ) {
292
		delete_transient( '_give_installed' );
293
	}
294
295
296
}
297
298
add_action( 'admin_init', 'give_after_install' );
299
300
301
/**
302
 * Install user roles on sub-sites of a network
303
 *
304
 * Roles do not get created when Give is network activation so we need to create them during admin_init
305
 *
306
 * @since 1.0
307
 * @return void
308
 */
309
function give_install_roles_on_network() {
310
311
	global $wp_roles;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
312
313
	if ( ! is_object( $wp_roles ) ) {
314
		return;
315
	}
316
317
	if ( ! array_key_exists( 'give_manager', $wp_roles->roles ) ) {
318
319
		// Create Give plugin roles
320
		$roles = new Give_Roles();
321
		$roles->add_roles();
322
		$roles->add_caps();
323
324
	}
325
326
}
327
328
add_action( 'admin_init', 'give_install_roles_on_network' );
329
330
331
/**
332
 * Default core setting values.
333
 *
334
 * @since 1.8
335
 * @return array
336
 */
337
function give_get_default_settings() {
338
	$options = array(
339
		// General.
340
		'base_country'                                => 'US',
341
		'test_mode'                                   => 'enabled',
342
		'currency'                                    => 'USD',
343
		'currency_position'                           => 'before',
344
		'session_lifetime'                            => '604800',
345
		'email_access'                                => 'disabled',
346
		'number_decimals'                             => 2,
347
348
		// Display options.
349
		'css'                                         => 'enabled',
350
		'floatlabels'                                 => 'disabled',
351
		'welcome'                                     => 'enabled',
352
		'forms_singular'                              => 'enabled',
353
		'forms_archives'                              => 'enabled',
354
		'forms_excerpt'                               => 'enabled',
355
		'form_featured_img'                           => 'enabled',
356
		'form_sidebar'                                => 'enabled',
357
		'categories'                                  => 'disabled',
358
		'tags'                                        => 'disabled',
359
		'terms'                                       => 'disabled',
360
		'admin_notices'                               => 'enabled',
361
		'uninstall_on_delete'                         => 'disabled',
362
		'the_content_filter'                          => 'enabled',
363
		'scripts_footer'                              => 'disabled',
364
365
		// Paypal IPN verification.
366
		'paypal_verification'                         => 'enabled',
367
368
		// Default is manual gateway.
369
		'gateways'                                    => array( 'manual' => 1, 'offline' => 1 ),
370
		'default_gateway'                             => 'manual',
371
372
		// Offline gateway setup.
373
		'global_offline_donation_content'             => give_get_default_offline_donation_content(),
374
375
		// Billing address.
376
		'give_offline_donation_enable_billing_fields' => 'disabled',
377
378
		// Default donation notification email.
379
		'donation_notification'                       => give_get_default_donation_notification_email(),
380
381
		// Default email receipt message.
382
		'donation_receipt'                            => give_get_default_donation_receipt_email(),
383
	);
384
385
	return $options;
386
}
387