BP_REST_Media_Endpoint::bp_rest_create_media( array $args )

Create the Media IDs from Upload IDs.

Description

Parameters

$args

(array) (Required) Key value array of query var to query value.

Return

(array|WP_Error)

Source

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

	public function bp_rest_create_media( $args ) {

		$media_privacy = ( ! empty( $args['privacy'] ) ? $args['privacy'] : 'public' );
		$upload_ids    = ( ! empty( $args['upload_ids'] ) ? $args['upload_ids'] : '' );
		$activity_id   = ( ! empty( $args['activity_id'] ) ? $args['activity_id'] : false );
		$content       = ( ! empty( $args['content'] ) ? $args['content'] : false );
		$user_id       = ( ! empty( $args['user_id'] ) ? $args['user_id'] : get_current_user_id() );
		$id            = ( ! empty( $args['id'] ) ? $args['id'] : '' );

		$group_id = ( ! empty( $args['group_id'] ) ? $args['group_id'] : false );
		$album_id = ( ! empty( $args['album_id'] ) ? $args['album_id'] : false );

		// Override the privacy if album ID is given.
		if ( ! empty( $args['album_id'] ) ) {
			$albums = bp_album_get_specific( array( 'album_ids' => array( $args['album_id'] ) ) );
			if ( ! empty( $albums['albums'] ) ) {
				$album         = array_pop( $albums['albums'] );
				$media_privacy = $album->privacy;
			}
		}

		// Update Media.
		if ( ! empty( $id ) ) {
			$wp_attachment_id  = $args['attachment_id'];
			$wp_attachment_url = wp_get_attachment_url( $wp_attachment_id );

			// when the file found to be empty it's means it's not a valid attachment.
			if ( empty( $wp_attachment_url ) ) {
				return;
			}

			$media_activity_id = $activity_id;

			// extract the nice title name.
			$title = get_the_title( $wp_attachment_id );

			$media_id = bp_media_add(
				array(
					'id'            => $id,
					'attachment_id' => $wp_attachment_id,
					'title'         => $title,
					'activity_id'   => $media_activity_id,
					'album_id'      => ( ! empty( $args['album_id'] ) ? $args['album_id'] : false ),
					'group_id'      => ( ! empty( $args['group_id'] ) ? $args['group_id'] : false ),
					'privacy'       => $media_privacy,
					'user_id'       => $user_id,
					'error_type'    => 'wp_error',
				)
			);

			if ( is_int( $media_id ) ) {

				// save media is saved in attachment.
				update_post_meta( $wp_attachment_id, 'bp_media_saved', true );

				// save media meta for activity.
				if ( ! empty( $media_activity_id ) ) {
					update_post_meta( $wp_attachment_id, 'bp_media_activity_id', $media_activity_id );
				}

				$created_media_ids[] = $media_id;

			}
		}

		// created Medias.
		if ( ! empty( $upload_ids ) ) {
			$valid_upload_ids = array();
			foreach ( $upload_ids as $wp_attachment_id ) {
				$wp_attachment_url = wp_get_attachment_url( $wp_attachment_id );

				// when the file found to be empty it's means it's not a valid attachment.
				if ( empty( $wp_attachment_url ) ) {
					continue;
				}

				$valid_upload_ids[] = $wp_attachment_id;
			}

			if ( ! empty( $valid_upload_ids ) ) {
				foreach ( $valid_upload_ids as $wp_attachment_id ) {

					$media_activity_id = false;

					// make an activity for the media.
					if ( bp_is_active( 'activity' ) ) {

						if ( empty( $activity_id ) ) {
							if ( bp_is_active( 'groups' ) && ! empty( $group_id ) && $group_id > 0 ) {
								$activity_id = groups_post_update( array( 'content' => $content, 'group_id' => $group_id, 'privacy' => 'public' ) );
							} else {
								$activity_id = bp_activity_post_update( array( 'content' => $content ) );
							}
						}

						if ( count( $valid_upload_ids ) > 1 ) {
							if ( bp_is_active( 'groups' ) && ! empty( $group_id ) && $group_id > 0 ) {
								$media_activity_id = groups_post_update(
									array(
										'group_id'      => $group_id,
										'hide_sitewide' => true,
										'privacy'       => 'media',
									)
								);
							} else {
								$media_activity_id = bp_activity_post_update(
									array(
										'hide_sitewide' => true,
										'privacy'       => 'media',
									)
								);
							}

							if ( $media_activity_id ) {
								// update activity meta.
								bp_activity_update_meta( $media_activity_id, 'bp_media_activity', '1' );
							}
						} else {
							$media_activity_id = $activity_id;
						}
					}

					// extract the nice title name.
					$title = get_the_title( $wp_attachment_id );

					$media_id = bp_media_add(
						array(
							'attachment_id' => $wp_attachment_id,
							'title'         => $title,
							'activity_id'   => $media_activity_id,
							'album_id'      => ( ! empty( $args['album_id'] ) ? $args['album_id'] : false ),
							'group_id'      => ( ! empty( $args['group_id'] ) ? $args['group_id'] : false ),
							'privacy'       => $media_privacy,
							'user_id'       => $user_id,
							'error_type'    => 'wp_error',
						)
					);

					if ( is_int( $media_id ) ) {

						// save media is saved in attachment.
						update_post_meta( $wp_attachment_id, 'bp_media_saved', true );

						// save media meta for activity.
						if ( ! empty( $activity_id ) ) {
							update_post_meta( $wp_attachment_id, 'bp_media_parent_activity_id', $activity_id );
							if ( $media_activity_id !== $activity_id ) {
								update_post_meta( $wp_attachment_id, 'bp_media_activity_id', $media_activity_id );
							}
						}
						$created_media_ids[] = $media_id;
					}
				}
			}
		}

		if ( empty( $created_media_ids ) ) {
			return new WP_Error(
				'bp_rest_media_creation_error',
				__( 'Error creating media, please try again.', 'buddyboss' ),
				array(
					'status' => 400,
				)
			);
		}

		// Link all uploaded media to main activity.
		if ( ! empty( $activity_id ) && empty( $id ) ) {
			$created_media_ids_joined = implode( ',', $created_media_ids );
			bp_activity_update_meta( $activity_id, 'bp_media_ids', $created_media_ids_joined );

			$main_activity = new BP_Activity_Activity( $activity_id );
			if ( ! empty( $main_activity ) && empty( $group_id ) ) {
				$main_activity->privacy = $media_privacy;
				$main_activity->save();
			}
		}

		return $created_media_ids;
	}

Changelog

Changelog
Version Description
0.1.0 Introduced.

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.