Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
11/07/2023 10:41:34 PM (2 years ago)
Author:
imath
Message:

Improve the favorites management using the WP Meta API

  • Introduce bp_activity_register_user_favorites_meta() to register the user meta and define sanitization callback.
  • Introduce bp_activity_sanitize_user_favorites_meta() to do the sanitization job.
  • Improve Ajax callbacks about favoriting/unfavoriting activities in template packs.

Props emaralive, dcavins

Fixes #9021
Closes https://github.com/buddypress/buddypress/pull/189

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-activity/bp-activity-functions.php

    r13539 r13636  
    10151015
    10161016/**
     1017 * Sanitize callback for the User's favorites meta.
     1018 *
     1019 * @since 12.0.0
     1020 *
     1021 * @param array $value The list of favorited activity IDs.
     1022 * @return array The sanitized list of favorited activity IDs.
     1023 */
     1024function bp_activity_sanitize_user_favorites_meta( $value = array() ) {
     1025    return array_filter( wp_parse_id_list( $value ) );
     1026}
     1027
     1028/**
     1029 * Use WordPress Meta API to deal with favorites meta properties and sanitization.
     1030 *
     1031 * @since 12.0.0
     1032 */
     1033function bp_activity_register_user_favorites_meta() {
     1034    register_meta(
     1035        'user',
     1036        'bp_favorite_activities',
     1037        array(
     1038            'single'            => true,
     1039            'type'              => 'array',
     1040            'description'       => __( 'The list of Activity IDs a user favorited.', 'buddypress' ),
     1041            'show_in_rest'      => false, // We're not showing this meta into the WP users REST endpoint.
     1042            'sanitize_callback' => 'bp_activity_sanitize_user_favorites_meta',
     1043            'default'           => array(),
     1044        )
     1045    );
     1046}
     1047add_action( 'bp_init', 'bp_activity_register_user_favorites_meta' );
     1048
     1049/**
    10171050 * Get a users favorite activity stream items.
    10181051 *
     
    10521085 */
    10531086function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
     1087    // Cast as an integer to make sure we're only saving integers into the user's meta.
     1088    if ( ! empty( $activity_id ) ) {
     1089        $activity_id = (int) $activity_id;
     1090    } else {
     1091        $activity_id = 0;
     1092    }
     1093
     1094    if ( ! $activity_id ) {
     1095        return false;
     1096    }
    10541097
    10551098    // Fallback to logged in user if no user_id is passed.
     
    10581101    }
    10591102
    1060     $my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
    1061     if ( empty( $my_favs ) || ! is_array( $my_favs ) ) {
    1062         $my_favs = array();
    1063     }
     1103    // Get user's existing favorites.
     1104    $my_favs = bp_activity_get_user_favorites( $user_id );
    10641105
    10651106    // Bail if the user has already favorited this activity item.
    1066     if ( in_array( $activity_id, $my_favs ) ) {
     1107    if ( in_array( $activity_id, $my_favs, true ) ) {
    10671108        return false;
    10681109    }
     
    10721113
    10731114    // Update the total number of users who have favorited this activity.
    1074     $fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' );
    1075     $fav_count = !empty( $fav_count ) ? (int) $fav_count + 1 : 1;
     1115    $fav_count = (int) bp_activity_get_meta( $activity_id, 'favorite_count' );
     1116    if ( ! empty( $fav_count ) ) {
     1117        $fav_count += 1;
     1118    } else {
     1119        $fav_count = 1;
     1120    }
    10761121
    10771122    // Update user meta.
     
    11271172    }
    11281173
    1129     $my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
    1130     $my_favs = array_flip( (array) $my_favs );
     1174    $my_favs = bp_activity_get_user_favorites( $user_id );
     1175    $my_favs = array_flip( $my_favs );
    11311176
    11321177    // Bail if the user has not previously favorited the item.
     
    11361181
    11371182    // Remove the fav from the user's favs.
    1138     unset( $my_favs[$activity_id] );
     1183    unset( $my_favs[ $activity_id ] );
    11391184    $my_favs = array_unique( array_flip( $my_favs ) );
    11401185
Note: See TracChangeset for help on using the changeset viewer.