<?php
/**
* Plugin Installer Class
*
* @package KadenceWP\KadenceStarterTemplates
*/
namespace KadenceWP\KadenceStarterTemplates\CLI;
use KadenceWP\KadenceStarterTemplates\Plugin_Check;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Plugin Installer Class
*/
class Plugin_Installer {
/**
* Install plugins
*
* @param array $plugins The plugins to install.
* @return bool|\WP_Error
*/
public function install_plugins( $plugins ) {
$allowed_plugins = $this->get_allowed_plugins();
foreach ( $plugins as $plugin_slug ) {
if ( ! isset( $plugin_slug ) || ! isset( $allowed_plugins[ $plugin_slug ]['path'] ) ) {
continue;
}
$path = $allowed_plugins[ $plugin_slug ]['path'];
$state = Plugin_Check::active_check( $path );
$base = $allowed_plugins[ $plugin_slug ]['base'];
$install = true;
if ( 'notactive' === $state ) {
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$all_plugins = get_plugins();
$plugin_path = '';
foreach ( $all_plugins as $plugin_file => $plugin_data ) {
if ( strpos( $plugin_file, $base . '/' ) === 0 || $plugin_file === $base ) {
$plugin_path = $plugin_file;
break;
}
}
if ( $plugin_path ) {
$path = $plugin_path;
$silent = ( 'give' === $base || 'elementor' === $base || 'wp-smtp' === $base || 'fluentform' === $base || 'restrict-content' === $base ? false : true );
if ( 'give' === $base ) {
add_option( 'give_install_pages_created', 1, '', false );
}
if ( 'restrict-content' === $base ) {
update_option( 'rcp_install_pages_created', current_time( 'mysql' ) );
}
$activate = activate_plugin( $path, '', false, $silent );
if ( is_wp_error( $activate ) ) {
$install = false;
}
} else {
if ( ! function_exists( 'plugins_api' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
}
if ( ! function_exists( 'install_plugin_information' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if ( ! function_exists( 'request_filesystem_credentials' ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
if ( ! function_exists( 'get_file_data' ) ) {
require_once ABSPATH . 'wp-admin/includes/misc.php';
}
if ( ! class_exists( 'WP_Upgrader' ) ) {
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
}
$api = plugins_api(
'plugin_information',
array(
'slug' => $base,
'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,
),
)
);
if ( ! is_wp_error( $api ) ) {
$download_link = $api->download_link;
if ( 'kadence-starter-templates' === $base ) {
$download_link = 'https://downloads.wordpress.org/plugin/kadence-starter-templates.latest-stable.zip';
}
$skin = new \WP_Ajax_Upgrader_Skin();
$upgrader = new \Plugin_Upgrader( $skin );
$result = $upgrader->install( $download_link );
if ( ! is_wp_error( $result ) && ! is_wp_error( $skin->result ) && ! $skin->get_errors() && $result ) {
$plugin_file = $upgrader->plugin_info();
if ( $plugin_file ) {
$path = $plugin_file;
if ( 'give' === $base ) {
add_option( 'give_install_pages_created', 1, '', false );
}
if ( 'restrict-content' === $base ) {
update_option( 'rcp_install_pages_created', current_time( 'mysql' ) );
}
$silent = ( 'give' === $base || 'elementor' === $base || 'wp-smtp' === $base || 'fluentform' === $base || 'restrict-content' === $base ? false : true );
$activate = activate_plugin( $path, '', false, $silent );
if ( is_wp_error( $activate ) ) {
$install = false;
}
} else {
$install = false;
}
} else {
$install = false;
}
} else {
$install = false;
}
}
} elseif ( 'installed' === $state ) {
$silent = ( 'give' === $base || 'elementor' === $base || 'wp-smtp' === $base || 'fluentform' === $base || 'restrict-content' === $base ? false : true );
if ( 'give' === $base ) {
// Make sure give doesn't add it's pages, prevents having two sets.
update_option( 'give_install_pages_created', 1, '', false );
}
if ( 'restrict-content' === $base ) {
$silent = true;
update_option( 'rcp_install_pages_created', current_time( 'mysql' ) );
}
$activate = activate_plugin( $path, '', false, $silent );
if ( is_wp_error( $activate ) ) {
$install = false;
}
}
if ( 'give' === $base ) {
update_option( 'give_version_upgraded_from', '2.13.2' );
}
if ( 'kadence-pro' === $base ) {
$enabled = json_decode( get_option( 'kadence_pro_theme_config' ), true );
$enabled['elements'] = true;
update_option( 'kadence_pro_theme_config', json_encode( $enabled ) );
}
}
return true;
}
/**
* Get the allowed plugins.
*
* @access private
* @return array
*/
private function get_allowed_plugins() {
$importer_plugins = array(
'woocommerce' => array(
'title' => 'Woocommerce',
'base' => 'woocommerce',
'slug' => 'woocommerce',
'path' => 'woocommerce/woocommerce.php',
'src' => 'repo',
),
'elementor' => array(
'title' => 'Elementor',
'base' => 'elementor',
'slug' => 'elementor',
'path' => 'elementor/elementor.php',
'src' => 'repo',
),
'kadence-blocks' => array(
'title' => 'Kadence Blocks',
'base' => 'kadence-blocks',
'slug' => 'kadence-blocks',
'path' => 'kadence-blocks/kadence-blocks.php',
'src' => 'repo',
),
'kadence-blocks-pro' => array(
'title' => 'Kadence Block Pro',
'base' => 'kadence-blocks-pro',
'slug' => 'kadence-blocks-pro',
'path' => 'kadence-blocks-pro/kadence-blocks-pro.php',
'src' => 'bundle',
),
'kadence-pro' => array(
'title' => 'Kadence Pro',
'base' => 'kadence-pro',
'slug' => 'kadence-pro',
'path' => 'kadence-pro/kadence-pro.php',
'src' => 'bundle',
),
'fluentform' => array(
'title' => 'Fluent Forms',
'src' => 'repo',
'base' => 'fluentform',
'slug' => 'fluentform',
'path' => 'fluentform/fluentform.php',
),
'wpzoom-recipe-card' => array(
'title' => 'Recipe Card Blocks by WPZOOM',
'base' => 'recipe-card-blocks-by-wpzoom',
'slug' => 'wpzoom-recipe-card',
'path' => 'recipe-card-blocks-by-wpzoom/wpzoom-recipe-card.php',
'src' => 'repo',
),
'recipe-card-blocks-by-wpzoom' => array(
'title' => 'Recipe Card Blocks by WPZOOM',
'base' => 'recipe-card-blocks-by-wpzoom',
'slug' => 'wpzoom-recipe-card',
'path' => 'recipe-card-blocks-by-wpzoom/wpzoom-recipe-card.php',
'src' => 'repo',
),
'learndash' => array(
'title' => 'LearnDash',
'base' => 'sfwd-lms',
'slug' => 'sfwd_lms',
'path' => 'sfwd-lms/sfwd_lms.php',
'src' => 'thirdparty',
),
'sfwd-lms' => array(
'title' => 'LearnDash',
'base' => 'sfwd-lms',
'slug' => 'sfwd_lms',
'path' => 'sfwd-lms/sfwd_lms.php',
'src' => 'thirdparty',
),
'learndash-course-grid' => array(
'title' => 'LearnDash Course Grid Addon',
'base' => 'learndash-course-grid',
'slug' => 'learndash_course_grid',
'path' => 'learndash-course-grid/learndash_course_grid.php',
'src' => 'thirdparty',
),
'lifterlms' => array(
'title' => 'LifterLMS',
'base' => 'lifterlms',
'slug' => 'lifterlms',
'path' => 'lifterlms/lifterlms.php',
'src' => 'repo',
),
'tutor' => array(
'title' => 'Tutor LMS',
'base' => 'tutor',
'slug' => 'tutor',
'path' => 'tutor/tutor.php',
'src' => 'repo',
),
'give' => array(
'title' => 'GiveWP',
'base' => 'give',
'slug' => 'give',
'path' => 'give/give.php',
'src' => 'repo',
),
'the-events-calendar' => array(
'title' => 'The Events Calendar',
'base' => 'the-events-calendar',
'slug' => 'the-events-calendar',
'path' => 'the-events-calendar/the-events-calendar.php',
'src' => 'repo',
),
'event-tickets' => array(
'title' => 'Event Tickets',
'base' => 'event-tickets',
'slug' => 'event-tickets',
'path' => 'event-tickets/event-tickets.php',
'src' => 'repo',
),
'orderable' => array(
'title' => 'Orderable',
'base' => 'orderable',
'slug' => 'orderable',
'path' => 'orderable/orderable.php',
'src' => 'repo',
),
'restrict-content' => array(
'title' => 'Restrict Content',
'base' => 'restrict-content',
'slug' => 'restrictcontent',
'path' => 'restrict-content/restrictcontent.php',
'src' => 'repo',
),
'kadence-woo-extras' => array(
'title' => 'Kadence Shop Kit',
'base' => 'kadence-woo-extras',
'slug' => 'kadence-woo-extras',
'path' => 'kadence-woo-extras/kadence-woo-extras.php',
'src' => 'bundle',
),
'depicter' => array(
'title' => 'Depicter Slider',
'base' => 'depicter',
'slug' => 'depicter',
'path' => 'depicter/depicter.php',
'src' => 'repo',
),
'bookit' => array(
'title' => 'Bookit',
'base' => 'bookit',
'slug' => 'bookit',
'path' => 'bookit/bookit.php',
'src' => 'repo',
),
'kadence-woocommerce-email-designer' => array(
'title' => 'Kadence Woocommerce Email Designer',
'base' => 'kadence-woocommerce-email-designer',
'slug' => 'kadence-woocommerce-email-designer',
'path' => 'kadence-woocommerce-email-designer/kadence-woocommerce-email-designer.php',
'src' => 'repo',
),
'seriously-simple-podcasting' => array(
'title' => 'Seriously Simple Podcasting',
'base' => 'seriously-simple-podcasting',
'slug' => 'seriously-simple-podcasting',
'path' => 'seriously-simple-podcasting/seriously-simple-podcasting.php',
'src' => 'repo',
),
'better-wp-security' => array(
'title' => 'Solid Security',
'base' => 'better-wp-security',
'slug' => 'better-wp-security',
'path' => 'better-wp-security/better-wp-security.php',
'src' => 'repo',
),
'ithemes-security-pro' => array(
'title' => 'Solid Security Pro',
'base' => 'ithemes-security-pro',
'slug' => 'ithemes-security-pro',
'path' => 'ithemes-security-pro/ithemes-security-pro.php',
'src' => 'thirdparty',
),
'wp-smtp' => array(
'title' => 'Solid Mail',
'base' => 'wp-smtp',
'slug' => 'wp-smtp',
'path' => 'wp-smtp/wp-smtp.php',
'src' => 'repo',
),
'solid-performance' => array(
'title' => 'Solid Performance',
'base' => 'solid-performance',
'slug' => 'solid-performance',
'path' => 'solid-performance/solid-performance.php',
'src' => 'repo',
),
);
return $importer_plugins;
}
}