PUM_Extension_Activator
Popup Maker Extension Activation Handler Class
Description Description
Source Source
File: classes/Extension/Activator.php
class PUM_Extension_Activator { public $extension_class_name; /** * @var string */ public $extension_name; /** * @var string */ public $extension_slug; /** * @var int */ public $extension_id; /** * @var string */ public $extension_version; /** * @var bool|string */ public $extension_wp_repo = false; /** * @var string */ public $extension_file; public $required_core_version; /** * @var bool */ public $core_installed = false; public $core_path; /** * @param $class_name * @param $prop_name * * @return null|mixed */ public function get_static_prop( $class_name, $prop_name ) { if ( version_compare( PHP_VERSION, '5.3', '<' ) ) { try { $class = new ReflectionClass( $class_name ); return $class->getStaticPropertyValue( $prop_name ); } catch ( ReflectionException $e ) { return null; } } return property_exists( $class_name, $prop_name ) ? $class_name::$$prop_name : null; } /** * Setup the activator class * * @param $class_name */ public function __construct( $class_name ) { // We need plugin.php! require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); // Validate extension class is valid. if ( in_array( false, array( class_exists( $class_name ), property_exists( $class_name, 'NAME' ), property_exists( $class_name, 'REQUIRED_CORE_VER' ), method_exists( $class_name, 'instance' ), ) ) ) { return; } $this->extension_class_name = $class_name; $this->extension_id = $this->get_static_prop( $class_name, 'ID' ); $this->extension_wp_repo = $this->get_static_prop( $class_name, 'WP_REPO' ); $this->extension_name = $this->get_static_prop( $class_name, 'NAME' ); $this->extension_version = $this->get_static_prop( $class_name, 'VER' ); $this->required_core_version = $this->get_static_prop( $class_name, 'REQUIRED_CORE_VER' ); $popup_maker_data = get_plugin_data( WP_PLUGIN_DIR . '/popup-maker/popup-maker.php', false, false ); if ( $popup_maker_data['Name'] == 'Popup Maker' ) { $this->core_installed = true; $this->core_path = 'popup-maker/popup-maker.php'; } } /** * @return string */ public function get_status() { if ( $this->core_installed && ! class_exists( 'Popup_Maker' ) ) { return 'not_activated'; } elseif ( $this->core_installed && isset( $this->required_core_version ) && version_compare( Popup_Maker::$VER, $this->required_core_version, '<' ) ) { return 'not_updated'; } elseif ( ! $this->core_installed ) { return 'not_installed'; } return 'active'; } /** * Process plugin deactivation * * @access public */ public function run() { if ( $this->get_status() != 'active' ) { // Display notice add_action( 'admin_notices', array( $this, 'missing_popmake_notice' ) ); } else { $class_name = $this->extension_class_name; // Generate an instance of the extension class in a PHP 5.2 compatible way. call_user_func( array( $class_name, 'instance' ) ); $this->extension_file = $this->get_static_prop( $class_name, 'FILE' ); $plugin_slug = explode( '/', plugin_basename( $this->extension_file ), 2 ); $this->extension_slug = str_replace( array( 'popup-maker-', 'pum-' ), '', $plugin_slug[0] ); // Handle licensing for extensions with valid ID & not wp repo extensions. if ( $this->extension_id > 0 && ! $this->extension_wp_repo && class_exists( 'PUM_Extension_License' ) ) { new PUM_Extension_License( $this->extension_file, $this->extension_name, $this->extension_version, 'Popup Maker', null, null, $this->extension_id ); } add_filter( 'pum_enabled_extensions', array( $this, 'enabled_extensions' ) ); } } /** * Display notice if Popup Maker isn't installed */ public function missing_popmake_notice() { switch ( $this->get_status() ) { case 'not_activated': $url = esc_url( wp_nonce_url( admin_url( 'plugins.php?action=activate&plugin=' . $this->core_path ), 'activate-plugin_' . $this->core_path ) ); $link = '<a href="' . $url . '">' . __( 'activate it' ) . '</a>'; echo '<div class="error"><p>' . sprintf( __( 'The plugin "%s" requires %s! Please %s to continue!' ), $this->extension_name, '<strong>' . __( 'Popup Maker' ) . '</strong>', $link ) . '</p></div>'; break; case 'not_updated': $url = esc_url( wp_nonce_url( admin_url( 'update.php?action=upgrade-plugin&plugin=' . $this->core_path ), 'upgrade-plugin_' . $this->core_path ) ); $link = '<a href="' . $url . '">' . __( 'update it' ) . '</a>'; echo '<div class="error"><p>' . sprintf( __( 'The plugin "%s" requires %s v%s or higher! Please %s to continue!' ), $this->extension_name, '<strong>' . __( 'Popup Maker' ) . '</strong>', '<strong>' . $this->required_core_version . '</strong>', $link ) . '</p></div>'; break; case 'not_installed': $url = esc_url( wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=popup-maker' ), 'install-plugin_popup-maker' ) ); $link = '<a href="' . $url . '">' . __( 'install it' ) . '</a>'; echo '<div class="error"><p>' . sprintf( __( 'The plugin "%s" requires %s! Please %s to continue!' ), $this->extension_name, '<strong>' . __( 'Popup Maker' ) . '</strong>', $link ) . '</p></div>'; break; case 'active': default: return; } } /** * @param array $enabled_extensions * * @return array */ public function enabled_extensions( $enabled_extensions = array() ) { $enabled_extensions[ $this->extension_slug ] = $this->extension_class_name; return $enabled_extensions; } }
Expand full source code Collapse full source code View on Trac
Methods Methods
- __construct — Setup the activator class
- enabled_extensions
- get_static_prop
- get_status
- missing_popmake_notice — Display notice if Popup Maker isn't installed
- run — Process plugin deactivation