247 lines
5.1 KiB
PHP
247 lines
5.1 KiB
PHP
<?php
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly
|
|
}
|
|
|
|
if ( ! class_exists( 'ACF_Admin_Upgrade' ) ) :
|
|
|
|
class ACF_Admin_Upgrade {
|
|
|
|
/**
|
|
* __construct
|
|
*
|
|
* Sets up the class functionality.
|
|
*
|
|
* @date 31/7/18
|
|
* @since 5.7.2
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function __construct() {
|
|
|
|
// actions
|
|
add_action( 'admin_menu', array( $this, 'admin_menu' ), 20 );
|
|
if ( is_multisite() ) {
|
|
add_action( 'network_admin_menu', array( $this, 'network_admin_menu' ), 20 );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* admin_menu
|
|
*
|
|
* Setus up logic if DB Upgrade is needed on a single site.
|
|
*
|
|
* @date 24/8/18
|
|
* @since 5.7.4
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function admin_menu() {
|
|
|
|
// check if upgrade is avaialble
|
|
if ( acf_has_upgrade() ) {
|
|
|
|
// add notice
|
|
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
|
|
|
|
// add page
|
|
$page = add_submenu_page( 'index.php', __( 'Upgrade Database', 'acf' ), __( 'Upgrade Database', 'acf' ), acf_get_setting( 'capability' ), 'acf-upgrade', array( $this, 'admin_html' ) );
|
|
|
|
// actions
|
|
add_action( 'load-' . $page, array( $this, 'admin_load' ) );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* network_admin_menu
|
|
*
|
|
* Sets up admin logic if DB Upgrade is required on a multi site.
|
|
*
|
|
* @date 24/8/18
|
|
* @since 5.7.4
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function network_admin_menu() {
|
|
|
|
// Vars.
|
|
$upgrade = false;
|
|
|
|
// Loop over sites and check for upgrades.
|
|
$sites = get_sites( array( 'number' => 0 ) );
|
|
if ( $sites ) {
|
|
|
|
// Unhook action to avoid memory issue (as seen in wp-includes/ms-site.php).
|
|
remove_action( 'switch_blog', 'wp_switch_roles_and_user', 1 );
|
|
foreach ( $sites as $site ) {
|
|
|
|
// Switch site.
|
|
switch_to_blog( $site->blog_id );
|
|
|
|
// Check for upgrade.
|
|
$site_upgrade = acf_has_upgrade();
|
|
|
|
// Restore site.
|
|
// Ideally, we would switch back to the original site at after looping, however,
|
|
// the restore_current_blog() is needed to modify global vars.
|
|
restore_current_blog();
|
|
|
|
// Check if upgrade was found.
|
|
if ( $site_upgrade ) {
|
|
$upgrade = true;
|
|
break;
|
|
}
|
|
}
|
|
add_action( 'switch_blog', 'wp_switch_roles_and_user', 1, 2 );
|
|
}
|
|
|
|
// Bail early if no upgrade is needed.
|
|
if ( ! $upgrade ) {
|
|
return;
|
|
}
|
|
|
|
// Add notice.
|
|
add_action( 'network_admin_notices', array( $this, 'network_admin_notices' ) );
|
|
|
|
// Add page.
|
|
$page = add_submenu_page(
|
|
'index.php',
|
|
__( 'Upgrade Database', 'acf' ),
|
|
__( 'Upgrade Database', 'acf' ),
|
|
acf_get_setting( 'capability' ),
|
|
'acf-upgrade-network',
|
|
array( $this, 'network_admin_html' )
|
|
);
|
|
add_action( "load-$page", array( $this, 'network_admin_load' ) );
|
|
}
|
|
|
|
/**
|
|
* admin_load
|
|
*
|
|
* Runs during the loading of the admin page.
|
|
*
|
|
* @date 24/8/18
|
|
* @since 5.7.4
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
function admin_load() {
|
|
|
|
// remove prompt
|
|
remove_action( 'admin_notices', array( $this, 'admin_notices' ) );
|
|
|
|
// Enqueue core script.
|
|
acf_enqueue_script( 'acf' );
|
|
}
|
|
|
|
/**
|
|
* network_admin_load
|
|
*
|
|
* Runs during the loading of the network admin page.
|
|
*
|
|
* @date 24/8/18
|
|
* @since 5.7.4
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
function network_admin_load() {
|
|
|
|
// remove prompt
|
|
remove_action( 'network_admin_notices', array( $this, 'network_admin_notices' ) );
|
|
|
|
// Enqueue core script.
|
|
acf_enqueue_script( 'acf' );
|
|
}
|
|
|
|
/**
|
|
* admin_notices
|
|
*
|
|
* Displays the DB Upgrade prompt.
|
|
*
|
|
* @date 23/8/18
|
|
* @since 5.7.3
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function admin_notices() {
|
|
|
|
// vars
|
|
$view = array(
|
|
'button_text' => __( 'Upgrade Database', 'acf' ),
|
|
'button_url' => admin_url( 'index.php?page=acf-upgrade' ),
|
|
'confirm' => true,
|
|
);
|
|
|
|
// view
|
|
acf_get_view( 'html-notice-upgrade', $view );
|
|
}
|
|
|
|
/**
|
|
* network_admin_notices
|
|
*
|
|
* Displays the DB Upgrade prompt on a multi site.
|
|
*
|
|
* @date 23/8/18
|
|
* @since 5.7.3
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function network_admin_notices() {
|
|
|
|
// vars
|
|
$view = array(
|
|
'button_text' => __( 'Review sites & upgrade', 'acf' ),
|
|
'button_url' => network_admin_url( 'index.php?page=acf-upgrade-network' ),
|
|
'confirm' => false,
|
|
);
|
|
|
|
// view
|
|
acf_get_view( 'html-notice-upgrade', $view );
|
|
}
|
|
|
|
/**
|
|
* admin_html
|
|
*
|
|
* Displays the HTML for the admin page.
|
|
*
|
|
* @date 24/8/18
|
|
* @since 5.7.4
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function admin_html() {
|
|
acf_get_view( 'html-admin-page-upgrade' );
|
|
}
|
|
|
|
/**
|
|
* network_admin_html
|
|
*
|
|
* Displays the HTML for the network upgrade admin page.
|
|
*
|
|
* @date 24/8/18
|
|
* @since 5.7.4
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function network_admin_html() {
|
|
acf_get_view( 'html-admin-page-upgrade-network' );
|
|
}
|
|
}
|
|
|
|
// instantiate
|
|
acf_new_instance( 'ACF_Admin_Upgrade' );
|
|
|
|
endif; // class_exists check
|
|
|
|
|