activation.php
5.27 KB
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
<?php
if ( get_option( 'blc_activation_enabled' ) ) {
return;
}
global $blclog, $blc_config_manager, $wpdb;
$queryCnt = $wpdb->num_queries;
require_once BLC_DIRECTORY_LEGACY . '/includes/utility-class.php';
//Completing the installation/upgrade is required for the plugin to work, so make sure
//the script doesn't get aborted by (for example) the browser timing out.
//set_time_limit( 300 ); //5 minutes should be plenty, anything more would probably indicate an infinite loop or a deadlock
if ( blcUtility::is_host_wp_engine() || blcUtility::is_host_flywheel() ) {
set_time_limit( 60 );
} else {
set_time_limit( 300 );
}
ignore_user_abort( true );
//Log installation progress to a DB option
$blclog = new blcCachedOptionLogger( 'blc_installation_log' );
register_shutdown_function( array( &$blclog, 'save' ) ); //Make sure the log is saved even if the plugin crashes
$blclog->clear();
$blclog->info( sprintf( 'Plugin activated at %s.', date_i18n( 'Y-m-d H:i:s' ) ) );
$activation_start = microtime( true );
//Reset the "installation_complete" flag
$blc_config_manager->options['installation_complete'] = false;
$blc_config_manager->options['installation_flag_cleared_on'] = date( 'c' ) . ' (' . microtime( true ) . ')'; //phpcs:ignore
//Note the time of the first installation (not very accurate, but still useful)
if ( empty( $blc_config_manager->options['first_installation_timestamp'] ) ) {
$blc_config_manager->options['first_installation_timestamp'] = time();
}
$blc_config_manager->save_options();
$blclog->info( 'Installation/update begins.' );
//Load the base classes and utilities
require_once BLC_DIRECTORY_LEGACY . '/includes/links.php';
require_once BLC_DIRECTORY_LEGACY . '/includes/link-query.php';
require_once BLC_DIRECTORY_LEGACY . '/includes/instances.php';
//require_once BLC_DIRECTORY_LEGACY . '/includes/utility-class.php';
//Load the module subsystem
require_once BLC_DIRECTORY_LEGACY . '/includes/modules.php';
$moduleManager = blcModuleManager::getInstance();
//If upgrading, activate/deactivate custom field and comment containers based on old ver. settings
if ( isset( $blc_config_manager->options['check_comment_links'] ) ) {
if ( ! $blc_config_manager->options['check_comment_links'] ) {
$moduleManager->deactivate( 'comment' );
}
unset( $blc_config_manager->options['check_comment_links'] );
}
if ( empty( $blc_config_manager->options['custom_fields'] ) ) {
$moduleManager->deactivate( 'custom_field' );
}
if ( empty( $blc_config_manager->options['acf_fields'] ) ) {
$moduleManager->deactivate( 'acf_field' );
}
//Prepare the database.
$blclog->info( 'Upgrading the database...' );
$upgrade_start = microtime( true );
require_once BLC_DIRECTORY_LEGACY . '/includes/admin/db-upgrade.php';
blcDatabaseUpgrader::upgrade_database();
$blclog->info( sprintf( '--- Total: %.3f seconds', microtime( true ) - $upgrade_start ) );
//Remove invalid DB entries
$blclog->info( 'Cleaning up the database...' );
$cleanup_start = microtime( true );
blc_cleanup_database();
$blclog->info( sprintf( '--- Total: %.3f seconds', microtime( true ) - $cleanup_start ) );
//Notify modules that the plugin has been activated. This will cause container
//modules to create and update synch. records for all new/modified posts and other items.
$blclog->info( 'Notifying modules...' );
$notification_start = microtime( true );
$moduleManager->plugin_activated();
blc_got_unsynched_items();
$blclog->info( sprintf( '--- Total: %.3f seconds', microtime( true ) - $notification_start ) );
//Turn off load limiting if it's not available on this server.
$blclog->info( 'Updating server load limit settings...' );
$load = blcUtility::get_server_load();
if ( empty( $load ) ) {
$blc_config_manager->options['enable_load_limit'] = false;
$blclog->info( 'Disable load limit. Cannot retrieve current load average.' );
} elseif ( $blc_config_manager->options['enable_load_limit'] && ! isset( $blc_config_manager->options['server_load_limit'] ) ) {
$fifteen_minutes = floatval( end( $load ) );
$default_load_limit = round( max( min( $fifteen_minutes * 2, $fifteen_minutes + 2 ), 4 ) );
$blc_config_manager->options['server_load_limit'] = $default_load_limit;
$blclog->info(
sprintf(
'Set server load limit to %.2f. Current load average is %.2f',
$default_load_limit,
$fifteen_minutes
)
);
}
//And optimize my DB tables, too (for good measure)
$blclog->info( 'Optimizing the database...' );
$optimize_start = microtime( true );
blcUtility::optimize_database();
$blclog->info( sprintf( '--- Total: %.3f seconds', microtime( true ) - $optimize_start ) );
$blclog->info( 'Completing installation...' );
$blc_config_manager->options['installation_complete'] = true;
$blc_config_manager->options['installation_flag_set_on'] = date( 'c' ) . ' (' . microtime( true ) . ')'; //phpcs:ignore
if ( $blc_config_manager->save_options() ) {
$blclog->info( 'Configuration saved.' );
} else {
$blclog->error( 'Error saving plugin configuration!' );
};
$blclog->info(
sprintf(
'Installation/update completed at %s with %d queries executed.',
date_i18n( 'Y-m-d H:i:s' ),
$wpdb->num_queries - $queryCnt
)
);
$blclog->info( sprintf( 'Total time: %.3f seconds', microtime( true ) - $activation_start ) );
$blclog->save();
// for multisite support.
update_option( 'blc_activation_enabled', true );