array(
'file' => buddypress()->plugin_url . 'bp-activity/css/mentions%1$s%2$s.css',
'dependencies' => array( 'bp-nouveau' ),
'version' => bp_get_version(),
),
) );
}
/**
* Register Scripts for the Messages component
*
* @since 3.0.0
*
* @param array $scripts The array of scripts to register
*
* @return array The same array with the specific messages scripts.
*/
function bp_nouveau_messages_register_scripts( $scripts = array() ) {
if ( ! isset( $scripts['bp-nouveau'] ) ) {
return $scripts;
}
return array_merge( $scripts, array(
'bp-nouveau-messages-at' => array(
'file' => buddypress()->plugin_url . 'bp-activity/js/mentions%s.js',
'dependencies' => array( 'bp-nouveau', 'jquery', 'jquery-atwho' ),
'version' => bp_get_version(),
'footer' => true,
),
'bp-nouveau-messages' => array(
'file' => 'js/buddypress-messages%s.js',
'dependencies' => array( 'bp-nouveau', 'json2', 'wp-backbone', 'bp-nouveau-messages-at' ),
'footer' => true,
),
) );
}
/**
* Enqueue the messages scripts
*
* @since 3.0.0
*/
function bp_nouveau_messages_enqueue_scripts() {
if ( ! bp_is_user_messages() ) {
return;
}
wp_enqueue_script( 'bp-nouveau-messages' );
// Add The tiny MCE init specific function.
add_filter( 'tiny_mce_before_init', 'bp_nouveau_messages_at_on_tinymce_init', 10, 2 );
}
/**
* Localize the strings needed for the messages UI
*
* @since 3.0.0
*
* @param array $params Associative array containing the JS Strings needed by scripts
* @return array The same array with specific strings for the messages UI if needed.
*/
function bp_nouveau_messages_localize_scripts( $params = array() ) {
if ( ! bp_is_user_messages() ) {
return $params;
}
$bp = buddypress();
$slug = bp_nouveau_get_component_slug( 'messages' );
// Use the primary nav to get potential custom slugs.
$primary_nav = $bp->members->nav->get( $slug );
if ( isset( $primary_nav->link ) && $primary_nav->link ) {
$root_url = $primary_nav->link;
// Make sure to use the displayed user domain.
if ( bp_loggedin_user_domain() ) {
$root_url = str_replace( bp_loggedin_user_domain(), bp_displayed_user_domain(), $root_url );
}
} else {
$root_url = trailingslashit( bp_displayed_user_domain() . $slug );
}
// Build default routes list.
$routes = array(
'inbox' => 'inbox',
'sentbox' => 'sentbox',
'compose' => 'compose',
);
if ( bp_is_active( 'messages', 'star' ) ) {
$routes['starred'] = 'starred';
}
// Use the secondary nav to get potential custom slugs.
$secondary_nav = $bp->members->nav->get_secondary( array( 'parent_slug' => $slug ), false );
// Resets the routes list using link slugs.
if ( $secondary_nav ) {
foreach ( $secondary_nav as $subnav_item ) {
$routes[ $subnav_item->slug ] = trim( str_replace( $root_url, '', $subnav_item->link ), '/' );
if ( ! $routes[ $subnav_item->slug ] ) {
$routes[ $subnav_item->slug ] = $subnav_item->slug;
}
}
}
$params['messages'] = array(
'errors' => array(
'send_to' => __( 'Please add at least one recipient.', 'buddypress' ),
'subject' => __( 'Please add a subject to your message.', 'buddypress' ),
'message_content' => __( 'Please add some content to your message.', 'buddypress' ),
),
'nonces' => array(
'send' => wp_create_nonce( 'messages_send_message' ),
),
'loading' => __( 'Loading messages. Please wait.', 'buddypress' ),
'doingAction' => array(
'read' => __( 'Marking messages as read. Please wait.', 'buddypress' ),
'unread' => __( 'Marking messages as unread. Please wait.', 'buddypress' ),
'delete' => __( 'Deleting messages. Please wait.', 'buddypress' ),
'star' => __( 'Starring messages. Please wait.', 'buddypress' ),
'unstar' => __( 'Unstarring messages. Please wait.', 'buddypress' ),
),
'bulk_actions' => bp_nouveau_messages_get_bulk_actions(),
'howto' => __( 'Click on the message title to preview it in the Active conversation box below.', 'buddypress' ),
'howtoBulk' => __( 'Use the select box to define your bulk action and click on the ✓ button to apply.', 'buddypress' ),
'toOthers' => array(
'one' => __( '(and 1 other)', 'buddypress' ),
/* translators: %s: number of message recipients */
'more' => __( '(and %d others)', 'buddypress' ),
),
'rootUrl' => parse_url( $root_url, PHP_URL_PATH ),
'supportedRoutes' => $routes,
);
// Star private messages.
if ( bp_is_active( 'messages', 'star' ) ) {
$params['messages'] = array_merge( $params['messages'], array(
'strings' => array(
'text_unstar' => __( 'Unstar', 'buddypress' ),
'text_star' => __( 'Star', 'buddypress' ),
'title_unstar' => __( 'Starred', 'buddypress' ),
'title_star' => __( 'Not starred', 'buddypress' ),
'title_unstar_thread' => __( 'Remove all starred messages in this thread', 'buddypress' ),
'title_star_thread' => __( 'Star the first message in this thread', 'buddypress' ),
),
'is_single_thread' => (int) bp_is_messages_conversation(),
'star_counter' => 0,
'unstar_counter' => 0
) );
}
return $params;
}
/**
* @since 3.0.0
*/
function bp_nouveau_messages_adjust_nav() {
$bp = buddypress();
$secondary_nav_items = $bp->members->nav->get_secondary( array( 'parent_slug' => bp_nouveau_get_component_slug( 'messages' ) ), false );
if ( empty( $secondary_nav_items ) ) {
return;
}
foreach ( $secondary_nav_items as $secondary_nav_item ) {
if ( empty( $secondary_nav_item->slug ) ) {
continue;
}
if ( 'notices' === $secondary_nav_item->slug ) {
bp_core_remove_subnav_item( bp_nouveau_get_component_slug( 'messages' ), $secondary_nav_item->slug, 'members' );
} elseif ( 'compose' === $secondary_nav_item->slug ) {
$bp->members->nav->edit_nav( array(
'user_has_access' => bp_is_my_profile()
), $secondary_nav_item->slug, bp_nouveau_get_component_slug( 'messages' ) );
}
}
}
/**
* @since 3.0.0
*/
function bp_nouveau_messages_adjust_admin_nav( $admin_nav ) {
if ( empty( $admin_nav ) ) {
return $admin_nav;
}
$user_messages_link = trailingslashit( bp_loggedin_user_domain() . bp_nouveau_get_component_slug( 'messages' ) );
foreach ( $admin_nav as $nav_iterator => $nav ) {
$nav_id = str_replace( 'my-account-messages-', '', $nav['id'] );
if ( 'notices' === $nav_id ) {
$admin_nav[ $nav_iterator ]['href'] = esc_url( add_query_arg( array(
'page' => 'bp-notices'
), bp_get_admin_url( 'users.php' ) ) );
}
}
return $admin_nav;
}
/**
* Prepend a notification about the active Sitewide notice.
*
* @since 3.0.0
*
* @param false|array $notifications False if there are no items, an array of notification items otherwise.
* @param int $user_id The user ID.
* @return false|array False if there are no items, an array of notification items otherwise.
*/
function bp_nouveau_add_notice_notification_for_user( $notifications, $user_id ) {
if ( ! bp_is_active( 'messages' ) || ! doing_action( 'admin_bar_menu' ) ) {
return $notifications;
}
$notice = BP_Messages_Notice::get_active();
if ( empty( $notice->id ) ) {
return $notifications;
}
$closed_notices = bp_get_user_meta( $user_id, 'closed_notices', true );
if ( empty( $closed_notices ) ) {
$closed_notices = array();
}
if ( in_array( $notice->id, $closed_notices, true ) ) {
return $notifications;
}
$notice_notification = (object) array(
'id' => 0,
'user_id' => $user_id,
'item_id' => $notice->id,
'secondary_item_id' => 0,
'component_name' => 'messages',
'component_action' => 'new_notice',
'date_notified' => $notice->date_sent,
'is_new' => 1,
'total_count' => 1,
'content' => __( 'New sitewide notice', 'buddypress' ),
'href' => bp_loggedin_user_domain(),
);
if ( ! is_array( $notifications ) ) {
$notifications = array( $notice_notification );
} else {
array_unshift( $notifications, $notice_notification );
}
return $notifications;
}
/**
* Format the notice notifications.
*
* @since 3.0.0
* @deprecated 10.0.0
*
* @param array $array.
*/
function bp_nouveau_format_notice_notification_for_user( $array ) {
_deprecated_function( __FUNCTION__, '10.0.0' );
}
/**
* @since 3.0.0
*/
function bp_nouveau_unregister_notices_widget() {
unregister_widget( 'BP_Messages_Sitewide_Notices_Widget' );
}
/**
* Add active sitewide notices to the BP template_message global.
*
* @since 3.0.0
*/
function bp_nouveau_push_sitewide_notices() {
// Do not show notices if user is not logged in.
if ( ! is_user_logged_in() || ! bp_is_my_profile() ) {
return;
}
$notice = BP_Messages_Notice::get_active();
if ( empty( $notice ) ) {
return;
}
$user_id = bp_loggedin_user_id();
$closed_notices = bp_get_user_meta( $user_id, 'closed_notices', true );
if ( empty( $closed_notices ) ) {
$closed_notices = array();
}
if ( $notice->id && is_array( $closed_notices ) && ! in_array( $notice->id, $closed_notices, true ) ) {
// Inject the notice into the template_message if no other message has priority.
$bp = buddypress();
if ( empty( $bp->template_message ) ) {
$message = sprintf(
'%s
%s',
stripslashes( $notice->subject ),
stripslashes( $notice->message )
);
$bp->template_message = $message;
$bp->template_message_type = 'bp-sitewide-notice';
}
}
}
/**
* Disable the WP Editor buttons not allowed in messages content.
*
* @since 3.0.0
*
* @param array $buttons The WP Editor buttons list.
* @param array The filtered WP Editor buttons list.
*/
function bp_nouveau_messages_mce_buttons( $buttons = array() ) {
$remove_buttons = array(
'wp_more',
'spellchecker',
'wp_adv',
'fullscreen',
'alignleft',
'alignright',
'aligncenter',
'formatselect',
);
// Remove unused buttons
$buttons = array_diff( $buttons, $remove_buttons );
// Add the image button
array_push( $buttons, 'image' );
return $buttons;
}
/**
* @since 3.0.0
*/
function bp_nouveau_messages_at_on_tinymce_init( $settings, $editor_id ) {
// We only apply the mentions init to the visual post editor in the WP dashboard.
if ( 'message_content' === $editor_id ) {
$settings['init_instance_callback'] = 'window.bp.Nouveau.Messages.tinyMCEinit';
}
return $settings;
}
/**
* @since 3.0.0
*/
function bp_nouveau_get_message_date( $date ) {
$now = bp_core_current_time( true, 'timestamp' );
$date = strtotime( $date );
$now_date = getdate( $now );
$date_date = getdate( $date );
$compare = array_diff( $date_date, $now_date );
$date_format = 'Y/m/d';
// Use Timezone string if set.
$timezone_string = bp_get_option( 'timezone_string' );
if ( ! empty( $timezone_string ) ) {
$timezone_object = timezone_open( $timezone_string );
$datetime_object = date_create( "@{$date}" );
$timezone_offset = timezone_offset_get( $timezone_object, $datetime_object ) / HOUR_IN_SECONDS;
// Fall back on less reliable gmt_offset
} else {
$timezone_offset = bp_get_option( 'gmt_offset' );
}
// Calculate time based on the offset
$calculated_time = $date + ( $timezone_offset * HOUR_IN_SECONDS );
if ( empty( $compare['mday'] ) && empty( $compare['mon'] ) && empty( $compare['year'] ) ) {
$date_format = 'H:i';
} elseif ( empty( $compare['mon'] ) || empty( $compare['year'] ) ) {
$date_format = 'M j';
}
/**
* Filters the message date for BuddyPress Nouveau display.
*
* @since 3.0.0
*
* @param string $value Internationalization-ready formatted date value.
* @param mixed $calculated_time Calculated time.
* @param string $date Date value.
* @param string $date_format Format to convert the calcuated date to.
*/
return apply_filters( 'bp_nouveau_get_message_date', date_i18n( $date_format, $calculated_time, true ), $calculated_time, $date, $date_format );
}
/**
* @since 3.0.0
*/
function bp_nouveau_messages_get_bulk_actions() {
ob_start();
bp_messages_bulk_management_dropdown();
$bulk_actions = array();
$bulk_options = ob_get_clean();
$matched = preg_match_all( '/