Skip to content

Commit

Permalink
2.0.7
Browse files Browse the repository at this point in the history
* Updated: Improve PHPMailer method.
* Updated: Bug fixes.
  • Loading branch information
smusman98 committed Jul 18, 2022
1 parent 2a60663 commit 2c49e55
Show file tree
Hide file tree
Showing 24 changed files with 1,700 additions and 363 deletions.
31 changes: 31 additions & 0 deletions Postman/Extensions/Admin/PostmanAdmin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php
if ( ! defined( 'ABSPATH' ) ) exit;

class PostmanAdmin {

public function __construct()
{
$PostmanLicenseManager = PostmanLicenseManager::get_instance();
$extensions = $PostmanLicenseManager->get_extensions();

if ( count( $extensions ) > 0 ) {
add_action('admin_menu', [ $this, 'add_menu' ], 20 );
}

}

public function add_menu() {
add_submenu_page(
PostmanViewController::POSTMAN_MENU_SLUG,
__('Extensions', 'post-smtp'),
__('Extensions', 'post-smtp'),
'manage_options',
'post-smtp-extensions',
[ $this, 'render_menu' ]
);
}

public function render_menu() {
include_once 'PostmanAdminView.php';
}
}
86 changes: 86 additions & 0 deletions Postman/Extensions/Admin/PostmanAdminView.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?php if ( ! defined( 'ABSPATH' ) ) exit; ?>

<style>
.form-table .row {
display: flex;
}

.form-table .row .flex > *:not(:last-child) {
margin-right: 5px;
}

.form-table .label {
align-self: center;
font-weight: bold;
}

.form-table .flex {
display: flex;
}

.form-table .flex input {
border-radius: 3px;
height: 30px;
margin: 0;
margin-left: 5px;
}

.form-table .flex button {
box-shadow: none;
height: 100%;
}
</style>

<div class="wrap">
<h1>Post SMTP Installed Extensions</h1>
<form action="" method="post">
<div class="form-table">
<?php
$PostmanLicenseManager = PostmanLicenseManager::get_instance();
$extensions = $PostmanLicenseManager->get_extensions();

foreach ( $extensions as $slug => $extension) :
$short_name = $extension['license_manager']->get_slug( $extension['plugin_data']['Name'] );
$nonce = $short_name . '_license_key-nonce';

$license_data = get_option( $short_name . '_license_active' );
$license_key = get_option( $short_name . '_license_key' );

$license_valid = is_object( $license_data ) && $license_data->license === 'valid';
$license_field_class = $license_valid ? 'readonly' : '';
$license_field_value = $license_valid ? base64_encode($license_key) : '';

wp_nonce_field( $nonce, $nonce );
?>

<div class="row">
<div class="label">
<?php echo esc_html( $extension['plugin_data']['Name'] ); ?>
</div>

<div class="flex">
<div class="input">
<input <?php echo $license_field_class; ?>
type="password"
name="post_smtp_extension[<?php echo $short_name . '_license_key'; ?>]"
class="regular-text"
value="<?php echo $license_field_value; ?>"
placeholder="Serial Key">
</div>

<div class="buttons">
<?php if ( ! $license_valid ) :?>
<button type="submit" name="post_smtp_extension[<?php echo $short_name; ?>_activate]" class="button button-primary">Activate</button>
<?php endif; ?>

<button type="submit" name="post_smtp_extension[<?php echo $short_name; ?>_deactivate]" class="button button-secondary">Deactivate</button>
</div>
</div>

</div>

<?php endforeach; ?>

</div>
</form>
</div>
File renamed without changes.
File renamed without changes.
241 changes: 241 additions & 0 deletions Postman/Extensions/Core/Notifications/PostmanNotify.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
require_once 'INotify.php';
require_once 'PostmanMailNotify.php';
require_once 'PostmanPushoverNotify.php';
require_once 'PostmanSlackNotify.php';
require_once 'PostmanNotifyOptions.php';

