Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
11/07/2023 10:41:34 PM (3 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.