Current Path : /storage/v11800/affypharma/public_html/wp-content/plugins/ninja-tables/app/Services/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/affypharma/public_html/wp-content/plugins/ninja-tables/app/Services/BackgroundInstaller.php |
<?php
namespace NinjaTables\App\Services;
class BackgroundInstaller
{
public function install($plugin)
{
if ( ! empty($plugin['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();
$upgrader = new PluginInstaller(new AutomaticUpgrader());
$installed_plugins = array_reduce(array_keys(\get_plugins()), array($this, 'associatePluginFile'), array());
$plugin_slug = $plugin['repo-slug'];
$plugin_file = isset($plugin['file']) ? $plugin['file'] : $plugin_slug . '.php';
$plugin_dir_url = $plugin_slug . '/' . $plugin_file;
$installed = false;
$activate = false;
// See if the plugin is installed already.
if (isset($installed_plugins[$plugin_dir_url])) {
$installed = true;
$activate = ! is_plugin_active($plugin_file);
}
// Install this thing!
if ( ! $installed) {
// Suppress feedback.
ob_start();
try {
$plugin_information = plugins_api(
'plugin_information',
array(
'slug' => $plugin_slug,
'fields' => array(
'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(
array(
'source' => $working_dir,
'destination' => WP_PLUGIN_DIR,
'clear_destination' => false,
'abort_if_destination_exists' => false,
'clear_working' => true,
'hook_extra' => array(
'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_dir_url] : $plugin_dir_url);
if (is_wp_error($result)) {
throw new \Exception($result->get_error_message());
}
} catch (\Exception $e) {
}
}
}
}
private function associatePluginFile($plugins, $key)
{
$path = explode('/', $key);
$filename = end($path);
$plugins[$key] = $key;
return $plugins;
}
}