* @author Maximum Software Inc * @license GPL-3.0-only * @link https://agenistrator.com/ * * SPDX-FileCopyrightText: 2025-2026 Alex Ruban * SPDX-FileCopyrightText: 2025-2026 Maximum Software Inc * SPDX-License-Identifier: GPL-3.0-only */ namespace Agenistrator; // Direct access prevention if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Deactivate_Plugin_Tool class. */ class Deactivate_Plugin_Tool extends Tool { /** * Get the tool ID. * * @return string The tool ID. * @since 1.0.0 */ public function get_id() { return 'deactivate_plugin'; } /** * Get the tool name. * * @return string The tool name. * @since 1.0.0 */ public function get_name() { return __( 'Deactivate Plugin', 'agenistrator' ); } /** * Get the tool description. * * @return string The tool description. * @since 1.0.0 */ public function get_description() { return 'Deactivate an active plugin.'; } /** * Get the parameters schema for this tool. * * @return array Parameters schema in JSON Schema format. * @since 1.0.0 */ public function get_parameters() { return array( 'type' => 'object', 'properties' => array( 'plugin' => array( 'type' => 'string', 'description' => 'Plugin file path (e.g., "akismet/akismet.php") or plugin name', ), ), 'required' => array( 'plugin' ), ); } /** * Check if the current user can execute this tool. * * @return bool True if the current user has permission. * @since 1.0.0 */ public function current_user_can_execute() { return current_user_can( 'activate_plugins' ); } /** * Check if this tool is read-only. * * @return bool True if the tool only reads data. * @since 1.0.0 */ public function is_read_only() { return false; } /** * Execute the tool with the given arguments. * * @param array $args The tool arguments. * * @return array The tool execution result. * @since 1.0.0 */ protected function execute( $args ) { if ( ! isset( $args['plugin'] ) || empty( $args['plugin'] ) ) { return $this->error_response( 'Plugin identifier is required' ); } $plugin = WordPress_Utils::find_plugin( $args['plugin'] ); if ( ! $plugin ) { return $this->error_response( 'Plugin not found' ); } $plugin_file = $plugin['file']; $plugin_data = $plugin['data']; if ( ! is_plugin_active( $plugin_file ) ) { return $this->error_response( 'Plugin is not active' ); } deactivate_plugins( $plugin_file ); return $this->success_response( 'Plugin deactivated successfully', array( 'plugin_file' => $plugin_file, 'name' => $plugin_data['Name'], 'version' => $plugin_data['Version'], ) ); } }