bibhamrokhanpin/wp-content/__plugins/redux-framework/redux-templates/classes/class-installer.php
2024-04-10 17:46:06 +05:45

157 lines
4.0 KiB
PHP

<?php // phpcs:ignore WordPress.Files.FileName
/**
* Installer class which installs and/or activates block plugins.
*
* @since 4.0.0
* @package Redux Framework
*/
namespace ReduxTemplates;
use ReduxTemplates;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/misc.php';
require_once ABSPATH . 'wp-admin/includes/plugin.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
/**
* ReduxTemplates Installer.
*
* @since 4.0.0
*/
class Installer {
/**
* Run command.
*
* @param string $slug Plugin Slug.
* @param string $download_link Install URL if from a custom URL.
*
* @return array
* @since 4.0.0
*/
public static function run( $slug, $download_link = '' ) {
$plugin_dir = WP_PLUGIN_DIR . '/' . $slug;
/*
* Don't try installing plugins that already exist (wastes time downloading files that
* won't be used
*/
$status = array();
if ( ! is_dir( $plugin_dir ) ) {
if ( empty( $download_link ) ) {
$api = plugins_api(
'plugin_information',
array(
'slug' => $slug,
'fields' => array(
'short_description' => false,
'sections' => false,
'requires' => false,
'rating' => false,
'ratings' => false,
'downloaded' => false,
'last_updated' => false,
'added' => false,
'tags' => false,
'compatibility' => false,
'homepage' => false,
'donate_link' => false,
),
)
);
$download_link = $api->download_link;
}
if ( empty( $download_link ) ) {
$status['error'] = 'Install url for ' . $slug . ' could not be located.';
return $status;
}
ob_start();
$skin = new ReduxTemplates\Installer_Muter( array( 'api' => $api ) );
$upgrader = new \Plugin_Upgrader( $skin );
$install = $upgrader->install( $download_link );
ob_end_clean();
if ( true !== $install ) {
$status['error'] = 'Install process failed for ' . $slug . '.';
if ( ! empty( $install ) ) {
ob_start();
// phpcs:ignore WordPress.PHP.DevelopmentFunctions
\var_dump( $install );
$result = ob_get_clean();
$status['var_dump'] = $result;
} else {
$status['error'] .= ' ' . $upgrader->skin->options['api']->errors['plugins_api_failed'][0];
}
return $status;
}
// Stop UAGB redirect.
if ( 'ultimate-addons-for-gutenberg' === $slug ) {
update_option( '__uagb_do_redirect', false );
}
$status['install'] = 'success';
}
/*
* The install results don't indicate what the main plugin file is, so we just try to
* activate based on the slug. It may fail, in which case the plugin will have to be activated
* manually from the admin screen.
*/
$plugin_path = false;
$plugin_check = false;
if ( file_exists( $plugin_dir . '/' . $slug . '.php' ) ) {
$plugin_path = $plugin_dir . '/' . $slug . '.php';
$plugin_check = $slug . '/' . $slug . '.php';
} elseif ( file_exists( $plugin_dir . '/plugin.php' ) ) {
$plugin_path = $plugin_dir . '/plugin.php';
$plugin_check = $slug . '/plugin.php';
} else {
$split = explode( '-', $slug );
$new_filename = '';
foreach ( $split as $s ) {
if ( ! empty( $s ) ) {
$new_filename .= $s[0];
}
}
$plugin_path = $plugin_dir . '/' . $new_filename . '.php';
$plugin_check = $slug . '/' . $new_filename . '.php';
if ( ! file_exists( $plugin_path ) ) {
$plugin_path = $plugin_dir . '/index.php';
$plugin_check = $slug . '/index.php';
}
}
if ( ! empty( $plugin_path ) && file_exists( $plugin_path ) ) {
activate_plugin( $plugin_check );
$status['activate'] = 'success';
} else {
$status['error'] = sprintf(
'The block plugin `%s` could not be activated. Please try installing it manually.',
$slug
);
}
return $status;
}
}