HEX
Server: LiteSpeed
System: Linux s3604.bom1.stableserver.net 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
User: dmstechonline (1480)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/dmstechonline/www/wp-content/plugins/rishi-companion/includes/functions/AjaxFunctions.php
<?php
/**
 * AJAX Functions.
 *
 * @package Rishi_Companion
 */

namespace Rishi_Companion\Functions;

use Rishi_Companion\Module_Manager;
use Rishi_Companion\Plugin_Manager;

defined( 'ABSPATH' ) || exit;

/**
 * Ajax Settings.
 */
class AjaxFunctions {

	/**
	 * Plugin manager instance.
	 *
	 * @var Plugin_Manager
	 */
	private $plugin_manager;

	/**
	 * Extension manager instance.
	 *
	 * @var Module_Manager
	 */
	private $module_manager;

	/**
	 * Constructor.
	 */
	public function __construct( Plugin_Manager $plugin_manager, Module_Manager $module_manager ) {
		$this->plugin_manager = $plugin_manager;
        $this->module_manager = $module_manager;
        $this->init();
	}

	/**
	 * Initialization.
	 */
	private function init() {
		// Initialize hooks.
		$this->init_hooks();
	}

	/**
	 * Initialize hooks.
	 */
	private function init_hooks() {
		// AJAX for Plugin Status.
		add_action( 'wp_ajax_rishi_get_plugins_status', array( $this, 'rishi_get_plugins_status' ) );

		// AJAX for Plugin Download.
		add_action( 'wp_ajax_rishi_get_plugin_download', array( $this, 'rishi_get_plugin_download' ) );

		// AJAX for Plugin Activate.
		add_action( 'wp_ajax_rishi_get_plugin_activate', array( $this, 'rishi_get_plugin_activate' ) );

		// AJAX for Plugin Deactivate.
		add_action( 'wp_ajax_rishi_get_plugin_deactivate', array( $this, 'rishi_get_plugin_deactivate' ) );

		// AJAX for Addons Status.
		add_action( 'wp_ajax_rishi_get_extensions_status', array( $this, 'rishi_get_extensions_status' ) );

		// AJAX for Addons Activate.
		add_action( 'wp_ajax_rishi_enable_extension', array( $this, 'rishi_enable_extension' ) );

		// AJAX for Addons Deactivate.
		add_action( 'wp_ajax_rishi_disable_extension', array( $this, 'rishi_disable_extension' ) );
	}

	private function check_capability_and_retrieve_from_request($cap, $type) {
        $this->check_capability($cap);
        return $this->retrieve_from_request($type);
    }

	/**
	 * Common function to check capabilities.
	 *
	 * @param string $cap Capability to check.
	 * @return bool Whether the user has the capability.
	 */
	private function check_capability( $cap ) {
		if ( ! $this->plugin_manager->user_access( $cap ) ) {
			wp_send_json_error();
			exit;
		}
	}

	/**
	 * Common function to get the extension or plugin from the request.
	 *
	 * @param string $type The type of data to retrieve ('extension' or 'plugin').
	 * @return string The sanitized extension or plugin name.
	 */
	private function retrieve_from_request( $type ) {
		$data = filter_input( INPUT_POST, $type, FILTER_SANITIZE_FULL_SPECIAL_CHARS );
		if ( ! $data ) {
			wp_send_json_error(
				array(
					'message' => "Error: {$type} not set in request.",
				)
			);
		}
		return $data;
	}

	/**
	 * Get Plugin Status
	 */
	public function rishi_get_plugins_status() {

		$this->check_capability( 'edit_plugins' );
		$result = array();

		$plugins = $this->plugin_manager->get_config();

		foreach ( $plugins as $plugin => $value ) {
			$installed_path = $this->plugin_manager->check_plugin_installed( $plugin );

			if ( ! $installed_path ) {
				$status = 'uninstalled'; // Plugin is not installed.
			} else {
				$status = is_plugin_active( $value['file'] ) ? 'activated' : 'deactivated';
			}

			$result[] = array(
				'name'   => $plugin,
				'status' => $status,
			);
		}

		wp_send_json_success( $result );
	}

	/**
	 * Get Plugin Download
	 */
	public function rishi_get_plugin_download() {
		$plugin = $this->check_capability_and_retrieve_from_request('install_plugins', 'plugin');
        $install = $this->plugin_manager->install_plugin( $plugin );
        if ( $install ) {
            wp_send_json_success();
        } else {
            wp_send_json_error('Error installing plugin.');
            exit;
        }
	}

	/**
	 * Get Plugin Activate
	 */
	public function rishi_get_plugin_activate() {
		$plugin = $this->check_capability_and_retrieve_from_request('edit_plugins', 'plugin');
		$all_installed_plugins = $this->plugin_manager->get_plugins();
        $plugin_file = WP_PLUGIN_DIR .'/'. $all_installed_plugins[$plugin]['file'];
        $result = $this->plugin_manager->activate_plugin( $plugin_file );
		if ( is_wp_error( $result ) ) {
			wp_send_json_error( 'Error activating plugin: ' . $result->get_error_message() );
			return;
		}
		wp_send_json_success();
	}

	/**
	 * Get Plugin Deactivate
	 */
	public function rishi_get_plugin_deactivate() {
		$plugin = $this->check_capability_and_retrieve_from_request('edit_plugins', 'plugin');
		$all_installed_plugins = $this->plugin_manager->get_plugins();
        $plugin_file = WP_PLUGIN_DIR .'/'. $all_installed_plugins[$plugin]['file'];
        $result = $this->plugin_manager->deactivate_plugin( $plugin_file );
		if ( is_wp_error( $result ) ) {
			wp_send_json_error( 'Error deactivating plugin: ' . $result->get_error_message() );
			return;
		}
		wp_send_json_success();
	}

	/**
	 * Get Extension Status
	 *
	 * @return void
	 */
	public function rishi_get_extensions_status() {
		$this->check_capability( 'edit_theme_options' );
		$data = $this->module_manager->retrieve_extensions();
		if ( ! $data ) {
			wp_send_json_error( 'No extensions found.' );
			return;
		}
		wp_send_json_success( $data );
	}

	/**
	 * Get Extension Activate
	 *
	 * @return void
	 */
	public function rishi_enable_extension() {
		$extension = $this->check_capability_and_retrieve_from_request('edit_theme_options', 'extension');
		$this->module_manager->enableModule( $extension );
		wp_send_json_success();
	}

	/**
	 * Get Extension Deactivate
	 *
	 * @return void
	 */
	public function rishi_disable_extension() {
		$extension = $this->check_capability_and_retrieve_from_request('edit_theme_options', 'extension');
		$this->module_manager->disableModule( $extension );
		wp_send_json_success();
	}
}
$plugin_manager = new Plugin_Manager();
$module_manager = new Module_Manager();
new AjaxFunctions($plugin_manager, $module_manager);