total-pushover/total-pushover.php

74 lines
2.7 KiB
PHP
Raw Normal View History

2024-08-18 19:19:19 +00:00
<?php
/**
* Plugin Name: Total Pushover
2024-08-19 05:19:24 +00:00
* Version: 1.0.0
2024-08-18 19:19:19 +00:00
* Requires at least: 6.0
* Requires PHP: 7.4
* Author: Jason Cosper
* Author URI: https://littleroom.studio/
* License: GPL-2.0+
* License URI: https://www.gnu.org/licenses/gpl-2.0.txt
2024-08-18 22:05:12 -07:00
* Description: Redirects all outgoing site email to the Pushover notification service.
2024-08-18 19:19:19 +00:00
* GitHub Plugin URI: boogah/total-pushover
*/
2024-08-18 22:05:12 -07:00
// Exit if accessed directly to prevent unauthorized access
2024-08-18 19:19:19 +00:00
if (! defined('ABSPATH')) {
exit;
}
2024-08-18 22:05:12 -07:00
// Add a filter to intercept the wp_mail function
// This filter will allow us to modify or cancel the email before it's sent
2024-08-18 19:19:19 +00:00
add_filter('wp_mail', 'wp_pushover_intercept_mail', 10, 1);
2024-08-18 22:05:12 -07:00
/**
* Intercept the wp_mail function and redirect the email to Pushover
*
* @param array $atts {
* Array of email arguments.
* @type string $subject Email subject.
* @type string $message Email message.
* }
*
* @return bool|mixed False to prevent wp_mail from sending the email, or the original email arguments if Pushover credentials are not set.
*/
2024-08-18 19:19:19 +00:00
function wp_pushover_intercept_mail($atts)
{
2024-08-18 22:05:12 -07:00
// Check if Pushover API token and user key are defined
// These constants should be defined in the site's wp-config.php file
2024-08-18 19:19:19 +00:00
$pushover_token = defined('PUSHOVER_API_TOKEN') ? PUSHOVER_API_TOKEN : '';
$pushover_user = defined('PUSHOVER_USER_KEY') ? PUSHOVER_USER_KEY : '';
2024-08-18 22:05:12 -07:00
// If either the token or user key is empty, return the original email arguments
// This will allow the email to be sent as usual
2024-08-18 19:19:19 +00:00
if (empty($pushover_token) || empty($pushover_user)) {
return $atts;
}
// Prepare the message for Pushover
2024-08-18 22:05:12 -07:00
// Sanitize the input data, for security's sake
2024-08-18 19:19:19 +00:00
$message = [
'token' => sanitize_text_field($pushover_token),
'user' => sanitize_text_field($pushover_user),
'title' => sanitize_text_field($atts['subject']),
2024-08-19 05:19:24 +00:00
'message' => wp_kses_post($atts['message']),
2024-08-18 19:19:19 +00:00
];
2024-08-18 22:05:12 -07:00
// Send the message to Pushover using the WordPress HTTP API
// This will make a POST request to the Pushover API with the prepared message data
2024-08-18 19:19:19 +00:00
$response = wp_remote_post('https://api.pushover.net/1/messages.json', [
'body' => $message,
]);
2024-08-18 22:05:12 -07:00
// Check if the response is a WP_Error object
// This indicates that an error occurred during the request
2024-08-18 19:19:19 +00:00
if (is_wp_error($response)) {
2024-08-18 22:05:12 -07:00
// Log the error message for debugging purposes
error_log('Pushover notification failed: '. $response->get_error_message());
2024-08-18 19:19:19 +00:00
}
// Return false to prevent wp_mail from sending the email
2024-08-18 22:05:12 -07:00
// This will effectively redirect the email to Pushover
2024-08-18 19:19:19 +00:00
return false;
}