OP#499 - Explain PS Plugin to customer in WP Admin #2

Merged
gdh merged 7 commits from feature/OP#499-explain-patchstack-plugin-to-customer-in-wp-admin into main 2025-12-15 10:10:19 +00:00
7 changed files with 420 additions and 94 deletions
Showing only changes of commit 9bffb8b5e9 - Show all commits

View File

@@ -272,22 +272,26 @@ class HostingSupport1984 {
* *
* @return string[] * @return string[]
*/ */
private function get_protected_plugins(): array { private function get_protected_plugins(): array {
$own = plugin_basename( __FILE__ ); // Always protect this plugin from deactivation/deletion.
$own = plugin_basename( __FILE__ );
$protected = array( $own );
return array( // Additionally protect Patchstack - but only while it is active.
$own, if ( $this->is_patchstack_active() ) {
'patchstack/patchstack.php', $protected[] = 'patchstack/patchstack.php';
); }
}
return $protected;
}
/** /**
* Intercept admin actions attempting to deactivate or delete protected plugins and block them. * Intercept admin actions attempting to deactivate or delete protected plugins and block them.
*/ */
public function protect_plugins_admin_actions() { public function protect_plugins_admin_actions() {
// Collect requested action(s). // Collect requested action(s).
$action = isset( $_REQUEST['action'] ) ? sanitize_key( (string) $_REQUEST['action'] ) : ''; $action = isset( $_REQUEST['action'] ) ? sanitize_key( (string) $_REQUEST['action'] ) : '';
$action2 = isset( $_REQUEST['action2'] ) ? sanitize_key( (string) $_REQUEST['action2'] ) : ''; $action2 = isset( $_REQUEST['action2'] ) ? sanitize_key( (string) $_REQUEST['action2'] ) : '';
$targets = array(); $targets = array();
if ( ! empty( $_REQUEST['plugin'] ) ) { if ( ! empty( $_REQUEST['plugin'] ) ) {
@@ -315,19 +319,19 @@ class HostingSupport1984 {
return; return;
} }
$protected = $this->get_protected_plugins(); $protected = $this->get_protected_plugins();
$intersect = array_intersect( $targets, $protected ); $intersect = array_intersect( $targets, $protected );
if ( ! empty( $intersect ) ) { if ( ! empty( $intersect ) ) {
wp_die( wp_die(
__( 'For security, this action is blocked: 1984 Hosting Support and Patchstack cannot be deactivated or deleted while this policy is active.', 'hostingsupport1984' ), __( 'For security, this action is blocked: 1984 Hosting Support cannot be deactivated or deleted. Patchstack cannot be deactivated or deleted while it is active.', 'hostingsupport1984' ),
403 403
); );
} }
} }
} }
$hosting_support_1984 = new HostingSupport1984(); $hosting_support_1984 = new HostingSupport1984();
const A1984_HOSTING_SUPPORT_BASE_FILE = __FILE__; define( 'A1984_HOSTING_SUPPORT_BASE_FILE', __FILE__ );
require_once __DIR__ . '/1984-hosting-support-ui.php'; require_once __DIR__ . '/1984-hosting-support-ui.php';

View File

@@ -11,12 +11,7 @@ function HostingSupport1984CopyEmailAddress(e) {
.catch(err => console.error("Clipboard write failed:", err)); .catch(err => console.error("Clipboard write failed:", err));
} }
document.querySelector('#hosting-support-1984-link') const hostingSupport1984Link = document.querySelector('#hosting-support-1984-link');
?.addEventListener('click', HostingSupport1984CopyEmailAddress); if (hostingSupport1984Link) {
hostingSupport1984Link.addEventListener('click', HostingSupport1984CopyEmailAddress);
if (document.querySelector('#hosting-support-1984-link')) {
document.querySelector('#hosting-support-1984-link').addEventListener(
'click',
HostingSupport1984CopyEmailAddress
);
} }