HEX
Server: Apache/2.4.6 (CentOS) mpm-itk/2.4.7-04 mod_fcgid/2.3.9 PHP/5.4.16
System: Linux dvm.vladweb.ru 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: region-gk.ru (1016)
PHP: 7.3.33
Disabled: NONE
Upload Files
File: /home/region-gk.ru/data/www/region-gk.ru/wp-content/plugins/premmerce/src/Api/PluginApi.php
<?php namespace Premmerce\Premmerce\Api;

use Automatic_Upgrader_Skin;
use Plugin_Upgrader;
use Premmerce\Premmerce\Data\Plugins;
use Premmerce\SDK\V2\FileManager\FileManager;

class PluginApi{

	/**
	 * @var array
	 */
	private $plugins = [];

	/**
	 * @var FileManager
	 */
	private $fileManager;

	public function __construct(FileManager $fileManager){
		$this->fileManager = $fileManager;
		$this->init();
	}

	/**
	 * @param $slug
	 *
	 * @return array|object|\WP_Error
	 */
	public function getInfoPlugin($slug){

		if(!function_exists('plugins_api')){
			include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
		}

		return plugins_api('plugin_information', ['slug' => $slug]);
	}

	/**
	 * @return  array
	 */
	public function getExtra(){
		$plugins = Plugins::getAll();
		foreach($plugins as $slug => &$plugin){
			if(isset($plugin['link'])){
				$install = [
					"handler" => "premmerce.plugins",
					"action"  => "premmerce_actions",
					"value"   => $slug,
					"option"  => "install",
				];
			}else{
				$install = [
					"handler" => "wp.updates",
					'action'  => 'install-plugin',
					'slug'    => $slug,
				];
			}

			$plugin['install_action']  = $install;
			$plugin['activate_action'] = [
				"handler" => "premmerce.plugins",
				"action"  => "premmerce_actions",
				"value"   => $slug,
				"option"  => "activate",
			];
		};

		return $plugins;
	}


	/**
	 * @return array
	 */
	public function getInstalledPlugins(){
		return $this->plugins;
	}

	/**
	 * @param $slug
	 *
	 * @return mixed
	 */
	public function getInstalledPlugin($slug){
		return $this->plugins[ $slug ];
	}

	/**
	 * @param string $slug
	 *
	 * @return bool
	 */
	public function isInstalledPlugin($slug){
		return array_key_exists($slug, $this->plugins);
	}

	/**
	 * @param string $slug
	 *
	 * @return bool
	 */
	public function isActivePlugin($slug){
		if($this->isInstalledPlugin($slug)){

			$name = $this->plugins[ $slug ]['plugin'];

			return is_plugin_active($name);
		}
	}

	/**
	 * @param string $slug
	 *
	 * @return null|bool|\WP_Error
	 */
	public function activatePlugin($slug){
		if(!current_user_can('activate_plugins')){
			return new \WP_Error('permission_denied', __('Sorry, you are not allowed to activate this plugin.'));
		}
		if(!$this->isActivePlugin($slug)){
			$name   = $this->plugins[ $slug ]['plugin'];
			$result = activate_plugin($name);
			if(is_null($result)){
				return true;
			}else{
				return $result;
			}
		}
	}

	/**
	 * @param $slug
	 *
	 * @return \WP_Error|mixed
	 */
	public function deactivatePlugin($slug){
		if(!current_user_can('deactivate_plugins')){
			return new \WP_Error('permission_denied', __('Sorry, you are not allowed to deactivate plugins for this site.'));
		}
		if($this->isActivePlugin($slug)){
			$name = $this->plugins[ $slug ]['plugin'];

			return deactivate_plugins($name);
		}
	}

	/**
	 * Reload plugins
	 */
	public function reloadPlugins(){
		wp_clean_plugins_cache();
		$this->init();
	}


	/**
	 * Load plugins
	 */
	private function init(){

		if(!function_exists('get_plugins')){
			require_once ABSPATH . 'wp-admin/includes/plugin.php';
		}
		$plugins = get_plugins();

		foreach($plugins as $name => $plugin){
			$parts                            = explode('/', $name);
			$slug                             = array_shift($parts);
			$this->plugins[ $slug ]           = $plugin;
			$this->plugins[ $slug ]['plugin'] = $name;
		}


	}

	/**
	 * @param $slug
	 *
	 * @return bool
	 */
	public function activateTheme($slug){
		switch_theme($slug);

		return true;
	}


	/**
	 * @param $slug
	 *
	 * @return bool
	 */
	public function isActiveTheme($slug){
		return wp_get_theme()->get_template() == $slug;
	}


	/**
	 * @param $slug
	 *
	 * @return bool
	 */
	public function isInstalledTheme($slug){
		$themes = $this->getThemes();

		return array_key_exists($slug, $themes);
	}

	/**
	 * @return array
	 */
	public function getThemes(){
		return wp_get_themes();
	}


	/**
	 * @param string $slug
	 *
	 * @return bool|\WP_Error
	 */
	public function upgrade($slug){
		return $this->getPluginUpgrader()->upgrade($slug);
	}


	/**
	 * @param string $slug
	 *
	 * @return bool|\WP_Error
	 */
	public function installPlugin($slug){
		if(!current_user_can('install_plugins')){
			return new \WP_Error('permission_denied', __('Sorry, you are not allowed to install plugins on this site.'));
		}
		if(!$this->isInstalledPlugin($slug)){
			if($path = Plugins::getPath($slug)){
				$link = $this->fileManager->getPluginDirectory() . $path;
			}else{
				$result = $this->getInfoPlugin($slug);
				$link   = $result->download_link;
			}

			$result = $this->getPluginUpgrader()->install($link);

			$this->reloadPlugins();

			return $result;
		}
	}

	/**
	 * @return Plugin_Upgrader
	 */
	private function getPluginUpgrader(){
		$includes = ABSPATH . 'wp-admin/includes/';
		if(!class_exists('WP_Upgrader')){
			include_once $includes . 'class-wp-upgrader.php';
		}
		if(!class_exists('Plugin_Upgrader')){
			include_once $includes . 'class-plugin-upgrader.php';
		}

		return new Plugin_Upgrader(new Automatic_Upgrader_Skin());

	}

}