function privatemsg_message_change_recipient

7-1 privatemsg.module privatemsg_message_change_recipient($mid, $uid, $type = 'user', $add = TRUE)
7-2 privatemsg.module privatemsg_message_change_recipient($mid, $uid, $type = 'user', $add = TRUE)
6-2 privatemsg.module privatemsg_message_change_recipient($mid, $uid, $type = 'user', $add = TRUE)

Add or remove a recipient to an existing message.

Parameters

$mid: Message id for which the recipient should be added.

$recipient: Recipient id that should be added, for example uid.

$type: Type of the recipient, defaults to hidden.

$add: If TRUE, adds the recipient, if FALSE, removes it.

3 calls to privatemsg_message_change_recipient()
privatemsg_cron in ./privatemsg.module
Implements hook_cron().
privatemsg_load_recipients in ./privatemsg.pages.inc
Batch processing function for rebuilding the index.
_privatemsg_handle_recipients in ./privatemsg.module
Handle the non-user recipients of a new message.

File

./privatemsg.module, line 2561
Allows users to send private messages to other users.

Code

function privatemsg_message_change_recipient($mid, $uid, $type = 'user', $add = TRUE) {
  // The message is statically cached, so only a single load is necessary.
  $message = privatemsg_message_load($mid);
  $thread_id = $message->thread_id;
  if ($add) {
    // Only add the recipient if he does not block the author.
    $recipient = user_load($uid);
    $context = ($thread_id == $mid) ? array() : array('thread_id' => $thread_id);
    $user_blocked = module_invoke_all('privatemsg_block_message', $message->author, array(privatemsg_recipient_key($recipient) => $recipient), $context);
    if (count($user_blocked) <> 0) {
      return;
    }

    // Make sure to only add a recipient once. The types user and hidden are
    // considered equal here.
    $query = db_select('pm_index', 'pmi');
    $query->addExpression('1');
    $exists = $query->condition('mid', $mid)->condition('recipient', $uid)->condition('type', ($type == 'user' || $type == 'hidden') ? array('user', 'hidden') : $type)->execute()->fetchField();
    if (!$exists) {
      db_insert('pm_index')->fields(array('mid' => $mid, 'thread_id' => $thread_id, 'recipient' => $uid, 'type' => $type, 'is_new' => 1, 'deleted' => 0))->execute();
    }
  }
  else {
    db_delete('pm_index') > condition('mid', $mid)->condition('recipient', $uid)->condition('type', $type)->execute();
  }
  module_invoke_all('privatemsg_message_recipient_changed', $mid, $thread_id, $uid, $type, $add);
}