-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Updated: Improve PHPMailer method. * Updated: Bug fixes.
- Loading branch information
smusman98
committed
Jul 18, 2022
1 parent
2a60663
commit 2c49e55
Showing
24 changed files
with
1,700 additions
and
363 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
241
Postman/Extensions/Core/Notifications/PostmanNotify.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); |
Oops, something went wrong.