BP_REST_Media_Endpoint::bbp_media_update_rest_field_callback( object $object, object $value )

The function to use to update the medias’s value of the topic REST Field.

Description

Parameters

$object

(Required) Value for the schema.

$value

(Required) The value of the REST Field to save.

Return

(object)

Source

File: bp-media/classes/class-bp-rest-media-endpoint.php

	protected function bbp_media_update_rest_field_callback( $object, $value ) {

		$medias = wp_parse_id_list( $object );
		if ( empty( $medias ) ) {
			$value->bbp_media = null;
			return $value;
		}

		$p_id = $value->ID;

		// save activity id if it is saved in forums and enabled in platform settings.
		$main_activity_id = get_post_meta( $p_id, '_bbp_activity_id', true );

		// Get current forum ID.
		if ( 'reply' === $value->post_type ) {
			$forum_id = bbp_get_reply_forum_id( $p_id );
		} else {
			$forum_id = bbp_get_topic_forum_id( $p_id );
		}

		$group_ids = bbp_get_forum_group_ids( $forum_id );
		$group_id  = ( ! empty( $group_ids ) ? current( $group_ids ) : 0 );

		// fetch currently uploaded media ids.
		$existing_media                = array();
		$existing_media_ids            = get_post_meta( $p_id, 'bp_media_ids', true );
		$existing_media_attachment_ids = array();
		if ( ! empty( $existing_media_ids ) ) {
			$existing_media_ids = explode( ',', $existing_media_ids );

			foreach ( $existing_media_ids as $existing_media_id ) {
				$existing_media[ $existing_media_id ] = new BP_Media( $existing_media_id );

				if ( ! empty( $existing_media[ $existing_media_id ]->attachment_id ) ) {
					$existing_media_attachment_ids[] = $existing_media[ $existing_media_id ]->attachment_id;
				}
			}
		}

		$args = array(
			'upload_ids'  => $medias,
			'privacy'     => 'public',
			'activity_id' => $main_activity_id,
		);

		if ( ! empty( $group_id ) ) {
			$args['group_id'] = $group_id;
			$args['privacy']  = 'grouponly';
		}

		$medias_ids = $this->bp_rest_create_media( $args );

		if ( is_wp_error( $medias_ids ) ) {
			return;
		}

		$medias_ids = implode( ',', $medias_ids );

		// Save all attachment ids in forums post meta.
		update_post_meta( $p_id, 'bp_media_ids', $medias_ids );

		// delete medias which were not saved or removed from form.
		if ( ! empty( $existing_media_ids ) ) {
			foreach ( $existing_media_ids as $media_id ) {
				bp_media_delete( array( 'id' => $media_id ) );
			}
		}
	}

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.