diff --git a/code/wp-content/mu-plugins/hostforge-systems.php b/code/wp-content/mu-plugins/hostforge-systems.php new file mode 100644 index 0000000000..6595b756ce --- /dev/null +++ b/code/wp-content/mu-plugins/hostforge-systems.php @@ -0,0 +1,17 @@ +register_module( + new \HostForgeSystems\Modules\CoreUpdates\Disable_Core_Updates() + ); + + $loader->boot(); +} + +hostforge_systems_boot(); \ No newline at end of file diff --git a/code/wp-content/mu-plugins/hostforge-systems/src/Core/Loader.php b/code/wp-content/mu-plugins/hostforge-systems/src/Core/Loader.php new file mode 100644 index 0000000000..db61137ffc --- /dev/null +++ b/code/wp-content/mu-plugins/hostforge-systems/src/Core/Loader.php @@ -0,0 +1,43 @@ + + */ + protected array $modules = []; + + /** + * Register a module instance. + * + * @param \HostForgeSystems\Core\Module_Interface $module Module instance. + * @return void + */ + public function register_module(Module_Interface $module): void + { + $this->modules[] = $module; + } + + /** + * Boot all registered modules. + * + * @return void + */ + public function boot(): void + { + foreach ($this->modules as $module) { + $module->register(); + } + } +} \ No newline at end of file diff --git a/code/wp-content/mu-plugins/hostforge-systems/src/Core/Module_Interface.php b/code/wp-content/mu-plugins/hostforge-systems/src/Core/Module_Interface.php new file mode 100644 index 0000000000..53d0de79a3 --- /dev/null +++ b/code/wp-content/mu-plugins/hostforge-systems/src/Core/Module_Interface.php @@ -0,0 +1,20 @@ +
%2$s
', + esc_attr($type), + wp_kses_post($message) + ); + } +} \ No newline at end of file diff --git a/code/wp-content/mu-plugins/hostforge-systems/src/Modules/CoreUpdates/Disable_Core_Updates.php b/code/wp-content/mu-plugins/hostforge-systems/src/Modules/CoreUpdates/Disable_Core_Updates.php new file mode 100644 index 0000000000..26743ecc6e --- /dev/null +++ b/code/wp-content/mu-plugins/hostforge-systems/src/Modules/CoreUpdates/Disable_Core_Updates.php @@ -0,0 +1,148 @@ +updates = []; + $transient->version_checked = get_bloginfo('version'); + $transient->last_checked = time(); + + return $transient; + } + + /** + * Remove the default WordPress update nag from the admin area. + * + * @return void + */ + public function remove_core_update_nag(): void + { + remove_action('admin_notices', 'update_nag', 3); + } + + /** + * Block manual WordPress core upgrade attempts from wp-admin. + * + * @return void + */ + public function block_manual_core_upgrade(): void + { + if (! is_admin()) { + return; + } + + if (! current_user_can('update_core')) { + return; + } + + $page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : ''; + $action = isset($_GET['action']) ? sanitize_text_field(wp_unslash($_GET['action'])) : ''; + + $is_core_upgrade_request = + $action === 'do-core-upgrade' || + $page === 'update-core.php' || + (isset($_SERVER['PHP_SELF']) && str_contains(wp_unslash($_SERVER['PHP_SELF']), 'update-core.php')); + + if (! $is_core_upgrade_request) { + return; + } + + if ($action !== 'do-core-upgrade') { + return; + } + + wp_die( + esc_html__( + 'WordPress core updates are disabled in wp-admin. Please use the HostForge Dashboard to manage core updates.', + 'hostforge-systems' + ), + esc_html__('Core Updates Disabled', 'hostforge-systems'), + ['response' => 403] + ); + } + + /** + * Render a HostForge notice on the Updates screen. + * + * @return void + */ + public function render_updates_screen_notice(): void + { + if (! $this->is_updates_screen()) { + return; + } + + Notice::render( + 'HostForge Notice: WordPress core updates are managed through the HostForge Dashboard and are disabled in wp-admin.', + 'info' + ); + } + + /** + * Determine whether the current screen is the Updates screen. + * + * @return bool + */ + protected function is_updates_screen(): bool + { + if (! is_admin() || ! function_exists('get_current_screen')) { + return false; + } + + $screen = get_current_screen(); + + if (! $screen || empty($screen->id)) { + return false; + } + + return $screen->id === 'update-core'; + } +} \ No newline at end of file diff --git a/code/wp-content/mu-plugins/hostforge.php b/code/wp-content/mu-plugins/hostforge.php deleted file mode 100644 index 50826fe2f1..0000000000 --- a/code/wp-content/mu-plugins/hostforge.php +++ /dev/null @@ -1,16 +0,0 @@ -