288 lines
7.0 KiB
PHP
288 lines
7.0 KiB
PHP
<?php
|
|
/**
|
|
* Adds domain mapping and auto SSL support to customer hosting networks on WPMU DEV.
|
|
*
|
|
* @package WP_Ultimo
|
|
* @subpackage Integrations/Host_Providers/WPMUDEV_Host_Provider
|
|
* @since 2.0.0
|
|
*/
|
|
|
|
namespace WP_Ultimo\Integrations\Host_Providers;
|
|
|
|
use Psr\Log\LogLevel;
|
|
use WP_Ultimo\Integrations\Host_Providers\Base_Host_Provider;
|
|
|
|
// Exit if accessed directly
|
|
defined('ABSPATH') || exit;
|
|
|
|
/**
|
|
* This base class should be extended to implement new host integrations for SSL and domains.
|
|
*/
|
|
class WPMUDEV_Host_Provider extends Base_Host_Provider {
|
|
|
|
use \WP_Ultimo\Traits\Singleton;
|
|
|
|
/**
|
|
* Keeps the title of the integration.
|
|
*
|
|
* @var string
|
|
* @since 2.0.0
|
|
*/
|
|
protected $id = 'wpmudev';
|
|
|
|
/**
|
|
* Keeps the title of the integration.
|
|
*
|
|
* @var string
|
|
* @since 2.0.0
|
|
*/
|
|
protected $title = 'WPMU DEV Hosting';
|
|
|
|
/**
|
|
* Link to the tutorial teaching how to make this integration work.
|
|
*
|
|
* @var string
|
|
* @since 2.0.0
|
|
*/
|
|
protected $tutorial_link = '';
|
|
|
|
/**
|
|
* Array containing the features this integration supports.
|
|
*
|
|
* @var array
|
|
* @since 2.0.0
|
|
*/
|
|
protected $supports = array(
|
|
'autossl',
|
|
'no-instructions',
|
|
'no-config',
|
|
);
|
|
|
|
/**
|
|
* Constants that need to be present on wp-config.php for this integration to work.
|
|
*
|
|
* @since 2.0.0
|
|
* @var array
|
|
*/
|
|
protected $constants = array(
|
|
'WPMUDEV_HOSTING_SITE_ID',
|
|
);
|
|
|
|
/**
|
|
* Runs on singleton instantiation.
|
|
*
|
|
* @since 2.1.1
|
|
* @return void
|
|
*/
|
|
public function init() {
|
|
|
|
parent::init();
|
|
|
|
/**
|
|
* Add filter to increase the number of tries to get the SSL certificate.
|
|
* This is needed because, from our tests, WPMU DEV hosting takes a while to get the SSL certificate.
|
|
*/
|
|
add_filter('wu_async_process_domain_stage_max_tries', array($this, 'ssl_tries'), 10, 2);
|
|
|
|
} // end init;
|
|
|
|
/**
|
|
* Increases the number of tries to get the SSL certificate.
|
|
*
|
|
* @since 2.1.1
|
|
* @param int $max_tries The number of tries to get the SSL certificate.
|
|
* @param \WP_Ultimo\Models\Domain $domain The domain object.
|
|
* @return int
|
|
*/
|
|
public function ssl_tries($max_tries, $domain) {
|
|
|
|
if (!$this->is_enabled()) {
|
|
|
|
return $max_tries;
|
|
|
|
} // end if;
|
|
|
|
if ('checking-ssl-cert' === $domain->get_stage()) {
|
|
|
|
$max_tries = 10;
|
|
|
|
} // end if;
|
|
|
|
return $max_tries;
|
|
|
|
} // end ssl_tries;
|
|
|
|
/**
|
|
* Picks up on tips that a given host provider is being used.
|
|
*
|
|
* We use this to suggest that the user should activate an integration module.
|
|
*
|
|
* @since 2.0.0
|
|
* @return boolean
|
|
*/
|
|
public function detect() {
|
|
|
|
return defined('WPMUDEV_HOSTING_SITE_ID') && WPMUDEV_HOSTING_SITE_ID;
|
|
|
|
} // end detect;
|
|
|
|
/**
|
|
* This method gets called when a new domain is mapped.
|
|
*
|
|
* @since 2.0.0
|
|
* @param string $domain The domain name being mapped.
|
|
* @param int $site_id ID of the site that is receiving that mapping.
|
|
* @return void
|
|
*/
|
|
public function on_add_domain($domain, $site_id) {
|
|
|
|
$site_id = WPMUDEV_HOSTING_SITE_ID;
|
|
|
|
$api_key = get_site_option('wpmudev_apikey');
|
|
|
|
$domains = array($domain);
|
|
|
|
if (strncmp($domain, 'www.', strlen('www.')) !== 0) {
|
|
|
|
$domains[] = "www.$domain";
|
|
|
|
} // end if;
|
|
|
|
foreach ($domains as $_domain) {
|
|
|
|
$response = wp_remote_post("https://premium.wpmudev.org/api/hosting/v1/$site_id/domains", array(
|
|
'timeout' => 50,
|
|
'body' => array(
|
|
'domain' => $_domain,
|
|
'site_id' => $site_id,
|
|
),
|
|
'headers' => array(
|
|
'Authorization' => $api_key,
|
|
),
|
|
));
|
|
|
|
if (is_wp_error($response)) {
|
|
|
|
// translators: The %s placeholder will be replaced with the domain name.
|
|
wu_log_add('integration-wpmudev', sprintf(__('An error occurred while trying to add the custom domain %s to WPMU Dev hosting.', 'wp-ultimo'), $_domain), LogLevel::ERROR);
|
|
|
|
} // end if;
|
|
|
|
$body = json_decode(wp_remote_retrieve_body($response));
|
|
|
|
if ($body->message) {
|
|
|
|
// translators: The %1$s will be replaced with the domain name and %2$s is the error message.
|
|
wu_log_add('integration-wpmudev', sprintf(__('An error occurred while trying to add the custom domain %1$s to WPMU Dev hosting: %2$s', 'wp-ultimo'), $_domain, $body->message->message), LogLevel::ERROR);
|
|
|
|
} else {
|
|
|
|
// translators: The %s placeholder will be replaced with the domain name.
|
|
wu_log_add('integration-wpmudev', sprintf(__('Domain %s added to WPMU Dev hosting successfully.', 'wp-ultimo'), $_domain));
|
|
|
|
} // end if;
|
|
|
|
} // end foreach;
|
|
|
|
} // end on_add_domain;
|
|
|
|
/**
|
|
* This method gets called when a mapped domain is removed.
|
|
*
|
|
* @since 2.0.0
|
|
* @param string $domain The domain name being removed.
|
|
* @param int $site_id ID of the site that is receiving that mapping.
|
|
* @return void
|
|
*/
|
|
public function on_remove_domain($domain, $site_id) {
|
|
|
|
/**
|
|
* The WPMU DEV Hosting REST API does not offer an endpoint to remove domains yet.
|
|
* As soon as that's the case, we'll implement it here.
|
|
*
|
|
* @todo Implement support to removing domains when a mapping is removed.
|
|
*/
|
|
|
|
} // end on_remove_domain;
|
|
|
|
/**
|
|
* This method gets called when a new subdomain is being added.
|
|
*
|
|
* This happens every time a new site is added to a network running on subdomain mode.
|
|
*
|
|
* @since 2.0.0
|
|
* @param string $subdomain The subdomain being added to the network.
|
|
* @param int $site_id ID of the site that is receiving that mapping.
|
|
* @return void
|
|
*/
|
|
public function on_add_subdomain($subdomain, $site_id) {} // end on_add_subdomain;
|
|
|
|
/**
|
|
* This method gets called when a new subdomain is being removed.
|
|
*
|
|
* This happens every time a new site is removed to a network running on subdomain mode.
|
|
*
|
|
* @since 2.0.0
|
|
* @param string $subdomain The subdomain being removed to the network.
|
|
* @param int $site_id ID of the site that is receiving that mapping.
|
|
* @return void
|
|
*/
|
|
public function on_remove_subdomain($subdomain, $site_id) {} // end on_remove_subdomain;
|
|
|
|
/**
|
|
* Tests the connection with the WPMUDEV API.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function test_connection() {
|
|
|
|
$site_id = WPMUDEV_HOSTING_SITE_ID;
|
|
|
|
$api_key = get_site_option('wpmudev_apikey');
|
|
|
|
$response = wp_remote_get("https://premium.wpmudev.org/api/hosting/v1/{$site_id}/domains", array(
|
|
'timeout' => 50,
|
|
'headers' => array(
|
|
'Authorization' => $api_key,
|
|
),
|
|
));
|
|
|
|
if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
|
|
|
|
wp_send_json_error($response);
|
|
|
|
} else {
|
|
|
|
wp_send_json_success(wp_remote_retrieve_body($response));
|
|
|
|
} // end if;
|
|
|
|
} // end test_connection;
|
|
|
|
/**
|
|
* Returns the description of this integration.
|
|
*
|
|
* @since 2.0.0
|
|
* @return string
|
|
*/
|
|
public function get_description() {
|
|
|
|
return __('WPMU DEV is one of the largest companies in the WordPress space. Founded in 2004, it was one of the first companies to scale the Website as a Service model with products such as Edublogs and CampusPress.', 'wp-ultimo');
|
|
|
|
} // end get_description;
|
|
|
|
/**
|
|
* Returns the logo for the integration.
|
|
*
|
|
* @since 2.0.0
|
|
* @return string
|
|
*/
|
|
public function get_logo() {
|
|
|
|
return wu_get_asset('wpmudev.jpg', 'img/hosts');
|
|
|
|
} // end get_logo;
|
|
|
|
} // end class WPMUDEV_Host_Provider;
|