activate_plugin( $plugin['slug'] ); } return $status; } /** * Activate individual plugin. * * @param array, $plugin Plugin to be activated. * @return void|WP_Error * @since 1.0.0 */ public function activate_plugin( $plugin ) { // Check permissions. if ( ! current_user_can( 'activate_plugins' ) ) { return new WP_Error( 'plugin_activation_failed', esc_html__( 'Current user can\'t activate plugins', 'bloghash' ) ); } // Validate plugin data. if ( empty( $plugin ) ) { return new WP_Error( 'plugin_activation_failed', esc_html__( 'Missing plugin data.', 'bloghash' ) ); } if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; // phpcs:ignore } $plugin_data = get_plugins( '/' . $plugin ); if ( empty( $plugin_data ) ) { return new WP_Error( 'plugin_activation_failed', sprintf( // translators: %s is plugin name. esc_html__( 'Plugin %s is not installed.', 'bloghash' ), $plugin ) ); } $plugin_file_array = array_keys( $plugin_data ); $plugin_file = $plugin_file_array[0]; $plugin_to_activate = $plugin . '/' . $plugin_file; $activate = activate_plugin( $plugin_to_activate ); if ( is_wp_error( $activate ) ) { return $activate; } do_action( 'bloghash_plugin_activated_' . $plugin ); } /** * Deactivate individual plugin * * @param array, $plugin Plugin to be deactivated. * @return void|WP_Error * @since 1.0.0 */ public function deactivate_plugin( $plugin ) { // Check permissions. if ( ! current_user_can( 'activate_plugins' ) ) { return new WP_Error( 'plugin_activation_failed', esc_html__( 'Current user can\'t activate plugins', 'bloghash' ) ); } // Validate plugin data. if ( empty( $plugin ) ) { return new WP_Error( 'plugin_activation_failed', esc_html__( 'Missing plugin data.', 'bloghash' ) ); } if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; // phpcs:ignore } $plugin_data = get_plugins( '/' . $plugin ); if ( empty( $plugin_data ) ) { return new WP_Error( 'plugin_deactivation_failed', sprintf( // translators: %s is plugin name. esc_html__( 'Plugin %s is not active.', 'bloghash' ), $plugin ) ); } $plugin_file_array = array_keys( $plugin_data ); $plugin_file = $plugin_file_array[0]; $plugin_to_deactivate = $plugin . '/' . $plugin_file; deactivate_plugins( $plugin_to_deactivate ); do_action( 'bloghash_plugin_deactivated_' . $plugin ); } /** * Check if plugin has a pending update. * * @param array, $plugin Plugin to be activated. * @param boolean, $strict Force plugin to update. Optional. Default is false. * @since 1.0.0 */ public function has_update( $plugin, $strict = false ) { $installed_plugin = $this->is_installed( $plugin['slug'] ); if ( is_array( $installed_plugin ) && ! empty( $installed_plugin ) ) { $plugin_name = array_keys( $installed_plugin ); $plugin_name = $plugin_name[0]; $plugin_version = $installed_plugin ? $installed_plugin[ $plugin_name ]['Version'] : null; if ( $plugin_name && ! empty( $plugin_version ) ) { if ( isset( $plugin['version'] ) ) { return version_compare( $plugin_version, $plugin['version'], '<' ); } elseif ( $strict ) { return true; } } } return false; } /** * Check if plugin is installed. * * @param array, $plugin Check if plugin is installed. * @since 1.0.0 */ public function is_installed( $plugin ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; // phpcs:ignore } $installed = get_plugins( '/' . $plugin ); if ( ! empty( $installed ) ) { return true; } return false; } /** * Check if plugin is activated. * * @param array, $plugin Check if plugin is activated. * @since 1.0.0 * @return bool Whether the plugin is activated. */ public function is_activated( $plugin ) { // Prevent a suppressed error within `get_plugins()` when the plugin is not installed. if ( ! file_exists( WP_PLUGIN_DIR . '/' . $plugin ) ) { return false; } if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; // phpcs:ignore } $installed_plugin = get_plugins( '/' . $plugin ); if ( $installed_plugin ) { $plugin_name = array_keys( $installed_plugin ); return is_plugin_active( $plugin . '/' . $plugin_name[0] ); } return false; } /** * Recommended plugins. * * @return array * @since 1.0.0 */ public function get_recommended_plugins() { $plugins = array( 'hester-core' => array( 'name' => 'Hester Core', 'slug' => 'hester-core', 'desc' => 'The Hester Core plugin adds extra functionality to BlogHash theme, such as Demo Library, widgets, custom blocks and more.', 'thumb' => 'https://ps.w.org/hester-core/assets/icon-256x256.png' ) ); return apply_filters( 'bloghash_recommended_plugins', $plugins ); } /** * Get non activated plugins from an array. * * @param array, $plugins Filter non active plugins. * @since 1.0.0 */ public function get_deactivated_plugins( $plugins ) { if ( is_array( $plugins ) && ! empty( $plugins ) ) { foreach ( $plugins as $slug => $plugin ) { if ( $this->is_activated( $slug ) ) { unset( $plugins[ $slug ] ); } } } return $plugins; } /** * Get plugin object based on slug. * * @since 1.0.0 * @param string $slug Plugin slug. * @param array $plugins Array of available plugins. */ public function get_plugin_by_slug( $slug, $plugins ) { if ( ! empty( $plugins ) ) { foreach ( $plugins as $plugin ) { if ( $plugin['slug'] === $slug ) { return $plugin; } } } return false; } } /** * The function which returns the one Sintra_Plugin_Utilities instance. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 1.0.0 * @return object */ function bloghash_plugin_utilities() { return Bloghash_Plugin_Utilities::instance(); }