Skip to:
Content

BuddyPress.org

Changeset 7839


Ignore:
Timestamp:
02/11/2014 02:58:47 AM (13 years ago)
Author:
boonebgorges
Message:

Introduce meta_tables param for BP_Component

This utility method is used to set up configuration for $wpdb integration
and use of the WordPress metadata API

Also includes restructuring of the global_tables set in BP_Component.

See #4551

Props johnjamesjacoby

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/bp-core-component.php

    r7465 r7839  
    107107         */
    108108        public $root_slug = '';
     109
     110        /**
     111         * Metadata tables for the component (if applicable)
     112         *
     113         * @since BuddyPress (2.0.0)
     114         *
     115         * @var array
     116         */
     117        public $meta_tables = array();
     118
     119        /**
     120         * Global tables for the component (if applicable)
     121         *
     122         * @since BuddyPress (2.0.0)
     123         *
     124         * @var array
     125         */
     126        public $global_tables = array();
    109127
    110128        /** Methods ***************************************************************/
     
    182200         *     @type array $global_tables Optional. An array of database table
    183201         *           names.
     202         *     @type array $meta_tables Optional. An array of metadata table
     203         *           names.
    184204         * }
    185205         */
     
    198218                        'notification_callback' => '',
    199219                        'search_string'         => '',
    200                         'global_tables'         => ''
     220                        'global_tables'         => '',
     221                        'meta_tables'           => '',
    201222                ) );
    202223
     
    216237                $this->notification_callback = apply_filters( 'bp_' . $this->id . '_notification_callback', $r['notification_callback'] );
    217238
    218                 // Set up global table names
    219                 if ( !empty( $r['global_tables'] ) ) {
    220 
    221                         // This filter allows for component-specific filtering of table names
    222                         // To filter *all* tables, use the 'bp_core_get_table_prefix' filter instead
    223                         $r['global_tables'] = apply_filters( 'bp_' . $this->id . '_global_tables', $r['global_tables'] );
    224 
    225                         foreach ( $r['global_tables'] as $global_name => $table_name ) {
    226                                 $this->$global_name = $table_name;
    227                         }
     239                // Set the global table names, if applicable
     240                if ( ! empty( $r['global_tables'] ) ) {
     241                        $this->register_global_tables( $r['global_tables'] );
     242                }
     243
     244                // Set the metadata table, if applicable
     245                if ( ! empty( $r['meta_tables'] ) ) {
     246                        $this->register_meta_tables( $r['meta_tables'] );
    228247                }
    229248
     
    445464
    446465        /**
     466         * Register global tables for the component, so that it may use WordPress's database API.
     467         *
     468         * @since BuddyPress (2.0.0)
     469         *
     470         * @param array $tables
     471         */
     472        public function register_global_tables( $tables = array() ) {
     473
     474                // This filter allows for component-specific filtering of table names
     475                // To filter *all* tables, use the 'bp_core_get_table_prefix' filter instead
     476                $tables = apply_filters( 'bp_' . $this->id . '_global_tables', $tables );
     477
     478                // Add to the BuddyPress global object
     479                if ( !empty( $tables ) && is_array( $tables ) ) {
     480                        foreach ( $tables as $global_name => $table_name ) {
     481                                $this->$global_name = $table_name;
     482                        }
     483
     484                        // Keep a record of the metadata tables in the component
     485                        $this->global_tables = $tables;
     486                }
     487
     488                do_action( 'bp_' . $this->id . '_register_global_tables' );
     489        }
     490
     491        /**
     492         * Register component metadata tables.
     493         *
     494         * Metadata tables are registered in the $wpdb global, for
     495         * compatibility with the WordPress metadata API.
     496         *
     497         * @since BuddyPress (2.0.0)
     498         *
     499         * @param array $tables
     500         */
     501        public function register_meta_tables( $tables = array() ) {
     502                global $wpdb;
     503
     504                // This filter allows for component-specific filtering of table names
     505                // To filter *all* tables, use the 'bp_core_get_table_prefix' filter instead
     506                $tables = apply_filters( 'bp_' . $this->id . '_meta_tables', $tables );
     507
     508                /**
     509                 * Add the name of each metadata table to WPDB to allow BuddyPress
     510                 * components to play nicely with the WordPress metadata API.
     511                 */
     512                if ( !empty( $tables ) && is_array( $tables ) ) {
     513                        foreach( $tables as $meta_prefix => $table_name ) {
     514                                $wpdb->{$meta_prefix . 'meta'} = $table_name;
     515                        }
     516
     517                        // Keep a record of the metadata tables in the component
     518                        $this->meta_tables = $tables;
     519                }
     520
     521                do_action( 'bp_' . $this->id . '_register_meta_tables' );
     522        }
     523
     524        /**
    447525         * Set up the component post types.
    448526         *
Note: See TracChangeset for help on using the changeset viewer.