option_key ) === false ) {
$data = [];
foreach ( get_plugins() as $plugin_slug => $plugin_details ) {
$data[ $plugin_slug ] = [
'plugin_name' => $plugin_details['Name'],
'version' => $plugin_details['Version'],
'records' => [
[
'status' => is_plugin_active( $plugin_slug ) ? 'activated' : 'deactivated',
'timestamp' => current_time( 'mysql' ),
],
],
];
}
add_option( $this->option_key, $data, '', 'no' );
}
}
/**
* Tracks plugin activation.
*/
public function skpat_track_plugin_activation( $plugin, $network_activation ) {
$this->update_plugin_status( $plugin, 'activated' );
}
/**
* Tracks plugin deactivation.
*/
public function skpat_track_plugin_deactivation( $plugin, $network_activation ) {
$this->update_plugin_status( $plugin, 'deactivated' );
}
/**
* Tracks plugin changes (updates or deletions).
*/
public function skpat_track_plugin_changes( $upgrader, $hook_extra ) {
$data = get_option( $this->option_key, [] );
$all_plugins = array_keys( get_plugins() );
if ( isset( $hook_extra['action'] ) && $hook_extra['action'] === 'delete' ) {
// Plugin deletion logic
foreach ( $data as $plugin_slug => $plugin_data ) {
if ( ! in_array( $plugin_slug, $all_plugins, true ) ) {
$data[ $plugin_slug ]['records'][] = [
'status' => 'deleted',
'timestamp' => current_time( 'mysql' ),
];
unset( $data[ $plugin_slug ]['version'] );
}
}
}
if ( isset( $hook_extra['action'] ) && $hook_extra['action'] === 'update' ) {
foreach ( $hook_extra['plugins'] as $plugin ) {
if ( isset( $data[ $plugin ] ) ) {
$plugin_details = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
$data[ $plugin ]['version'] = $plugin_details['Version'];
$data[ $plugin ]['records'][] = [
'status' => 'updated',
'timestamp' => current_time( 'mysql' ),
'version' => $plugin_details['Version'],
];
}
}
}
update_option( $this->option_key, $data, 'no' );
}
/**
* Updates plugin status with a new record.
*/
private function update_plugin_status( $plugin, $status ) {
$data = get_option( $this->option_key, [] );
if ( ! isset( $data[ $plugin ] ) ) {
$plugin_details = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
$data[ $plugin ] = [
'plugin_name' => $plugin_details['Name'],
'version' => $plugin_details['Version'],
'records' => [],
];
}
$plugin_details = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
$data[ $plugin ]['version'] = $plugin_details['Version'];
$data[ $plugin ]['records'][] = [
'status' => $status,
'timestamp' => current_time( 'mysql' ),
'version' => $plugin_details['Version'],
];
update_option( $this->option_key, $data, 'no' );
}
/**
* Registers the submenu page.
*/
public function skpat_register_submenu_page() {
add_submenu_page(
'tools.php',
__( 'Add-on Tracker', 'addon-tracker' ),
__( 'Add-on Tracker', 'addon-tracker' ),
'manage_options',
'add-on-tracker',
[ $this, 'render_submenu_page' ]
);
}
/**
* Renders the submenu page.
*/
public function render_submenu_page() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$data = get_option( $this->option_key, [] );
// Display success/error messages.
settings_errors( 'addon_tracker_messages' );
?>
|
|
|
|
$plugin_data ) : ?>
| () |
|
%s',
esc_attr( $color ),
esc_html( $status )
);
?>
|
|
option_key, [] );
ob_start();
?>
| Plugin |
Version |
Records |
$plugin_data ) : ?>
|
|
|