Initial Commit

This commit is contained in:
David Stone
2024-11-30 18:24:12 -07:00
commit e8f7955c1c
5432 changed files with 1397750 additions and 0 deletions

View 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;