aioseop_module_manager.php
<?php
/**
* @package All-in-One-SEO-Pack
*/
/**
* The Module Manager.
*/
if ( !class_exists( 'All_in_One_SEO_Pack_Module_Manager' ) ) {
class All_in_One_SEO_Pack_Module_Manager {
protected $modules = Array();
protected $settings_update = false;
protected $settings_reset = false;
protected $settings_reset_all = false;
protected $module_settings_update = false;
// initialize module list
function __construct( $mod ) {
$this->modules['feature_manager'] = null;
foreach ( $mod as $m ) $this->modules[$m] = null;
$reset = false;
$reset_all = ( isset( $_POST['Submit_All_Default'] ) && $_POST['Submit_All_Default']!='' );
$reset = ( ( isset( $_POST['Submit_Default'] ) && $_POST['Submit_Default']!='' ) || $reset_all );
$update = ( isset($_POST['action']) && $_POST['action']
&& ( ( isset( $_POST['Submit'] ) && $_POST['Submit']!='' ) || $reset )
);
if ( $update ) {
if ( $reset ) $this->settings_reset = true;
if ( $reset_all ) $this->settings_reset_all = true;
if ( $_POST['action'] == 'aiosp_update' ) $this->settings_update = true;
if ( $_POST['action'] == 'aiosp_update_module' ) $this->module_settings_update = true;
}
$this->do_load_module( 'feature_manager', $mod );
}
function return_module( $class ) {
global $aiosp;
if ( $class == get_class( $aiosp ) ) return $aiosp;
if ( $class == get_class( $this ) ) return $this;
foreach( $this->modules as $m )
if ( is_object( $m ) && ( $class == get_class( $m ) ) )
return $m;
return false;
}
function get_loaded_module_list() {
$module_list = Array();
if ( !empty( $this->modules ) ) {
foreach( $this->modules as $k => $v )
if ( !empty( $v ) )
$module_list[$k] = get_class( $v );
}
return $module_list;
}
// Module name is used for these automatic settings:
// The aiosp_enable_$module settings - whether each plugin is active or not
// The name of the .php file containing the module - aioseop_$module.php
// The name of the class - All_in_One_SEO_Pack_$Module
// The global $aioseop_$module
// $this->modules[$module]
function do_load_module( $mod, $args = null ) {
$mod_path = apply_filters( "aioseop_include_$mod", AIOSEOP_PLUGIN_DIR . "aioseop_$mod.php" );
if ( !empty( $mod_path ) )
require_once( $mod_path );
$ref = "aioseop_$mod";
$classname = "All_in_One_SEO_Pack_" . strtr( ucwords( strtr( $mod, '_', ' ' ) ), ' ', '_' );
$classname = apply_filters( "aioseop_class_$mod", $classname );
$module_class = new $classname( $args );
$GLOBALS[$ref] = $module_class;
$this->modules[$mod] = $module_class;
if ( is_user_logged_in() && function_exists( 'is_admin_bar_showing' ) && is_admin_bar_showing() && current_user_can( 'manage_options' ) )
add_action( 'admin_bar_menu', array( $module_class, 'add_admin_bar_submenu' ), 1001 + $module_class->menu_order() );
if ( is_admin() ) {
add_action( 'aioseop_modules_add_menus', Array( $module_class, 'add_menu' ), $module_class->menu_order() );
add_action( 'aiosoep_options_reset', Array( $module_class, 'reset_options' ) );
add_filter( 'aioseop_export_settings', Array( $module_class, 'settings_export' ) );
}
return true;
}
function load_module( $mod ) {
static $feature_options = null;
static $feature_prefix = null;
if ( !is_array( $this->modules ) ) return false;
$v = $this->modules[ $mod ];
if ( $v !== null ) return false; // already loaded
if ( $mod == 'performance' && !is_super_admin() ) return false;
if ( ( $mod == 'file_editor' || $mod == 'robots' )
&& ( ( ( defined( 'DISALLOW_FILE_EDIT' ) && DISALLOW_FILE_EDIT )
|| ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS )
|| !is_super_admin() ) ) )
return false;
$mod_enable = false;
$fm_page = ( $this->module_settings_update && wp_verify_nonce( $_POST['nonce-aioseop'], 'aioseop-nonce' ) &&
isset($_REQUEST['page']) && $_REQUEST['page'] == trailingslashit( AIOSEOP_PLUGIN_DIRNAME ) . 'aioseop_feature_manager.php' );
if ( $fm_page && !$this->settings_reset ) {
if ( isset( $_POST["aiosp_feature_manager_enable_$mod"] ) )
$mod_enable = $_POST["aiosp_feature_manager_enable_$mod"];
else
$mod_enable = false;
} else {
if ( $feature_prefix == null )
$feature_prefix = $this->modules['feature_manager']->get_prefix();
if ( $fm_page && $this->settings_reset )
$feature_options = $this->modules['feature_manager']->default_options();
if ( $feature_options == null ) {
if ( $this->module_settings_update && wp_verify_nonce( $_POST['nonce-aioseop'], 'aioseop-nonce' ) && $this->settings_reset_all )
$feature_options = $this->modules['feature_manager']->default_options();
else
$feature_options = $this->modules['feature_manager']->get_current_options();
}
if ( isset( $feature_options["{$feature_prefix}enable_$mod"] ) )
$mod_enable = $feature_options["{$feature_prefix}enable_$mod"];
}
if ( $mod_enable ) return $this->do_load_module( $mod );
return false;
}
function load_modules() {
if ( is_array( $this->modules ) )
foreach( $this->modules as $k => $v )
$this->load_module( $k );
}
}
}