157 lines
5.7 KiB
PHP
157 lines
5.7 KiB
PHP
<?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;
|
|
}
|
|
}
|