diff options
Diffstat (limited to 'Postman/Postman.php')
-rw-r--r-- | Postman/Postman.php | 498 |
1 files changed, 0 insertions, 498 deletions
diff --git a/Postman/Postman.php b/Postman/Postman.php deleted file mode 100644 index 51b2ab1..0000000 --- a/Postman/Postman.php +++ /dev/null @@ -1,498 +0,0 @@ -<?php -if ( ! defined( 'ABSPATH' ) ) { - exit; // Exit if accessed directly -} -/** - * Postman execution begins here: - * - the default Postman transports are loaded - * - the wp_mail function is overloaded, whether or not Postman has been properly configured - * - the custom post types are created, in case they are needed for the WordPress importer - * - the database upgrade is run, if there is a version mismatch - * - the shortcode is created - * - the admin screens are loaded, the Message Handler created, if the current user can manage Postman - * - on activation/deactivation, the custom capability is added to/removed from the administrator role - * - a custom str_getcsv function is added to the global namespace, if it is missing - * - * @author jasonhendriks - * @copyright Jan 16, 2015 - */ -class Postman { - - const ADMINISTRATOR_ROLE_NAME = 'administrator'; - const MANAGE_POSTMAN_CAPABILITY_NAME = 'manage_postman_smtp'; - const MANAGE_POSTMAN_CAPABILITY_LOGS = 'manage_postman_logs'; - - /** - * Use the text domain directly instead of this constant, as it - * causes issues with https://translate.wordpress.org. - * - * @deprecated - * @see https://github.com/yehudah/Post-SMTP/issues/1#issuecomment-421940923 - */ - const TEXT_DOMAIN = 'post-smtp'; - - private $logger; - private $messageHandler; - private $wpMailBinder; - private $pluginData; - private $rootPluginFilenameAndPath; - - public static $rootPlugin; - - /** - * The constructor - * - * @param mixed $rootPluginFilenameAndPath - * - the __FILE__ of the caller - */ - public function __construct( $rootPluginFilenameAndPath, $version ) { - assert( ! empty( $rootPluginFilenameAndPath ) ); - assert( ! empty( $version ) ); - $this->rootPluginFilenameAndPath = $rootPluginFilenameAndPath; - self::$rootPlugin = $rootPluginFilenameAndPath; - - // load the dependencies - require_once 'PostmanOptions.php'; - require_once 'PostmanState.php'; - require_once 'PostmanLogger.php'; - require_once 'PostmanUtils.php'; - require_once 'Postman-Mail/PostmanTransportRegistry.php'; - require_once 'Postman-Mail/PostmanDefaultModuleTransport.php'; - require_once 'Postman-Mail/PostmanSmtpModuleTransport.php'; - require_once 'Postman-Mail/PostmanGmailApiModuleTransport.php'; - require_once 'Postman-Mail/PostmanMandrillTransport.php'; - require_once 'Postman-Mail/PostmanSendGridTransport.php'; - require_once 'Postman-Mail/PostmanMailgunTransport.php'; - require_once 'PostmanOAuthToken.php'; - require_once 'PostmanWpMailBinder.php'; - require_once 'PostmanConfigTextHelper.php'; - require_once 'Postman-Email-Log/PostmanEmailLogPostType.php'; - require_once 'Postman-Mail/PostmanMyMailConnector.php'; - require_once 'Postman-Mail/PostmanContactForm7.php'; - require_once 'Phpmailer/PostsmtpMailer.php'; - //require_once 'Postman-Mail/PostmanWooCommerce.php'; - - // get plugin metadata - alternative to get_plugin_data - $this->pluginData = array( - 'name' => __( 'Postman SMTP', 'post-smtp' ), - 'version' => $version, - ); - - // register the plugin metadata filter (part of the Postman API) - add_filter( 'postman_get_plugin_metadata', array( - $this, - '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'] ) ); - } - - if ( isset( $_REQUEST ['page'] ) && $this->logger->isTrace() ) { - $this->logger->trace( 'Current page: ' . sanitize_text_field($_REQUEST ['page']) ); - } - - // register the email transports - $this->registerTransports( $rootPluginFilenameAndPath ); - - // store an instance of the WpMailBinder - $this->wpMailBinder = PostmanWpMailBinder::getInstance(); - - $mailer = PostmanOptions::getInstance()->getSmtpMailer(); - $this->logger->trace( 'SMTP Mailer: ' . $mailer ); - - if ( $mailer && $mailer !== 'phpmailer') { - - // 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(); - } else { - PostmanWpMailBinder::getInstance()->bound = true; - } - - // registers the custom post type for all callers - PostmanEmailLogPostType::automaticallyCreatePostType(); - - // run the DatastoreUpgrader any time there is a version mismatch - 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'] ) ); - } - require_once 'PostmanInstaller.php'; - $upgrader = new PostmanInstaller(); - $upgrader->activatePostman(); - } - - // MyMail integration - new PostmanMyMailConnector( $rootPluginFilenameAndPath ); - - // Contact form 7 - new Postsmtp_ContactForm7; - - // WooCommerce Integration - //new PostmanWoocommerce(); - - // register the shortcode handler on the add_shortcode event - add_shortcode( 'postman-version', array( - $this, - 'version_shortcode', - ) ); - - // hook on the plugins_loaded event - add_action( 'plugins_loaded', array( - $this, - 'on_plugins_loaded', - ) ); - - /** - * @todo: WPML say they fix the issue in version 3.9 - * https://wordpress.org/support/topic/error-in-pluggable-php173/#post-10021301 - */ - if ( get_option( 'icl_sitepress_version' ) && version_compare( get_option( 'icl_sitepress_version' ), '3.9', '<' ) ) { - - $active_plugins = (array)get_option('active_plugins', array()); - if (in_array('sitepress-multilingual-cms/sitepress.php', $active_plugins) && !get_option('postman_wpml_fixed')) { - add_action('admin_notices', array($this, 'post_smtp_wpml_admin_notice')); - } - } - - // hook on the wp_loaded event - add_action( 'wp_loaded', array( - $this, - 'on_wp_loaded', - ) ); - - // hook on the acivation event - register_activation_hook( $rootPluginFilenameAndPath, array( - $this, - 'on_activation', - ) ); - - // hook on the deactivation event - register_deactivation_hook( $rootPluginFilenameAndPath, array( - $this, - 'on_deactivation', - ) ); - - } - - - /** - * Functions to execute on the plugins_loaded event - * - * "After active plugins and pluggable functions are loaded" - * ref: http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request - */ - public function on_plugins_loaded() { - // load the text domain - $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(); - } - } - - /** - * Functions to execute on the wp_loaded event - * - * "After WordPress is fully loaded" - * ref: http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request - */ - 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(); - } - - /** - * 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' ); - } - require_once 'PostmanInstaller.php'; - $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' ); - } - require_once 'PostmanInstaller.php'; - $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(); - $rootPluginFilenameAndPath = $this->rootPluginFilenameAndPath; - - // load the dependencies - require_once 'PostmanMessageHandler.php'; - require_once 'PostmanAdminController.php'; - require_once 'Postman-Controller/PostmanWelcomeController.php'; - require_once 'Postman-Controller/PostmanDashboardWidgetController.php'; - require_once 'Postman-Controller/PostmanAdminPointer.php'; - require_once 'Postman-Email-Log/PostmanEmailLogController.php'; - require_once 'Postman-Connectivity-Test/PostmanConnectivityTestController.php'; - 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(); - - // create the Admin Controllers - new PostmanWelcomeController( $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( - $this, - 'print_signature', - ) ); - } - } - - /** - * Check for configuration errors and displays messages to the user - */ - public function check_for_configuration_errors() { - $options = PostmanOptions::getInstance(); - $authToken = PostmanOAuthToken::getInstance(); - - // did Postman fail binding to wp_mail()? - 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() ) { - // 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 - $reflFunc = new ReflectionFunction( 'wp_mail' ); - - $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.', 'post-smtp' ); - - $plugin_full_path = $reflFunc->getFileName(); - - if ( strpos( $plugin_full_path, 'plugins' ) !== false ) { - - require_once ABSPATH . '/wp-admin/includes/plugin.php'; - - preg_match( '/([a-z]+\/[a-z]+\.php)$/', $plugin_full_path, $output_array ); - - $plugin_file = $output_array[1]; - $plugin_data = get_plugin_data( $plugin_full_path ); - - $deactivate_url = '<a href="' . wp_nonce_url( 'plugins.php?action=deactivate&plugin=' . urlencode( $plugin_file ) . '&plugin_status=active&paged=1&s=deactivate-plugin_' . $plugin_file ) . '" aria-label="' . esc_attr( sprintf( _x( 'Deactivate %s', 'plugin' ), $plugin_data['Name'] ) ) . '">' . __( 'Deactivate' ) . '</a><br>'; - $message .= '<br><strong>Plugin Name:</strong> ' . $plugin_data['Name']; - $message .= '<br>' . $deactivate_url; - } - - $message .= '<br><strong>More info that may help</strong> - ' . $reflFunc->getFileName() . ':' . $reflFunc->getStartLine(); - - // PHPmailer Recommandation - ob_start(); - Postman::getMailerTypeRecommend(); - $message .= ob_get_clean(); - - $this->messageHandler->addError( $message ); - } - } else { - $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(); - foreach ( $messages as $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() ) { - // on pages that are Postman admin pages only, show this error 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() ) { - // on pages that are *NOT* Postman admin pages only.... - // if the configuration is broken show this error message - add_action( 'admin_notices', array( - $this, - 'display_configuration_required_warning', - ) ); - } - } - } - - public static function getMailerTypeRecommend() { - ?> - <div> - <p style="font-size: 18px; font-weight: bold;">Please notice</p> - <p style="font-size: 14px; line-height: 1.7;"> - <?php _e('Post SMTP v2 includes and new feature called: <b>Mailer Type</b>.', 'post-smtp' ); ?><br> - <?php _e('I highly recommend to change and <strong>TEST</strong> Post SMTP with the value <code>PHPMailer</code>.', 'post-smtp' ); ?><br> - <?php _e('if it will not work properly you can change back to the default value: <code>PostSMTP</code>.', 'post-smtp' ); ?><br> - <a target="_blank" href="<?php echo POST_SMTP_URL; ?>/style/images/mailer-type.gif"> - <figure> - <img width="180" src="<?php echo POST_SMTP_URL; ?>/style/images/mailer-type.gif" alt="how to set mailer type"> - <figcaption><?php _e('click to enlarge image.', 'post-smtp' ); ?></figcaption> - </figure> - </a> - </p> - </div> - <?php - } - - /** - * Returns the plugin version number and name - * Part of the Postman API - * - * @return multitype:unknown NULL - */ - public function getPluginMetaData() { - // 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' ); - } - $msg = PostmanTransportRegistry::getInstance()->getReadyMessage(); - $message = sprintf( $msg['message'] ); - $goToSettings = sprintf( '<a href="%s">%s</a>', PostmanUtils::getSettingsPageUrl(), __( 'Settings', 'post-smtp' ) ); - $goToEmailLog = sprintf( '%s', _x( 'Email Log', 'The log of Emails that have been delivered', 'post-smtp' ) ); - if ( PostmanOptions::getInstance()->isMailLoggingEnabled() ) { - $goToEmailLog = sprintf( '<a href="%s">%s</a>', PostmanUtils::getEmailLogPageUrl(), $goToEmailLog ); - } - $message .= (sprintf( ' %s | %s', $goToEmailLog, $goToSettings )); - $message .= '<input type="hidden" name="security" class="security" value="' . wp_create_nonce('postsmtp') . '">'; - - $hide = get_option('postman_release_version' ); - - if ( $msg['error'] == true && ! $hide ) { - $this->messageHandler->printMessage( $message, 'postman-not-configured-notice notice notice-error is-dismissible' ); - } - } - } - - /** - * 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 mixed $pluginData - */ - private function registerTransports( $rootPluginFilenameAndPath ) { - $postman_transport_registry = PostmanTransportRegistry::getInstance(); - - $postman_transport_registry->registerTransport( new PostmanDefaultModuleTransport( $rootPluginFilenameAndPath ) ); - $postman_transport_registry->registerTransport( new PostmanSmtpModuleTransport( $rootPluginFilenameAndPath ) ); - $postman_transport_registry->registerTransport( new PostmanGmailApiModuleTransport( $rootPluginFilenameAndPath ) ); - $postman_transport_registry->registerTransport( new PostmanMandrillTransport( $rootPluginFilenameAndPath ) ); - $postman_transport_registry->registerTransport( new PostmanSendGridTransport( $rootPluginFilenameAndPath ) ); - $postman_transport_registry->registerTransport( new PostmanMailgunTransport( $rootPluginFilenameAndPath ) ); - - do_action( 'postsmtp_register_transport', $postman_transport_registry ); - } - - /** - * 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/post-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' ) { - $langDir = 'post-smtp/Postman/languages'; - $success = load_plugin_textdomain( 'post-smtp', 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, 'post-smtp', get_locale() ) ); - } - } - } - } - - /** - * Shortcode to return the current plugin version. - * - * From http://code.garyjones.co.uk/get-wordpress-plugin-version/ - * - * @return string Plugin version - */ - function version_shortcode() { - return $this->pluginData ['version']; - } -} - -if ( ! function_exists( 'str_getcsv' ) ) { - /** - * PHP version less than 5.3 don't have str_getcsv natively. - * - * @param mixed $string - * @return multitype: - */ - 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 ); - } -} |