bp_nouveau_get_activity_entry_buttons( $args )
Get the action buttons inside an Activity Loop,
Description
Source
File: bp-templates/bp-nouveau/includes/activity/template-tags.php
function bp_nouveau_get_activity_entry_buttons( $args ) {
$buttons = array();
if ( ! isset( $GLOBALS['activities_template'] ) ) {
return $buttons;
}
$activity_id = bp_get_activity_id();
$activity_type = bp_get_activity_type();
$parent_element = '';
$button_element = 'a';
if ( ! $activity_id ) {
return $buttons;
}
/*
* If the container is set to 'ul' force the $parent_element to 'li',
* else use parent_element args if set.
*
* This will render li elements around anchors/buttons.
*/
if ( isset( $args['container'] ) && 'ul' === $args['container'] ) {
$parent_element = 'li';
} elseif ( ! empty( $args['parent_element'] ) ) {
$parent_element = $args['parent_element'];
}
$parent_attr = ( ! empty( $args['parent_attr'] ) ) ? $args['parent_attr'] : array();
/*
* 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.
*
*/
if ( ! empty( $args['button_element'] ) ) {
$button_element = $args['button_element'];
}
if ( bp_activity_can_favorite() && bp_is_activity_like_active() ) {
// If button element set attr needs to be data-* else 'href'
if ( 'button' === $button_element ) {
$key = 'data-bp-nonce';
} else {
$key = 'href';
}
if ( ! bp_get_activity_is_favorite() ) {
$fav_args = array(
'parent_element' => $parent_element,
'parent_attr' => $parent_attr,
'button_element' => $button_element,
'link_class' => 'button fav bp-secondary-action',
//'data_bp_tooltip' => __( 'Like', 'buddyboss' ),
'link_text' => __( 'Like', 'buddyboss' ),
'aria-pressed' => 'false',
'link_attr' => bp_get_activity_favorite_link(),
);
} else {
$fav_args = array(
'parent_element' => $parent_element,
'parent_attr' => $parent_attr,
'button_element' => $button_element,
'link_class' => 'button unfav bp-secondary-action',
//'data_bp_tooltip' => __( 'Unlike', 'buddyboss' ),
'link_text' => __( 'Unlike', 'buddyboss' ),
'aria-pressed' => 'true',
'link_attr' => bp_get_activity_unfavorite_link(),
);
}
$buttons['activity_favorite'] = array(
'id' => 'activity_favorite',
'position' => 4,
'component' => 'activity',
'parent_element' => $parent_element,
'parent_attr' => $parent_attr,
'must_be_logged_in' => true,
'button_element' => $fav_args['button_element'],
'link_text' => sprintf( '<span class="bp-screen-reader-text">%1$s</span> <span class="like-count">%2$s</span>', esc_html( $fav_args['link_text'] ), esc_html( $fav_args['link_text'] ) ),
'button_attr' => array(
$key => $fav_args['link_attr'],
'class' => $fav_args['link_class'],
//'data-bp-tooltip' => $fav_args['data_bp_tooltip'],
'aria-pressed' => $fav_args['aria-pressed'],
),
);
}
/*
* The view conversation button and the comment one are sharing
* the same id because when display_comments is on stream mode,
* it is not possible to comment an activity comment and as we
* are updating the links to avoid sorting the activity buttons
* for each entry of the loop, it's a convenient way to make
* sure the right button will be displayed.
*/
if ( $activity_type === 'activity_comment' ) {
$buttons['activity_conversation'] = array(
'id' => 'activity_conversation',
'position' => 5,
'component' => 'activity',
'parent_element' => $parent_element,
'parent_attr' => $parent_attr,
'must_be_logged_in' => false,
'button_element' => $button_element,
'button_attr' => array(
'class' => 'button view bp-secondary-action bp-tooltip',
'data-bp-tooltip' => __( 'View Conversation', 'buddyboss' ),
'data-bp-tooltip-pos' => 'up',
),
'link_text' => sprintf(
'<span class="bp-screen-reader-text">%1$s</span>',
__( 'View Conversation', 'buddyboss' )
),
);
// If button element set add url link to data-attr
if ( 'button' === $button_element ) {
$buttons['activity_conversation']['button_attr']['data-bp-url'] = bp_get_activity_thread_permalink();
} else {
$buttons['activity_conversation']['button_attr']['href'] = bp_get_activity_thread_permalink();
$buttons['activity_conversation']['button_attr']['role'] = 'button';
}
/*
* We always create the Button to make sure we always have the right numbers of buttons,
* no matter the previous activity had less.
*/
} else {
$buttons['activity_conversation'] = array(
'id' => 'activity_conversation',
'position' => 5,
'component' => 'activity',
'parent_element' => $parent_element,
'parent_attr' => $parent_attr,
'must_be_logged_in' => true,
'button_element' => $button_element,
'button_attr' => array(
'id' => 'acomment-comment-' . $activity_id,
'class' => 'button acomment-reply bp-primary-action',
// 'data-bp-tooltip' => __( 'Comment', 'buddyboss' ),
'aria-expanded' => 'false',
),
'link_text' => sprintf(
'<span class="bp-screen-reader-text">%1$s</span> <span class="comment-count">%2$s</span>',
__( 'Comment', 'buddyboss' ),
__( 'Comment', 'buddyboss' )
),
);
// If button element set add href link to data-attr
if ( 'button' === $button_element ) {
$buttons['activity_conversation']['button_attr']['data-bp-url'] = bp_get_activity_comment_link();
} else {
$buttons['activity_conversation']['button_attr']['href'] = bp_get_activity_comment_link();
$buttons['activity_conversation']['button_attr']['role'] = 'button';
}
}
// The delete button is always created, and removed later on if needed.
$delete_args = array();
/*
* As the delete link is filterable we need this workaround
* to try to intercept the edits the filter made and build
* a button out of it.
*/
if ( has_filter( 'bp_get_activity_delete_link' ) ) {
preg_match( '/<a\s[^>]*>(.*)<\/a>/siU', bp_get_activity_delete_link(), $link );
if ( ! empty( $link[0] ) && ! empty( $link[1] ) ) {
$delete_args['link_text'] = $link[1];
$subject = str_replace( $delete_args['link_text'], '', $link[0] );
}
preg_match_all( '/([\w\-]+)=([^"\'> ]+|([\'"]?)(?:[^\3]|\3+)+?\3)/', $subject, $attrs );
if ( ! empty( $attrs[1] ) && ! empty( $attrs[2] ) ) {
foreach ( $attrs[1] as $key_attr => $key_value ) {
$delete_args[ 'link_'. $key_value ] = trim( $attrs[2][$key_attr], '"' );
}
}
$delete_args = wp_parse_args( $delete_args, array(
'link_text' => '',
'button_attr' => array(
'link_id' => '',
'link_href' => '',
'link_class' => '',
'link_rel' => 'nofollow',
'data_bp_tooltip' => '',
),
) );
}
if ( empty( $delete_args['link_href'] ) ) {
$delete_args = array(
'button_element' => $button_element,
'link_id' => '',
'link_class' => 'button item-button bp-secondary-action delete-activity confirm',
'link_rel' => 'nofollow',
'data_bp_tooltip' => __( 'Delete', 'buddyboss' ),
'link_text' => __( 'Delete', 'buddyboss' ),
'link_href' => bp_get_activity_delete_url(),
);
// If button element set add nonce link to data-attr attr
if ( 'button' === $button_element ) {
$delete_args['data-attr'] = bp_get_activity_delete_url();
$delete_args['link_href'] = '';
} else {
$delete_args['link_href'] = bp_get_activity_delete_url();
$delete_args['data-attr'] = '';
}
}
$buttons['activity_delete'] = array(
'id' => 'activity_delete',
'position' => 35,
'component' => 'activity',
'parent_element' => $parent_element,
'parent_attr' => $parent_attr,
'must_be_logged_in' => true,
'button_element' => $button_element,
'button_attr' => array(
'id' => $delete_args['link_id'],
'href' => $delete_args['link_href'],
'class' => $delete_args['link_class'],
//'data-bp-tooltip' => $delete_args['data_bp_tooltip'],
'data-bp-nonce' => $delete_args['data-attr'] ,
),
'link_text' => sprintf(
'<span class="bp-screen-reader-text">%s</span><span class="delete-label">%s</span>',
esc_html( $delete_args['data_bp_tooltip'] ),
esc_html( $delete_args['data_bp_tooltip'] )
),
);
// Add the Spam Button if supported
if ( bp_is_akismet_active() && isset( buddypress()->activity->akismet ) && bp_activity_user_can_mark_spam() ) {
$buttons['activity_spam'] = array(
'id' => 'activity_spam',
'position' => 45,
'component' => 'activity',
'parent_element' => $parent_element,
'parent_attr' => $parent_attr,
'must_be_logged_in' => true,
'button_element' => $button_element,
'button_attr' => array(
'class' => 'bp-secondary-action spam-activity confirm button item-button bp-tooltip',
'id' => 'activity_make_spam_' . $activity_id,
'data-bp-tooltip' => __( 'Spam', 'buddyboss' ),
'data-bp-tooltip-pos' => 'up',
),
'link_text' => sprintf(
/** @todo: use a specific css rule for this *************************************************************/
'<span class="dashicons dashicons-flag" style="color:#a00;vertical-align:baseline;width:18px;height:18px" aria-hidden="true"></span><span class="bp-screen-reader-text">%s</span>',
esc_html__( 'Spam', 'buddyboss' )
),
);
// If button element, add nonce link to data attribute.
if ( 'button' === $button_element ) {
$data_element = 'data-bp-nonce';
} else {
$data_element = 'href';
}
$buttons['activity_spam']['button_attr'][ $data_element ] = wp_nonce_url(
bp_get_root_domain() . '/' . bp_get_activity_slug() . '/spam/' . $activity_id . '/',
'bp_activity_akismet_spam_' . $activity_id
);
}
/**
* 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 $activity_id The current activity ID.
*/
$buttons_group = apply_filters( 'bp_nouveau_get_activity_entry_buttons', $buttons, $activity_id );
if ( ! $buttons_group ) {
return $buttons;
}
// It's the first entry of the loop, so build the Group and sort it
if ( ! isset( bp_nouveau()->activity->entry_buttons ) || ! is_a( bp_nouveau()->activity->entry_buttons, 'BP_Buttons_Group' ) ) {
$sort = true;
bp_nouveau()->activity->entry_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()->activity->entry_buttons->update( $buttons_group );
}
$return = bp_nouveau()->activity->entry_buttons->get( $sort );
if ( ! $return ) {
return array();
}
// Remove the Comment button if the user can't comment
if ( ! bp_activity_can_comment() && $activity_type !== 'activity_comment' ) {
unset( $return['activity_conversation'] );
}
// Remove the Delete button if the user can't delete
if ( ! bp_activity_user_can_delete() ) {
unset( $return['activity_delete'] );
}
if ( isset( $return['activity_spam'] ) && ! in_array( $activity_type, BP_Akismet::get_activity_types() ) ) {
unset( $return['activity_spam'] );
}
/**
* Leave a chance to adjust the $return
*
* @since BuddyPress 3.0.0
*
* @param array $return The list of buttons ordered.
* @param int $activity_id The current activity ID.
*/
do_action_ref_array( 'bp_nouveau_return_activity_entry_buttons', array( &$return, $activity_id ) );
return $return;
}
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.