Sindbad~EG File Manager
<?php
namespace FluentForm\App\Modules\Track;
class SetupModule
{
public function installPlugin($repoSlug)
{
if (!current_user_can('install_plugins')) {
wp_send_json([
'message' => __('Sorry! you do not have permission to install plugin', 'fluentform'),
], 423);
}
if ('fluent-smtp' == $repoSlug) {
$info = $this->installFluentSMTP();
wp_send_json($info);
}
}
private function installFluentSMTP()
{
$plugin_id = 'fluent-smtp';
$plugin = [
'name' => 'FluentSMTP',
'repo-slug' => 'fluent-smtp',
'file' => 'fluent-smtp.php',
];
$this->backgroundInstaller($plugin, $plugin_id);
return [
'is_installed' => defined('FLUENTMAIL'),
'config_url' => admin_url('options-general.php?page=fluent-mail#/'),
'message' => __('FluentSMTP plugin has been installed and activated successfully', 'fluentform'),
];
}
private function backgroundInstaller($plugin_to_install, $plugin_id)
{
if (!empty($plugin_to_install['repo-slug'])) {
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
require_once ABSPATH . 'wp-admin/includes/plugin.php';
WP_Filesystem();
$skin = new \Automatic_Upgrader_Skin();
$upgrader = new \WP_Upgrader($skin);
$installed_plugins = array_reduce(array_keys(\get_plugins()), [$this, 'associate_plugin_file'], []);
$plugin_slug = $plugin_to_install['repo-slug'];
$plugin_file = isset($plugin_to_install['file']) ? $plugin_to_install['file'] : $plugin_slug . '.php';
$installed = false;
$activate = false;
// See if the plugin is installed already.
if (isset($installed_plugins[$plugin_file])) {
$installed = true;
$activate = !is_plugin_active($installed_plugins[$plugin_file]);
}
// Install this thing!
if (!$installed) {
// Suppress feedback.
ob_start();
try {
$plugin_information = plugins_api(
'plugin_information',
[
'slug' => $plugin_slug,
'fields' => [
'short_description' => false,
'sections' => false,
'requires' => false,
'rating' => false,
'ratings' => false,
'downloaded' => false,
'last_updated' => false,
'added' => false,
'tags' => false,
'homepage' => false,
'donate_link' => false,
'author_profile' => false,
'author' => false,
],
]
);
if (is_wp_error($plugin_information)) {
throw new \Exception($plugin_information->get_error_message());
}
$package = $plugin_information->download_link;
$download = $upgrader->download_package($package);
if (is_wp_error($download)) {
throw new \Exception($download->get_error_message());
}
$working_dir = $upgrader->unpack_package($download, true);
if (is_wp_error($working_dir)) {
throw new \Exception($working_dir->get_error_message());
}
$result = $upgrader->install_package(
[
'source' => $working_dir,
'destination' => WP_PLUGIN_DIR,
'clear_destination' => false,
'abort_if_destination_exists' => false,
'clear_working' => true,
'hook_extra' => [
'type' => 'plugin',
'action' => 'install',
],
]
);
if (is_wp_error($result)) {
throw new \Exception($result->get_error_message());
}
$activate = true;
} catch (\Exception $e) {
}
// Discard feedback.
ob_end_clean();
}
wp_clean_plugins_cache();
// Activate this thing.
if ($activate) {
try {
$result = activate_plugin($installed ? $installed_plugins[$plugin_file] : $plugin_slug . '/' . $plugin_file);
if (is_wp_error($result)) {
throw new \Exception($result->get_error_message());
}
} catch (\Exception $e) {
}
}
}
}
private function associate_plugin_file($plugins, $key)
{
$path = explode('/', $key);
$filename = end($path);
$plugins[$filename] = $key;
return $plugins;
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists