Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
03/10/2016 07:45:07 PM (10 years ago)
Author:
boonebgorges
Message:

Autoload BuddyPress classes.

Backward compatibility with SPL-disabled installations is included.

See #6853.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-loader.php

    r10628 r10652  
    102102    public $active_components = array();
    103103
     104    /**
     105     * Whether autoload is in use.
     106     *
     107     * @since 2.5.0
     108     * @var bool
     109     */
     110    public $do_autoload = false;
     111
    104112    /** Option Overload *******************************************************/
    105113
     
    458466     */
    459467    private function includes() {
     468        if ( function_exists( 'spl_autoload_register' ) ) {
     469            spl_autoload_register( array( $this, 'autoload' ) );
     470            $this->do_autoload = true;
     471        }
    460472
    461473        // Load the WP abstraction file so BuddyPress can run on all WordPress setups.
     
    479491        require( $this->plugin_dir . 'bp-core/bp-core-update.php'           );
    480492        require( $this->plugin_dir . 'bp-core/bp-core-options.php'          );
    481         require( $this->plugin_dir . 'bp-core/bp-core-classes.php'          );
    482493        require( $this->plugin_dir . 'bp-core/bp-core-taxonomy.php'         );
    483494        require( $this->plugin_dir . 'bp-core/bp-core-filters.php'          );
     
    489500        require( $this->plugin_dir . 'bp-core/bp-core-buddybar.php'         );
    490501        require( $this->plugin_dir . 'bp-core/bp-core-catchuri.php'         );
    491         require( $this->plugin_dir . 'bp-core/bp-core-component.php'        );
    492502        require( $this->plugin_dir . 'bp-core/bp-core-functions.php'        );
    493503        require( $this->plugin_dir . 'bp-core/bp-core-moderation.php'       );
    494504        require( $this->plugin_dir . 'bp-core/bp-core-loader.php'           );
    495505        require( $this->plugin_dir . 'bp-core/bp-core-customizer-email.php' );
     506
     507        if ( ! $this->do_autoload ) {
     508            require( $this->plugin_dir . 'bp-core/bp-core-classes.php' );
     509        }
    496510
    497511        // Skip or load deprecated content
     
    509523            require( $this->plugin_dir . 'bp-core/deprecated/2.5.php' );
    510524        }
     525    }
     526
     527    /**
     528     * Autoload classes.
     529     *
     530     * @since 2.5.0
     531     *
     532     * @param string $class
     533     */
     534    public function autoload( $class ) {
     535        $class_parts = explode( '_', strtolower( $class ) );
     536
     537        if ( 'bp' !== $class_parts[0] ) {
     538            return;
     539        }
     540
     541        $components = array(
     542            'activity',
     543            'blogs',
     544            'core',
     545            'friends',
     546            'groups',
     547            'members',
     548            'messages',
     549            'notifications',
     550            'settings',
     551            'xprofile',
     552        );
     553
     554        // These classes don't have a name that matches their component.
     555        $irregular_map = array(
     556            'BP_Akismet' => 'activity',
     557
     558            'BP_Admin'                     => 'core',
     559            'BP_Attachment_Avatar'         => 'core',
     560            'BP_Attachment_Cover_Image'    => 'core',
     561            'BP_Attachment'                => 'core',
     562            'BP_Button'                    => 'core',
     563            'BP_Component'                 => 'core',
     564            'BP_Date_Query'                => 'core',
     565            'BP_Email_Delivery'            => 'core',
     566            'BP_Email_Recipient'           => 'core',
     567            'BP_Email'                     => 'core',
     568            'BP_Embed'                     => 'core',
     569            'BP_Media_Extractor'           => 'core',
     570            'BP_Members_Suggestions'       => 'core',
     571            'BP_PHPMailer'                 => 'core',
     572            'BP_Recursive_Query'           => 'core',
     573            'BP_Suggestions'               => 'core',
     574            'BP_Theme_Compat'              => 'core',
     575            'BP_User_Query'                => 'core',
     576            'BP_Walker_Category_Checklist' => 'core',
     577            'BP_Walker_Nav_Menu_Checklist' => 'core',
     578            'BP_Walker_Nav_Menu_Menu'      => 'core',
     579
     580            'BP_Core_Friends_Widget' => 'friends',
     581
     582            'BP_Group_Extension'    => 'groups',
     583            'BP_Group_Member_Query' => 'groups',
     584
     585            'BP_Core_Members_Template'       => 'members',
     586            'BP_Core_Members_Widget'         => 'members',
     587            'BP_Core_Recently_Active_Widget' => 'members',
     588            'BP_Core_Whos_Online_Widget'     => 'members',
     589            'BP_Registration_Theme_Compat'   => 'members',
     590            'BP_Signup'                      => 'members',
     591        );
     592
     593        $component = null;
     594
     595        // First check to see if the class is one without a properly namespaced name.
     596        if ( isset( $irregular_map[ $class ] ) ) {
     597            $component = $irregular_map[ $class ];
     598
     599        // Next chunk is usually the component name.
     600        } elseif ( in_array( $class_parts[1], $components, true ) ) {
     601            $component = $class_parts[1];
     602        }
     603
     604        if ( ! $component ) {
     605            return;
     606        }
     607
     608        // Sanitize class name.
     609        $class = strtolower( str_replace( '_', '-', $class ) );
     610
     611        require dirname( __FILE__ ) . "/bp-{$component}/classes/class-{$class}.php";
    511612    }
    512613
Note: See TracChangeset for help on using the changeset viewer.