New Constant, ...] * ['WP_STATELESS_MEDIA_ON_FLY' => 'WP_STATELESS_DYNAMIC_IMAGE_SUPPORT'] */ protected $constant = ''; protected $enabled = false; protected $description = ''; protected $plugin_file = null; protected $theme_name = null; protected $first_party = false; protected $non_library_sync = false; public function __construct(){ $this->init(); } /** * Checking whether the plugin is active or not. * If the plugin_file is specified then check whether plugin is active or not. * We can't use is_plugin_active function because it's defined later in init. * By default return true. * * @todo caching. */ public function is_plugin_active(){ if(!empty($this->theme_name)){ $theme = wp_get_theme(); if($theme->Name == $this->theme_name){ return true; } return false; } if(!empty($this->plugin_file)){ // Converting string to array for foreach if(is_string($this->plugin_file)){ $this->plugin_file = array($this->plugin_file); } // If multisite then check if plugin is network active if(is_multisite()){ $active_plugins = (array) get_site_option( 'active_sitewide_plugins'); foreach($this->plugin_file as $plugin_file){ if(isset($active_plugins[$plugin_file])){ return true; } } // If we are in network admin then return, unless it will get data from main site. if(is_network_admin()){ return false; } } $active_plugins = (array) get_option( 'active_plugins', array() ); foreach($this->plugin_file as $plugin_file){ if(in_array( $plugin_file, $active_plugins)){ return true; } } return false; } return true; } /** * Initialize the module * Check whether plugin is active or not. * Register module. * * Add action for sm::module::init hook for module_init, which is fired(do_action) on Bootstrap::init() */ public function init(){ $is_constant = false; $is_network_override = false; if(is_network_admin()){ $this->enabled = null; } if(is_array($this->constant)){ foreach($this->constant as $old_const => $new_const){ if(defined($new_const)){ $is_constant = true; $this->enabled = constant($new_const); break; } if(is_string($old_const) && defined($old_const)){ $is_constant = true; $this->enabled = constant($old_const); ud_get_stateless_media()->errors->add( array( 'key' => $this->id, 'title' => sprintf( __( "%s: Deprecated Notice (%s)", ud_get_stateless_media()->domain ), ud_get_stateless_media()->name, $this->title ), 'message' => sprintf(__("%s constant is deprecated, please use %s instead.", ud_get_stateless_media()->domain), $old_const, $new_const), ), 'notice' ); break; } } } elseif (defined($this->constant)) { $this->enabled = constant($this->constant); $is_constant = true; } if(!$is_constant) { $modules = get_option('stateless-modules', array()); if (empty($this->enabled)) { $this->enabled = !empty($modules[$this->id]) && $modules[$this->id] == 'true' ? true : false; } if(is_multisite()){ $modules = get_site_option( 'stateless-modules', array() ); if(is_network_admin()){ $this->enabled = !empty($modules[$this->id]) && $modules[$this->id] == 'true' ? true : false; } elseif(!empty($modules[$this->id])){ $this->enabled = !empty($modules[$this->id]) && $modules[$this->id] == 'true' ? true : false; $is_network_override = true; } } } if(!is_network_admin() && !$this->is_plugin_active()){ $this->enabled = 'inactive'; } /** * Checking whether to show manual sync option. */ if($this->is_plugin_active() && $this->non_library_sync == true){ global $show_non_library_sync; $show_non_library_sync = true; } Module::register_module(array( 'id' => $this->id, 'self' => $this, 'title' => $this->title, 'enabled' => $this->enabled, 'description' => $this->description, 'is_constant' => $is_constant, 'is_network_override' => $is_network_override, 'is_plugin_active' => $this->is_plugin_active(), 'is_network_admin' => is_network_admin(), 'is_plugin' => !empty($this->plugin_file), 'is_theme' => !empty($this->theme_name), )); if ($this->enabled && $this->is_plugin_active()) { add_action('sm::module::init', array($this, 'module_init')); } if (!$this->enabled && !$this->first_party && $this->is_plugin_active()) { ud_get_stateless_media()->errors->add( array( 'key' => $this->id, 'title' => sprintf( __( "%s: Compatibility for %s isn't enabled.", ud_get_stateless_media()->domain ), ud_get_stateless_media()->name, $this->title ), 'button' => __("Enable Compatibility", ud_get_stateless_media()->domain ), 'message' => __("Please enable the compatibility to ensure the functionality will work properly between {$this->title} and WP-Stateless.", ud_get_stateless_media()->domain ), ), 'notice' ); } } public function enable_compatibility(){ if(is_network_admin()){ $modules = get_site_option( 'stateless-modules', array() ); if(empty($modules[$this->id]) || $modules[$this->id] != 'true'){ $modules[$this->id] = 'true'; update_site_option('stateless-modules', $modules, true); } } else{ $modules = get_option('stateless-modules', array()); if(empty($modules[$this->id]) || $modules[$this->id] != 'true'){ $modules[$this->id] = 'true'; update_option('stateless-modules', $modules, true); } } return true; } } }