Current File : /home/kelaby89/muzza.fit/wp-content/plugins/mp-timetable/classes/class-offer.php |
<?php
namespace mp_timetable\plugin_core\classes;
class Plugins_Offer {
public function __construct() { }
public static function activatePluginAjax() {
check_ajax_referer( 'mptt-install-plugins', 'nonce' );
$error = esc_html__( 'Could not activate the plugin.', 'mp-timetable' );
if ( ! current_user_can( 'activate_plugins' ) ) {
wp_send_json_error( $error );
}
if ( isset( $_POST[ 'plugin' ] ) ) {
$plugin = sanitize_text_field( wp_unslash( $_POST['plugin'] ) );
$activate = activate_plugins( $plugin );
if ( ! is_wp_error( $activate ) ) {
wp_send_json_success(
[
'is_activated' => true
]
);
}
}
wp_send_json_error( $error );
}
public static function installPluginAjax() {
check_ajax_referer( 'mptt-install-plugins', 'nonce' );
$plugin = sanitize_text_field( wp_unslash( $_POST['plugin'] ) );
$slug = strtok( $plugin, '/' );
if ( empty( $_POST[ 'plugin' ] ) ) {
wp_send_json_error( esc_html__( 'Could not install the plugin.', 'mp-timetable' ) );
}
if ( ! current_user_can( 'install_plugins' ) ) {
wp_send_json_error( esc_html__( 'Sorry, you are not allowed to install plugins on this site.', 'mp-timetable' ) );
}
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
$api = plugins_api(
'plugin_information',
array(
'slug' => sanitize_key( $slug ),
'fields' => array(
'sections' => false,
),
)
);
if ( is_wp_error( $api ) ) {
wp_send_json_error( $api->get_error_message() );
}
$skin = new \WP_Ajax_Upgrader_Skin();
$upgrader = new \Plugin_Upgrader( $skin );
$result = $upgrader->install( $api->download_link );
wp_cache_flush();
if ( is_wp_error( $result ) ) {
wp_send_json_error( $result->get_error_message() );
} elseif ( is_wp_error( $skin->result ) ) {
wp_send_json_error( $skin->result->get_error_message() );
} elseif ( $skin->get_errors()->has_errors() ) {
wp_send_json_error( $skin->get_error_messages() );
} elseif ( is_null( $result ) ) {
global $wp_filesystem;
$error = esc_html__( 'Unable to connect to the filesystem. Please confirm your credentials.' );
if ( $wp_filesystem instanceof \WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) {
$error = esc_html__( $wp_filesystem->errors->get_error_message() );
}
wp_send_json_error( $error );
}
$install_status = install_plugin_install_status( $api );
if ( is_plugin_inactive( $install_status[ 'file' ] ) ) {
wp_send_json_success(
[
'is_activated' => false
]
);
}
wp_send_json_error( esc_html__( 'Could not install the plugin.', 'mp-timetable' ) );
}
private function getPluginLists() {
$plugins = array(
'motopress-appointment' => array(
'slug' => 'motopress-appointment-lite',
'name' => 'Hourly Appointment Booking',
'path' => 'motopress-appointment-lite/motopress-appointment.php',
'icon' => 'https://ps.w.org/motopress-appointment-lite/assets/icon.svg',
'description' => 'Take automatic online appointment reservations through your website for events, classes, and any other type of services.'
),
'getwid' => array(
'slug' => 'getwid',
'name' => 'Getwid: 40+ Free Gutenberg Blocks',
'path' => 'getwid/getwid.php',
'icon' => 'https://ps.w.org/getwid/assets/icon.svg',
'description' => 'Getwid is a collection of 40+ Gutenberg blocks that greatly extends the library of existing core WordPress blocks and 35+ unique pre-made block templates for the Block Editor.'
),
'stratum' => array(
'slug' => 'stratum',
'name' => 'Stratum: 20+ Free Elementor Widgets',
'path' => 'stratum/stratum.php',
'icon' => 'https://ps.w.org/stratum/assets/icon.svg',
'description' => 'Stratum is a free collection of 20+ Elementor addons with the aim of enhancing the existing widget functionality of your favorite page builder.'
),
'hotel-booking' => array(
'slug' => 'motopress-hotel-booking-lite',
'name' => 'Hotel Booking: WordPress Booking Plugin',
'path' => 'motopress-hotel-booking-lite/motopress-hotel-booking.php',
'icon' => 'https://ps.w.org/motopress-hotel-booking-lite/assets/icon-128x128.png',
'description' => 'Hotel Booking plugin by MotoPress is the ultimate WordPress property rental system with a real lodging business in mind.'
)
);
return $plugins;
}
private function getPluginInstallationLink( $slug ) {
$action = 'install-plugin';
return wp_nonce_url(
add_query_arg(
array(
'action' => $action,
'plugin' => $slug
),
admin_url( 'update.php' )
),
$action.'_'.$slug
);
}
// check status
private function getPluginData( $plugin ) {
if ( array_key_exists( $plugin['path'], get_plugins() ) ) {
if ( is_plugin_active( $plugin['path'] ) ) {
$plugin['status_text'] = esc_html__( 'Active', 'mp-timetable' );
$plugin['status_class'] = 'active';
$plugin['action_class'] = 'button button-secondary disabled';
$plugin['action_text'] = esc_html__( 'Activated', 'mp-timetable' );
} else {
$plugin['status_text'] = esc_html__( 'Inactive', 'mp-timetable' );
$plugin['status_class'] = 'inactive';
$plugin['action_class'] = 'button button-secondary';
$plugin['action_text'] = esc_html__( 'Activate', 'mp-timetable' );
}
} else {
$plugin['status_text'] = esc_html__( 'Not Installed', 'mp-timetable' );
$plugin['status_class'] = 'not-installed';
$plugin['action_class'] = 'button button-primary';
$plugin['action_text'] = esc_html__( 'Install Plugin', 'mp-timetable' );
}
return $plugin;
}
public function render() {
?>
<div class="motopress-offer-secondary">
<h2>More free plugins for you</h2>
<?php
foreach ( $this->getPluginLists() as $key => $plugin ) :
$plugin = $this->getPluginData( $plugin );
?>
<div class="plugin-container">
<div class="plugin-item">
<div class="details">
<img src="<?php echo esc_url( $plugin['icon'] ); ?>">
<h5 class="plugin-name"><?php echo esc_html( $plugin['name'] ); ?></h5>
<p class="plugin-description"><?php echo esc_html( $plugin['description'] ); ?></p>
</div>
<div class="actions">
<div class="status">
<strong>Status: <span class="status-label <?php echo esc_attr( $plugin['status_class'] ); ?>">
<?php echo esc_html( $plugin['status_text'] ); ?></span></strong>
</div>
<div class="action-button">
<button data-path="<?php echo esc_attr( $plugin[ 'path' ] ); ?>" class="<?php echo esc_attr( $plugin['action_class'] ); ?>">
<?php echo esc_html( $plugin['action_text'] ); ?>
</button>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<?php
}
}