wp-plugins/all-in-one-seo-pack

View on GitHub
aioseop_module_manager.php

Summary

Maintainability
D
2 days
Test Coverage
<?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 );
        }
    }
}