Skip to:
Content

BuddyPress.org

Changeset 9182


Ignore:
Timestamp:
11/26/2014 06:08:03 AM (12 years ago)
Author:
r-a-y
Message:

Messages: Introduces meta table and related cache functions.

This commit alters the messages DB schema to add a meta table, which will
allow plugin developers to record information about a message.

The new message meta functions in bp-messages-functions.php mirrors those
in other BP components (activity, groups, etc.).

The DB version is also bumped to 9181.

See #3083.

Location:
trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/admin/bp-core-schema.php

    r9168 r9182  
    305305                        ) {$charset_collate};";
    306306
     307        $sql[] = "CREATE TABLE {$bp_prefix}bp_messages_meta (
     308                                id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
     309                                message_id bigint(20) NOT NULL,
     310                                meta_key varchar(255) DEFAULT NULL,
     311                                meta_value longtext DEFAULT NULL,
     312                                KEY message_id (message_id),
     313                                KEY meta_key (meta_key)
     314                        ) {$charset_collate};";
     315
    307316        dbDelta( $sql );
    308317}
  • trunk/src/bp-core/bp-core-update.php

    r8566 r9182  
    241241                if ( $raw_db_version < 8311 ) {
    242242                        bp_update_to_2_0_1();
     243                }
     244
     245                // 2.2
     246                if ( $raw_db_version < 9181 ) {
     247                        bp_update_to_2_2();
    243248                }
    244249        }
     
    391396
    392397/**
     398 * 2.2.0 update routine.
     399 *
     400 * - Add messages meta table
     401 *
     402 * @since BuddyPress (2.2.0)
     403 */
     404function bp_update_to_2_2() {
     405        if ( bp_is_active( 'messages' ) ) {
     406                bp_core_install_private_messaging();
     407        }
     408}
     409
     410/**
    393411 * Redirect user to BP's What's New page on first page load after activation.
    394412 *
  • trunk/src/bp-loader.php

    r9181 r9182  
    302302
    303303                $this->version    = '2.2-alpha';
    304                 $this->db_version = 9167;
     304                $this->db_version = 9181;
    305305
    306306                /** Loading ***********************************************************/
  • trunk/src/bp-messages/bp-messages-cache.php

    r8479 r9182  
    1212// Exit if accessed directly
    1313if ( !defined( 'ABSPATH' ) ) exit;
     14
     15/**
     16 * Slurp up metadata for a set of messages.
     17 *
     18 * It grabs all message meta associated with all of the messages passed in
     19 * $message_ids and adds it to WP cache. This improves efficiency when using
     20 * message meta within a loop context.
     21 *
     22 * @since BuddyPress (2.2.0)
     23 *
     24 * @param int|str|array $message_ids Accepts a single message_id, or a
     25 *        comma-separated list or array of message ids.
     26 */
     27function bp_messages_update_meta_cache( $message_ids = false ) {
     28        bp_update_meta_cache( array(
     29                'object_ids'       => $message_ids,
     30                'object_type'      => buddypress()->messages->id,
     31                'cache_group'      => 'message_meta',
     32                'object_column'    => 'message_id',
     33                'meta_table'       => buddypress()->messages->table_name_meta,
     34                'cache_key_prefix' => 'bp_messages_meta'
     35        ) );
     36}
    1437
    1538// List actions to clear super cached pages on, if super cache is installed
  • trunk/src/bp-messages/bp-messages-functions.php

    r8619 r9182  
    336336        return BP_Messages_Thread::is_valid( $thread_id );
    337337}
     338
     339/** Messages Meta *******************************************************/
     340
     341/**
     342 * Delete metadata for a message.
     343 *
     344 * If $meta_key is false, this will delete all meta for the message ID.
     345 *
     346 * @since BuddyPress (2.2.0)
     347 *
     348 * @see delete_metadata() for full documentation excluding $meta_type variable.
     349 */
     350function bp_messages_delete_meta( $message_id, $meta_key = false, $meta_value = false, $delete_all = false ) {
     351        // Legacy - if no meta_key is passed, delete all for the item
     352        if ( empty( $meta_key ) ) {
     353                global $wpdb;
     354
     355                $keys = $wpdb->get_col( $wpdb->prepare( "SELECT meta_key FROM {$wpdb->messagemeta} WHERE message_id = %d", $message_id ) );
     356
     357                // With no meta_key, ignore $delete_all
     358                $delete_all = false;
     359        } else {
     360                $keys = array( $meta_key );
     361        }
     362
     363        // no keys, so stop now!
     364        if ( empty( $keys ) ) {
     365                return false;
     366        }
     367
     368        add_filter( 'query', 'bp_filter_metaid_column_name' );
     369
     370        foreach ( $keys as $key ) {
     371                $retval = delete_metadata( 'message', $message_id, $key, $meta_value, $delete_all );
     372        }
     373
     374        remove_filter( 'query', 'bp_filter_metaid_column_name' );
     375
     376        return $retval;
     377}
     378
     379/**
     380 * Get a piece of message metadata.
     381 *
     382 * @since BuddyPress (2.2.0)
     383 *
     384 * @see get_metadata() for full documentation excluding $meta_type variable.
     385 */
     386function bp_messages_get_meta( $message_id, $meta_key = '', $single = true ) {
     387        add_filter( 'query', 'bp_filter_metaid_column_name' );
     388        $retval = get_metadata( 'message', $message_id, $meta_key, $single );
     389        remove_filter( 'query', 'bp_filter_metaid_column_name' );
     390
     391        return $retval;
     392}
     393
     394/**
     395 * Update a piece of message metadata.
     396 *
     397 * @since BuddyPress (2.2.0)
     398 *
     399 * @see update_metadata() for full documentation excluding $meta_type variable.
     400 */
     401function bp_messages_update_meta( $message_id, $meta_key, $meta_value, $prev_value = '' ) {
     402        add_filter( 'query', 'bp_filter_metaid_column_name' );
     403        $retval = update_metadata( 'message', $message_id, $meta_key, $meta_value, $prev_value );
     404        remove_filter( 'query', 'bp_filter_metaid_column_name' );
     405
     406        return $retval;
     407}
     408
     409/**
     410 * Add a piece of message metadata.
     411 *
     412 * @since BuddyPress (2.2.0)
     413 *
     414 * @see add_metadata() for full documentation excluding $meta_type variable.
     415 */
     416function bp_message_add_meta( $message_id, $meta_key, $meta_value, $unique = false ) {
     417        add_filter( 'query', 'bp_filter_metaid_column_name' );
     418        $retval = add_metadata( 'message', $message_id, $meta_key, $meta_value, $unique );
     419        remove_filter( 'query', 'bp_filter_metaid_column_name' );
     420
     421        return $retval;
     422}
  • trunk/src/bp-messages/bp-messages-loader.php

    r8481 r9182  
    9191                        'table_name_notices'    => $bp->table_prefix . 'bp_messages_notices',
    9292                        'table_name_messages'   => $bp->table_prefix . 'bp_messages_messages',
    93                         'table_name_recipients' => $bp->table_prefix . 'bp_messages_recipients'
    94                 );
     93                        'table_name_recipients' => $bp->table_prefix . 'bp_messages_recipients',
     94                        'table_name_meta'       => $bp->table_prefix . 'bp_messages_meta',
     95                );
     96
     97                // Metadata tables for messaging component
     98                $meta_tables = array(
     99                        'message' => $bp->table_prefix . 'bp_messages_meta',
     100                );
     101
     102                $this->autocomplete_all = defined( 'BP_MESSAGES_AUTOCOMPLETE_ALL' );
    95103
    96104                // All globals for messaging component.
    97105                // Note that global_tables is included in this array.
    98                 $globals = array(
     106                parent::setup_globals( array(
    99107                        'slug'                  => BP_MESSAGES_SLUG,
    100108                        'has_directory'         => false,
    101109                        'notification_callback' => 'messages_format_notifications',
    102110                        'search_string'         => __( 'Search Messages...', 'buddypress' ),
    103                         'global_tables'         => $global_tables
    104                 );
    105 
    106                 $this->autocomplete_all = defined( 'BP_MESSAGES_AUTOCOMPLETE_ALL' );
    107 
    108                 parent::setup_globals( $globals );
     111                        'global_tables'         => $global_tables,
     112                        'meta_tables'           => $meta_tables
     113                ) );
    109114        }
    110115
Note: See TracChangeset for help on using the changeset viewer.