Skip to:
Content

BuddyPress.org

Changeset 9182


Ignore:
Timestamp:
11/26/2014 06:08:03 AM (11 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.