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;
protected $server_constant = false;
protected $sm_mode_required = '';
protected $sm_mode_not_supported = [];
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;
}
$parent_theme = $theme->parent();
if (is_a($parent_theme, 'WP_Theme') && $parent_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;
}
/**
* If server constant is set - check if exist it on global $_SERVER
*/
if (!empty( $this->server_constant )) {
if ( isset($_SERVER[ $this->server_constant ]) ) {
return true;
}
return false;
}
return true;
}
/**
* Checking whether current mode is supported.
* By default return true.
*
* @todo caching.
*/
public function is_mode_supported () {
$sm_mode = isset($_POST['sm']['mode']) ? $_POST['sm']['mode'] : ud_get_stateless_media()->get( 'sm.mode' );
if ( in_array( $sm_mode, $this->sm_mode_not_supported ) ) {
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;
$sm_mode = isset($_POST['sm']['mode']) ? $_POST['sm']['mode'] : ud_get_stateless_media()->get( 'sm.mode' );
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->is_mode_supported() )) {
$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),
'is_mode_supported' => $this->is_mode_supported(),
'mode' => ucfirst( $sm_mode )
));
if ($this->enabled && $this->is_plugin_active() && $this->is_mode_supported()) {
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');
}
/**
* Check requires WP-Stateless mode
*/
if ( !empty( $this->sm_mode_required ) && $this->enabled !== 'inactive' ) {
if ( $sm_mode !== $this->sm_mode_required ) {
ud_get_stateless_media()->errors->add( array(
'key' => $this->id,
'title' => sprintf( __( "%s: Current Mode is not compatible with %s.", ud_get_stateless_media()->domain ), ud_get_stateless_media()->name, $this->title ),
'message' => sprintf( __( "%s compatibility requires %s in %s mode.", ud_get_stateless_media()->domain ), $this->title, ud_get_stateless_media()->name, ucfirst( $this->sm_mode_required ) ),
), 'notice' );
}
}
}
/**
* @return bool
*/
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;
}
/**
* add_webp_mime
* @param $t
* @param $user
* @return mixed
*/
public function add_webp_mime($t, $user) {
$t['webp'] = 'image/webp';
return $t;
}
}
}