class PostmanNotify {

const NOTIFICATIONS_OPTIONS = 'postman_notifications_options';
const NOTIFICATIONS_SECTION = 'postman_notifications_section';
const NOTIFICATIONS_PUSHOVER_CRED = 'postman_pushover_cred';
const NOTIFICATIONS_SLACK_CRED = 'postman_slack_cred';

public function __construct() {

$this->options = new PostmanNotifyOptions();

add_filter( 'post_smtp_admin_tabs', array( $this, 'tabs' ) );
add_action( 'post_smtp_settings_menu', array( $this, 'menu' ) );
add_action( 'post_smtp_settings_fields', array( $this, 'settings' ) );
add_action( 'post_smtp_on_failed', array( $this, 'notify' ), 10, 5 );
add_filter( 'post_smtp_sanitize', array( $this, 'sanitize' ), 10, 3 );
}

public function menu() {
print '<section id="notifications">';
do_settings_sections( self::NOTIFICATIONS_OPTIONS );

$currentKey = $this->options->getNotificationService();
$pushover = $currentKey == 'pushover' ? 'block' : 'none';
$slack = $currentKey == 'slack' ? 'block' : 'none';

echo '<div id="pushover_cred" style="display: ' . $pushover . ';">';
do_settings_sections( self::NOTIFICATIONS_PUSHOVER_CRED );
echo '</div>';

echo '<div id="slack_cred" style="display: ' . $slack . ';">';
do_settings_sections( self::NOTIFICATIONS_SLACK_CRED );
echo '</div>';

do_action( 'post_smtp_notification_settings' );

print '</section>';
}

public function sanitize($new_input, $input, $sanitizer) {
// Notifications
$sanitizer->sanitizeString( 'Pushover Service', PostmanNotifyOptions::NOTIFICATION_SERVICE, $input, $new_input, $this->options->getNotificationService() );
$sanitizer->sanitizePassword( 'Pushover Username', PostmanNotifyOptions::PUSHOVER_USER, $input, $new_input, $this->options->getPushoverUser() );
$sanitizer->sanitizePassword( 'Pushover Token', PostmanNotifyOptions::PUSHOVER_TOKEN, $input, $new_input, $this->options->getPushoverToken() );
$sanitizer->sanitizePassword( 'Slack Token', PostmanNotifyOptions::SLACK_TOKEN, $input, $new_input, $this->options->getSlackToken() );

// Chrome extension
$sanitizer->sanitizeString( 'Push Chrome Extension', PostmanNotifyOptions::NOTIFICATION_USE_CHROME, $input, $new_input );
$sanitizer->sanitizePassword( 'Push Chrome Extension UID', PostmanNotifyOptions::NOTIFICATION_CHROME_UID, $input, $new_input, $this->options->getNotificationChromeUid() );

return $new_input;
}

public function tabs($tabs) {
$tabs['notifications'] = __( 'Notifications', 'post-smtp' );

return $tabs;
}

public function settings() {
// Notifications
add_settings_section( self::NOTIFICATIONS_SECTION, _x( 'Notifications Settings', 'Configuration Section Title', 'post-smtp' ), array(
$this,
'printNotificationsSectionInfo',
), self::NOTIFICATIONS_OPTIONS );

add_settings_field( PostmanNotifyOptions::NOTIFICATION_SERVICE, _x( 'Notification Service', 'Configuration Input Field', 'post-smtp' ), array(
$this,
'notification_service_callback',
), self::NOTIFICATIONS_OPTIONS, self::NOTIFICATIONS_SECTION );

// Pushover
add_settings_section( 'pushover_credentials', _x( 'Pushover Credentials', 'Configuration Section Title', 'post-smtp' ), array(
$this,
'printNotificationsSectionInfo',
), self::NOTIFICATIONS_PUSHOVER_CRED );

add_settings_field( PostmanNotifyOptions::PUSHOVER_USER, _x( 'Pushover User Key', 'Configuration Input Field', 'post-smtp' ), array(
$this,
'pushover_user_callback',
), self::NOTIFICATIONS_PUSHOVER_CRED, 'pushover_credentials' );

add_settings_field( PostmanNotifyOptions::PUSHOVER_TOKEN, _x( 'Pushover App Token', 'Configuration Input Field', 'post-smtp' ), array(
$this,
'pushover_token_callback',
), self::NOTIFICATIONS_PUSHOVER_CRED, 'pushover_credentials' );

// Slack
add_settings_section( 'slack_credentials', _x( 'Slack Credentials', 'Configuration Section Title', 'post-smtp' ), array(
$this,
'printNotificationsSectionInfo',
), self::NOTIFICATIONS_SLACK_CRED );

add_settings_field( PostmanNotifyOptions::SLACK_TOKEN, _x( 'Slack Webhook', 'Configuration Input Field', 'post-smtp' ), array(
$this,
'slack_token_callback',
), self::NOTIFICATIONS_SLACK_CRED, 'slack_credentials' );

add_settings_field( PostmanNotifyOptions::NOTIFICATION_USE_CHROME, _x( 'Push to chrome extension', 'Configuration Input Field', 'post-smtp' ), array(
$this,
'notification_use_chrome_callback',
), self::NOTIFICATIONS_OPTIONS, self::NOTIFICATIONS_SECTION );

add_settings_field( 'notification_chrome_uid', _x( 'Chrome Extension UID', 'Configuration Input Field', 'post-smtp' ), array(
$this,
'notification_chrome_uid_callback',
), self::NOTIFICATIONS_OPTIONS, self::NOTIFICATIONS_SECTION );
}

/**
* Print the Section text
*/
public function printNotificationsSectionInfo() {
}

public function notification_service_callback() {
$inputDescription = __( 'Select the notification service you want to recieve alerts about failed emails.' );

$options = apply_filters('post_smtp_notification_service', array(
'none' => __( 'None', 'post-smtp' ),
'default' => __( 'WP Admin Email', 'post-smtp' ),
'pushover' => __( 'Pushover', 'post-smtp' ),
'slack' => __( 'Slack', 'post-smtp' ),
));

printf( '<select id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]">', 'postman_options', PostmanNotifyOptions::NOTIFICATION_SERVICE );
$currentKey = $this->options->getNotificationService();

foreach ( $options as $key => $label ) {
$this->printSelectOption( $label, $key, $currentKey );
}

printf( '</select><br/><span class="postman_input_description">%s</span>', $inputDescription );
}

public function notification_use_chrome_callback() {
$value = $this->options->useChromeExtension();
printf( '<input type="checkbox" id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]" %3$s />', 'postman_options', PostmanNotifyOptions::NOTIFICATION_USE_CHROME, $value ? 'checked="checked"' : '' );
}

public function notification_chrome_uid_callback() {
printf( '<input type="password" id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]" value="%3$s" />', 'postman_options', 'notification_chrome_uid', PostmanUtils::obfuscatePassword( $this->options->getNotificationChromeUid() ) );
}

public function pushover_user_callback() {
printf( '<input type="password" id="pushover_user" name="%s[%s]" value="%s" />', 'postman_options', PostmanNotifyOptions::PUSHOVER_USER, $this->options->getPushoverUser() );
}

public function pushover_token_callback() {
printf( '<input type="password" id="pushover_token" name="%s[%s]" value="%s" />', 'postman_options', PostmanNotifyOptions::PUSHOVER_TOKEN, $this->options->getPushoverToken() );
}

public function slack_token_callback() {
printf( '<input type="password" id="slack_token" name="%s[%s]" value="%s" />', 'postman_options', PostmanNotifyOptions::SLACK_TOKEN, $this->options->getSlackToken() );
echo '<a target="_blank" href="https://slack.postmansmtp.com/">' . __( 'Get your webhook URL here', 'post-smtp' ) . '</a>';

}

/**
* @param PostmanEmailLog $log
* @param PostmanMessage $message
* @param string $transcript
* @param PostmanTransport $transport
* @param string $errorMessage
*/
public function notify ($log, $postmanMessage, $transcript, $transport, $errorMessage ) {
$message = __( 'You getting this message because an error detected while delivered your email.', 'post-smtp' );
$message .= "\r\n" . sprintf( __( 'For the domain: %1$s','post-smtp' ), get_bloginfo('url') );
$message .= "\r\n" . __( 'The log to paste when you open a support issue:', 'post-smtp' ) . "\r\n";

if ( $errorMessage && ! empty( $errorMessage ) ) {

$message = $message . $errorMessage;

$notification_service = PostmanNotifyOptions::getInstance()->getNotificationService();
switch ($notification_service) {
case 'none':
$notifyer = false;
break;
case 'default':
$notifyer = new PostmanMailNotify;
break;
case 'pushover':
$notifyer = new PostmanPushoverNotify;
break;
case 'slack':
$notifyer = new PostmanSlackNotify;
break;
default:
$notifyer = new PostmanMailNotify;
}

$notifyer = apply_filters('post_smtp_notifier', $notifyer, $notification_service);

// Notifications
if ( $notifyer ) {
$notifyer->send_message($message, $log);
}

$this->push_to_chrome($errorMessage);
}
}

public function push_to_chrome($message) {
$push_chrome = PostmanNotifyOptions::getInstance()->useChromeExtension();

if ( $push_chrome ) {
$uid = PostmanNotifyOptions::getInstance()->getNotificationChromeUid();

if ( empty( $uid ) ) {
return;
}

$url = 'https://postmansmtp.com/chrome/' . $uid;

$args = array(
'body' => array(
'message' => $message
)
);

$response = wp_remote_post( $url , $args );
}
}

private function printSelectOption( $label, $optionKey, $currentKey ) {
$optionPattern = '<option value="%1$s" %2$s>%3$s</option>';
printf( $optionPattern, $optionKey, $optionKey == $currentKey ? 'selected="selected"' : '', $label );
}
}
new PostmanNotify();
Loading

0 comments on commit 2c49e55

Please sign in to comment.