diff options
Diffstat (limited to 'Postman/Postman.php')
-rw-r--r-- | Postman/Postman.php | 312 |
1 files changed, 154 insertions, 158 deletions
diff --git a/Postman/Postman.php b/Postman/Postman.php index a706636..46a69f9 100644 --- a/Postman/Postman.php +++ b/Postman/Postman.php @@ -15,30 +15,28 @@ * @copyright Jan 16, 2015 */ class Postman { - - // - const ADMINISTRATOR_ROLE_NAME = 'administrator'; + + const ADMINISTRATOR_ROLE_NAME = 'administrator'; const MANAGE_POSTMAN_CAPABILITY_NAME = 'manage_postman_smtp'; - const TEXT_DOMAIN = 'postman-smtp'; - - // + const TEXT_DOMAIN = 'post-smtp'; + private $logger; private $messageHandler; private $wpMailBinder; private $pluginData; private $rootPluginFilenameAndPath; - + /** * The constructor * * @param unknown $rootPluginFilenameAndPath * - the __FILE__ of the caller */ - public function __construct($rootPluginFilenameAndPath, $version) { - assert ( ! empty ( $rootPluginFilenameAndPath ) ); - assert ( ! empty ( $version ) ); + public function __construct( $rootPluginFilenameAndPath, $version ) { + assert( ! empty( $rootPluginFilenameAndPath ) ); + assert( ! empty( $version ) ); $this->rootPluginFilenameAndPath = $rootPluginFilenameAndPath; - + // load the dependencies require_once 'PostmanOptions.php'; require_once 'PostmanState.php'; @@ -55,88 +53,88 @@ class Postman { require_once 'PostmanConfigTextHelper.php'; require_once 'Postman-Email-Log/PostmanEmailLogPostType.php'; require_once 'Postman-Mail/PostmanMyMailConnector.php'; - + // get plugin metadata - alternative to get_plugin_data - $this->pluginData = array ( - 'name' => __ ( 'Postman SMTP', Postman::TEXT_DOMAIN ), - 'version' => $version + $this->pluginData = array( + 'name' => __( 'Postman SMTP', Postman::TEXT_DOMAIN ), + 'version' => $version, ); - + // register the plugin metadata filter (part of the Postman API) - add_filter ( 'postman_get_plugin_metadata', array ( + add_filter( 'postman_get_plugin_metadata', array( $this, - 'getPluginMetaData' + 'getPluginMetaData', ) ); - + // create an instance of the logger - $this->logger = new PostmanLogger ( get_class ( $this ) ); - if ($this->logger->isDebug ()) { - $this->logger->debug ( sprintf ( '%1$s v%2$s starting', $this->pluginData ['name'], $this->pluginData ['version'] ) ); + $this->logger = new PostmanLogger( get_class( $this ) ); + if ( $this->logger->isDebug() ) { + $this->logger->debug( sprintf( '%1$s v%2$s starting', $this->pluginData ['name'], $this->pluginData ['version'] ) ); } - - if (isset ( $_REQUEST ['page'] ) && $this->logger->isTrace ()) { - $this->logger->trace ( 'Current page: ' . $_REQUEST ['page'] ); + + if ( isset( $_REQUEST ['page'] ) && $this->logger->isTrace() ) { + $this->logger->trace( 'Current page: ' . $_REQUEST ['page'] ); } - + // register the email transports - $this->registerTransports ( $rootPluginFilenameAndPath ); - + $this->registerTransports( $rootPluginFilenameAndPath ); + // store an instance of the WpMailBinder - $this->wpMailBinder = PostmanWpMailBinder::getInstance (); - + $this->wpMailBinder = PostmanWpMailBinder::getInstance(); + // bind to wp_mail - this has to happen before the "init" action // this design allows other plugins to register a Postman transport and call bind() // bind may be called more than once - $this->wpMailBinder->bind (); - + $this->wpMailBinder->bind(); + // registers the custom post type for all callers - PostmanEmailLogPostType::automaticallyCreatePostType (); - + PostmanEmailLogPostType::automaticallyCreatePostType(); + // run the DatastoreUpgrader any time there is a version mismatch - if (PostmanState::getInstance ()->getVersion () != $this->pluginData ['version']) { + if ( PostmanState::getInstance()->getVersion() != $this->pluginData ['version'] ) { // manually trigger the activation hook - if ($this->logger->isInfo ()) { - $this->logger->info ( sprintf ( "Upgrading datastore from version %s to %s", PostmanState::getInstance ()->getVersion (), $this->pluginData ['version'] ) ); + if ( $this->logger->isInfo() ) { + $this->logger->info( sprintf( 'Upgrading datastore from version %s to %s', PostmanState::getInstance()->getVersion(), $this->pluginData ['version'] ) ); } require_once 'PostmanInstaller.php'; - $upgrader = new PostmanInstaller (); - $upgrader->activatePostman (); + $upgrader = new PostmanInstaller(); + $upgrader->activatePostman(); } - + // MyMail integration - new PostmanMyMailConnector ( $rootPluginFilenameAndPath ); - + new PostmanMyMailConnector( $rootPluginFilenameAndPath ); + // register the shortcode handler on the add_shortcode event - add_shortcode ( 'postman-version', array ( + add_shortcode( 'postman-version', array( $this, - 'version_shortcode' + 'version_shortcode', ) ); - + // hook on the plugins_loaded event - add_action ( 'plugins_loaded', array ( + add_action( 'plugins_loaded', array( $this, - 'on_plugins_loaded' + 'on_plugins_loaded', ) ); - + // hook on the wp_loaded event - add_action ( 'wp_loaded', array ( + add_action( 'wp_loaded', array( $this, - 'on_wp_loaded' + 'on_wp_loaded', ) ); - + // hook on the acivation event - register_activation_hook ( $rootPluginFilenameAndPath, array ( + register_activation_hook( $rootPluginFilenameAndPath, array( $this, - 'on_activation' + 'on_activation', ) ); - + // hook on the deactivation event - register_deactivation_hook ( $rootPluginFilenameAndPath, array ( + register_deactivation_hook( $rootPluginFilenameAndPath, array( $this, - 'on_deactivation' + 'on_deactivation', ) ); } - + /** * Functions to execute on the plugins_loaded event * @@ -145,15 +143,15 @@ class Postman { */ public function on_plugins_loaded() { // load the text domain - $this->loadTextDomain (); - + $this->loadTextDomain(); + // register the setup_admin function on plugins_loaded because we need to call // current_user_can to verify the capability of the current user - if (PostmanUtils::isAdmin () && is_admin ()) { - $this->setup_admin (); + if ( PostmanUtils::isAdmin() && is_admin() ) { + $this->setup_admin(); } } - + /** * Functions to execute on the wp_loaded event * @@ -163,45 +161,45 @@ class Postman { public function on_wp_loaded() { // register the check for configuration errors on the wp_loaded hook, // because we want it to run after the OAuth Grant Code check on the init hook - $this->check_for_configuration_errors (); + $this->check_for_configuration_errors(); } - + /** * Functions to execute on the register_activation_hook * ref: https://codex.wordpress.org/Function_Reference/register_activation_hook */ public function on_activation() { - if ($this->logger->isInfo ()) { - $this->logger->info ( 'Activating plugin' ); + if ( $this->logger->isInfo() ) { + $this->logger->info( 'Activating plugin' ); } require_once 'PostmanInstaller.php'; - $upgrader = new PostmanInstaller (); - $upgrader->activatePostman (); + $upgrader = new PostmanInstaller(); + $upgrader->activatePostman(); } - + /** * Functions to execute on the register_deactivation_hook * ref: https://codex.wordpress.org/Function_Reference/register_deactivation_hook */ public function on_deactivation() { - if ($this->logger->isInfo ()) { - $this->logger->info ( 'Deactivating plugin' ); + if ( $this->logger->isInfo() ) { + $this->logger->info( 'Deactivating plugin' ); } require_once 'PostmanInstaller.php'; - $upgrader = new PostmanInstaller (); - $upgrader->deactivatePostman (); + $upgrader = new PostmanInstaller(); + $upgrader->deactivatePostman(); } - + /** * If the user is on the WordPress Admin page, creates the Admin screens */ public function setup_admin() { - $this->logger->debug ( 'Admin start-up sequence' ); - - $options = PostmanOptions::getInstance (); - $authToken = PostmanOAuthToken::getInstance (); + $this->logger->debug( 'Admin start-up sequence' ); + + $options = PostmanOptions::getInstance(); + $authToken = PostmanOAuthToken::getInstance(); $rootPluginFilenameAndPath = $this->rootPluginFilenameAndPath; - + // load the dependencies require_once 'PostmanMessageHandler.php'; require_once 'PostmanAdminController.php'; @@ -212,85 +210,83 @@ class Postman { require_once 'Postman-Configuration/PostmanConfigurationController.php'; require_once 'Postman-Send-Test-Email/PostmanSendTestEmailController.php'; require_once 'Postman-Diagnostic-Test/PostmanDiagnosticTestController.php'; - + // create and store an instance of the MessageHandler - $this->messageHandler = new PostmanMessageHandler (); - + $this->messageHandler = new PostmanMessageHandler(); + // create the Admin Controllers - new PostmanDashboardWidgetController ( $rootPluginFilenameAndPath, $options, $authToken, $this->wpMailBinder ); - new PostmanAdminController ( $rootPluginFilenameAndPath, $options, $authToken, $this->messageHandler, $this->wpMailBinder ); - new PostmanEmailLogController ( $rootPluginFilenameAndPath ); - new PostmanConnectivityTestController ( $rootPluginFilenameAndPath ); - new PostmanConfigurationController ( $rootPluginFilenameAndPath ); - new PostmanSendTestEmailController ( $rootPluginFilenameAndPath ); - new PostmanDiagnosticTestController ( $rootPluginFilenameAndPath ); - + new PostmanDashboardWidgetController( $rootPluginFilenameAndPath, $options, $authToken, $this->wpMailBinder ); + new PostmanAdminController( $rootPluginFilenameAndPath, $options, $authToken, $this->messageHandler, $this->wpMailBinder ); + new PostmanEmailLogController( $rootPluginFilenameAndPath ); + new PostmanConnectivityTestController( $rootPluginFilenameAndPath ); + new PostmanConfigurationController( $rootPluginFilenameAndPath ); + new PostmanSendTestEmailController( $rootPluginFilenameAndPath ); + new PostmanDiagnosticTestController( $rootPluginFilenameAndPath ); + // register the Postman signature (only if we're on a postman admin screen) on the in_admin_footer event - if (PostmanUtils::isCurrentPagePostmanAdmin ()) { - add_action ( 'in_admin_footer', array ( + if ( PostmanUtils::isCurrentPagePostmanAdmin() ) { + add_action( 'in_admin_footer', array( $this, - 'print_signature' + 'print_signature', ) ); } } - + /** * Check for configuration errors and displays messages to the user */ public function check_for_configuration_errors() { - $options = PostmanOptions::getInstance (); - $authToken = PostmanOAuthToken::getInstance (); - + $options = PostmanOptions::getInstance(); + $authToken = PostmanOAuthToken::getInstance(); + // did Postman fail binding to wp_mail()? - if ($this->wpMailBinder->isUnboundDueToException ()) { + if ( $this->wpMailBinder->isUnboundDueToException() ) { // this message gets printed on ANY WordPress admin page, as it's a fatal error that // may occur just by activating a new plugin - // log the fatal message - $this->logger->fatal ( 'Postman: wp_mail has been declared by another plugin or theme, so you won\'t be able to use Postman until the conflict is resolved.' ); - - if (PostmanUtils::isAdmin () && is_admin ()) { + $this->logger->fatal( 'Postman: wp_mail has been declared by another plugin or theme, so you won\'t be able to use Postman until the conflict is resolved.' ); + + if ( PostmanUtils::isAdmin() && is_admin() ) { // on any admin pages, show this error message - // I noticed the wpMandrill and SendGrid plugins have the exact same error message here // I've adopted their error message as well, for shits and giggles .... :D - $message = __ ( 'Postman: wp_mail has been declared by another plugin or theme, so you won\'t be able to use Postman until the conflict is resolved.', Postman::TEXT_DOMAIN ); - $this->messageHandler->addError ( $message ); + $message = __( 'Postman: wp_mail has been declared by another plugin or theme, so you won\'t be able to use Postman until the conflict is resolved.', Postman::TEXT_DOMAIN ); + $this->messageHandler->addError( $message ); } } else { - $transport = PostmanTransportRegistry::getInstance ()->getCurrentTransport (); - $scribe = $transport->getScribe (); - - $virgin = $options->isNew (); - if (! $transport->isConfiguredAndReady ()) { + $transport = PostmanTransportRegistry::getInstance()->getCurrentTransport(); + $scribe = $transport->getScribe(); + + $virgin = $options->isNew(); + if ( ! $transport->isConfiguredAndReady() ) { // if the configuration is broken, and the user has started to configure the plugin // show this error message - $messages = $transport->getConfigurationMessages (); + $messages = $transport->getConfigurationMessages(); foreach ( $messages as $message ) { - if ($message) { + if ( $message ) { // log the warning message - $this->logger->warn ( sprintf ( '%s Transport has a configuration problem: %s', $transport->getName (), $message ) ); - - if (PostmanUtils::isAdmin () && PostmanUtils::isCurrentPagePostmanAdmin ()) { + $this->logger->warn( sprintf( '%s Transport has a configuration problem: %s', $transport->getName(), $message ) ); + + if ( PostmanUtils::isAdmin() && PostmanUtils::isCurrentPagePostmanAdmin() ) { // on pages that are Postman admin pages only, show this error message - $this->messageHandler->addError ( $message ); + $this->messageHandler->addError( $message ); } } } } - + // on pages that are NOT Postman admin pages only, show this error message - if (PostmanUtils::isAdmin () && ! PostmanUtils::isCurrentPagePostmanAdmin () && ! $transport->isConfiguredAndReady ()) { + if ( PostmanUtils::isAdmin() && ! PostmanUtils::isCurrentPagePostmanAdmin() && ! $transport->isConfiguredAndReady() ) { // on pages that are *NOT* Postman admin pages only.... // if the configuration is broken show this error message - add_action ( 'admin_notices', Array ( + add_action( 'admin_notices', array( $this, - 'display_configuration_required_warning' + 'display_configuration_required_warning', ) ); } } } - + /** * Returns the plugin version number and name * Part of the Postman API @@ -301,74 +297,74 @@ class Postman { // get plugin metadata return $this->pluginData; } - + /** * This is the general message that Postman requires configuration, to warn users who think * the plugin is ready-to-go as soon as it is activated. * This message only goes away once the plugin is configured. */ public function display_configuration_required_warning() { - if (PostmanUtils::isAdmin ()) { - if ($this->logger->isDebug ()) { - $this->logger->debug ( 'Displaying configuration required warning' ); + if ( PostmanUtils::isAdmin() ) { + if ( $this->logger->isDebug() ) { + $this->logger->debug( 'Displaying configuration required warning' ); } - $message = sprintf ( PostmanTransportRegistry::getInstance ()->getReadyMessage () ); - $goToSettings = sprintf ( '<a href="%s">%s</a>', PostmanUtils::getSettingsPageUrl (), __ ( 'Settings', Postman::TEXT_DOMAIN ) ); - $goToEmailLog = sprintf ( '%s', _x ( 'Email Log', 'The log of Emails that have been delivered', Postman::TEXT_DOMAIN ) ); - if (PostmanOptions::getInstance ()->isMailLoggingEnabled ()) { - $goToEmailLog = sprintf ( '<a href="%s">%s</a>', PostmanUtils::getEmailLogPageUrl (), $goToEmailLog ); + $message = sprintf( PostmanTransportRegistry::getInstance()->getReadyMessage() ); + $goToSettings = sprintf( '<a href="%s">%s</a>', PostmanUtils::getSettingsPageUrl(), __( 'Settings', Postman::TEXT_DOMAIN ) ); + $goToEmailLog = sprintf( '%s', _x( 'Email Log', 'The log of Emails that have been delivered', Postman::TEXT_DOMAIN ) ); + if ( PostmanOptions::getInstance()->isMailLoggingEnabled() ) { + $goToEmailLog = sprintf( '<a href="%s">%s</a>', PostmanUtils::getEmailLogPageUrl(), $goToEmailLog ); } - $message .= (sprintf ( ' %s | %s', $goToEmailLog, $goToSettings )); + $message .= (sprintf( ' %s | %s', $goToEmailLog, $goToSettings )); ; - $this->messageHandler->printMessage ( $message, PostmanMessageHandler::WARNING_CLASS ); + $this->messageHandler->printMessage( $message, PostmanMessageHandler::WARNING_CLASS ); } } - + /** * Register the email transports. * * The Gmail API used to be a separate plugin which was registered when that plugin * was loaded. But now both the SMTP, Gmail API and other transports are registered here. * - * @param unknown $pluginData + * @param unknown $pluginData */ - private function registerTransports($rootPluginFilenameAndPath) { - PostmanTransportRegistry::getInstance ()->registerTransport ( new PostmanDefaultModuleTransport ( $rootPluginFilenameAndPath ) ); - PostmanTransportRegistry::getInstance ()->registerTransport ( new PostmanSmtpModuleTransport ( $rootPluginFilenameAndPath ) ); - PostmanTransportRegistry::getInstance ()->registerTransport ( new PostmanGmailApiModuleTransport ( $rootPluginFilenameAndPath ) ); - PostmanTransportRegistry::getInstance ()->registerTransport ( new PostmanMandrillTransport ( $rootPluginFilenameAndPath ) ); - PostmanTransportRegistry::getInstance ()->registerTransport ( new PostmanSendGridTransport ( $rootPluginFilenameAndPath ) ); + private function registerTransports( $rootPluginFilenameAndPath ) { + PostmanTransportRegistry::getInstance()->registerTransport( new PostmanDefaultModuleTransport( $rootPluginFilenameAndPath ) ); + PostmanTransportRegistry::getInstance()->registerTransport( new PostmanSmtpModuleTransport( $rootPluginFilenameAndPath ) ); + PostmanTransportRegistry::getInstance()->registerTransport( new PostmanGmailApiModuleTransport( $rootPluginFilenameAndPath ) ); + PostmanTransportRegistry::getInstance()->registerTransport( new PostmanMandrillTransport( $rootPluginFilenameAndPath ) ); + PostmanTransportRegistry::getInstance()->registerTransport( new PostmanSendGridTransport( $rootPluginFilenameAndPath ) ); } - + /** * Print the Postman signature on the bottom of the page * * http://striderweb.com/nerdaphernalia/2008/06/give-your-wordpress-plugin-credit/ */ function print_signature() { - printf ( '<a href="https://wordpress.org/plugins/postman-smtp/">%s</a> %s<br/>', $this->pluginData ['name'], $this->pluginData ['version'] ); + printf( '<a href="https://wordpress.org/plugins/postman-smtp/">%s</a> %s<br/>', $this->pluginData ['name'], $this->pluginData ['version'] ); } - + /** * Loads the appropriate language file */ private function loadTextDomain() { // had to hardcode the third parameter, Relative path to WP_PLUGIN_DIR, // because __FILE__ returns the wrong path if the plugin is installed as a symlink - $shortLocale = substr ( get_locale (), 0, 2 ); - if ($shortLocale != 'en') { + $shortLocale = substr( get_locale(), 0, 2 ); + if ( $shortLocale != 'en' ) { $langDir = 'postman-smtp/Postman/languages'; - $success = load_plugin_textdomain ( Postman::TEXT_DOMAIN, false, $langDir ); - if ($this->logger->isDebug ()) { - if ($success) { - $this->logger->debug ( sprintf ( 'local translation file loaded for locale=%s', get_locale () ) ); + $success = load_plugin_textdomain( Postman::TEXT_DOMAIN, false, $langDir ); + if ( $this->logger->isDebug() ) { + if ( $success ) { + $this->logger->debug( sprintf( 'local translation file loaded for locale=%s', get_locale() ) ); } else { - $this->logger->debug ( sprintf ( 'failed to load local translation file: locale=%s file=%s/%s-%s.mo', get_locale (), $langDir, Postman::TEXT_DOMAIN, get_locale () ) ); + $this->logger->debug( sprintf( 'failed to load local translation file: locale=%s file=%s/%s-%s.mo', get_locale(), $langDir, Postman::TEXT_DOMAIN, get_locale() ) ); } } } } - + /** * Shortcode to return the current plugin version. * @@ -381,19 +377,19 @@ class Postman { } } -if (! function_exists ( 'str_getcsv' )) { +if ( ! function_exists( 'str_getcsv' ) ) { /** * PHP version less than 5.3 don't have str_getcsv natively. * - * @param unknown $string + * @param unknown $string * @return multitype: */ - function str_getcsv($string) { - $logger = new PostmanLogger ( 'postman-common-functions' ); - if ($logger->isDebug ()) { - $logger->debug ( 'Using custom str_getcsv' ); + function str_getcsv( $string ) { + $logger = new PostmanLogger( 'postman-common-functions' ); + if ( $logger->isDebug() ) { + $logger->debug( 'Using custom str_getcsv' ); } - return PostmanUtils::postman_strgetcsv_impl ( $string ); + return PostmanUtils::postman_strgetcsv_impl( $string ); } } |