199 lines
7.4 KiB
PHP
199 lines
7.4 KiB
PHP
<?php
|
|
/*
|
|
Plugin Name: MightyBox Panel Integration
|
|
Description: Logs WordPress activities like updates, installs, activations, and deactivations to the MightyBox Panel.
|
|
Version: 1.2
|
|
Author: Tony @mightybox
|
|
*/
|
|
|
|
if (!defined('ABSPATH')) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
class MU_Activity_Logger {
|
|
private $panel_endpoint;
|
|
private $api_key;
|
|
private $old_versions;
|
|
|
|
public function __construct() {
|
|
$this->panel_endpoint = 'https://c499-49-144-230-251.ngrok-free.app/api/log-activity';
|
|
$this->api_key = '5a7bbf28-d305-4cd3-87fe-7cdca9ff97f3';
|
|
|
|
// Hook into WordPress actions for logging activities
|
|
add_action('pre_set_site_transient_update_plugins', [$this, 'capture_old_versions']);
|
|
add_action('upgrader_process_complete', [$this, 'log_update_activity'], 10, 2);
|
|
add_action('activated_plugin', [$this, 'log_activation_activity'], 10, 2);
|
|
add_action('deactivated_plugin', [$this, 'log_deactivation_activity'], 10, 2);
|
|
add_action('deleted_plugin', [$this, 'log_delete_activity'], 10, 1);
|
|
add_action('switch_theme', [$this, 'log_theme_switch_activity'], 10, 2);
|
|
}
|
|
|
|
public function capture_old_versions($transient) {
|
|
// Store the current versions of the plugins before the update
|
|
if (!empty($transient->response)) {
|
|
foreach ($transient->response as $plugin_file => $plugin_info) {
|
|
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file);
|
|
$this->old_versions[$plugin_file] = $plugin_data['Version'];
|
|
}
|
|
}
|
|
return $transient;
|
|
}
|
|
|
|
private function send_logs_to_panel($activity_type, $activity_data) {
|
|
$activity_data['site_url'] = get_site_url(); // Add site URL to distinguish the source WordPress site
|
|
$activity_data['site_name'] = get_bloginfo('name'); // Add site name for additional identification
|
|
|
|
// Add current user information
|
|
$current_user = wp_get_current_user();
|
|
$activity_data['user_info'] = [
|
|
'email' => $current_user->user_email ?? 'Unknown',
|
|
'role' => !empty($current_user->roles) ? implode(', ', $current_user->roles) : 'Unknown',
|
|
];
|
|
|
|
$response = wp_remote_post($this->panel_endpoint, [
|
|
'body' => json_encode([
|
|
'type' => $activity_type,
|
|
'data' => $activity_data,
|
|
'site_id' => get_option('your_site_id'),
|
|
], JSON_UNESCAPED_SLASHES),
|
|
'headers' => [
|
|
'Content-Type' => 'application/json',
|
|
'Authorization' => 'Bearer ' . $this->api_key,
|
|
],
|
|
]);
|
|
|
|
if (is_wp_error($response)) {
|
|
error_log('Failed to log activity to the panel. Error: ' . $response->get_error_message() . ', Data: ' . json_encode($activity_data));
|
|
} else {
|
|
error_log('Successfully sent data to the panel: ' . print_r($response, true));
|
|
}
|
|
}
|
|
|
|
private function get_current_wordpress_version() {
|
|
return get_bloginfo('version');
|
|
}
|
|
|
|
public function log_update_activity($upgrader_object, $options) {
|
|
// Collect activity data
|
|
$activity_data = [
|
|
'action' => $options['action'] ?? 'unknown',
|
|
'type' => $options['type'] ?? 'unknown',
|
|
'items' => [], // Initialize empty to gather all updated items
|
|
'site_url' => get_site_url(),
|
|
'site_name' => get_bloginfo('name'),
|
|
'time' => current_time('mysql'),
|
|
];
|
|
|
|
// Add all relevant items that were updated or installed
|
|
if ($options['action'] === 'install' && $options['type'] === 'plugin') {
|
|
// Plugin installation
|
|
foreach ($upgrader_object->result['destination_name'] as $plugin) {
|
|
$new_version = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin)['Version'];
|
|
$activity_data['items'][] = [
|
|
'plugin' => $plugin,
|
|
'new_version' => $new_version,
|
|
];
|
|
}
|
|
} elseif ($options['action'] === 'update') {
|
|
// Updates for plugins, themes, or core
|
|
if (!empty($options['plugins'])) {
|
|
foreach ($options['plugins'] as $plugin) {
|
|
$new_version = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin)['Version'];
|
|
$old_version = $this->old_versions[$plugin] ?? 'unknown';
|
|
$activity_data['items'][] = [
|
|
'plugin' => $plugin,
|
|
'old_version' => $old_version,
|
|
'new_version' => $new_version,
|
|
];
|
|
}
|
|
}
|
|
|
|
if (!empty($options['themes'])) {
|
|
foreach ($options['themes'] as $theme) {
|
|
$activity_data['items'][] = [
|
|
'theme' => $theme,
|
|
'action' => 'theme_update',
|
|
];
|
|
}
|
|
}
|
|
|
|
if ($options['type'] === 'core') {
|
|
$old_version = $this->get_current_wordpress_version(); // Get the version before the update.
|
|
|
|
// Adding a slight delay to fetch the new version more reliably
|
|
sleep(2);
|
|
$new_version = get_bloginfo('version'); // Get the version after the update.
|
|
|
|
if ($old_version === $new_version) {
|
|
$activity_data['items'][] = [
|
|
'core' => 'WordPress Core',
|
|
'old_version' => $old_version,
|
|
'new_version' => 'No change detected - possible rollback or failed update',
|
|
];
|
|
} else {
|
|
$activity_data['items'][] = [
|
|
'core' => 'WordPress Core',
|
|
'old_version' => $old_version,
|
|
'new_version' => $new_version,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Log the prepared activity data before sending it
|
|
if (defined('WP_DEBUG') && WP_DEBUG) {
|
|
$activity_data_dump = print_r($activity_data, true);
|
|
error_log("Prepared activity data:\n{$activity_data_dump}");
|
|
}
|
|
|
|
// Send to the panel
|
|
$this->send_logs_to_panel('update', $activity_data);
|
|
}
|
|
|
|
public function log_activation_activity($plugin, $network_wide) {
|
|
$activity_data = [
|
|
'plugin' => $plugin,
|
|
'network_wide' => $network_wide,
|
|
'time' => current_time('mysql'),
|
|
];
|
|
$this->send_logs_to_panel('plugin_activated', $activity_data);
|
|
}
|
|
|
|
public function log_deactivation_activity($plugin, $network_wide) {
|
|
$activity_data = [
|
|
'plugin' => $plugin,
|
|
'network_wide' => $network_wide,
|
|
'time' => current_time('mysql'),
|
|
];
|
|
$this->send_logs_to_panel('plugin_deactivated', $activity_data);
|
|
}
|
|
|
|
public function log_delete_activity($plugin) {
|
|
$activity_data = [
|
|
'plugin' => $plugin,
|
|
'time' => current_time('mysql'),
|
|
];
|
|
$this->send_logs_to_panel('plugin_deleted', $activity_data);
|
|
}
|
|
|
|
public function log_theme_switch_activity($new_theme, $old_theme) {
|
|
$activity_data = [
|
|
'new_theme' => $new_theme->get('Name'),
|
|
'old_theme' => $old_theme->get('Name'),
|
|
'time' => current_time('mysql'),
|
|
];
|
|
$this->send_logs_to_panel('theme_switched', $activity_data);
|
|
}
|
|
}
|
|
|
|
new MU_Activity_Logger();
|
|
|
|
// Define wp_error_log() to use WordPress logging
|
|
function wp_error_log($message) {
|
|
if (defined('WP_CLI') && WP_CLI) {
|
|
WP_CLI::log($message);
|
|
} else {
|
|
error_log($message);
|
|
}
|
|
}
|