bp_nouveau_get_members_buttons( $args )

Get the action buttons for the displayed user profile

Description

Return

(array)

Source

File: bp-templates/bp-nouveau/includes/members/template-tags.php

	function bp_nouveau_get_members_buttons( $args ) {
		$buttons = array();
		$type = ( ! empty( $args['type'] ) ) ? $args['type'] : '';

		// @todo Not really sure why BP Legacy needed to do this...
		if ( 'profile' === $type && is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
			return $buttons;
		}

		$user_id = bp_displayed_user_id();

		if ( 'loop' === $type || 'friendship_request' === $type ) {
			$user_id = bp_get_member_user_id();
		} elseif ( 'group_member' === $type ) {
			$user_id = bp_get_group_member_id();
		}

		if ( ! $user_id ) {
			return $buttons;
		}

		/*
		 * If the 'container' is set to 'ul'
		 * set a var $parent_element to li
		 * otherwise simply pass any value found in args
		 * or set var false.
		 */
		$parent_element = false;

		if ( ! empty( $args['container'] ) && 'ul' === $args['container']  ) {
			$parent_element = 'li';
		} elseif ( ! empty( $args['parent_element'] ) ) {
			$parent_element = $args['parent_element'];
		}

		/*
		 * If we have an arg value for $button_element passed through
		 * use it to default all the $buttons['button_element'] values
		 * otherwise default to 'a' (anchor)
		 * Or override & hardcode the 'element' string on $buttons array.
		 *
		 * Icons sets a class for icon display if not using the button element
		 */
		$icons = '';
		if ( ! empty( $args['button_element'] ) ) {
			$button_element = $args['button_element'] ;
		} else {
			$button_element = 'button';
			$icons = ' icons';
		}

		// If we pass through parent classes add them to $button array
		$parent_class = '';
		if ( ! empty( $args['parent_attr']['class'] ) ) {
			$parent_class = $args['parent_attr']['class'];
		}

		$bp_force_friendship_to_message = bp_force_friendship_to_message();

		if ( bp_is_active( 'friends' ) ) {
			// It's the member's connection requests screen
			if ( 'friendship_request' === $type ) {
				$buttons = array(
					'accept_friendship' => array(
						'id'                => 'accept_friendship',
						'position'          => 5,
						'component'         => 'friends',
						'must_be_logged_in' => true,
						'parent_element'    => $parent_element,
						'link_text'         => __( 'Accept', 'buddyboss' ),
						'parent_attr'       => array(
							'id'    => '',
							'class' => $parent_class ,
						),
						'button_element'    => $button_element,
						'button_attr'       => array(
							'class'           => 'button accept',
							'rel'             => '',
						),
					), 'reject_friendship' => array(
						'id'                => 'reject_friendship',
						'position'          => 15,
						'component'         => 'friends',
						'must_be_logged_in' => true,
						'parent_element'    => $parent_element,
						'link_text'         => __( 'Ignore', 'buddyboss' ),
						'parent_attr'       => array(
							'id'    => '',
							'class' => $parent_class,
						),
						'button_element'    => $button_element,
						'button_attr'       => array (
							'class'           => 'button reject',
							'rel'             => '',
						),
					),
				);

				// If button element set add nonce link to data attr
				if ( 'button' === $button_element ) {
					$buttons['accept_friendship']['button_attr']['data-bp-nonce'] = bp_get_friend_accept_request_link();
					$buttons['reject_friendship']['button_attr']['data-bp-nonce'] = bp_get_friend_reject_request_link();
				} else {
					$buttons['accept_friendship']['button_attr']['href'] = bp_get_friend_accept_request_link();
					$buttons['reject_friendship']['button_attr']['href'] = bp_get_friend_reject_request_link();
				}

			// It's any other members screen
			} else {
				/*
				 * This filter workaround is waiting for a core adaptation
				 * so that we can directly get the friends button arguments
				 * instead of the button.
				 *
				 * See https://buddypress.trac.wordpress.org/ticket/7126
				 */
				add_filter( 'bp_get_add_friend_button', 'bp_nouveau_members_catch_button_args', 100, 1 );

				bp_get_add_friend_button( $user_id );

				remove_filter( 'bp_get_add_friend_button', 'bp_nouveau_members_catch_button_args', 100, 1 );

				if ( ! empty( bp_nouveau()->members->button_args ) ) {
					$button_args = bp_nouveau()->members->button_args;

					$buttons['member_friendship'] = array(
						'id'                => 'member_friendship',
						'position'          => 5,
						'component'         => $button_args['component'],
						'must_be_logged_in' => $button_args['must_be_logged_in'],
						'block_self'        => $button_args['block_self'],
						'parent_element'    => $parent_element,
						'link_text'         => $button_args['link_text'],
						'parent_attr'       => array(
							'id'    => $button_args['wrapper_id'],
							'class' => $parent_class . ' ' . $button_args['wrapper_class'],
						),
						'button_element'    => $button_element,
						'button_attr'       => array(
							'id'    => $button_args['link_id'],
							'class' => $button_args['link_class'],
							'rel'   => $button_args['link_rel'],
							'title' => '',
						),
					);

					if ( ! empty( $button_args['button_attr'] ) ) {
						foreach ( $button_args['button_attr'] as $title => $value ) {
							$buttons['member_friendship']['button_attr'][$title] = $value;
						}
					}

					// If button element set add nonce link to data attr
					if ( 'button' === $button_element && 'awaiting_response' !== $button_args['id'] ) {
						$buttons['member_friendship']['button_attr']['data-bp-nonce'] = $button_args['link_href'];
					} else {
						$buttons['member_friendship']['button_element'] = 'a';
						$buttons['member_friendship']['button_attr']['href'] = $button_args['link_href'];
					}

					unset( bp_nouveau()->members->button_args );
				}
			}
		}

		if ( bp_is_active( 'activity' ) && bp_is_activity_follow_active() ) { // add follow button

			/*
			 * This filter workaround is waiting for a core adaptation
			 * so that we can directly get the follow button arguments
			 * instead of the button.
			 *
			 * See https://buddypress.trac.wordpress.org/ticket/7126
			 */
			add_filter( 'bp_get_add_follow_button', 'bp_nouveau_members_catch_button_args', 100, 1 );

			bp_get_add_follow_button( $user_id, bp_loggedin_user_id() );

			remove_filter( 'bp_get_add_follow_button', 'bp_nouveau_members_catch_button_args', 100, 1 );

			if ( ! empty( bp_nouveau()->members->button_args ) ) {
				$button_args = bp_nouveau()->members->button_args;

				$buttons['member_follow'] = array(
					'id'                => 'member_follow',
					'position'          => 10,
					'component'         => $button_args['component'],
					'must_be_logged_in' => $button_args['must_be_logged_in'],
					'block_self'        => $button_args['block_self'],
					'parent_element'    => $parent_element,
					'link_text'         => $button_args['link_text'],
					'parent_attr'       => array(
						'id'    => $button_args['wrapper_id'],
						'class' => $parent_class . ' ' . $button_args['wrapper_class'],
					),
					'button_element'    => $button_element,
					'button_attr'       => array(
						'id'    => $button_args['link_id'],
						'class' => $button_args['link_class'],
						'rel'   => $button_args['link_rel'],
						'title' => '',
					),
				);

				if ( ! empty( $button_args['button_attr'] ) ) {
					foreach ( $button_args['button_attr'] as $title => $value ) {
						$buttons['member_follow']['button_attr'][$title] = $value;
					}
				}

				// If button element set add nonce link to data attr
				if ( 'button' === $button_element ) {
					$buttons['member_follow']['button_attr']['data-bp-nonce'] = $button_args['link_href'];
				} else {
					$buttons['member_follow']['button_element'] = 'a';
					$buttons['member_follow']['button_attr']['href'] = $button_args['link_href'];
				}

				unset( bp_nouveau()->members->button_args );
			}
		}

		// Only add The public and private messages when not in a loop
		//if ( 'profile' === $type ) {
			if ( bp_is_active( 'activity' ) && bp_activity_do_mentions() ) {
				/*
				 * This filter workaround is waiting for a core adaptation
				 * so that we can directly get the public message button arguments
				 * instead of the button.
				 *
				 * See https://buddypress.trac.wordpress.org/ticket/7126
				 */

				if ( ! empty( bp_nouveau()->members->button_args ) ) {
					$button_args = bp_nouveau()->members->button_args;

					/*
					 * This button should remain as an anchor link.
					 * Hardcode the use of anchor elements if button arg passed in for other elements.
					 */
					$buttons['public_message'] = array(
						'id'                => $button_args['id'],
						'position'          => 15,
						'component'         => $button_args['component'],
						'must_be_logged_in' => $button_args['must_be_logged_in'],
						'block_self'        => $button_args['block_self'],
						'parent_element'    => $parent_element,
						'button_element'    => 'a',
						'link_text'         => $button_args['link_text'],
						'parent_attr'       => array(
							'id'    => $button_args['wrapper_id'],
							'class' => $parent_class,
						),
						'button_attr'       => array(
							'href'             => $button_args['link_href'],
							'id'               => '',
							'class'            => $button_args['link_class'],
						),
					);
					unset( bp_nouveau()->members->button_args );
				}
			}

			if ( ( bp_is_active( 'messages' ) && ! $bp_force_friendship_to_message ) ||
			     ( $bp_force_friendship_to_message && bp_is_active( 'friends' ) && friends_check_friendship( bp_loggedin_user_id(), $user_id ) )
			) {
				/**
				 * This filter workaround is waiting for a core adaptation
				 * so that we can directly get the private messages button arguments
				 * instead of the button.
				 * @see https://buddypress.trac.wordpress.org/ticket/7126
				 */
				add_filter( 'bp_get_send_message_button_args', 'bp_nouveau_members_catch_button_args', 100, 1 );

				bp_get_send_message_button();

				remove_filter( 'bp_get_send_message_button_args', 'bp_nouveau_members_catch_button_args', 100, 1 );

				if ( ! empty( bp_nouveau()->members->button_args ) ) {
					$button_args = bp_nouveau()->members->button_args;

					/*
					 * This button should remain as an anchor link.
					 * Hardcode the use of anchor elements if button arg passed in for other elements.
					 */
					$buttons['private_message'] = array(
						'id'                => $button_args['id'],
						'position'          => 25,
						'component'         => $button_args['component'],
						'must_be_logged_in' => $button_args['must_be_logged_in'],
						'block_self'        => $button_args['block_self'],
						'parent_element'    => $parent_element,
						'button_element'    => 'a',
						'link_text'         => $button_args['link_text'],
						'parent_attr'       => array(
							'id'    => $button_args['wrapper_id'],
							'class' => $parent_class,
						),
						'button_attr'       => array(
							'href'  => wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() ) . 'compose/?r=' . bp_core_get_username( $user_id ) ),
							'id'    => false,
							'class' => $button_args['link_class'],
							'rel'   => '',
							'title' => '',
							),
					);

					unset( bp_nouveau()->members->button_args );
				}
			}


		/*
	 * This filter workaround is waiting for a core adaptation
	 * so that we can directly get the follow button arguments
	 * instead of the button.
	 *
	 * See https://buddypress.trac.wordpress.org/ticket/7126
	 */
		add_filter( 'bp_get_add_switch_button', 'bp_nouveau_members_catch_button_args', 100, 1 );

		bp_get_add_switch_button( $user_id );

		remove_filter( 'bp_get_add_switch_button', 'bp_nouveau_members_catch_button_args', 100, 1 );

		if ( ! empty( bp_nouveau()->members->button_args ) ) {
			$button_args = bp_nouveau()->members->button_args;

			$buttons['member_switch'] = array(
				'id'                => 'member_switch',
				'position'          => 30,
				'component'         => $button_args['component'],
				'must_be_logged_in' => $button_args['must_be_logged_in'],
				'block_self'        => $button_args['block_self'],
				'parent_element'    => $parent_element,
				'link_href'         => $button_args['link_href'],
				'link_text'         => $button_args['link_text'],
				'parent_attr'       => array(
					'id'    => $button_args['wrapper_id'],
					'class' => $parent_class . ' ' . $button_args['wrapper_class'],
				),
				'button_element'    => 'a',
				'button_attr'       => array(
					'id'    => $button_args['link_id'],
					'class' => $button_args['link_class'],
					'rel'   => $button_args['link_rel'],
					'title' => '',
				),
			);

			if ( ! empty( $button_args['button_attr'] ) ) {
				foreach ( $button_args['button_attr'] as $title => $value ) {
					$buttons['member_switch']['button_attr'][ $title ] = $value;
				}
			}

			// If button element set add nonce link to data attr
			if ( 'button' === $button_element ) {
				$buttons['member_switch']['button_attr']['data-bp-nonce'] = $button_args['link_href'];
			} else {
				$buttons['member_switch']['button_element']      = 'a';
				$buttons['member_switch']['button_attr']['href'] = $button_args['link_href'];
			}

			unset( bp_nouveau()->members->button_args );
		}

		//}

		/**
		 * Filter to add your buttons, use the position argument to choose where to insert it.
		 *
		 * @since BuddyPress 3.0.0
		 *
		 * @param array  $buttons The list of buttons.
		 * @param int    $user_id The displayed user ID.
		 * @param string $type    Whether we're displaying a members loop or a user's page
		 */
		$buttons_group = apply_filters( 'bp_nouveau_get_members_buttons', $buttons, $user_id, $type );
		if ( ! $buttons_group ) {
			return $buttons;
		}

		// It's the first entry of the loop, so build the Group and sort it
		if ( ! isset( bp_nouveau()->members->member_buttons ) || ! is_a( bp_nouveau()->members->member_buttons, 'BP_Buttons_Group' ) ) {
			$sort = true;
			bp_nouveau()->members->member_buttons = new BP_Buttons_Group( $buttons_group );

		// It's not the first entry, the order is set, we simply need to update the Buttons Group
		} else {
			$sort = false;
			bp_nouveau()->members->member_buttons->update( $buttons_group );
		}

		$return = bp_nouveau()->members->member_buttons->get( $sort );

		if ( ! $return ) {
			return array();
		}

		/**
		 * Leave a chance to adjust the $return
		 *
		 * @since BuddyPress 3.0.0
		 *
		 * @param array  $return  The list of buttons ordered.
		 * @param int    $user_id The displayed user ID.
		 * @param string $type    Whether we're displaying a members loop or a user's page
		 */
		do_action_ref_array( 'bp_nouveau_return_members_buttons', array( &$return, $user_id, $type ) );

		return $return;
	}

Changelog

Changelog
Version Description
BuddyPress 3.0.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.