154 lines
3.2 KiB
PHP
154 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* ElasticPress installer handler
|
|
*
|
|
* @since 3.0
|
|
* @package elasticpress
|
|
*/
|
|
|
|
namespace ElasticPress;
|
|
|
|
use ElasticPress\Utils;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
/**
|
|
* Installer class
|
|
*/
|
|
class Installer {
|
|
/**
|
|
* Current install status
|
|
*
|
|
* @var int|bool
|
|
* @since 3.0
|
|
*/
|
|
protected $install_status;
|
|
|
|
/**
|
|
* Initialize class
|
|
*
|
|
* @since 3.0
|
|
*/
|
|
public function setup() {
|
|
add_action( 'admin_init', [ $this, 'calculate_install_status' ], 9 );
|
|
add_filter( 'admin_title', [ $this, 'filter_admin_title' ], 10, 2 );
|
|
}
|
|
|
|
/**
|
|
* Filter admin title for install page
|
|
*
|
|
* @param string $admin_title Current title
|
|
* @param string $title Original title
|
|
* @since 3.0
|
|
* @return string
|
|
*/
|
|
public function filter_admin_title( $admin_title, $title ) {
|
|
if ( 'install' === Screen::factory()->get_current_screen() ) {
|
|
// translators: Site Name
|
|
return sprintf( esc_html__( 'ElasticPress Setup ‹ %s — WordPress', 'elasticpress' ), esc_html( get_bloginfo( 'name' ) ) );
|
|
}
|
|
|
|
return $admin_title;
|
|
}
|
|
|
|
/**
|
|
* Determine current install status
|
|
*
|
|
* @since 3.0
|
|
*/
|
|
public function calculate_install_status() {
|
|
$skip_install = Utils\get_option( 'ep_skip_install', false );
|
|
|
|
if ( $skip_install ) {
|
|
$this->install_status = true;
|
|
|
|
return;
|
|
}
|
|
|
|
$last_sync = Utils\get_option( 'ep_last_sync', false );
|
|
if ( ! empty( $last_sync ) ) {
|
|
$this->install_status = true;
|
|
|
|
return;
|
|
}
|
|
|
|
$host = Utils\get_host();
|
|
|
|
if ( empty( $host ) && empty( $_POST['ep_host'] ) ) {
|
|
$this->install_status = 2;
|
|
|
|
return;
|
|
}
|
|
|
|
$this->install_status = 3;
|
|
|
|
$this->maybe_set_features();
|
|
}
|
|
|
|
/**
|
|
* Get installation status
|
|
*
|
|
* false - not installed
|
|
* 2 - On step two of install
|
|
* 3 - On step three of install
|
|
* true - Install complete
|
|
*
|
|
* @return bool|int
|
|
*/
|
|
public function get_install_status() {
|
|
/**
|
|
* Filter install status
|
|
*
|
|
* @hook ep_install_status
|
|
* @param {string} $install_status Current install status
|
|
* @return {string} New install status
|
|
* @since 3.0
|
|
*/
|
|
return apply_filters( 'ep_install_status', $this->install_status );
|
|
}
|
|
|
|
/**
|
|
* Check if it should use the features selected during the install to update the settings.
|
|
*/
|
|
public function maybe_set_features() {
|
|
if ( empty( $_POST['ep_install_page_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['ep_install_page_nonce'] ), 'ep_install_page' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! isset( $_POST['features'] ) || ! is_array( $_POST['features'] ) ) {
|
|
return;
|
|
}
|
|
|
|
$registered_features = \ElasticPress\Features::factory()->registered_features;
|
|
$activation_features = wp_list_filter( $registered_features, array( 'available_during_installation' => true ) );
|
|
|
|
foreach ( $activation_features as $slug => $feature ) {
|
|
if ( in_array( $slug, $_POST['features'], true ) ) {
|
|
\ElasticPress\Features::factory()->activate_feature( $slug );
|
|
} else {
|
|
\ElasticPress\Features::factory()->deactivate_feature( $slug );
|
|
}
|
|
}
|
|
|
|
$this->install_status = 4;
|
|
}
|
|
|
|
/**
|
|
* Return singleton instance of class
|
|
*
|
|
* @return self
|
|
* @since 3.0
|
|
*/
|
|
public static function factory() {
|
|
static $instance = false;
|
|
|
|
if ( ! $instance ) {
|
|
$instance = new self();
|
|
$instance->setup();
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
}
|