Skip to:
Content

BuddyPress.org

Ticket #3294: 3294.2.diff

File 3294.2.diff, 8.7 KB (added by boonebgorges, 13 years ago)
  • bp-friends/bp-friends-activity.php

    function friends_register_activity_actions() { 
    5151}
    5252add_action( 'bp_register_activity_actions', 'friends_register_activity_actions' );
    5353
    54 function friends_format_notifications( $action, $item_id, $secondary_item_id, $total_items ) {
     54function friends_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
    5555        global $bp;
    5656
    5757        switch ( $action ) {
    5858                case 'friendship_accepted':
    59                 $user_fullname = bp_core_get_user_displayname( $item_id );
    60                         if ( (int)$total_items > 1 )
    61                                 return apply_filters( 'bp_friends_multiple_friendship_accepted_notification', '<a href="' . $bp->loggedin_user->domain . $bp->friends->slug . '/my-friends/newest">' . sprintf( __('%d friends accepted your friendship requests', 'buddypress' ), (int)$total_items ) . '</a>', (int)$total_items );
    62                         else
    63                                 return apply_filters( 'bp_friends_single_friendship_accepted_notification', '<a href="' . $bp->loggedin_user->domain . $bp->friends->slug . '/my-friends/newest">' . sprintf( __( '%s accepted your friendship request', 'buddypress' ), $user_fullname ) . '</a>', $user_fullname );
    64 
     59                        $link = bp_loggedin_user_domain() . $bp->friends->slug . '/my-friends/newest';
     60                       
     61                        // Set up the string and the filter
     62                        if ( (int)$total_items > 1 ) {
     63                                $text = sprintf( __( '%d friends accepted your friendship requests', 'buddypress' ), (int)$total_items );
     64                                $filter = 'bp_friends_multiple_friendship_accepted_notification';
     65                        } else {
     66                                $text = sprintf( __( '%s accepted your friendship request', 'buddypress' ),  bp_core_get_user_displayname( $item_id ) );
     67                                $filter = 'bp_friends_single_friendship_accepted_notification';
     68                        }
     69                       
    6570                        break;
    6671
    6772                case 'friendship_request':
     73                        $link = bp_loggedin_user_domain() . $bp->friends->slug . '/requests';
     74                       
     75                        // Set up the string and the filter
    6876                        if ( (int)$total_items > 1 ) {
    69                                 return apply_filters( 'bp_friends_multiple_friendship_request_notification', '<a href="' . $bp->loggedin_user->domain . $bp->friends->slug . '/requests/?new" title="' . __( 'Friendship requests', 'buddypress' ) . '">' . sprintf( __('You have %d pending friendship requests', 'buddypress' ), (int)$total_items ) . '</a>', $total_items );
     77                                $text = sprintf( __( 'You have %d pending friendship requests', 'buddypress' ), (int)$total_items );
     78                                $filter = 'bp_friends_multiple_friendship_request_notification';
    7079                        } else {
    71                                 $user_fullname = bp_core_get_user_displayname( $item_id );
    72                                 $user_url = bp_core_get_user_domain( $item_id );
    73                                 return apply_filters( 'bp_friends_single_friendship_request_notification', '<a href="' . $bp->loggedin_user->domain . $bp->friends->slug . '/requests/?new" title="' . __( 'Friendship requests', 'buddypress' ) . '">' . sprintf( __('You have a friendship request from %s', 'buddypress' ), $user_fullname ) . '</a>', $user_fullname );
     80                                $text = sprintf( __( 'You have a friendship request from %s', 'buddypress' ),  bp_core_get_user_displayname( $item_id ) );
     81                                $filter = 'bp_friends_single_friendship_request_notification';
    7482                        }
     83               
    7584                        break;
    7685        }
     86               
     87        // Return either an HTML link or an array, depending on the requested format
     88        if ( 'string' == $format ) {
     89                $return = apply_filters( $filter, '<a href="' . $link . '">' . $text . '</a>', (int)$total_items );
     90        } else {
     91                $return = apply_filters( $filter, array(
     92                        'link' => $link,
     93                        'text' => $text
     94                ), (int)$total_items );
     95        }
    7796
    78         do_action( 'friends_format_notifications', $action, $item_id, $secondary_item_id, $total_items );
     97        do_action( 'friends_format_notifications', $action, $item_id, $secondary_item_id, $total_items, $return );
    7998
    80         return false;
     99        return $return;
    81100}
    82101
    83102?>
  • bp-members/bp-members-adminbar.php

    add_action( 'bp_setup_admin_bar', 'bp_members_admin_bar_my_account_menu', 4 ); 
    101101 * @package BuddyPress
    102102 * @since 1.3
    103103 */
    104 function bp_members_user_admin_menu() {
     104function bp_members_admin_bar_user_admin_menu() {
    105105        global $wp_admin_bar;
    106106
    107107        // Only show if viewing a user
    function bp_members_user_admin_menu() { 
    171171                'meta'   => array( 'onclick' => 'confirm(" ' . __( "Are you sure you want to delete this user's account?", 'buddypress' ) . '");' )
    172172        ) );
    173173}
    174 add_action( 'bp_setup_admin_bar', 'bp_members_user_admin_menu', 99 );
     174add_action( 'bp_setup_admin_bar', 'bp_members_admin_bar_user_admin_menu', 99 );
     175
     176/**
     177 * Build the "Notifications" dropdown
     178 *
     179 * @package Buddypress
     180 * @since 1.3
     181 */
     182function bp_members_admin_bar_notifications_menu() {
     183        global $bp, $wp_admin_bar;
     184
     185        if ( !is_user_logged_in() )
     186                return false;
     187               
     188        if ( $notifications = bp_members_get_notifications_for_user( bp_loggedin_user_id(), 'object' ) ) {
     189                $menu_title = sprintf( __( 'Notifications <span id="ab-pending-notifications" class="pending-count">%s</span>', 'buddypress' ), count( $notifications ) );
     190        } else {
     191                $menu_title = __( 'Notifications', 'buddypress' );
     192        }
     193       
     194        // Add the top-level Notifications button
     195        $wp_admin_bar->add_menu( array(
     196                'id'    => 'notifications',
     197                'title' => $menu_title,
     198                'href'  => bp_loggedin_user_domain()
     199        ) );
     200       
     201        $counter = 0;
     202        if ( !empty( $notifications ) ) {
     203                foreach ( (array)$notifications as $notification ) {
     204                        $alt = ( 0 == $counter % 2 ) ? 'alt' : '';
     205                       
     206                        $wp_admin_bar->add_menu( array(
     207                                'parent' => 'notifications',
     208                                'id'     => 'notification-' . $notification->id,
     209                                'title'  => $notification->content,
     210                                'href'   => $notification->href,
     211                                'meta'   => array( 'class' => $alt )
     212                        ) );
     213                }
     214        } else {
     215                $wp_admin_bar->add_menu( array(
     216                        'parent' => 'notifications',
     217                        'id'     => 'no-notifications',
     218                        'title'  => __( 'No new notifications', 'buddypress' ),
     219                        'href'   => bp_loggedin_user_domain()
     220                ) );
     221        }
     222       
     223        return;
     224}
     225add_action( 'bp_setup_admin_bar', 'bp_members_admin_bar_notifications_menu', 8 );
    175226
    176227/**
    177228 * Make sure the logout link is at the bottom of the "My Account" menu
  • bp-members/bp-members-notifications.php

    function bp_members_get_notification( $id ) { 
    4343        return new BP_Core_Notification( $id );
    4444}
    4545
    46 function bp_members_get_notifications_for_user( $user_id ) {
     46function bp_members_get_notifications_for_user( $user_id, $format = 'simple' ) {
    4747        global $bp;
    4848
    4949        $notifications = BP_Core_Notification::get_all_for_user( $user_id );
    function bp_members_get_notifications_for_user( $user_id ) { 
    7171                        // @deprecated format_notification_function - 1.3
    7272                        if ( isset( $bp->{$component_name}->format_notification_function ) && function_exists( $bp->{$component_name}->format_notification_function ) ) {
    7373                                $renderable[] = call_user_func( $bp->{$component_name}->format_notification_function, $component_action_name, $component_action_items[0]->item_id, $component_action_items[0]->secondary_item_id, $action_item_count );
    74                         } elseif ( isset( $bp->{$component_name}->notification_callback ) && function_exists( $bp->{$component_name}->notification_callback ) ) {
    75                                 $renderable[] = call_user_func( $bp->{$component_name}->notification_callback, $component_action_name, $component_action_items[0]->item_id, $component_action_items[0]->secondary_item_id, $action_item_count );
     74                        } elseif ( isset( $bp->{$component_name}->notification_callback ) && function_exists( $bp->{$component_name}->notification_callback ) ) {
     75                                if ( 'object' == $format ) {
     76                                        $content = call_user_func( $bp->{$component_name}->notification_callback, $component_action_name, $component_action_items[0]->item_id, $component_action_items[0]->secondary_item_id, $action_item_count, 'array' );
     77                                       
     78                                        // Minimal backpat with non-compatible notification
     79                                        // callback functions
     80                                        if ( is_string( $content ) ) {
     81                                                $notification->content = $content;
     82                                                $notification->href    = bp_loggedin_user_domain();
     83                                        } else {
     84                                                $notification->content = $content['text'];
     85                                                $notification->href    = $content['link'];
     86                                        }
     87                                       
     88                                        $renderable[]          = $notification;
     89                                } else {
     90                                        $content = call_user_func( $bp->{$component_name}->notification_callback, $component_action_name, $component_action_items[0]->item_id, $component_action_items[0]->secondary_item_id, $action_item_count );
     91                                        $renderable[] = $content;
     92                                }
    7693                        }
    7794                }
    7895        }