- Timestamp:
- 02/05/2016 05:22:55 AM (9 years ago)
- File:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-messages/classes/class-bp-messages-thread-template.php
r10515 r10522 1 1 <?php 2 2 /** 3 * BuddyPress Messages T emplate Tags.3 * BuddyPress Messages Thread Template Class. 4 4 * 5 5 * @package BuddyPress … … 10 10 // Exit if accessed directly. 11 11 defined( 'ABSPATH' ) || exit; 12 13 /**14 * Message Box Template Class15 */16 class BP_Messages_Box_Template {17 18 /**19 * The loop iterator.20 *21 * @var int22 */23 public $current_thread = -1;24 25 /**26 * The number of threads returned by the paged query.27 *28 * @var int29 */30 public $current_thread_count = 0;31 32 /**33 * Total number of threads matching the query params.34 *35 * @var int36 */37 public $total_thread_count = 0;38 39 /**40 * Array of threads located by the query.41 *42 * @var array43 */44 public $threads = array();45 46 /**47 * The thread object currently being iterated on.48 *49 * @var object50 */51 public $thread = false;52 53 /**54 * A flag for whether the loop is currently being iterated.55 *56 * @var bool57 */58 public $in_the_loop = false;59 60 /**61 * User ID of the current inbox.62 *63 * @var int64 */65 public $user_id = 0;66 67 /**68 * The current "box" view ('notices', 'sentbox', 'inbox').69 *70 * @var string71 */72 public $box = 'inbox';73 74 /**75 * The page number being requested.76 *77 * @var int78 */79 public $pag_page = 1;80 81 /**82 * The number of items being requested per page.83 *84 * @var int85 */86 public $pag_num = 10;87 88 /**89 * An HTML string containing pagination links.90 *91 * @var string92 */93 public $pag_links = '';94 95 /**96 * Search terms for limiting the thread query.97 *98 * @var string99 */100 public $search_terms = '';101 102 /**103 * Constructor method.104 *105 * @param array $args {106 * Array of arguments. See bp_has_message_threads() for full description.107 * }108 */109 public function __construct( $args = array() ) {110 111 // Backward compatibility with old method of passing arguments.112 if ( ! is_array( $args ) || func_num_args() > 1 ) {113 _deprecated_argument( __METHOD__, '2.2.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );114 115 $old_args_keys = array(116 0 => 'user_id',117 1 => 'box',118 2 => 'per_page',119 3 => 'max',120 4 => 'type',121 5 => 'search_terms',122 6 => 'page_arg'123 );124 125 $func_args = func_get_args();126 $args = bp_core_parse_args_array( $old_args_keys, $func_args );127 }128 129 $r = wp_parse_args( $args, array(130 'page' => 1,131 'per_page' => 10,132 'page_arg' => 'mpage',133 'box' => 'inbox',134 'type' => 'all',135 'user_id' => bp_loggedin_user_id(),136 'max' => false,137 'search_terms' => '',138 'meta_query' => array(),139 ) );140 141 $this->pag_arg = sanitize_key( $r['page_arg'] );142 $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page'] );143 $this->pag_num = bp_sanitize_pagination_arg( 'num', $r['per_page'] );144 $this->user_id = $r['user_id'];145 $this->box = $r['box'];146 $this->type = $r['type'];147 $this->search_terms = $r['search_terms'];148 149 if ( 'notices' === $this->box ) {150 $this->threads = BP_Messages_Notice::get_notices( array(151 'pag_num' => $this->pag_num,152 'pag_page' => $this->pag_page153 ) );154 } else {155 $threads = BP_Messages_Thread::get_current_threads_for_user( array(156 'user_id' => $this->user_id,157 'box' => $this->box,158 'type' => $this->type,159 'limit' => $this->pag_num,160 'page' => $this->pag_page,161 'search_terms' => $this->search_terms,162 'meta_query' => $r['meta_query'],163 ) );164 165 $this->threads = $threads['threads'];166 $this->total_thread_count = $threads['total'];167 }168 169 if ( !$this->threads ) {170 $this->thread_count = 0;171 $this->total_thread_count = 0;172 } else {173 $total_notice_count = BP_Messages_Notice::get_total_notice_count();174 175 if ( empty( $r['max'] ) || ( (int) $r['max'] >= (int) $total_notice_count ) ) {176 if ( 'notices' === $this->box ) {177 $this->total_thread_count = (int) $total_notice_count;178 }179 } else {180 $this->total_thread_count = (int) $r['max'];181 }182 183 if ( ! empty( $r['max'] ) ) {184 if ( (int) $r['max'] >= count( $this->threads ) ) {185 $this->thread_count = count( $this->threads );186 } else {187 $this->thread_count = (int) $r['max'];188 }189 } else {190 $this->thread_count = count( $this->threads );191 }192 }193 194 if ( (int) $this->total_thread_count && (int) $this->pag_num ) {195 $pag_args = array(196 $r['page_arg'] => '%#%',197 );198 199 if ( defined( 'DOING_AJAX' ) && true === (bool) DOING_AJAX ) {200 $base = remove_query_arg( 's', wp_get_referer() );201 } else {202 $base = '';203 }204 205 $add_args = array();206 207 if ( ! empty( $this->search_terms ) ) {208 $add_args['s'] = $this->search_terms;209 }210 211 $this->pag_links = paginate_links( array(212 'base' => add_query_arg( $pag_args, $base ),213 'format' => '',214 'total' => ceil( (int) $this->total_thread_count / (int) $this->pag_num ),215 'current' => $this->pag_page,216 'prev_text' => _x( '←', 'Message pagination previous text', 'buddypress' ),217 'next_text' => _x( '→', 'Message pagination next text', 'buddypress' ),218 'mid_size' => 1,219 'add_args' => $add_args,220 ) );221 }222 }223 224 /**225 * Whether there are threads available in the loop.226 *227 * @see bp_has_message_threads()228 *229 * @return bool True if there are items in the loop, otherwise false.230 */231 public function has_threads() {232 if ( $this->thread_count ) {233 return true;234 }235 236 return false;237 }238 239 /**240 * Set up the next member and iterate index.241 *242 * @return object The next member to iterate over.243 */244 public function next_thread() {245 $this->current_thread++;246 $this->thread = $this->threads[$this->current_thread];247 248 return $this->thread;249 }250 251 /**252 * Rewind the threads and reset thread index.253 */254 public function rewind_threads() {255 $this->current_thread = -1;256 if ( $this->thread_count > 0 ) {257 $this->thread = $this->threads[0];258 }259 }260 261 /**262 * Whether there are threads left in the loop to iterate over.263 *264 * This method is used by {@link bp_message_threads()} as part of the265 * while loop that controls iteration inside the threads loop, eg:266 * while ( bp_message_threads() ) { ...267 *268 * @see bp_message_threads()269 *270 * @return bool True if there are more threads to show, otherwise false.271 */272 function message_threads() {273 if ( $this->current_thread + 1 < $this->thread_count ) {274 return true;275 } elseif ( $this->current_thread + 1 == $this->thread_count ) {276 277 /**278 * Fires when at the end of threads to iterate over.279 *280 * @since 1.5.0281 */282 do_action( 'messages_box_loop_end' );283 // Do some cleaning up after the loop.284 $this->rewind_threads();285 }286 287 $this->in_the_loop = false;288 return false;289 }290 291 /**292 * Set up the current thread inside the loop.293 *294 * Used by {@link bp_message_thread()} to set up the current thread data295 * while looping, so that template tags used during that iteration make296 * reference to the current thread.297 *298 * @see bp_message_thread()299 */300 public function the_message_thread() {301 302 $this->in_the_loop = true;303 $this->thread = $this->next_thread();304 305 if ( ! bp_is_current_action( 'notices' ) ) {306 $last_message_index = count( $this->thread->messages ) - 1;307 $this->thread->messages = array_reverse( (array) $this->thread->messages );308 309 // Set up the last message data.310 if ( count($this->thread->messages) > 1 ) {311 if ( 'inbox' == $this->box ) {312 foreach ( (array) $this->thread->messages as $key => $message ) {313 if ( bp_loggedin_user_id() != $message->sender_id ) {314 $last_message_index = $key;315 break;316 }317 }318 319 } elseif ( 'sentbox' == $this->box ) {320 foreach ( (array) $this->thread->messages as $key => $message ) {321 if ( bp_loggedin_user_id() == $message->sender_id ) {322 $last_message_index = $key;323 break;324 }325 }326 }327 }328 329 $this->thread->last_message_id = $this->thread->messages[ $last_message_index ]->id;330 $this->thread->last_message_date = $this->thread->messages[ $last_message_index ]->date_sent;331 $this->thread->last_sender_id = $this->thread->messages[ $last_message_index ]->sender_id;332 $this->thread->last_message_subject = $this->thread->messages[ $last_message_index ]->subject;333 $this->thread->last_message_content = $this->thread->messages[ $last_message_index ]->message;334 }335 336 // Loop has just started.337 if ( 0 == $this->current_thread ) {338 339 /**340 * Fires if at the start of the message thread loop.341 *342 * @since 1.5.0343 */344 do_action( 'messages_box_loop_start' );345 }346 }347 }348 349 /**350 * Retrieve private message threads for display in inbox/sentbox/notices.351 *352 * Similar to WordPress's have_posts() function, this function is responsible353 * for querying the database and retrieving private messages for display inside354 * the theme via individual template parts for a member's inbox/sentbox/notices.355 *356 * @since 1.0.0357 *358 * @global BP_Messages_Box_Template $messages_template359 *360 * @param array|string $args {361 * Array of arguments. All are optional.362 * @type int $user_id ID of the user whose threads are being loaded.363 * Default: ID of the logged-in user.364 * @type string $box Current "box" view. If not provided here, the current365 * view will be inferred from the URL.366 * @type int $per_page Number of results to return per page. Default: 10.367 * @type int $max Max results to return. Default: false.368 * @type string $type Type of messages to return. Values: 'all', 'read', 'unread'369 * Default: 'all'370 * @type string $search_terms Terms to which to limit results. Default:371 * the value of $_REQUEST['s'].372 * @type string $page_arg URL argument used for the pagination param.373 * Default: 'mpage'.374 * @type array $meta_query Meta query arguments. Only applicable if $box is375 * not 'notices'. See WP_Meta_Query more details.376 * }377 * @return bool True if there are threads to display, otherwise false.378 */379 function bp_has_message_threads( $args = array() ) {380 global $messages_template;381 382 // The default box the user is looking at.383 $current_action = bp_current_action();384 switch ( $current_action ) {385 case 'sentbox' :386 case 'notices' :387 case 'inbox' :388 $default_box = $current_action;389 break;390 default :391 $default_box = 'inbox';392 break;393 }394 395 // User ID396 // @todo displayed user for moderators that get this far?397 $user_id = bp_loggedin_user_id();398 399 // Search Terms.400 $search_terms = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '';401 402 // Parse the arguments.403 $r = bp_parse_args( $args, array(404 'user_id' => $user_id,405 'box' => $default_box,406 'per_page' => 10,407 'max' => false,408 'type' => 'all',409 'search_terms' => $search_terms,410 'page_arg' => 'mpage', // See https://buddypress.trac.wordpress.org/ticket/3679.411 'meta_query' => array()412 ), 'has_message_threads' );413 414 // Load the messages loop global up with messages.415 $messages_template = new BP_Messages_Box_Template( $r );416 417 /**418 * Filters if there are any message threads to display in inbox/sentbox/notices.419 *420 * @since 1.1.0421 *422 * @param bool $value Whether or not the message has threads.423 * @param BP_Messages_Box_Template $messages_template Current message box template object.424 * @param array $r Array of parsed arguments passed into function.425 */426 return apply_filters( 'bp_has_message_threads', $messages_template->has_threads(), $messages_template, $r );427 }428 429 /**430 * Check whether there are more threads to iterate over.431 *432 * @return bool433 */434 function bp_message_threads() {435 global $messages_template;436 return $messages_template->message_threads();437 }438 439 /**440 * Set up the current thread inside the loop.441 *442 * @return object443 */444 function bp_message_thread() {445 global $messages_template;446 return $messages_template->the_message_thread();447 }448 449 /**450 * Output the ID of the current thread in the loop.451 */452 function bp_message_thread_id() {453 echo bp_get_message_thread_id();454 }455 /**456 * Get the ID of the current thread in the loop.457 *458 * @return int459 */460 function bp_get_message_thread_id() {461 global $messages_template;462 463 /**464 * Filters the ID of the current thread in the loop.465 *466 * @since 1.0.0467 *468 * @param int $thread_id ID of the current thread in the loop.469 */470 return apply_filters( 'bp_get_message_thread_id', $messages_template->thread->thread_id );471 }472 473 /**474 * Output the subject of the current thread in the loop.475 */476 function bp_message_thread_subject() {477 echo bp_get_message_thread_subject();478 }479 /**480 * Get the subject of the current thread in the loop.481 *482 * @return string483 */484 function bp_get_message_thread_subject() {485 global $messages_template;486 487 /**488 * Filters the subject of the current thread in the loop.489 *490 * @since 1.1.0491 *492 * @param string $value Subject of the current thread in the loop.493 */494 return apply_filters( 'bp_get_message_thread_subject', $messages_template->thread->last_message_subject );495 }496 497 /**498 * Output an excerpt from the current message in the loop.499 */500 function bp_message_thread_excerpt() {501 echo bp_get_message_thread_excerpt();502 }503 /**504 * Generate an excerpt from the current message in the loop.505 *506 * @return string507 */508 function bp_get_message_thread_excerpt() {509 global $messages_template;510 511 /**512 * Filters the excerpt of the current thread in the loop.513 *514 * @since 1.0.0515 *516 * @param string $value Excerpt of the current thread in the loop.517 */518 return apply_filters( 'bp_get_message_thread_excerpt', strip_tags( bp_create_excerpt( $messages_template->thread->last_message_content, 75 ) ) );519 }520 521 /**522 * Output the thread's last message content.523 *524 * When viewing your Inbox, the last message is the most recent message in525 * the thread of which you are *not* the author.526 *527 * When viewing your Sentbox, last message is the most recent message in528 * the thread of which you *are* the member.529 *530 * @since 2.0.0531 */532 function bp_message_thread_content() {533 echo bp_get_message_thread_content();534 }535 /**536 * Return the thread's last message content.537 *538 * When viewing your Inbox, the last message is the most recent message in539 * the thread of which you are *not* the author.540 *541 * When viewing your Sentbox, last message is the most recent message in542 * the thread of which you *are* the member.543 *544 * @since 2.0.0545 *546 * @return string The raw content of the last message in the thread.547 */548 function bp_get_message_thread_content() {549 global $messages_template;550 551 /**552 * Filters the content of the last message in the thread.553 *554 * @since 2.0.0555 *556 * @param string $last_message_content Content of the last message in the thread.557 */558 return apply_filters( 'bp_get_message_thread_content', $messages_template->thread->last_message_content );559 }560 561 /**562 * Output a link to the page of the current thread's last author.563 */564 function bp_message_thread_from() {565 echo bp_get_message_thread_from();566 }567 /**568 * Get a link to the page of the current thread's last author.569 *570 * @return string571 */572 function bp_get_message_thread_from() {573 global $messages_template;574 575 /**576 * Filters the link to the page of the current thread's last author.577 *578 * @since 1.0.0579 *580 * @param string $value Link to the page of the current thread's last author.581 */582 return apply_filters( 'bp_get_message_thread_from', bp_core_get_userlink( $messages_template->thread->last_sender_id ) );583 }584 585 /**586 * Output links to the pages of the current thread's recipients.587 */588 function bp_message_thread_to() {589 echo bp_get_message_thread_to();590 }591 /**592 * Generate HTML links to the pages of the current thread's recipients.593 *594 * @return string595 */596 function bp_get_message_thread_to() {597 global $messages_template;598 599 /**600 * Filters the HTML links to the pages of the current thread's recipients.601 *602 * @since 1.0.0603 *604 * @param string $value HTML links to the pages of the current thread's recipients.605 */606 return apply_filters( 'bp_message_thread_to', BP_Messages_Thread::get_recipient_links($messages_template->thread->recipients ) );607 }608 609 /**610 * Output the permalink for a particular thread.611 *612 * @param int $thread_id Optional. ID of the thread. Default: current thread613 * being iterated on in the loop.614 */615 function bp_message_thread_view_link( $thread_id = 0 ) {616 echo bp_get_message_thread_view_link( $thread_id );617 }618 /**619 * Get the permalink of a particular thread.620 *621 * @param int $thread_id Optional. ID of the thread. Default: current622 * thread being iterated on in the loop.623 * @return string624 */625 function bp_get_message_thread_view_link( $thread_id = 0 ) {626 global $messages_template;627 628 if ( empty( $messages_template ) && (int) $thread_id > 0 ) {629 $thread_id = (int) $thread_id;630 } elseif ( ! empty( $messages_template->thread->thread_id ) ) {631 $thread_id = $messages_template->thread->thread_id;632 }633 634 /**635 * Filters the permalink of a particular thread.636 *637 * @since 1.0.0638 *639 * @param string $value permalink of a particular thread.640 */641 return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id ) );642 }643 644 /**645 * Output the URL for deleting the current thread.646 */647 function bp_message_thread_delete_link() {648 echo esc_url( bp_get_message_thread_delete_link() );649 }650 /**651 * Generate the URL for deleting the current thread.652 *653 * @return string654 */655 function bp_get_message_thread_delete_link() {656 global $messages_template;657 658 /**659 * Filters the URL for deleting the current thread.660 *661 * @since 1.0.0662 *663 * @param string $value URL for deleting the current thread.664 * @param string $value Text indicating action being executed.665 */666 return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/delete/' . $messages_template->thread->thread_id ), 'messages_delete_thread' ) );667 }668 669 /**670 * Output the URL used for marking a single message thread as unread.671 *672 * Since this function directly outputs a URL, it is escaped.673 *674 * @since 2.2.0675 */676 function bp_the_message_thread_mark_unread_url() {677 echo esc_url( bp_get_the_message_thread_mark_unread_url() );678 }679 /**680 * Return the URL used for marking a single message thread as unread.681 *682 * @since 2.2.0683 *684 * @return string685 */686 function bp_get_the_message_thread_mark_unread_url() {687 688 // Get the message ID.689 $id = bp_get_message_thread_id();690 691 // Get the args to add to the URL.692 $args = array(693 'action' => 'unread',694 'message_id' => $id695 );696 697 // Base unread URL.698 $url = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/unread' );699 700 // Add the args to the URL.701 $url = add_query_arg( $args, $url );702 703 // Add the nonce.704 $url = wp_nonce_url( $url, 'bp_message_thread_mark_unread_' . $id );705 706 /**707 * Filters the URL used for marking a single message thread as unread.708 *709 * @since 2.2.0710 *711 * @param string $url URL used for marking a single message thread as unread.712 */713 return apply_filters( 'bp_get_the_message_thread_mark_unread_url', $url );714 }715 716 /**717 * Output the URL used for marking a single message thread as read.718 *719 * Since this function directly outputs a URL, it is escaped.720 *721 * @since 2.2.0722 */723 function bp_the_message_thread_mark_read_url() {724 echo esc_url( bp_get_the_message_thread_mark_read_url() );725 }726 /**727 * Return the URL used for marking a single message thread as read.728 *729 * @since 2.2.0730 *731 * @return string732 */733 function bp_get_the_message_thread_mark_read_url() {734 735 // Get the message ID.736 $id = bp_get_message_thread_id();737 738 // Get the args to add to the URL.739 $args = array(740 'action' => 'read',741 'message_id' => $id742 );743 744 // Base read URL.745 $url = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/read' );746 747 // Add the args to the URL.748 $url = add_query_arg( $args, $url );749 750 // Add the nonce.751 $url = wp_nonce_url( $url, 'bp_message_thread_mark_read_' . $id );752 753 /**754 * Filters the URL used for marking a single message thread as read.755 *756 * @since 2.2.0757 *758 * @param string $url URL used for marking a single message thread as read.759 */760 return apply_filters( 'bp_get_the_message_thread_mark_read_url', $url );761 }762 763 /**764 * Output the CSS class for the current thread.765 */766 function bp_message_css_class() {767 echo esc_attr( bp_get_message_css_class() );768 }769 /**770 * Generate the CSS class for the current thread.771 *772 * @return string773 */774 function bp_get_message_css_class() {775 global $messages_template;776 777 $class = false;778 779 if ( $messages_template->current_thread % 2 == 1 ) {780 $class .= 'alt';781 }782 783 /**784 * Filters the CSS class for the current thread.785 *786 * @since 1.2.10787 *788 * @param string $class Class string to be added to the list of classes.789 */790 return apply_filters( 'bp_get_message_css_class', trim( $class ) );791 }792 793 /**794 * Check whether the current thread has unread items.795 *796 * @return bool True if there are unread items, otherwise false.797 */798 function bp_message_thread_has_unread() {799 global $messages_template;800 801 $retval = ! empty( $messages_template->thread->unread_count )802 ? true803 : false;804 805 /**806 * Filters whether or not a message thread has unread items.807 *808 * @since 2.1.0809 *810 * @param bool $retval Whether or not a message thread has unread items.811 */812 return apply_filters( 'bp_message_thread_has_unread', $retval );813 }814 815 /**816 * Output the current thread's unread count.817 */818 function bp_message_thread_unread_count() {819 echo esc_html( bp_get_message_thread_unread_count() );820 }821 /**822 * Get the current thread's unread count.823 *824 * @return int825 */826 function bp_get_message_thread_unread_count() {827 global $messages_template;828 829 $count = ! empty( $messages_template->thread->unread_count )830 ? (int) $messages_template->thread->unread_count831 : false;832 833 /**834 * Filters the current thread's unread count.835 *836 * @since 1.0.0837 *838 * @param int $count Current thread unread count.839 */840 return apply_filters( 'bp_get_message_thread_unread_count', $count );841 }842 843 /**844 * Output a thread's total message count.845 *846 * @since 2.2.0847 *848 * @param int|bool $thread_id Optional. ID of the thread. Defaults to current thread ID.849 */850 function bp_message_thread_total_count( $thread_id = false ) {851 echo bp_get_message_thread_total_count( $thread_id );852 }853 /**854 * Get the current thread's total message count.855 *856 * @since 2.2.0857 *858 * @param int|bool $thread_id Optional. ID of the thread.859 * Defaults to current thread ID.860 * @return int861 */862 function bp_get_message_thread_total_count( $thread_id = false ) {863 if ( false === $thread_id ) {864 $thread_id = bp_get_message_thread_id();865 }866 867 $thread_template = new BP_Messages_Thread_Template( $thread_id, 'ASC', array(868 'update_meta_cache' => false869 ) );870 871 $count = 0;872 if ( ! empty( $thread_template->message_count ) ) {873 $count = intval( $thread_template->message_count );874 }875 876 /**877 * Filters the current thread's total message count.878 *879 * @since 2.2.0880 *881 * @param int $count Current thread total message count.882 */883 return apply_filters( 'bp_get_message_thread_total_count', $count );884 }885 886 /**887 * Output markup for the current thread's total and unread count.888 *889 * @since 2.2.0890 *891 * @param int|bool $thread_id Optional. ID of the thread. Default: current thread ID.892 */893 function bp_message_thread_total_and_unread_count( $thread_id = false ) {894 echo bp_get_message_thread_total_and_unread_count( $thread_id );895 }896 /**897 * Get markup for the current thread's total and unread count.898 *899 * @param int|bool $thread_id Optional. ID of the thread. Default: current thread ID.900 * @return string Markup displaying the total and unread count for the thread.901 */902 function bp_get_message_thread_total_and_unread_count( $thread_id = false ) {903 if ( false === $thread_id ) {904 $thread_id = bp_get_message_thread_id();905 }906 907 $total = bp_get_message_thread_total_count( $thread_id );908 $unread = bp_get_message_thread_unread_count( $thread_id );909 910 return sprintf(911 '<span class="thread-count">(%1$s)</span> <span class="bp-screen-reader-text">%2$s</span>',912 number_format_i18n( $total ),913 sprintf( _n( '%d unread', '%d unread', $unread, 'buddypress' ), number_format_i18n( $unread ) )914 );915 }916 917 /**918 * Output the unformatted date of the last post in the current thread.919 */920 function bp_message_thread_last_post_date_raw() {921 echo bp_get_message_thread_last_post_date_raw();922 }923 /**924 * Get the unformatted date of the last post in the current thread.925 *926 * @return string927 */928 function bp_get_message_thread_last_post_date_raw() {929 global $messages_template;930 931 /**932 * Filters the unformatted date of the last post in the current thread.933 *934 * @since 2.1.0935 *936 * @param string $last_message_date Unformatted date of the last post in the current thread.937 */938 return apply_filters( 'bp_get_message_thread_last_message_date', $messages_template->thread->last_message_date );939 }940 941 /**942 * Output the nicely formatted date of the last post in the current thread.943 */944 function bp_message_thread_last_post_date() {945 echo bp_get_message_thread_last_post_date();946 }947 /**948 * Get the nicely formatted date of the last post in the current thread.949 *950 * @return string951 */952 function bp_get_message_thread_last_post_date() {953 954 /**955 * Filters the nicely formatted date of the last post in the current thread.956 *957 * @since 2.1.0958 *959 * @param string $value Formatted date of the last post in the current thread.960 */961 return apply_filters( 'bp_get_message_thread_last_post_date', bp_format_time( strtotime( bp_get_message_thread_last_post_date_raw() ) ) );962 }963 964 /**965 * Output the avatar for the last sender in the current message thread.966 *967 * @see bp_get_message_thread_avatar() for a description of arguments.968 *969 * @param array|string $args See {@link bp_get_message_thread_avatar()}.970 */971 function bp_message_thread_avatar( $args = '' ) {972 echo bp_get_message_thread_avatar( $args );973 }974 /**975 * Return the avatar for the last sender in the current message thread.976 *977 * @see bp_core_fetch_avatar() For a description of arguments and978 * return values.979 *980 * @param array|string $args {981 * Arguments are listed here with an explanation of their defaults.982 * For more information about the arguments, see983 * {@link bp_core_fetch_avatar()}.984 * @type string $type Default: 'thumb'.985 * @type int|bool $width Default: false.986 * @type int|bool $height Default: false.987 * @type string $class Default: 'avatar'.988 * @type string|bool $id Default: false.989 * @type string $alt Default: 'Profile picture of [display name]'.990 * }991 * @return string User avatar string.992 */993 function bp_get_message_thread_avatar( $args = '' ) {994 global $messages_template;995 996 $fullname = bp_core_get_user_displayname( $messages_template->thread->last_sender_id );997 $alt = sprintf( __( 'Profile picture of %s', 'buddypress' ), $fullname );998 999 $r = bp_parse_args( $args, array(1000 'type' => 'thumb',1001 'width' => false,1002 'height' => false,1003 'class' => 'avatar',1004 'id' => false,1005 'alt' => $alt1006 ) );1007 1008 /**1009 * Filters the avatar for the last sender in the current message thread.1010 *1011 * @since 1.0.01012 *1013 * @param string $value User avatar string.1014 */1015 return apply_filters( 'bp_get_message_thread_avatar', bp_core_fetch_avatar( array(1016 'item_id' => $messages_template->thread->last_sender_id,1017 'type' => $r['type'],1018 'alt' => $r['alt'],1019 'css_id' => $r['id'],1020 'class' => $r['class'],1021 'width' => $r['width'],1022 'height' => $r['height'],1023 ) ) );1024 }1025 1026 /**1027 * Output the unread messages count for the current inbox.1028 */1029 function bp_total_unread_messages_count() {1030 echo bp_get_total_unread_messages_count();1031 }1032 /**1033 * Get the unread messages count for the current inbox.1034 *1035 * @return int1036 */1037 function bp_get_total_unread_messages_count() {1038 1039 /**1040 * Filters the unread messages count for the current inbox.1041 *1042 * @since 1.0.01043 *1044 * @param int $value Unread messages count for the current inbox.1045 */1046 return apply_filters( 'bp_get_total_unread_messages_count', BP_Messages_Thread::get_inbox_count() );1047 }1048 1049 /**1050 * Output the pagination HTML for the current thread loop.1051 */1052 function bp_messages_pagination() {1053 echo bp_get_messages_pagination();1054 }1055 /**1056 * Get the pagination HTML for the current thread loop.1057 *1058 * @return string1059 */1060 function bp_get_messages_pagination() {1061 global $messages_template;1062 1063 /**1064 * Filters the pagination HTML for the current thread loop.1065 *1066 * @since 1.0.01067 *1068 * @param int $pag_links Pagination HTML for the current thread loop.1069 */1070 return apply_filters( 'bp_get_messages_pagination', $messages_template->pag_links );1071 }1072 1073 /**1074 * Generate the "Viewing message x to y (of z messages)" string for a loop.1075 */1076 function bp_messages_pagination_count() {1077 global $messages_template;1078 1079 $start_num = intval( ( $messages_template->pag_page - 1 ) * $messages_template->pag_num ) + 1;1080 $from_num = bp_core_number_format( $start_num );1081 $to_num = bp_core_number_format( ( $start_num + ( $messages_template->pag_num - 1 ) > $messages_template->total_thread_count ) ? $messages_template->total_thread_count : $start_num + ( $messages_template->pag_num - 1 ) );1082 $total = bp_core_number_format( $messages_template->total_thread_count );1083 1084 if ( 1 == $messages_template->total_thread_count ) {1085 $message = __( 'Viewing 1 message', 'buddypress' );1086 } else {1087 $message = sprintf( _n( 'Viewing %1$s - %2$s of %3$s message', 'Viewing %1$s - %2$s of %3$s messages', $messages_template->total_thread_count, 'buddypress' ), $from_num, $to_num, $total );1088 }1089 1090 echo esc_html( $message );1091 }1092 1093 /**1094 * Output the Private Message search form.1095 *1096 * @todo Move markup to template part in: /members/single/messages/search.php1097 * @since 1.6.01098 */1099 function bp_message_search_form() {1100 1101 // Get the default search text.1102 $default_search_value = bp_get_search_default_text( 'messages' );1103 1104 // Setup a few values based on what's being searched for.1105 $search_submitted = ! empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : $default_search_value;1106 $search_placeholder = ( $search_submitted === $default_search_value ) ? ' placeholder="' . esc_attr( $search_submitted ) . '"' : '';1107 $search_value = ( $search_submitted !== $default_search_value ) ? ' value="' . esc_attr( $search_submitted ) . '"' : '';1108 1109 // Start the output buffer, so form can be filtered.1110 ob_start(); ?>1111 1112 <form action="" method="get" id="search-message-form">1113 <label for="messages_search" class="bp-screen-reader-text"><?php esc_html_e( 'Search Messages', 'buddypress' ); ?></label>1114 <input type="text" name="s" id="messages_search"<?php echo $search_placeholder . $search_value; ?> />1115 <input type="submit" class="button" id="messages_search_submit" name="messages_search_submit" value="<?php esc_html_e( 'Search', 'buddypress' ); ?>" />1116 </form>1117 1118 <?php1119 1120 // Get the search form from the above output buffer.1121 $search_form_html = ob_get_clean();1122 1123 /**1124 * Filters the private message component search form.1125 *1126 * @since 2.2.01127 *1128 * @param string $search_form_html HTML markup for the message search form.1129 */1130 echo apply_filters( 'bp_message_search_form', $search_form_html );1131 }1132 1133 /**1134 * Echo the form action for Messages HTML forms.1135 */1136 function bp_messages_form_action() {1137 echo esc_url( bp_get_messages_form_action() );1138 }1139 /**1140 * Return the form action for Messages HTML forms.1141 *1142 * @return string The form action.1143 */1144 function bp_get_messages_form_action() {1145 1146 /**1147 * Filters the form action for Messages HTML forms.1148 *1149 * @since 1.0.01150 *1151 * @param string $value The form action.1152 */1153 return apply_filters( 'bp_get_messages_form_action', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' . bp_action_variable( 0 ) ) );1154 }1155 1156 /**1157 * Output the default username for the recipient box.1158 */1159 function bp_messages_username_value() {1160 echo esc_attr( bp_get_messages_username_value() );1161 }1162 /**1163 * Get the default username for the recipient box.1164 *1165 * @return string1166 */1167 function bp_get_messages_username_value() {1168 if ( isset( $_COOKIE['bp_messages_send_to'] ) ) {1169 1170 /**1171 * Filters the default username for the recipient box.1172 *1173 * Value passed into filter is dependent on if the 'bp_messages_send_to'1174 * cookie or 'r' $_GET parameter is set.1175 *1176 * @since 1.0.01177 *1178 * @param string $value Default user name.1179 */1180 return apply_filters( 'bp_get_messages_username_value', $_COOKIE['bp_messages_send_to'] );1181 } elseif ( isset( $_GET['r'] ) && !isset( $_COOKIE['bp_messages_send_to'] ) ) {1182 /** This filter is documented in bp-messages-template.php */1183 return apply_filters( 'bp_get_messages_username_value', $_GET['r'] );1184 }1185 }1186 1187 /**1188 * Output the default value for the Subject field.1189 */1190 function bp_messages_subject_value() {1191 echo esc_attr( bp_get_messages_subject_value() );1192 }1193 /**1194 * Get the default value for the Subject field.1195 *1196 * Will get a value out of $_POST['subject'] if available (ie after a1197 * failed submission).1198 *1199 * @return string1200 */1201 function bp_get_messages_subject_value() {1202 1203 // Sanitized in bp-messages-filters.php.1204 $subject = ! empty( $_POST['subject'] )1205 ? $_POST['subject']1206 : '';1207 1208 /**1209 * Filters the default value for the subject field.1210 *1211 * @since 1.0.01212 *1213 * @param string $subject The default value for the subject field.1214 */1215 return apply_filters( 'bp_get_messages_subject_value', $subject );1216 }1217 1218 /**1219 * Output the default value for the Compose content field.1220 */1221 function bp_messages_content_value() {1222 echo esc_textarea( bp_get_messages_content_value() );1223 }1224 /**1225 * Get the default value fo the Compose content field.1226 *1227 * Will get a value out of $_POST['content'] if available (ie after a1228 * failed submission).1229 *1230 * @return string1231 */1232 function bp_get_messages_content_value() {1233 1234 // Sanitized in bp-messages-filters.php.1235 $content = ! empty( $_POST['content'] )1236 ? $_POST['content']1237 : '';1238 1239 /**1240 * Filters the default value for the content field.1241 *1242 * @since 1.0.01243 *1244 * @param string $content The default value for the content field.1245 */1246 return apply_filters( 'bp_get_messages_content_value', $content );1247 }1248 1249 /**1250 * Output the markup for the message type dropdown.1251 */1252 function bp_messages_options() {1253 ?>1254 1255 <label for="message-type-select" class="bp-screen-reader-text">1256 <?php _e( 'Select:', 'buddypress' ) ?>1257 </label>1258 1259 <select name="message-type-select" id="message-type-select">1260 <option value=""><?php _e( 'Select', 'buddypress' ); ?></option>1261 <option value="read"><?php _ex('Read', 'Message dropdown filter', 'buddypress') ?></option>1262 <option value="unread"><?php _ex('Unread', 'Message dropdown filter', 'buddypress') ?></option>1263 <option value="all"><?php _ex('All', 'Message dropdown filter', 'buddypress') ?></option>1264 </select> 1265 1266 <?php if ( ! bp_is_current_action( 'sentbox' ) && ! bp_is_current_action( 'notices' ) ) : ?>1267 1268 <a href="#" id="mark_as_read"><?php _ex('Mark as Read', 'Message management markup', 'buddypress') ?></a> 1269 <a href="#" id="mark_as_unread"><?php _ex('Mark as Unread', 'Message management markup', 'buddypress') ?></a> 1270 1271 <?php endif; ?>1272 1273 <a href="#" id="delete_<?php echo bp_current_action(); ?>_messages"><?php _e( 'Delete Selected', 'buddypress' ); ?></a> 1274 1275 <?php1276 }1277 1278 /**1279 * Output the dropdown for bulk management of messages.1280 *1281 * @since 2.2.01282 */1283 function bp_messages_bulk_management_dropdown() {1284 ?>1285 <label class="bp-screen-reader-text" for="messages-select"><?php _e( 'Select Bulk Action', 'buddypress' ); ?></label>1286 <select name="messages_bulk_action" id="messages-select">1287 <option value="" selected="selected"><?php _e( 'Bulk Actions', 'buddypress' ); ?></option>1288 <option value="read"><?php _e( 'Mark read', 'buddypress' ); ?></option>1289 <option value="unread"><?php _e( 'Mark unread', 'buddypress' ); ?></option>1290 <option value="delete"><?php _e( 'Delete', 'buddypress' ); ?></option>1291 <?php1292 /**1293 * Action to add additional options to the messages bulk management dropdown.1294 *1295 * @since 2.3.01296 */1297 do_action( 'bp_messages_bulk_management_dropdown' );1298 ?>1299 </select>1300 <input type="submit" id="messages-bulk-manage" class="button action" value="<?php esc_attr_e( 'Apply', 'buddypress' ); ?>">1301 <?php1302 }1303 1304 /**1305 * Return whether or not the notice is currently active.1306 *1307 * @since 1.6.01308 *1309 * @return bool1310 */1311 function bp_messages_is_active_notice() {1312 global $messages_template;1313 1314 $retval = ! empty( $messages_template->thread->is_active )1315 ? true1316 : false;1317 1318 /**1319 * Filters whether or not the notice is currently active.1320 *1321 * @since 2.1.01322 *1323 * @param bool $retval Whether or not the notice is currently active.1324 */1325 return apply_filters( 'bp_messages_is_active_notice', $retval );1326 }1327 1328 /**1329 * Output a string for the active notice.1330 *1331 * Since 1.6 this function has been deprecated in favor of text in the theme.1332 *1333 * @since 1.0.01334 * @deprecated 1.6.01335 * @uses bp_get_message_is_active_notice()1336 * @return bool1337 */1338 function bp_message_is_active_notice() {1339 echo bp_get_message_is_active_notice();1340 }1341 /**1342 * Returns a string for the active notice.1343 *1344 * Since 1.6 this function has been deprecated in favor of text in the1345 * theme.1346 *1347 * @since 1.0.01348 * @deprecated 1.6.01349 * @uses bp_messages_is_active_notice()1350 */1351 function bp_get_message_is_active_notice() {1352 1353 $string = bp_messages_is_active_notice()1354 ? __( 'Currently Active', 'buddypress' )1355 : '';1356 1357 return apply_filters( 'bp_get_message_is_active_notice', $string );1358 }1359 1360 /**1361 * Output the ID of the current notice in the loop.1362 */1363 function bp_message_notice_id() {1364 echo (int) bp_get_message_notice_id();1365 }1366 /**1367 * Get the ID of the current notice in the loop.1368 *1369 * @return int1370 */1371 function bp_get_message_notice_id() {1372 global $messages_template;1373 1374 /**1375 * Filters the ID of the current notice in the loop.1376 *1377 * @since 1.5.01378 *1379 * @param int $id ID of the current notice in the loop.1380 */1381 return apply_filters( 'bp_get_message_notice_id', $messages_template->thread->id );1382 }1383 1384 /**1385 * Output the post date of the current notice in the loop.1386 */1387 function bp_message_notice_post_date() {1388 echo bp_get_message_notice_post_date();1389 }1390 /**1391 * Get the post date of the current notice in the loop.1392 *1393 * @return string1394 */1395 function bp_get_message_notice_post_date() {1396 global $messages_template;1397 1398 /**1399 * Filters the post date of the current notice in the loop.1400 *1401 * @since 1.0.01402 *1403 * @param string $value Formatted post date of the current notice in the loop.1404 */1405 return apply_filters( 'bp_get_message_notice_post_date', bp_format_time( strtotime( $messages_template->thread->date_sent ) ) );1406 }1407 1408 /**1409 * Output the subject of the current notice in the loop.1410 */1411 function bp_message_notice_subject() {1412 echo bp_get_message_notice_subject();1413 }1414 /**1415 * Get the subject of the current notice in the loop.1416 *1417 * @return string1418 */1419 function bp_get_message_notice_subject() {1420 global $messages_template;1421 1422 /**1423 * Filters the subject of the current notice in the loop.1424 *1425 * @since 1.0.01426 *1427 * @param string $subject Subject of the current notice in the loop.1428 */1429 return apply_filters( 'bp_get_message_notice_subject', $messages_template->thread->subject );1430 }1431 1432 /**1433 * Output the text of the current notice in the loop.1434 */1435 function bp_message_notice_text() {1436 echo bp_get_message_notice_text();1437 }1438 /**1439 * Get the text of the current notice in the loop.1440 *1441 * @return string1442 */1443 function bp_get_message_notice_text() {1444 global $messages_template;1445 1446 /**1447 * Filters the text of the current notice in the loop.1448 *1449 * @since 1.0.01450 *1451 * @param string $message Text for the current notice in the loop.1452 */1453 return apply_filters( 'bp_get_message_notice_text', $messages_template->thread->message );1454 }1455 1456 /**1457 * Output the URL for deleting the current notice.1458 */1459 function bp_message_notice_delete_link() {1460 echo esc_url( bp_get_message_notice_delete_link() );1461 }1462 /**1463 * Get the URL for deleting the current notice.1464 *1465 * @return string Delete URL.1466 */1467 function bp_get_message_notice_delete_link() {1468 global $messages_template;1469 1470 /**1471 * Filters the URL for deleting the current notice.1472 *1473 * @since 1.0.01474 *1475 * @param string $value URL for deleting the current notice.1476 * @param string $value Text indicating action being executed.1477 */1478 return apply_filters( 'bp_get_message_notice_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/delete/' . $messages_template->thread->id, 'messages_delete_thread' ) );1479 }1480 1481 /**1482 * Output the URL for deactivating the current notice.1483 */1484 function bp_message_activate_deactivate_link() {1485 echo esc_url( bp_get_message_activate_deactivate_link() );1486 }1487 /**1488 * Get the URL for deactivating the current notice.1489 *1490 * @return string1491 */1492 function bp_get_message_activate_deactivate_link() {1493 global $messages_template;1494 1495 if ( 1 === (int) $messages_template->thread->is_active ) {1496 $link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/deactivate/' . $messages_template->thread->id ), 'messages_deactivate_notice' );1497 } else {1498 $link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/activate/' . $messages_template->thread->id ), 'messages_activate_notice' );1499 }1500 1501 /**1502 * Filters the URL for deactivating the current notice.1503 *1504 * @since 1.0.01505 *1506 * @param string $link URL for deactivating the current notice.1507 */1508 return apply_filters( 'bp_get_message_activate_deactivate_link', $link );1509 }1510 1511 /**1512 * Output the Deactivate/Activate text for the notice action link.1513 */1514 function bp_message_activate_deactivate_text() {1515 echo esc_html( bp_get_message_activate_deactivate_text() );1516 }1517 /**1518 * Generate the text ('Deactivate' or 'Activate') for the notice action link.1519 *1520 * @return string1521 */1522 function bp_get_message_activate_deactivate_text() {1523 global $messages_template;1524 1525 if ( 1 === (int) $messages_template->thread->is_active ) {1526 $text = __('Deactivate', 'buddypress');1527 } else {1528 $text = __('Activate', 'buddypress');1529 }1530 1531 /**1532 * Filters the "Deactivate" or "Activate" text for notice action links.1533 *1534 * @since 1.0.01535 *1536 * @param string $text Text used for notice action links.1537 */1538 return apply_filters( 'bp_message_activate_deactivate_text', $text );1539 }1540 1541 /**1542 * Output the messages component slug.1543 *1544 * @since 1.5.01545 *1546 * @uses bp_get_messages_slug()1547 */1548 function bp_messages_slug() {1549 echo bp_get_messages_slug();1550 }1551 /**1552 * Return the messages component slug.1553 *1554 * @since 1.5.01555 *1556 * @return string1557 */1558 function bp_get_messages_slug() {1559 1560 /**1561 * Filters the messages component slug.1562 *1563 * @since 1.5.01564 *1565 * @param string $slug Messages component slug.1566 */1567 return apply_filters( 'bp_get_messages_slug', buddypress()->messages->slug );1568 }1569 1570 /**1571 * Generate markup for currently active notices.1572 */1573 function bp_message_get_notices() {1574 $notice = BP_Messages_Notice::get_active();1575 1576 if ( empty( $notice ) ) {1577 return false;1578 }1579 1580 $closed_notices = bp_get_user_meta( bp_loggedin_user_id(), 'closed_notices', true );1581 1582 if ( empty( $closed_notices ) ) {1583 $closed_notices = array();1584 }1585 1586 if ( is_array( $closed_notices ) ) {1587 if ( !in_array( $notice->id, $closed_notices ) && $notice->id ) {1588 ?>1589 <div id="message" class="info notice" rel="n-<?php echo esc_attr( $notice->id ); ?>">1590 <p>1591 <strong><?php echo stripslashes( wp_filter_kses( $notice->subject ) ) ?></strong><br />1592 <?php echo stripslashes( wp_filter_kses( $notice->message) ) ?>1593 <a href="#" id="close-notice"><?php _e( 'Close', 'buddypress' ) ?></a>1594 </p>1595 </div>1596 <?php1597 }1598 }1599 }1600 1601 /**1602 * Output the URL for the Private Message link in member profile headers.1603 */1604 function bp_send_private_message_link() {1605 echo esc_url( bp_get_send_private_message_link() );1606 }1607 /**1608 * Generate the URL for the Private Message link in member profile headers.1609 *1610 * @return bool|string False on failure, otherwise the URL.1611 */1612 function bp_get_send_private_message_link() {1613 1614 if ( bp_is_my_profile() || ! is_user_logged_in() ) {1615 return false;1616 }1617 1618 /**1619 * Filters the URL for the Private Message link in member profile headers.1620 *1621 * @since 1.2.101622 *1623 * @param string $value URL for the Private Message link in member profile headers.1624 */1625 return apply_filters( 'bp_get_send_private_message_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/compose/?r=' . bp_core_get_username( bp_displayed_user_id() ) ) );1626 }1627 1628 /**1629 * Output the 'Private Message' button for member profile headers.1630 *1631 * Explicitly named function to avoid confusion with public messages.1632 *1633 * @since 1.2.61634 *1635 * @uses bp_get_send_message_button()1636 */1637 function bp_send_private_message_button() {1638 echo bp_get_send_message_button();1639 }1640 1641 /**1642 * Output the 'Private Message' button for member profile headers.1643 */1644 function bp_send_message_button() {1645 echo bp_get_send_message_button();1646 }1647 /**1648 * Generate the 'Private Message' button for member profile headers.1649 *1650 * @return string1651 */1652 function bp_get_send_message_button() {1653 // Note: 'bp_get_send_message_button' is a legacy filter. Use1654 // 'bp_get_send_message_button_args' instead. See #4536.1655 return apply_filters( 'bp_get_send_message_button',1656 1657 /**1658 * Filters the "Private Message" button for member profile headers.1659 *1660 * @since 1.8.01661 *1662 * @param array $value See {@link BP_Button}.1663 */1664 bp_get_button( apply_filters( 'bp_get_send_message_button_args', array(1665 'id' => 'private_message',1666 'component' => 'messages',1667 'must_be_logged_in' => true,1668 'block_self' => true,1669 'wrapper_id' => 'send-private-message',1670 'link_href' => bp_get_send_private_message_link(),1671 'link_title' => __( 'Send a private message to this user.', 'buddypress' ),1672 'link_text' => __( 'Private Message', 'buddypress' ),1673 'link_class' => 'send-message',1674 ) ) )1675 );1676 }1677 1678 /**1679 * Output the URL of the Messages AJAX loader gif.1680 */1681 function bp_message_loading_image_src() {1682 echo esc_url( bp_get_message_loading_image_src() );1683 }1684 /**1685 * Get the URL of the Messages AJAX loader gif.1686 *1687 * @return string1688 */1689 function bp_get_message_loading_image_src() {1690 1691 /**1692 * Filters the URL of the Messages AJAX loader gif.1693 *1694 * @since 1.0.01695 *1696 * @param string $value URL of the Messages AJAX loader gif.1697 */1698 return apply_filters( 'bp_get_message_loading_image_src', buddypress()->messages->image_base . '/ajax-loader.gif' );1699 }1700 1701 /**1702 * Output the markup for the message recipient tabs.1703 */1704 function bp_message_get_recipient_tabs() {1705 $recipients = explode( ' ', bp_get_message_get_recipient_usernames() );1706 1707 foreach ( $recipients as $recipient ) {1708 1709 $user_id = bp_is_username_compatibility_mode()1710 ? bp_core_get_userid( $recipient )1711 : bp_core_get_userid_from_nicename( $recipient );1712 1713 if ( ! empty( $user_id ) ) : ?>1714 1715 <li id="un-<?php echo esc_attr( $recipient ); ?>" class="friend-tab">1716 <span><?php1717 echo bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'width' => 15, 'height' => 15 ) );1718 echo bp_core_get_userlink( $user_id );1719 ?></span>1720 </li>1721 1722 <?php endif;1723 }1724 }1725 1726 /**1727 * Output recipient usernames for prefilling the 'To' field on the Compose screen.1728 */1729 function bp_message_get_recipient_usernames() {1730 echo esc_attr( bp_get_message_get_recipient_usernames() );1731 }1732 /**1733 * Get the recipient usernames for prefilling the 'To' field on the Compose screen.1734 *1735 * @return string1736 */1737 function bp_get_message_get_recipient_usernames() {1738 1739 // Sanitized in bp-messages-filters.php.1740 $recipients = isset( $_GET['r'] )1741 ? $_GET['r']1742 : '';1743 1744 /**1745 * Filters the recipients usernames for prefilling the 'To' field on the Compose screen.1746 *1747 * @since 1.0.01748 *1749 * @param string $recipients Recipients usernames for 'To' field prefilling.1750 */1751 return apply_filters( 'bp_get_message_get_recipient_usernames', $recipients );1752 }1753 12 1754 13 /** … … 1926 185 } 1927 186 } 1928 1929 /**1930 * Initialize the messages template loop for a specific thread.1931 *1932 * @param array|string $args {1933 * Array of arguments. All are optional.1934 * @type int $thread_id ID of the thread whose messages you are displaying.1935 * Default: if viewing a thread, the thread ID will be parsed from1936 * the URL (bp_action_variable( 0 )).1937 * @type string $order 'ASC' or 'DESC'. Default: 'ASC'.1938 * @type bool $update_meta_cache Whether to pre-fetch metadata for1939 * queried message items. Default: true.1940 * }1941 * @return bool True if there are messages to display, otherwise false.1942 */1943 function bp_thread_has_messages( $args = '' ) {1944 global $thread_template;1945 1946 $r = bp_parse_args( $args, array(1947 'thread_id' => false,1948 'order' => 'ASC',1949 'update_meta_cache' => true,1950 ), 'thread_has_messages' );1951 1952 if ( empty( $r['thread_id'] ) && bp_is_messages_component() && bp_is_current_action( 'view' ) ) {1953 $r['thread_id'] = (int) bp_action_variable( 0 );1954 }1955 1956 // Set up extra args.1957 $extra_args = $r;1958 unset( $extra_args['thread_id'], $extra_args['order'] );1959 1960 $thread_template = new BP_Messages_Thread_Template( $r['thread_id'], $r['order'], $extra_args );1961 1962 return $thread_template->has_messages();1963 }1964 1965 /**1966 * Output the 'ASC' or 'DESC' messages order string for this loop.1967 */1968 function bp_thread_messages_order() {1969 echo esc_attr( bp_get_thread_messages_order() );1970 }1971 /**1972 * Get the 'ASC' or 'DESC' messages order string for this loop.1973 *1974 * @return string1975 */1976 function bp_get_thread_messages_order() {1977 global $thread_template;1978 return $thread_template->thread->messages_order;1979 }1980 1981 /**1982 * Check whether there are more messages to iterate over.1983 *1984 * @return bool1985 */1986 function bp_thread_messages() {1987 global $thread_template;1988 1989 return $thread_template->messages();1990 }1991 1992 /**1993 * Set up the current thread inside the loop.1994 *1995 * @return object1996 */1997 function bp_thread_the_message() {1998 global $thread_template;1999 2000 return $thread_template->the_message();2001 }2002 2003 /**2004 * Output the ID of the thread that the current loop belongs to.2005 */2006 function bp_the_thread_id() {2007 echo (int) bp_get_the_thread_id();2008 }2009 /**2010 * Get the ID of the thread that the current loop belongs to.2011 *2012 * @return int2013 */2014 function bp_get_the_thread_id() {2015 global $thread_template;2016 2017 /**2018 * Filters the ID of the thread that the current loop belongs to.2019 *2020 * @since 1.1.02021 *2022 * @param int $thread_id ID of the thread.2023 */2024 return apply_filters( 'bp_get_the_thread_id', $thread_template->thread->thread_id );2025 }2026 2027 /**2028 * Output the subject of the thread currently being iterated over.2029 */2030 function bp_the_thread_subject() {2031 echo bp_get_the_thread_subject();2032 }2033 /**2034 * Get the subject of the thread currently being iterated over.2035 *2036 * @return string2037 */2038 function bp_get_the_thread_subject() {2039 global $thread_template;2040 2041 /**2042 * Filters the subject of the thread currently being iterated over.2043 *2044 * @since 1.1.02045 *2046 * @return string $last_message_subject Subject of the thread currently being iterated over.2047 */2048 return apply_filters( 'bp_get_the_thread_subject', $thread_template->thread->last_message_subject );2049 }2050 2051 /**2052 * Get a list of thread recipients or a "x recipients" string.2053 *2054 * In BuddyPress 2.2.0, this parts of this functionality were moved into the2055 * members/single/messages/single.php template. This function is no longer used2056 * by BuddyPress.2057 *2058 * @return string2059 */2060 function bp_get_the_thread_recipients() {2061 if ( 5 <= bp_get_thread_recipients_count() ) {2062 $recipients = sprintf( __( '%s recipients', 'buddypress' ), number_format_i18n( bp_get_thread_recipients_count() ) );2063 } else {2064 $recipients = bp_get_thread_recipients_list();2065 }2066 2067 return apply_filters( 'bp_get_the_thread_recipients', $recipients );2068 }2069 2070 /**2071 * Get the number of recipients in the current thread.2072 *2073 * @since 2.2.02074 *2075 * @return int2076 */2077 function bp_get_thread_recipients_count() {2078 global $thread_template;2079 return count( $thread_template->thread->recipients );2080 }2081 2082 /**2083 * Get the max number of recipients to list in the 'Conversation between...' gloss.2084 *2085 * @since 2.3.02086 *2087 * @return int2088 */2089 function bp_get_max_thread_recipients_to_list() {2090 /**2091 * Filters the max number of recipients to list in the 'Conversation between...' gloss.2092 *2093 * @since 2.3.02094 *2095 * @param int $count Recipient count. Default: 5.2096 */2097 return (int) apply_filters( 'bp_get_max_thread_recipients_to_list', 5 );2098 }2099 2100 /**2101 * Output HTML links to recipients in the current thread.2102 *2103 * @since 2.2.02104 */2105 function bp_the_thread_recipients_list() {2106 echo bp_get_thread_recipients_list();2107 }2108 /**2109 * Generate HTML links to the profiles of recipients in the current thread.2110 *2111 * @since 2.2.02112 *2113 * @return string2114 */2115 function bp_get_thread_recipients_list() {2116 global $thread_template;2117 2118 $recipient_links = array();2119 2120 foreach( (array) $thread_template->thread->recipients as $recipient ) {2121 if ( (int) $recipient->user_id !== bp_loggedin_user_id() ) {2122 $recipient_link = bp_core_get_userlink( $recipient->user_id );2123 2124 if ( empty( $recipient_link ) ) {2125 $recipient_link = __( 'Deleted User', 'buddypress' );2126 }2127 2128 $recipient_links[] = $recipient_link;2129 }2130 }2131 2132 /**2133 * Filters the HTML links to the profiles of recipients in the current thread.2134 *2135 * @since 2.2.02136 *2137 * @param string $value Comma-separated list of recipient HTML links for current thread.2138 */2139 return apply_filters( 'bp_get_the_thread_recipients_list', implode( ', ', $recipient_links ) );2140 }2141 2142 /**2143 * Echo the ID of the current message in the thread.2144 *2145 * @since 1.9.02146 */2147 function bp_the_thread_message_id() {2148 echo (int) bp_get_the_thread_message_id();2149 }2150 /**2151 * Get the ID of the current message in the thread.2152 *2153 * @since 1.9.02154 *2155 * @return int2156 */2157 function bp_get_the_thread_message_id() {2158 global $thread_template;2159 2160 $thread_message_id = isset( $thread_template->message->id )2161 ? (int) $thread_template->message->id2162 : null;2163 2164 /**2165 * Filters the ID of the current message in the thread.2166 *2167 * @since 1.9.02168 *2169 * @param int $thread_message_id ID of the current message in the thread.2170 */2171 return apply_filters( 'bp_get_the_thread_message_id', $thread_message_id );2172 }2173 2174 /**2175 * Output the CSS classes for messages within a single thread.2176 *2177 * @since 2.1.02178 */2179 function bp_the_thread_message_css_class() {2180 echo esc_attr( bp_get_the_thread_message_css_class() );2181 }2182 /**2183 * Generate the CSS classes for messages within a single thread.2184 *2185 * @since 2.1.02186 *2187 * @return string2188 */2189 function bp_get_the_thread_message_css_class() {2190 global $thread_template;2191 2192 $classes = array();2193 2194 // Zebra-striping.2195 $classes[] = bp_get_the_thread_message_alt_class();2196 2197 // ID of the sender.2198 $classes[] = 'sent-by-' . intval( $thread_template->message->sender_id );2199 2200 // Whether the sender is the same as the logged-in user.2201 if ( bp_loggedin_user_id() == $thread_template->message->sender_id ) {2202 $classes[] = 'sent-by-me';2203 }2204 2205 /**2206 * Filters the CSS classes for messages within a single thread.2207 *2208 * @since 2.1.02209 *2210 * @param array $classes Array of classes to add to the HTML class attribute.2211 */2212 $classes = apply_filters( 'bp_get_the_thread_message_css_class', $classes );2213 2214 return implode( ' ', $classes );2215 }2216 2217 /**2218 * Output the CSS class used for message zebra striping.2219 */2220 function bp_the_thread_message_alt_class() {2221 echo esc_attr( bp_get_the_thread_message_alt_class() );2222 }2223 /**2224 * Get the CSS class used for message zebra striping.2225 *2226 * @return string2227 */2228 function bp_get_the_thread_message_alt_class() {2229 global $thread_template;2230 2231 if ( $thread_template->current_message % 2 == 1 ) {2232 $class = 'even alt';2233 } else {2234 $class = 'odd';2235 }2236 2237 /**2238 * Filters the CSS class used for message zebra striping.2239 *2240 * @since 1.1.02241 *2242 * @param string $class Class determined to be next for zebra striping effect.2243 */2244 return apply_filters( 'bp_get_the_thread_message_alt_class', $class );2245 }2246 2247 /**2248 * Output the ID for message sender within a single thread.2249 *2250 * @since 2.1.02251 */2252 function bp_the_thread_message_sender_id() {2253 echo (int) bp_get_the_thread_message_sender_id();2254 }2255 /**2256 * Return the ID for message sender within a single thread.2257 *2258 * @since 2.1.02259 *2260 * @return string2261 */2262 function bp_get_the_thread_message_sender_id() {2263 global $thread_template;2264 2265 $user_id = ! empty( $thread_template->message->sender_id )2266 ? $thread_template->message->sender_id2267 : 0;2268 2269 /**2270 * Filters the ID for message sender within a single thread.2271 *2272 * @since 2.1.02273 *2274 * @param int $user_id ID of the message sender.2275 */2276 return (int) apply_filters( 'bp_get_the_thread_message_sender_id', (int) $user_id );2277 }2278 2279 /**2280 * Output the avatar for the current message sender.2281 *2282 * @param array|string $args See {@link bp_get_the_thread_message_sender_avatar_thumb()}2283 * for a description.2284 */2285 function bp_the_thread_message_sender_avatar( $args = '' ) {2286 echo bp_get_the_thread_message_sender_avatar_thumb( $args );2287 }2288 /**2289 * Get the avatar for the current message sender.2290 *2291 * @param array|string $args {2292 * Array of arguments. See {@link bp_core_fetch_avatar()} for more2293 * complete details. All arguments are optional.2294 * @type string $type Avatar type. Default: 'thumb'.2295 * @type int $width Avatar width. Default: default for your $type.2296 * @type int $height Avatar height. Default: default for your $type.2297 * }2298 * @return string <img> tag containing the avatar.2299 */2300 function bp_get_the_thread_message_sender_avatar_thumb( $args = '' ) {2301 global $thread_template;2302 2303 $r = bp_parse_args( $args, array(2304 'type' => 'thumb',2305 'width' => false,2306 'height' => false,2307 ) );2308 2309 /**2310 * Filters the avatar for the current message sender.2311 *2312 * @since 1.1.02313 *2314 * @param string $value <img> tag containing the avatar value.2315 */2316 return apply_filters( 'bp_get_the_thread_message_sender_avatar_thumb', bp_core_fetch_avatar( array(2317 'item_id' => $thread_template->message->sender_id,2318 'type' => $r['type'],2319 'width' => $r['width'],2320 'height' => $r['height'],2321 'alt' => bp_core_get_user_displayname( $thread_template->message->sender_id )2322 ) ) );2323 }2324 2325 /**2326 * Output a link to the sender of the current message.2327 *2328 * @since 1.1.02329 */2330 function bp_the_thread_message_sender_link() {2331 echo esc_url( bp_get_the_thread_message_sender_link() );2332 }2333 /**2334 * Get a link to the sender of the current message.2335 *2336 * @since 1.1.02337 *2338 * @return string2339 */2340 function bp_get_the_thread_message_sender_link() {2341 global $thread_template;2342 2343 /**2344 * Filters the link to the sender of the current message.2345 *2346 * @since 1.1.02347 *2348 * @param string $value Link to the sender of the current message.2349 */2350 return apply_filters( 'bp_get_the_thread_message_sender_link', bp_core_get_userlink( $thread_template->message->sender_id, false, true ) );2351 }2352 2353 /**2354 * Output the display name of the sender of the current message.2355 *2356 * @since 1.1.02357 */2358 function bp_the_thread_message_sender_name() {2359 echo esc_html( bp_get_the_thread_message_sender_name() );2360 }2361 /**2362 * Get the display name of the sender of the current message.2363 *2364 * @since 1.1.02365 *2366 * @return string2367 */2368 function bp_get_the_thread_message_sender_name() {2369 global $thread_template;2370 2371 $display_name = bp_core_get_user_displayname( $thread_template->message->sender_id );2372 2373 if ( empty( $display_name ) ) {2374 $display_name = __( 'Deleted User', 'buddypress' );2375 }2376 2377 /**2378 * Filters the display name of the sender of the current message.2379 *2380 * @since 1.1.02381 *2382 * @param string $display_name Display name of the sender of the current message.2383 */2384 return apply_filters( 'bp_get_the_thread_message_sender_name', $display_name );2385 }2386 2387 /**2388 * Output the URL for deleting the current thread.2389 *2390 * @since 1.5.02391 */2392 function bp_the_thread_delete_link() {2393 echo esc_url( bp_get_the_thread_delete_link() );2394 }2395 /**2396 * Get the URL for deleting the current thread.2397 *2398 * @since 1.5.02399 *2400 * @return string URL2401 */2402 function bp_get_the_thread_delete_link() {2403 2404 /**2405 * Filters the URL for deleting the current thread.2406 *2407 * @since 1.0.02408 *2409 * @param string $value URL for deleting the current thread.2410 * @param string $value Text indicating action being executed.2411 */2412 return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox/delete/' . bp_get_the_thread_id(), 'messages_delete_thread' ) );2413 }2414 2415 /**2416 * Output the 'Sent x hours ago' string for the current message.2417 *2418 * @since 1.1.02419 */2420 function bp_the_thread_message_time_since() {2421 echo bp_get_the_thread_message_time_since();2422 }2423 /**2424 * Generate the 'Sent x hours ago' string for the current message.2425 *2426 * @since 1.1.02427 *2428 * @return string2429 */2430 function bp_get_the_thread_message_time_since() {2431 2432 /**2433 * Filters the 'Sent x hours ago' string for the current message.2434 *2435 * @since 1.1.02436 *2437 * @param string $value Default text of 'Sent x hours ago'.2438 */2439 return apply_filters( 'bp_get_the_thread_message_time_since', sprintf( __( 'Sent %s', 'buddypress' ), bp_core_time_since( bp_get_the_thread_message_date_sent() ) ) );2440 }2441 2442 /**2443 * Output the timestamp for the current message.2444 *2445 * @since 2.1.02446 */2447 function bp_the_thread_message_date_sent() {2448 echo bp_get_the_thread_message_date_sent();2449 }2450 /**2451 * Generate the 'Sent x hours ago' string for the current message.2452 *2453 * @since 2.1.02454 *2455 * @uses strtotime() To convert the message string into a usable timestamp.2456 *2457 * @return int2458 */2459 function bp_get_the_thread_message_date_sent() {2460 global $thread_template;2461 2462 /**2463 * Filters the date sent value for the current message as a timestamp.2464 *2465 * @since 2.1.02466 *2467 * @param string $value Timestamp of the date sent value for the current message.2468 */2469 return apply_filters( 'bp_get_the_thread_message_date_sent', strtotime( $thread_template->message->date_sent ) );2470 }2471 2472 /**2473 * Output the content of the current message in the loop.2474 *2475 * @since 1.1.02476 */2477 function bp_the_thread_message_content() {2478 echo bp_get_the_thread_message_content();2479 }2480 /**2481 * Get the content of the current message in the loop.2482 *2483 * @since 1.1.02484 *2485 * @return string2486 */2487 function bp_get_the_thread_message_content() {2488 global $thread_template;2489 2490 /**2491 * Filters the content of the current message in the loop.2492 *2493 * @since 1.1.02494 *2495 * @param string $message The content of the current message in the loop.2496 */2497 return apply_filters( 'bp_get_the_thread_message_content', $thread_template->message->message );2498 }2499 2500 /** Embeds *******************************************************************/2501 2502 /**2503 * Enable oEmbed support for Messages.2504 *2505 * @since 1.5.02506 *2507 * @see BP_Embed2508 */2509 function bp_messages_embed() {2510 add_filter( 'embed_post_id', 'bp_get_the_thread_message_id' );2511 add_filter( 'bp_embed_get_cache', 'bp_embed_message_cache', 10, 3 );2512 add_action( 'bp_embed_update_cache', 'bp_embed_message_save_cache', 10, 3 );2513 }2514 add_action( 'thread_loop_start', 'bp_messages_embed' );2515 2516 /**2517 * Fetch a private message item's cached embeds.2518 *2519 * Used during {@link BP_Embed::parse_oembed()} via {@link bp_messages_embed()}.2520 *2521 * @since 2.2.02522 *2523 * @param string $cache An empty string passed by BP_Embed::parse_oembed() for2524 * functions like this one to filter.2525 * @param int $id The ID of the message item.2526 * @param string $cachekey The cache key generated in BP_Embed::parse_oembed().2527 * @return mixed The cached embeds for this message item.2528 */2529 function bp_embed_message_cache( $cache, $id, $cachekey ) {2530 return bp_messages_get_meta( $id, $cachekey );2531 }2532 2533 /**2534 * Set a private message item's embed cache.2535 *2536 * Used during {@link BP_Embed::parse_oembed()} via {@link bp_messages_embed()}.2537 *2538 * @since 2.2.02539 *2540 * @param string $cache An empty string passed by BP_Embed::parse_oembed() for2541 * functions like this one to filter.2542 * @param string $cachekey The cache key generated in BP_Embed::parse_oembed().2543 * @param int $id The ID of the message item.2544 */2545 function bp_embed_message_save_cache( $cache, $cachekey, $id ) {2546 bp_messages_update_meta( $id, $cachekey, $cache );2547 }
Note: See TracChangeset
for help on using the changeset viewer.