logger = new PostmanLogger( get_class( $this ) );
$this->rootPluginFilenameAndPath = $rootPluginFilenameAndPath;
$this->options = PostmanOptions::getInstance();
PostmanUtils::registerAdminMenu( $this, 'addEmailTestSubmenu' );
// hook on the init event
add_action( 'init', array(
$this,
'on_init',
) );
// initialize the scripts, stylesheets and form fields
add_action( 'admin_init', array(
$this,
'on_admin_init',
) );
}
/**
* Functions to execute on the init event
*
* "Typically used by plugins to initialize. The current user is already authenticated by this time."
* ref: http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request
*/
public function on_init() {
// register Ajax handlers
new PostmanSendTestEmailAjaxController();
}
/**
* Fires on the admin_init method
*/
public function on_admin_init() {
$this->registerStylesAndScripts();
}
/**
* Get the settings option array and print one of its values
*/
public function test_email_callback() {
printf( '', self::RECIPIENT_EMAIL_FIELD_NAME, wp_get_current_user()->user_email );
}
/**
* Register and add settings
*/
private function registerStylesAndScripts() {
if ( $this->logger->isTrace() ) {
$this->logger->trace( 'registerStylesAndScripts()' );
}
$pluginData = apply_filters( 'postman_get_plugin_metadata', null );
// register the stylesheet resource
wp_register_style( 'postman_send_test_email', plugins_url( 'Postman/Postman-Send-Test-Email/postman_send_test_email.css', $this->rootPluginFilenameAndPath ), PostmanViewController::POSTMAN_STYLE, $pluginData ['version'] );
// register the javascript resource
wp_register_script( 'postman_test_email_wizard_script', plugins_url( 'Postman/Postman-Send-Test-Email/postman_send_test_email.js', $this->rootPluginFilenameAndPath ), array(
PostmanViewController::JQUERY_SCRIPT,
'jquery_validation',
'jquery_steps_script',
PostmanViewController::POSTMAN_SCRIPT,
), $pluginData ['version'] );
}
/**
* Register the Email Test screen
*/
public function addEmailTestSubmenu() {
$page = add_submenu_page( null, sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( 'Postman SMTP', Postman::TEXT_DOMAIN ) ), __( 'Postman SMTP', Postman::TEXT_DOMAIN ), Postman::MANAGE_POSTMAN_CAPABILITY_NAME, PostmanSendTestEmailController::EMAIL_TEST_SLUG, array(
$this,
'outputTestEmailContent',
) );
// When the plugin options page is loaded, also load the stylesheet
add_action( 'admin_print_styles-' . $page, array(
$this,
'enqueueEmailTestResources',
) );
}
/**
*/
function enqueueEmailTestResources() {
wp_enqueue_style( 'jquery_steps_style' );
wp_enqueue_style( PostmanViewController::POSTMAN_STYLE );
wp_enqueue_style( 'postman_send_test_email' );
wp_enqueue_script( 'postman_test_email_wizard_script' );
wp_localize_script( PostmanViewController::POSTMAN_SCRIPT, 'postman_email_test', array(
'recipient' => '#' . self::RECIPIENT_EMAIL_FIELD_NAME,
'not_started' => _x( 'In Outbox', 'Email Test Status', Postman::TEXT_DOMAIN ),
'sending' => _x( 'Sending...', 'Email Test Status', Postman::TEXT_DOMAIN ),
'success' => _x( 'Success', 'Email Test Status', Postman::TEXT_DOMAIN ),
'failed' => _x( 'Failed', 'Email Test Status', Postman::TEXT_DOMAIN ),
'ajax_error' => __( 'Ajax Error', Postman::TEXT_DOMAIN ),
) );
}
/**
*/
public function outputTestEmailContent() {
print '
';
PostmanViewController::outputChildPageHeader( __( 'Send a Test Email', Postman::TEXT_DOMAIN ) );
printf( '
';
print '
';
}
}
/**
*
* @author jasonhendriks
*/
class PostmanSendTestEmailAjaxController extends PostmanAbstractAjaxHandler {
/**
* Constructor
*
* @param PostmanOptions $options
* @param PostmanOAuthToken $authorizationToken
* @param PostmanConfigTextHelper $oauthScribe
*/
function __construct() {
parent::__construct();
PostmanUtils::registerAjaxHandler( 'postman_send_test_email', $this, 'sendTestEmailViaAjax' );
}
/**
* Yes, this procedure is just for testing.
*
* @return boolean
*/
function test_mode() {
return true;
}
/**
* This Ajax sends a test email
*/
function sendTestEmailViaAjax() {
// get the email address of the recipient from the HTTP Request
$email = $this->getRequestParameter( 'email' );
// get the name of the server from the HTTP Request
$serverName = PostmanUtils::postmanGetServerName();
/* translators: where %s is the domain name of the site */
$subject = sprintf( _x( 'Postman SMTP Test (%s)', 'Test Email Subject', Postman::TEXT_DOMAIN ), $serverName );
// Postman API: indicate to Postman this is just for testing
add_filter( 'postman_test_email', array(
$this,
'test_mode',
) );
// this header specifies that there are many parts (one text part, one html part)
$header = 'Content-Type: multipart/alternative;';
// createt the message content
$message = $this->createMessageContent();
// send the message
$success = wp_mail( $email, $subject, $message, $header );
// Postman API: remove the testing indicator
remove_filter( 'postman_test_email', array(
$this,
'test_mode',
) );
// Postman API: retrieve the result of sending this message from Postman
$result = apply_filters( 'postman_wp_mail_result', null );
// post-handling
if ( $success ) {
$this->logger->debug( 'Test Email delivered to server' );
// the message was sent successfully, generate an appropriate message for the user
$statusMessage = sprintf( __( 'Your message was delivered (%d ms) to the SMTP server! Congratulations :)', Postman::TEXT_DOMAIN ), $result ['time'] );
$this->logger->debug( 'statusmessage: ' . $statusMessage );
// compose the JSON response for the caller
$response = array(
'message' => $statusMessage,
'transcript' => $result ['transcript'],
);
// log the response
if ( $this->logger->isTrace() ) {
$this->logger->trace( 'Ajax Response:' );
$this->logger->trace( $response );
}
// send the JSON response
wp_send_json_success( $response );
} else {
$this->logger->error( 'Test Email NOT delivered to server - ' . $result ['exception']->getCode() );
// the message was NOT sent successfully, generate an appropriate message for the user
$statusMessage = $result ['exception']->getMessage();
$this->logger->debug( 'statusmessage: ' . $statusMessage );
// compose the JSON response for the caller
$response = array(
'message' => $statusMessage,
'transcript' => $result ['transcript'],
);
// log the response
if ( $this->logger->isTrace() ) {
$this->logger->trace( 'Ajax Response:' );
$this->logger->trace( $response );
}
// send the JSON response
wp_send_json_error( $response );
}
}
/**
* Create the multipart message content
*
* @return string
*/
private function createMessageContent() {
// Postman API: Get the plugin metadata
$pluginData = apply_filters( 'postman_get_plugin_metadata', null );
/*
translators: where %s is the Postman plugin version number (e.g. 1.4) */
// English - Mandarin - French - Hindi - Spanish - Portuguese - Russian - Japanese
// http://www.pinyin.info/tools/converter/chars2uninumbers.html
$greeting = 'Hello! - 你好 - Bonjour! - नमस्ते - ¡Hola! - Olá - Привет! - 今日は';
$sentBy = sprintf( _x( 'Sent by Postman %s', 'Test Email Tagline', Postman::TEXT_DOMAIN ), $pluginData ['version'] );
$imageSource = __( 'Image source', Postman::TEXT_DOMAIN );
$withPermission = __( 'Used with permission', Postman::TEXT_DOMAIN );
$messageArray = array(
'Content-Type: text/plain; charset = "UTF-8"',
'Content-Transfer-Encoding: 8bit',
'',
'Hello!',
'',
sprintf( '%s - https://wordpress.org/plugins/post-smtp/', $sentBy ),
'',
'Content-Type: text/html; charset=UTF-8',
'Content-Transfer-Encoding: quoted-printable',
'',
'',
'',
'',
'',
'',
'',
'',
' ',
'
',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
sprintf( ' %s ', $greeting ),
sprintf( ' ',
' ',
' | ',
' ',
' ',
' ',
sprintf( ' %s: poofytoo.com - %s', $imageSource, $withPermission ),
' | ',
'
',
' ',
'
',
'',
'',
);
return implode( PostmanMessage::EOL, $messageArray );
}
}