cl01/wp-content/themes/hester/inc/customizer/ui/plugin-install-helper/class-hester-customizer-plugin-install-helper.php
2025-02-24 12:39:24 +08:00

185 lines
5.4 KiB
PHP
Executable File

<?php
/**
* Plugin install helper.
*
* @package Hester
* @since Hester 1.0.0
*/
/**
* Class Hester_Customizer_Plugin_Install_Helper
*/
class Hester_Customizer_Plugin_Install_Helper {
/**
* Instance of class.
*
* @var bool $instance instance variable.
*/
private static $instance;
/**
* Check if instance already exists.
*
* @return Hester_Customizer_Plugin_Install_Helper
*/
public static function instance() {
if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Customizer_Plugin_Install_Helper ) ) {
self::$instance = new Hester_Customizer_Plugin_Install_Helper();
}
return self::$instance;
}
/**
* Get plugin path based on plugin slug.
*
* @param string $slug Plugin slug.
*
* @return string
*/
public static function get_plugin_path( $slug ) {
switch ( $slug ) {
case 'mailin':
return $slug . '/sendinblue.php';
break;
case 'wpforms-lite':
return $slug . '/wpforms.php';
break;
case 'intergeo-maps':
case 'visualizer':
case 'translatepress-multilingual':
return $slug . '/index.php';
break;
case 'beaver-builder-lite-version':
return $slug . '/fl-builder.php';
break;
case 'adblock-notify-by-bweb':
return $slug . '/adblock-notify.php';
break;
default:
return $slug . '/' . $slug . '.php';
}
}
/**
* Generate action button html.
*
* @param string $slug plugin slug.
*
* @return string
*/
public function get_button_html( $slug, $settings = array() ) {
$button = '';
$redirect = '';
if ( ! empty( $settings ) && array_key_exists( 'redirect', $settings ) ) {
$redirect = $settings['redirect'];
}
$state = $this->check_plugin_state( $slug );
if ( empty( $slug ) ) {
return '';
}
$plugin_name = '';
if ( ! empty( $settings ) && array_key_exists( 'plugin_name', $settings ) ) {
$plugin_name = $settings['plugin_name'];
}
$additional = '';
if ( $state === 'deactivate' ) {
$additional = ' action_button active';
}
$button .= '<div class=" plugin-card-' . esc_attr( $slug ) . esc_attr( $additional ) . '" style="padding: 8px 0 5px;">';
$plugin_link_suffix = self::get_plugin_path( $slug );
$nonce = add_query_arg(
array(
'action' => 'activate',
'plugin' => rawurlencode( $plugin_link_suffix ),
'plugin_status' => 'all',
'paged' => '1',
'_wpnonce' => wp_create_nonce( 'activate-plugin_' . $plugin_link_suffix ),
),
network_admin_url( 'plugins.php' )
);
switch ( $state ) {
case 'install':
$button .= '<a data-redirect="' . esc_url( $redirect ) . '" data-slug="' . esc_attr( $slug ) . '" class="install-now hester-install-plugin button " href="' . esc_url( $nonce ) . '" data-name="' . esc_attr( $slug ) . '" aria-label="Install ' . esc_attr( $slug ) . '">' . __( 'Install and activate', 'hester' ) . ' ' . esc_html( $plugin_name ) . '</a>';
break;
case 'activate':
$button .= '<a data-redirect="' . esc_url( $redirect ) . '" data-slug="' . esc_attr( $slug ) . '" class="activate-now button button-primary" href="' . esc_url( $nonce ) . '" aria-label="Activate ' . esc_attr( $slug ) . '">' . esc_html__( 'Activate', 'hester' ) . ' ' . esc_html( $plugin_name ) . '</a>';
break;
case 'deactivate':
$nonce = add_query_arg(
array(
'action' => 'deactivate',
'plugin' => rawurlencode( $plugin_link_suffix ),
'plugin_status' => 'all',
'paged' => '1',
'_wpnonce' => wp_create_nonce( 'deactivate-plugin_' . $plugin_link_suffix ),
),
network_admin_url( 'plugins.php' )
);
$button .= '<a data-redirect="' . esc_url( $redirect ) . '" data-slug="' . esc_attr( $slug ) . '" class="deactivate-now button" href="' . esc_url( $nonce ) . '" data-name="' . esc_attr( $slug ) . '" aria-label="Deactivate ' . esc_attr( $slug ) . '">' . esc_html__( 'Deactivate', 'hester' ) . ' ' . esc_html( $plugin_name ) . '</a>';
break;
case 'enable_cpt':
$url = admin_url( 'admin.php?page=jetpack#/settings' );
$button .= '<a data-redirect="' . esc_url( $redirect ) . '" class="button" href="' . esc_url( $url ) . '">' . esc_html__( 'Activate', 'hester' ) . ' ' . esc_html__( 'Jetpack Portfolio', 'hester' ) . '</a>';
break;
}// End switch().
$button .= '</div>';
return $button;
}
/**
* Check plugin state.
*
* @param string $slug plugin slug.
*
* @return bool
*/
public function check_plugin_state( $slug ) {
$plugin_link_suffix = self::get_plugin_path( $slug );
if ( is_file( ABSPATH . 'wp-content/plugins/' . $plugin_link_suffix ) ) {
$needs = is_plugin_active( $plugin_link_suffix ) ? 'deactivate' : 'activate';
if ( $needs === 'deactivate' && ! post_type_exists( 'portfolio' ) && $slug === 'jetpack' ) {
return 'enable_cpt';
}
return $needs;
} else {
return 'install';
}
}
/**
* Enqueue Function.
*/
public function enqueue_scripts() {
wp_enqueue_script( 'plugin-install' );
wp_enqueue_script( 'updates' );
wp_enqueue_script( 'hester-plugin-install-helper', get_template_directory_uri() . '/inc/customizer/ui/plugin-install-helper/helper-script.js', array( 'jquery' ), HESTER_THEME_VERSION, true );
wp_localize_script(
'hester-plugin-install-helper',
'hester_plugin_helper',
array(
'activating' => esc_html__( 'Activating ', 'hester' ),
)
);
wp_localize_script(
'hester-plugin-install-helper',
'pagenow',
array( 'import' )
);
}
}