204 lines
4.5 KiB
PHP
204 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace WPMailSMTP\Admin;
|
|
|
|
use WPMailSMTP\Helpers\Helpers;
|
|
|
|
/**
|
|
* Class for interacting with the Domain Checker API.
|
|
*
|
|
* @since 2.6.0
|
|
*/
|
|
class DomainChecker {
|
|
|
|
/**
|
|
* The domain checker API endpoint.
|
|
*
|
|
* @since 2.6.0
|
|
*/
|
|
const ENDPOINT = 'https://connect.wpmailsmtp.com/domain-check/';
|
|
|
|
/**
|
|
* The API results.
|
|
*
|
|
* @since 2.6.0
|
|
*
|
|
* @var array
|
|
*/
|
|
private $results;
|
|
|
|
/**
|
|
* The plugin mailer slug.
|
|
*
|
|
* @since 2.7.0
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $mailer;
|
|
|
|
/**
|
|
* Verify the domain for the provided mailer and email address and save the API results.
|
|
*
|
|
* @since 2.6.0
|
|
*
|
|
* @param string $mailer The plugin mailer.
|
|
* @param string $email The email address from which the domain will be extracted.
|
|
* @param string $sending_domain The optional sending domain to check the domain records for.
|
|
*/
|
|
public function __construct( $mailer, $email, $sending_domain = '' ) {
|
|
|
|
$this->mailer = $mailer;
|
|
|
|
$params = [
|
|
'mailer' => $mailer,
|
|
'email' => base64_encode( $email ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
|
|
'domain' => $sending_domain,
|
|
];
|
|
|
|
$response = wp_remote_get(
|
|
add_query_arg( $params, self::ENDPOINT ),
|
|
[
|
|
'user-agent' => Helpers::get_default_user_agent(),
|
|
]
|
|
);
|
|
|
|
if ( is_wp_error( $response ) ) {
|
|
$this->results = [
|
|
'success' => false,
|
|
'message' => method_exists( $response, 'get_error_message' ) ?
|
|
$response->get_error_message() :
|
|
esc_html__( 'Something went wrong. Please try again later.', 'wp-mail-smtp' ),
|
|
'checks' => [],
|
|
];
|
|
} else {
|
|
$this->results = json_decode( wp_remote_retrieve_body( $response ), true );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Simple getter for the API results.
|
|
*
|
|
* @since 2.6.0
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_results() {
|
|
return $this->results;
|
|
}
|
|
|
|
/**
|
|
* Check if the domain checker has found any errors.
|
|
*
|
|
* @since 2.6.0
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function has_errors() {
|
|
|
|
if ( empty( $this->results['success'] ) ) {
|
|
return true;
|
|
}
|
|
|
|
if ( empty( $this->results['checks'] ) ) {
|
|
return false;
|
|
}
|
|
|
|
$has_error = false;
|
|
|
|
foreach ( $this->results['checks'] as $check ) {
|
|
if ( $check['state'] === 'error' ) {
|
|
$has_error = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $has_error;
|
|
}
|
|
|
|
/**
|
|
* Check if the domain checker has not found any errors or warnings.
|
|
*
|
|
* @since 2.6.0
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function no_issues() {
|
|
|
|
if ( empty( $this->results['success'] ) ) {
|
|
return false;
|
|
}
|
|
|
|
$no_issues = true;
|
|
|
|
foreach ( $this->results['checks'] as $check ) {
|
|
if ( in_array( $check['state'], [ 'error', 'warning' ], true ) ) {
|
|
$no_issues = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $no_issues;
|
|
}
|
|
|
|
/**
|
|
* Check if the domain checker support mailer.
|
|
*
|
|
* @since 2.7.0
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function is_supported_mailer() {
|
|
|
|
return ! in_array( $this->mailer, [ 'mail', 'pepipostapi' ], true );
|
|
}
|
|
|
|
/**
|
|
* Get the domain checker results html.
|
|
*
|
|
* @since 2.8.0
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_results_html() {
|
|
|
|
$results = $this->get_results();
|
|
$allowed_html = [
|
|
'b' => [],
|
|
'i' => [],
|
|
'a' => [
|
|
'href' => [],
|
|
'target' => [],
|
|
'rel' => [],
|
|
],
|
|
];
|
|
|
|
ob_start();
|
|
?>
|
|
<div id="wp-mail-smtp-domain-check-details">
|
|
<h2><?php esc_html_e( 'Domain Check Results', 'wp-mail-smtp' ); ?></h2>
|
|
|
|
<?php if ( empty( $results['success'] ) ) : ?>
|
|
<div class="notice-inline <?php echo $this->is_supported_mailer() ? 'notice-error' : 'notice-warning'; ?>">
|
|
<p><?php echo wp_kses( $results['message'], $allowed_html ); ?></p>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ( ! empty( $results['checks'] ) ) : ?>
|
|
<div class="wp-mail-smtp-domain-check-details-check-list">
|
|
<?php foreach ( $results['checks'] as $check ) : ?>
|
|
<div class="wp-mail-smtp-domain-check-details-check-list-item">
|
|
<img src="<?php echo esc_url( wp_mail_smtp()->assets_url . '/images/icons/' . esc_attr( $check['state'] ) . '.svg' ); ?>" class="wp-mail-smtp-domain-check-details-check-list-item-icon" alt="<?php printf( /* translators: %s - item state name. */ esc_attr__( '%s icon', 'wp-mail-smtp' ), esc_attr( $check['state'] ) ); ?>">
|
|
<div class="wp-mail-smtp-domain-check-details-check-list-item-content">
|
|
<h3><?php echo esc_html( $check['type'] ); ?></h3>
|
|
<p><?php echo wp_kses( $check['message'], $allowed_html ); ?></p>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php
|
|
return ob_get_clean();
|
|
}
|
|
}
|