Initial Commit
This commit is contained in:
367
inc/admin-pages/class-hosting-integration-wizard-admin-page.php
Normal file
367
inc/admin-pages/class-hosting-integration-wizard-admin-page.php
Normal file
@ -0,0 +1,367 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Ultimo Dashboard Admin Page.
|
||||
*
|
||||
* @package WP_Ultimo
|
||||
* @subpackage Admin_Pages
|
||||
* @since 2.0.0
|
||||
*/
|
||||
|
||||
namespace WP_Ultimo\Admin_Pages;
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* WP Ultimo Dashboard Admin Page.
|
||||
*/
|
||||
class Hosting_Integration_Wizard_Admin_Page extends Wizard_Admin_Page {
|
||||
|
||||
/**
|
||||
* Holds the ID for this page, this is also used as the page slug.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $id = 'wp-ultimo-hosting-integration-wizard';
|
||||
|
||||
/**
|
||||
* Is this a top-level menu or a submenu?
|
||||
*
|
||||
* @since 1.8.2
|
||||
* @var string
|
||||
*/
|
||||
protected $type = 'submenu';
|
||||
|
||||
/**
|
||||
* Is this a top-level menu or a submenu?
|
||||
*
|
||||
* @since 1.8.2
|
||||
* @var string
|
||||
*/
|
||||
protected $parent = 'none';
|
||||
|
||||
/**
|
||||
* This page has no parent, so we need to highlight another sub-menu.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @var string
|
||||
*/
|
||||
protected $highlight_menu_slug = 'wp-ultimo-settings';
|
||||
|
||||
/**
|
||||
* If this number is greater than 0, a badge with the number will be displayed alongside the menu title
|
||||
*
|
||||
* @since 1.8.2
|
||||
* @var integer
|
||||
*/
|
||||
protected $badge_count = 0;
|
||||
|
||||
/**
|
||||
* Holds the admin panels where this page should be displayed, as well as which capability to require.
|
||||
*
|
||||
* To add a page to the regular admin (wp-admin/), use: 'admin_menu' => 'capability_here'
|
||||
* To add a page to the network admin (wp-admin/network), use: 'network_admin_menu' => 'capability_here'
|
||||
* To add a page to the user (wp-admin/user) admin, use: 'user_admin_menu' => 'capability_here'
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @var array
|
||||
*/
|
||||
protected $supported_panels = array(
|
||||
'network_admin_menu' => 'manage_network',
|
||||
);
|
||||
|
||||
/**
|
||||
* Current integration being setup.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @var WP_Ultimo\Integrations\Host_Providers\Base_Host_Provider
|
||||
*/
|
||||
protected $integration;
|
||||
|
||||
/**
|
||||
* Allow child classes to add further initializations.
|
||||
*
|
||||
* @since 1.8.2
|
||||
* @return void
|
||||
*/
|
||||
public function page_loaded() {
|
||||
|
||||
if (isset($_GET['integration'])) {
|
||||
|
||||
$domain_manager = \WP_Ultimo\Managers\Domain_Manager::get_instance();
|
||||
|
||||
$this->integration = $domain_manager->get_integration_instance($_GET['integration']);
|
||||
|
||||
} // end if;
|
||||
|
||||
if (!$this->integration) {
|
||||
|
||||
wp_redirect(network_admin_url('admin.php?page=wp-ultimo-settings'));
|
||||
|
||||
exit;
|
||||
|
||||
} // end if;
|
||||
|
||||
parent::page_loaded();
|
||||
|
||||
} // end page_loaded;
|
||||
|
||||
/**
|
||||
* Returns the title of the page.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return string Title of the page.
|
||||
*/
|
||||
public function get_title(): string {
|
||||
|
||||
return sprintf(__('Integration Setup', 'wp-ultimo'));
|
||||
|
||||
} // end get_title;
|
||||
|
||||
/**
|
||||
* Returns the title of menu for this page.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return string Menu label of the page.
|
||||
*/
|
||||
public function get_menu_title() {
|
||||
|
||||
return __('Host Provider Integration', 'wp-ultimo');
|
||||
|
||||
} // end get_menu_title;
|
||||
|
||||
/**
|
||||
* Returns the sections for this Wizard.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return array
|
||||
*/
|
||||
public function get_sections() {
|
||||
|
||||
$sections = array(
|
||||
'activation' => array(
|
||||
'title' => __('Activation', 'wp-ultimo'),
|
||||
'view' => array($this, 'section_activation'),
|
||||
'handler' => array($this, 'handle_activation'),
|
||||
),
|
||||
'instructions' => array(
|
||||
'title' => __('Instructions', 'wp-ultimo'),
|
||||
'view' => array($this, 'section_instructions'),
|
||||
),
|
||||
'config' => array(
|
||||
'title' => __('Configuration', 'wp-ultimo'),
|
||||
'view' => array($this, 'section_configuration'),
|
||||
'handler' => array($this, 'handle_configuration'),
|
||||
),
|
||||
'testing' => array(
|
||||
'title' => __('Testing Integration', 'wp-ultimo'),
|
||||
'view' => array($this, 'section_test'),
|
||||
),
|
||||
'done' => array(
|
||||
'title' => __('Ready!', 'wp-ultimo'),
|
||||
'view' => array($this, 'section_ready'),
|
||||
),
|
||||
);
|
||||
|
||||
/*
|
||||
* Some host providers require no instructions.
|
||||
*/
|
||||
if ($this->integration->supports('no-instructions')) {
|
||||
|
||||
unset($sections['instructions']);
|
||||
|
||||
} // end if;
|
||||
|
||||
/*
|
||||
* Some host providers require no additional setup.
|
||||
*/
|
||||
if ($this->integration->supports('no-config')) {
|
||||
|
||||
unset($sections['config']);
|
||||
|
||||
} // end if;
|
||||
|
||||
return $sections;
|
||||
|
||||
} // end get_sections;
|
||||
|
||||
/**
|
||||
* Displays the content of the activation section.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function section_activation() {
|
||||
|
||||
$explainer_lines = $this->integration->get_explainer_lines();
|
||||
|
||||
wu_get_template('wizards/host-integrations/activation', array(
|
||||
'screen' => get_current_screen(),
|
||||
'page' => $this,
|
||||
'integration' => $this->integration,
|
||||
'will' => $explainer_lines['will'],
|
||||
'will_not' => $explainer_lines['will_not'],
|
||||
));
|
||||
|
||||
} // end section_activation;
|
||||
|
||||
/**
|
||||
* Displays the contents of the instructions section.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function section_instructions() {
|
||||
|
||||
call_user_func(array($this->integration, 'get_instructions'));
|
||||
|
||||
$this->render_submit_box();
|
||||
|
||||
} // end section_instructions;
|
||||
|
||||
/**
|
||||
* Displays the content of the configuration section.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function section_configuration() {
|
||||
|
||||
$fields = $this->integration->get_fields();
|
||||
|
||||
foreach ($fields as $field_constant => &$field) {
|
||||
|
||||
$field['value'] = defined($field_constant) && constant($field_constant) ? constant($field_constant) : '';
|
||||
|
||||
} // end foreach;
|
||||
|
||||
$form = new \WP_Ultimo\UI\Form($this->get_current_section(), $fields, array(
|
||||
'views' => 'admin-pages/fields',
|
||||
'classes' => 'wu-widget-list wu-striped wu-m-0 wu--mt-2 wu--mb-3 wu--mx-3',
|
||||
'field_wrapper_classes' => 'wu-w-full wu-box-border wu-items-center wu-flex wu-justify-between wu-px-6 wu-py-4 wu-m-0 wu-border-t wu-border-l-0 wu-border-r-0 wu-border-b-0 wu-border-gray-300 wu-border-solid',
|
||||
));
|
||||
|
||||
if (wu_request('manual')) {
|
||||
|
||||
wu_get_template('wizards/host-integrations/configuration-results', array(
|
||||
'screen' => get_current_screen(),
|
||||
'page' => $this,
|
||||
'integration' => $this->integration,
|
||||
'form' => $form,
|
||||
'post' => $_GET['post'],
|
||||
));
|
||||
|
||||
return;
|
||||
|
||||
} // end if;
|
||||
|
||||
wu_get_template('wizards/host-integrations/configuration', array(
|
||||
'screen' => get_current_screen(),
|
||||
'page' => $this,
|
||||
'integration' => $this->integration,
|
||||
'form' => $form,
|
||||
));
|
||||
|
||||
} // end section_configuration;
|
||||
|
||||
/**
|
||||
* Displays the content of the final section.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function section_ready() {
|
||||
|
||||
wu_get_template('wizards/host-integrations/ready', array(
|
||||
'screen' => get_current_screen(),
|
||||
'page' => $this,
|
||||
'integration' => $this->integration,
|
||||
));
|
||||
|
||||
} // end section_ready;
|
||||
|
||||
/**
|
||||
* Handles the activation of a given integration.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function handle_activation() {
|
||||
|
||||
$is_enabled = $this->integration->is_enabled();
|
||||
|
||||
if ($is_enabled) {
|
||||
|
||||
$this->integration->disable();
|
||||
|
||||
return;
|
||||
|
||||
} // end if;
|
||||
|
||||
$this->integration->enable();
|
||||
|
||||
wp_redirect($this->get_next_section_link());
|
||||
|
||||
exit;
|
||||
|
||||
} // end handle_activation;
|
||||
|
||||
/**
|
||||
* Handles the configuration of a given integration.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function handle_configuration() {
|
||||
|
||||
if (wu_request('submit') == '0') { // phpcs:ignore
|
||||
|
||||
$redirect_url = add_query_arg(array(
|
||||
'manual' => '1',
|
||||
'post' => $_POST,
|
||||
));
|
||||
|
||||
wp_redirect($redirect_url);
|
||||
|
||||
exit;
|
||||
|
||||
} // end if;
|
||||
|
||||
if (wu_request('submit') == '1') { // phpcs:ignore
|
||||
|
||||
$this->integration->setup_constants($_POST);
|
||||
|
||||
} // end if;
|
||||
|
||||
$redirect_url = $this->get_next_section_link();
|
||||
|
||||
$redirect_url = remove_query_arg('post', $redirect_url);
|
||||
|
||||
$redirect_url = remove_query_arg('manual', $redirect_url);
|
||||
|
||||
wp_redirect($redirect_url);
|
||||
|
||||
exit;
|
||||
|
||||
} // end handle_configuration;
|
||||
|
||||
/**
|
||||
* Handles the testing of a given configuration.
|
||||
*
|
||||
* @todo Move Vue to a scripts management class.
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function section_test() {
|
||||
|
||||
wp_enqueue_script('wu-vue');
|
||||
|
||||
wu_get_template('wizards/host-integrations/test', array(
|
||||
'screen' => get_current_screen(),
|
||||
'page' => $this,
|
||||
'integration' => $this->integration,
|
||||
));
|
||||
|
||||
} // end section_test;
|
||||
|
||||
} // end class Hosting_Integration_Wizard_Admin_Page;
|
Reference in New Issue
Block a user