BP_Messages_Thread::delete( int $thread_id, int $user_id )
Mark messages in a thread as deleted or delete all messages in a thread.
Description Description
Note: All messages in a thread are deleted once every recipient in a thread has marked the thread as deleted.
Parameters Parameters
- $thread_id
-
(Required) The message thread ID.
- $user_id
-
(Required) The ID of the user in the thread to mark messages as deleted for. Defaults to the current logged-in user.
Return Return
(bool)
Source Source
File: bp-messages/classes/class-bp-messages-thread.php
public static function delete( $thread_id = 0, $user_id = 0 ) {
global $wpdb;
$thread_id = (int) $thread_id;
$user_id = (int) $user_id;
if ( empty( $user_id ) ) {
$user_id = bp_loggedin_user_id();
}
/**
* Fires before a message thread is marked as deleted.
*
* @since 2.2.0
* @since 2.7.0 The $user_id parameter was added.
*
* @param int $thread_id ID of the thread being deleted.
* @param int $user_id ID of the user that the thread is being deleted for.
*/
do_action( 'bp_messages_thread_before_mark_delete', $thread_id, $user_id );
$bp = buddypress();
// Mark messages as deleted
$wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET is_deleted = 1 WHERE thread_id = %d AND user_id = %d", $thread_id, $user_id ) );
// Get the message ids in order to pass to the action.
$message_ids = $wpdb->get_col( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_messages} WHERE thread_id = %d", $thread_id ) );
// Check to see if any more recipients remain for this message.
$recipients = $wpdb->get_results( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d AND is_deleted = 0", $thread_id ) );
// No more recipients so delete all messages associated with the thread.
if ( empty( $recipients ) ) {
/**
* Fires before an entire message thread is deleted.
*
* @since 2.2.0
*
* @param int $thread_id ID of the thread being deleted.
* @param array $message_ids IDs of messages being deleted.
*/
do_action( 'bp_messages_thread_before_delete', $thread_id, $message_ids );
// Delete all the messages.
$wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->messages->table_name_messages} WHERE thread_id = %d", $thread_id ) );
// Do something for each message ID.
foreach ( $message_ids as $message_id ) {
// Delete message meta.
bp_messages_delete_meta( $message_id );
/**
* Fires after a message is deleted. This hook is poorly named.
*
* @since 1.0.0
*
* @param int $message_id ID of the message.
*/
do_action( 'messages_thread_deleted_thread', $message_id );
}
// Delete all the recipients.
$wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", $thread_id ) );
}
/**
* Fires after a message thread is either marked as deleted or deleted.
*
* @since 2.2.0
* @since 2.7.0 The $user_id parameter was added.
*
* @param int $thread_id ID of the thread being deleted.
* @param array $message_ids IDs of messages being deleted.
* @param int $user_id ID of the user the threads were deleted for.
*/
do_action( 'bp_messages_thread_after_delete', $thread_id, $message_ids, $user_id );
return true;
}
Changelog Changelog
| Version | Description |
|---|---|
| 2.7.0 | The $user_id parameter was added. Previously the current user was always assumed. |
| 1.0.0 | Introduced. |