function pm_block_user_privatemsg_block_message

1 pm_block_user.module pm_block_user_privatemsg_block_message($author, $recipients)
7-1 pm_block_user.module pm_block_user_privatemsg_block_message($author, $recipients, $context = array())
7-2 pm_block_user.module pm_block_user_privatemsg_block_message($author, $recipients, $context = array())
6-2 pm_block_user.module pm_block_user_privatemsg_block_message($author, $recipients, $context = array())

Implements hook_privatemsg_block_message.

File

pm_block_user/pm_block_user.module, line 253
Allows users to block other users from sending them any messages

Code

function pm_block_user_privatemsg_block_message($author, $recipients, $context = array()) {
  $blocked = array();
  // Loop through each recipient and ensure there is no rule blocking this
  // author from sending them private messages. Use a reference, so when
  // privatemsg_user_load_multiple() is needed here the array is updated, to
  // avoid additional checks.
  foreach (array_keys($recipients) as $id) {
    // Only recipients of type user are currently supported.
    if (isset($recipients[$id]->type) && $recipients[$id]->type != 'user') {
      continue;
    }
    // Ensure we have a recipient user object which includes roles.
    if (!isset($recipients[$id]->roles)) {
      $uid = str_replace('user_', '', $id);
      $recipients[$id] = array_shift(privatemsg_user_load_multiple($uid));
    }
    // Note: this is checks whether the author may send the message (see third
    // parameter). Further below is a check whether the recipient may block it.
    if (_pm_block_user_rule_exists($author, $recipients[$id], PM_BLOCK_USER_DISALLOW_SENDING)) {
      $blocked[] = array(
        'recipient' => $id,
        'message' => t('You are not permitted to send messages to !user.', array('!user' => privatemsg_recipient_format($recipients[$id]))),
      );
    }
  }

  // Only user recipients are supported for now, remove others.
  $user_recipients = array();
  foreach ($recipients as $recipient) {
    if (empty($recipient->type)) {
      $recipient->type = 'user';
      $recipient->recipient = $recipient->uid;
    }
    if ($recipient->type == 'user') {
      $user_recipients[$recipient->recipient] = $recipient;
    }
  }

  if (empty($user_recipients)) {
    return $blocked;
  }

  $args = array(
    ':author' => $author->uid,
    ':recipients' => array_keys($user_recipients),
  );
  $result = db_query('SELECT recipient FROM {pm_block_user} WHERE author = :author AND recipient IN (:recipients) GROUP BY recipient', $args);
  foreach ($result as $row) {
    $recipient = $user_recipients[$row->recipient];
    // If there's a rule disallowing blocking of this message, send it anyway.
    if (_pm_block_user_rule_exists($author, $recipient, PM_BLOCK_USER_DISALLOW_BLOCKING)) {
      continue;
    }
    $blocked[] = array(
      'recipient' => privatemsg_recipient_key($recipient),
      'message' => t('%name has chosen to block messages from you.', array('%name' => privatemsg_recipient_format($recipient, array('plain' => TRUE)))),
    );
  }
  return $blocked;
}