Skip to:
Content

BuddyPress.org

Changeset 7840


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

Migrate groupmeta functions to the WP metadata API

See #4551

Props boonebgorges, johnjamesjacoby

Location:
trunk
Files:
3 edited

Legend:

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

    r7741 r7840  
    530530}
    531531add_filter( 'wp_setup_nav_menu_item', 'bp_setup_nav_menu_item', 10, 1 );
     532
     533/**
     534 * Filter SQL query strings to swap out the 'meta_id' column.
     535 *
     536 * WordPress uses the meta_id column for commentmeta and postmeta, and so
     537 * hardcodes the column name into its *_metadata() functions. BuddyPress, on
     538 * the other hand, uses 'id' for the primary column. To make WP's functions
     539 * usable for BuddyPress, we use this just-in-time filter on 'query' to swap
     540 * 'meta_id' with 'id.
     541 *
     542 * @since BuddyPress (2.0.0)
     543 *
     544 * @access private Do not use.
     545 *
     546 * @param string $q SQL query.
     547 * @return string
     548 */
     549function bp_filter_metaid_column_name( $q ) {
     550        return str_replace( 'meta_id', 'id', $q );
     551}
  • trunk/bp-groups/bp-groups-functions.php

    r7624 r7840  
    957957/*** Group Meta ****************************************************/
    958958
    959 function groups_delete_groupmeta( $group_id, $meta_key = false, $meta_value = false ) {
    960         global $wpdb, $bp;
    961 
    962         if ( !is_numeric( $group_id ) )
    963                 return false;
    964 
     959/**
     960 * Delete metadata for a group.
     961 *
     962 * @param int $group_id ID of the group.
     963 * @param string $meta_key The key of the row to delete.
     964 * @param string $meta_value Optional. Metadata value. If specified, only delete
     965 *        metadata entries with this value.
     966 * @param bool $delete_all Optional. If true, delete matching metadata entries
     967 *        for all groups. Default: false.
     968 * @return bool True on success, false on failure.
     969 */
     970function groups_delete_groupmeta( $group_id, $meta_key = false, $meta_value = false, $delete_all = false ) {
     971
     972        // Legacy - return false if non-int group ID
     973        if ( ! is_numeric( $group_id ) ) {
     974                return false;
     975        }
     976
     977        // Legacy - Sanitize keys
    965978        $meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
    966979
    967         if ( is_array( $meta_value ) || is_object( $meta_value ) )
    968                 $meta_value = serialize($meta_value);
    969 
    970         $meta_value = trim( $meta_value );
    971 
    972         if ( !$meta_key )
    973                 $wpdb->query( $wpdb->prepare( "DELETE FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d", $group_id ) );
    974         else if ( $meta_value )
    975                 $wpdb->query( $wpdb->prepare( "DELETE FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s AND meta_value = %s", $group_id, $meta_key, $meta_value ) );
    976         else
    977                 $wpdb->query( $wpdb->prepare( "DELETE FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s", $group_id, $meta_key ) );
    978 
    979         // Delete the cached object
    980         wp_cache_delete( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, 'bp' );
    981 
    982         return true;
    983 }
    984 
    985 function groups_get_groupmeta( $group_id, $meta_key = '') {
    986         global $wpdb, $bp;
    987 
    988         $group_id = (int) $group_id;
    989 
    990         if ( !$group_id )
    991                 return false;
    992 
    993         if ( !empty($meta_key) ) {
    994                 $meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
    995 
    996                 $metas = wp_cache_get( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, 'bp' );
    997                 if ( false === $metas ) {
    998                         $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s", $group_id, $meta_key ) );
    999                         wp_cache_set( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, $metas, 'bp' );
     980        add_filter( 'query', 'bp_filter_metaid_column_name' );
     981        $retval = delete_metadata( 'group', $group_id, $meta_key, $meta_value, $delete_all );
     982        remove_filter( 'query', 'bp_filter_metaid_column_name' );
     983
     984        return $retval;
     985}
     986
     987/**
     988 * Get a piece of group metadata.
     989 *
     990 * @param int $group_id ID of the group.
     991 * @param string $meta_key Metadata key.
     992 * @param bool $single Optional. If true, return only the first value of the
     993 *        specified meta_key. This parameter has no effect if meta_key is
     994 *        empty.
     995 * @return mixed Metadata value.
     996 */
     997function groups_get_groupmeta( $group_id, $meta_key = '', $single = true ) {
     998
     999        // Legacy - Sanitize keys
     1000        $meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
     1001
     1002        add_filter( 'query', 'bp_filter_metaid_column_name' );
     1003        $retval = get_metadata( 'group', $group_id, $meta_key, $single );
     1004        remove_filter( 'query', 'bp_filter_metaid_column_name' );
     1005
     1006        // Legacy - If fetching all meta for a group, just return values
     1007        if ( empty( $meta_key ) ) {
     1008                $values = array();
     1009                foreach ( (array) $retval as $r ) {
     1010                        $values[] = array_pop( $r );
    10001011                }
    1001         } else {
    1002                 $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d", $group_id ) );
    1003         }
    1004 
    1005         if ( empty( $metas ) ) {
    1006                 if ( empty( $meta_key ) )
    1007                         return array();
    1008                 else
    1009                         return '';
    1010         }
    1011 
    1012         $metas = array_map( 'maybe_unserialize', (array) $metas );
    1013 
    1014         if ( 1 == count( $metas ) )
    1015                 return $metas[0];
    1016         else
    1017                 return $metas;
    1018 }
    1019 
     1012                $retval = $values;
     1013        }
     1014
     1015        return $retval;
     1016}
     1017
     1018/**
     1019 * Update a piece of group metadata.
     1020 *
     1021 * @param int $group_id ID of the group.
     1022 * @param string $meta_key Metadata key.
     1023 * @param mixed $meta_value Value to store.
     1024 * @return bool True on success, false on failure.
     1025 */
    10201026function groups_update_groupmeta( $group_id, $meta_key, $meta_value ) {
    1021         global $wpdb, $bp;
    1022 
    1023         if ( !is_numeric( $group_id ) )
    1024                 return false;
    1025 
    1026         $meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
    1027 
    1028         if ( is_string( $meta_value ) ) {
    1029                 $meta_value = stripslashes( $meta_value );
    1030         }
    1031 
    1032         $meta_value = maybe_serialize( $meta_value );
    1033 
    1034         $cur = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s", $group_id, $meta_key ) );
    1035 
    1036         if ( !$cur )
    1037                 $wpdb->query( $wpdb->prepare( "INSERT INTO " . $bp->groups->table_name_groupmeta . " ( group_id, meta_key, meta_value ) VALUES ( %d, %s, %s )", $group_id, $meta_key, $meta_value ) );
    1038         else if ( $cur->meta_value != $meta_value )
    1039                 $wpdb->query( $wpdb->prepare( "UPDATE " . $bp->groups->table_name_groupmeta . " SET meta_value = %s WHERE group_id = %d AND meta_key = %s", $meta_value, $group_id, $meta_key ) );
    1040         else
    1041                 return false;
    1042 
    1043         // Update the cached object and recache
    1044         wp_cache_set( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, $meta_value, 'bp' );
    1045 
    1046         return true;
     1027
     1028        add_filter( 'query', 'bp_filter_metaid_column_name' );
     1029        $retval = update_metadata( 'group', $group_id, $meta_key, $meta_value );
     1030        remove_filter( 'query', 'bp_filter_metaid_column_name' );
     1031
     1032        // Legacy - return true if we fall through to add_metadata()
     1033        if ( is_int( $retval ) ) {
     1034                $retval = true;
     1035        }
     1036
     1037        return $retval;
    10471038}
    10481039
  • trunk/bp-groups/bp-groups-loader.php

    r7758 r7840  
    137137                );
    138138
     139                // Metadata tables for groups component
     140                $meta_tables = array(
     141                        'group' => $bp->table_prefix . 'bp_groups_groupmeta',
     142                );
     143
    139144                // All globals for groups component.
    140145                // Note that global_tables is included in this array.
     
    145150                        'notification_callback' => 'groups_format_notifications',
    146151                        'search_string'         => __( 'Search Groups...', 'buddypress' ),
    147                         'global_tables'         => $global_tables
     152                        'global_tables'         => $global_tables,
     153                        'meta_tables'           => $meta_tables,
    148154                );
    149155
Note: See TracChangeset for help on using the changeset viewer.