settingsService = $settingsService; } /** * Register admin hooks * * @return void */ public function register(): void { add_action('admin_init', [$this, 'adminInit']); add_filter('admin_body_class', [$this, 'addAdminBodyClass']); add_action('admin_enqueue_scripts', [$this, 'enqueueDeactivationModal']); } /** * Handle admin initialization tasks * * @return void */ public function adminInit(): void { $this->checkVersionAndHandleActivation(); $this->removeAdminNotices(); } /** * Enqueue deactivation modal script on plugins page * * @param string $hook Current admin page hook * @return void */ public function enqueueDeactivationModal(string $hook): void { if ($hook === 'plugins.php') { wp_enqueue_script( 'ivyforms-deactivation-modal', IVYFORMS_URL . 'frontend/assets/js/admin-deactivation-modal.js', [], IVYFORMS_VERSION, true ); $settingsService = new SettingsService(); $deleteOnUninstall = $settingsService->getSetting('general', 'delete_on_uninstall'); wp_localize_script( 'ivyforms-deactivation-modal', 'ivyformsData', [ 'version' => IVYFORMS_VERSION, 'pluginUrl' => IVYFORMS_URL, 'restApiUrl' => rest_url('ivyforms/v1/deactivation-feedback'), 'restNonce' => wp_create_nonce('wp_rest'), 'deleteOnUninstall' => $deleteOnUninstall, 'i18n' => [ 'warningTitle' => __('Warning', 'ivyforms'), 'warningMessage' => __( 'All IvyForms database tables and settings will be deleted when ' . 'this plugin is deactivated. To prevent this,', 'ivyforms' ), 'warningLinkText' => __('disable this option in settings', 'ivyforms'), ] ] ); } } /** * Check a plugin version and handle activation/deactivation if needed * * @return void */ private function checkVersionAndHandleActivation(): void { if (!function_exists('activate_plugin')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $settingsService = new SettingsService(); $currentVersion = IVYFORMS_VERSION; $savedVersion = $settingsService->getSetting('general', 'version'); if ($savedVersion !== $currentVersion) { deactivate_plugins(IVYFORMS_PLUGIN_SLUG); // @phpstan-ignore argument.type activate_plugin(IVYFORMS_PLUGIN_SLUG); // @phpstan-ignore argument.type $settingsService->setSetting('general', 'version', $currentVersion); } } /** * Remove admin notices on IvyForms admin pages * * @return void */ public function removeAdminNotices(): void { // Check if we're on an IvyForms admin page if ($this->isIvyFormsAdminPage()) { // Remove all admin notices remove_all_actions('admin_notices'); remove_all_actions('all_admin_notices'); // For plugins using user_admin_notices or network_admin_notices remove_all_actions('user_admin_notices'); remove_all_actions('network_admin_notices'); wp_register_style( 'ivyforms_admin_global', IVYFORMS_URL . 'frontend/assets/css/global-admin.css', array(), IVYFORMS_VERSION ); wp_enqueue_style('ivyforms_admin_global'); } } /** * Check if current page is an IvyForms admin page * * @SuppressWarnings(PHPMD) * * @return bool */ private function isIvyFormsAdminPage(): bool { if (!is_admin()) { return false; } // Adjust this based on your page's actual slug/identifier return (isset($_GET['page']) && strpos($_GET['page'], 'ivyforms') !== false); } /** * Add admin body class * * @param string $classes * @return string */ public function addAdminBodyClass(string $classes): string { if ($this->settingsService === null) { return $classes; } if ($this->settingsService->getSetting('general', 'fullscreen')) { $classes .= ' ivyforms-fullscreen-mode '; } return $classes; } }