$plugin ) {
if ( strpos( $plugin_path, $slug . '/' ) === 0 ) {
return true;
}
}
}
return false;
}
/**
* Check if a plugin is active.
*
* @param string $slug The slug of the plugin.
*
* @return bool True if activated, false otherwise.
*/
public static function is_activated( string $slug ): bool {
if ( ! self::is_installed( $slug ) ) {
return false;
}
return is_plugin_active( self::get_plugin_path( $slug ) );
}
/**
* Install a plugin from the WordPress repository by slug.
*
* @param string $slug The slug of the plugin.
*
* @return bool True if installation succeeds, false otherwise.
*/
public static function install_plugin( string $slug ): bool {
if ( self::is_installed( $slug ) ) {
return true; // Already installed
}
include_once ABSPATH . 'wp-admin/includes/file.php';
include_once ABSPATH . 'wp-admin/includes/misc.php';
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
$skin = new \Automatic_Upgrader_Skin();
$upgrader = new \Plugin_Upgrader( $skin );
$download_link = null;
foreach ( self::extensions() as $extension ) {
if ( $extension['slug'] === $slug && ! empty( $extension['download_link'] ) ) {
$download_link = $extension['download_link'];
break;
}
}
if ( ! $download_link ) {
return false;
}
$result = $upgrader->install( $download_link );
return (bool) $result;
}
/**
* Activate a plugin by slug.
*
* @param string $slug The slug of the plugin.
*
* @return bool True if activated, false otherwise.
*/
public static function activate_plugin( string $slug ): bool {
if ( ! self::is_installed( $slug ) ) {
return false; // Plugin isn't installed
}
$plugin_path = self::get_plugin_path( $slug );
$result = activate_plugin( $plugin_path );
if ( is_wp_error( $result ) ) {
return $result;
}
return true;
}
/**
* Deactivate a plugin by slug.
*
* @param string $slug The slug of the plugin.
*
* @return bool True if deactivated, false otherwise.
*/
public static function deactivate_plugin( string $slug ) {
if ( ! self::is_activated( $slug ) ) {
return false; // Plugin isn't activated
}
$plugin_path = self::get_plugin_path( $slug );
deactivate_plugins( $plugin_path );
return true;
}
/**
* Get the plugin path by slug.
*
* @param string $slug The slug of the plugin.
*
* @return string The path to the plugin file.
*/
private static function get_plugin_path( string $slug ) {
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$plugins = get_plugins();
if ( is_array( $plugins ) ) {
foreach ( $plugins as $plugin_path => $plugin ) {
if ( strpos( $plugin_path, $slug . '/' ) === 0 ) {
return $plugin_path;
}
}
}
return false;
}
/**
* Check if the provided file is the main plugin file.
*
* @param string $file Path to the file.
*
* @return bool True if it is the main plugin file, false otherwise.
*/
private static function is_main_plugin_file( string $file ): bool {
$plugin_data = get_file_data( $file, array( 'Name' => 'Plugin Name' ) );
return ! empty( $plugin_data['Name'] );
}
/**
* Get the plugin name by slug.
*
* @param string $slug Plugin slug (e.g., 'woocommerce).
*
* @return string|null Returns the plugin name if found, or null if not found.
*/
public static function get_plugin_name_by_slug( string $slug ) {
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$all_plugins = get_plugins();
foreach ( $all_plugins as $plugin_file => $plugin_data ) {
if ( strpos( $plugin_file, $slug ) !== false ) {
return $plugin_data['Name'];
}
}
return null;
}
/**
* List of all extensions
*
* @return array
*/
public static function extensions(): array {
return array(
'booktics-stripe-addon' => array(
'name' => 'booktics-stripe-addon',
'slug' => 'booktics-stripe-addon',
'type' => 'addon',
'upgrade' => true,
'upgrade_link' => 'https://themewinter.com/purchase-history',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Booktics Stripe Addon', 'booktics' ),
'description' => __( 'It allows you to use stripe payment.', 'booktics' ),
'icon' => Extension_Icon::get( 'booktics-stripe-addon' ),
'notice' => '',
'demo_link' => 'https://support.themewinter.com/docs/plugins/plugin-docs/integration/booktics-stripe-addon',
'settings_link' => '',
'doc_link' => 'https://docs.arraytics.com/docs/booktics/payment-type/how-to-configure-the-stripe-in-booktics/',
'download_link' => 'https://products.arraytics.com/booktics-addons/booktics-stripe-addon-1.0.0.zip',
),
'booktics-google-calendar' => array(
'name' => 'booktics-google-calendar',
'slug' => 'booktics-google-calendar',
'type' => 'addon',
'upgrade' => true,
'upgrade_link' => 'https://themewinter.com/purchase-history',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Booktics Google Calendar', 'booktics' ),
'description' => __( 'It allows you to use google calendar.', 'booktics' ),
'icon' => Extension_Icon::get( 'booktics-google-calendar' ),
'notice' => '',
'demo_link' => 'https://support.themewinter.com/docs/plugins/plugin-docs/integration/booktics-google-calendar',
'settings_link' => '',
'doc_link' => 'https://docs.arraytics.com/docs/booktics/integration/how-to-integrate-google-calendar-with-booktics/',
'download_link' => 'https://products.arraytics.com/booktics-addons/booktics-google-calendar-1.0.0.zip',
),
'booktics-outlook-calendar' => array(
'name' => 'booktics-outlook-calendar',
'slug' => 'booktics-outlook-calendar',
'type' => 'addon',
'upgrade' => true,
'upgrade_link' => 'https://themewinter.com/purchase-history',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Booktics Outlook Calendar', 'booktics' ),
'description' => __( 'It allows you to use outlook calendar.', 'booktics' ),
'icon' => Extension_Icon::get( 'booktics-outlook-calendar' ),
'notice' => '',
'demo_link' => 'https://support.themewinter.com/docs/plugins/plugin-docs/integration/booktics-outlook-calendar-addon',
'settings_link' => '',
'doc_link' => 'https://docs.arraytics.com/docs/booktics/integration/how-to-integrate-outlook-calendar-with-booktics/',
'download_link' => 'https://products.arraytics.com/booktics-addons/booktics-outlook-calendar-addon-1.0.0.zip',
),
'booktics-fluentcrm-addon' => array(
'name' => 'booktics-fluentcrm-addon',
'slug' => 'booktics-fluentcrm-addon',
'type' => 'addon',
'upgrade' => true,
'upgrade_link' => 'https://themewinter.com/purchase-history',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Booktics FluentCRM Addon', 'booktics' ),
'description' => __( 'It allows you to use FluentCRM.', 'booktics' ),
'icon' => Extension_Icon::get( 'booktics-fluentcrm-addon' ),
'notice' => '',
'demo_link' => 'https://support.themewinter.com/docs/plugins/plugin-docs/integration/booktics-fluentcrm-addon',
'settings_link' => '',
'doc_link' => 'https://docs.arraytics.com/docs/booktics/',
'download_link' => 'https://products.arraytics.com/booktics-addons/booktics-fluentcrm-addon-1.0.0.zip',
),
'booktics-paypal-addon' => array(
'name' => 'booktics-paypal-addon',
'slug' => 'booktics-paypal-addon',
'type' => 'addon',
'upgrade' => true,
'upgrade_link' => 'https://themewinter.com/purchase-history',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Booktics PayPal Addon', 'booktics' ),
'description' => __( 'It allows you to use PayPal.', 'booktics' ),
'icon' => Extension_Icon::get( 'booktics-paypal-addon' ),
'notice' => '',
'demo_link' => 'https://support.themewinter.com/docs/plugins/plugin-docs/integration/booktics-paypal-addon',
'settings_link' => '',
'doc_link' => 'https://docs.arraytics.com/docs/booktics/payment-type/how-to-configure-the-paypal-in-booktics-pro/',
'download_link' => 'https://products.arraytics.com/booktics-addons/booktics-paypal-addon-1.0.0.zip',
),
'eventin' => array(
'name' => 'eventin',
'slug' => 'wp-event-solution',
'type' => 'plugin',
'upgrade' => false,
'upgrade_link' => '',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Eventin', 'booktics' ),
'description' => __( 'Best Free WordPress Event Calendar Plugin to manage booking, registration, RSVPs, schedule recurring events and sell event tickets with WooCommerce.', 'booktics' ),
'icon' => Extension_Icon::get( 'eventin' ),
'notice' => '',
'demo_link' => 'https://product.themewinter.com/eventin',
'settings_link' => '',
'doc_link' => 'https://support.themewinter.com/docs/plugins/docs/eventin/',
'download_link' => 'https://downloads.wordpress.org/plugin/wp-event-solution.latest-stable.zip',
),
'wp-cafe' => array(
'name' => 'wp-cafe',
'slug' => 'wp-cafe',
'type' => 'plugin',
'upgrade' => false,
'upgrade_link' => '',
'status' => 'off',
'is_pro' => false,
'title' => __( 'WPCafe', 'booktics' ),
'description' => __( 'WPCafe - A restaurant plugin to increase sales with an Online Ordering System, Delivery, Pickup, Food Menu, Reservations, and Table Management.', 'booktics' ),
'icon' => Extension_Icon::get( 'wpcafe' ),
'notice' => '',
'demo_link' => 'https://product.themewinter.com/wpcafe',
'settings_link' => '',
'doc_link' => 'https://support.themewinter.com/docs/plugins/docs/wp-cafe/',
'download_link' => 'https://downloads.wordpress.org/plugin/wp-cafe.latest-stable.zip',
),
'timetics' => array(
'name' => 'timetics',
'slug' => 'timetics',
'type' => 'plugin',
'upgrade' => false,
'upgrade_link' => '',
'status' => 'off',
'is_pro' => false,
'title' => __( 'WP Timetics', 'booktics' ),
'description' => __( 'Appointment Booking and Scheduling Calendar Plugin - WP Timetics', 'booktics' ),
'icon' => Extension_Icon::get( 'timetics' ),
'notice' => '',
'demo_link' => 'https://arraytics.com/timetics',
'settings_link' => '',
'doc_link' => 'https://docs.arraytics.com/docs/timetics/getting-started/',
'download_link' => 'https://downloads.wordpress.org/plugin/timetics.latest-stable.zip',
),
'aisentic' => array(
'name' => 'aisentic',
'slug' => 'aisentic',
'type' => 'plugin',
'upgrade' => false,
'upgrade_link' => '',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Aisentic', 'booktics' ),
'description' => __( 'Your AI assistant for Booktics. Manage bookings, analyze schedules, and automate routine tasks using plain English.', 'booktics' ),
'icon' => '',
'notice' => '',
'demo_link' => '',
'settings_link' => '',
'doc_link' => 'https://support.themewinter.com/docs/plugins/docs/aisentic/',
),
'optiontics' => array(
'name' => 'optiontics',
'slug' => 'optiontics',
'type' => 'plugin',
'upgrade' => false,
'upgrade_link' => '',
'status' => 'off',
'is_pro' => false,
'title' => __( 'Optiontics', 'booktics' ),
'description' => __( 'Offer paid add-ons and extra options with every booking — services, extras, packages, or custom upgrades.', 'booktics' ),
'icon' => '',
'notice' => '',
'demo_link' => '',
'settings_link' => '',
'doc_link' => 'https://support.themewinter.com/docs/plugins/plugin-docs/optiontics/how-to-create-product-options/',
'download_link' => 'https://github.com/themewinter/optiontics-public/releases/download/release/optiontics.zip',
),
);
}
}