You are here

user_relationship_privatemsg.module in User Relationships 5.2

File

plugins/user_relationship_privatemsg/user_relationship_privatemsg.module
View source
<?php

if (!variable_get('user_relationship_privatemsg_ops', FALSE)) {
  variable_set('user_relationship_privatemsg_ops', array(
    'request',
    'cancel',
    'approve',
    'disapprove',
    'remove',
  ));
}
require_once 'user_relationship_privatemsg_defaults.inc';

/**
 * Sends mail to the appropriate user
 *
 * @param $op
 *    string of action to take [request|delete|cancel|approve|disapprove|remove]
 *
 * @param $relationship
 *    object of the relationship
 *
 */
function user_relationship_privatemsg_send($op, $relationship) {
  if ($op == 'request' && $relationship->approved || !variable_get("user_relationship_privatemsg_send_{$op}", TRUE)) {
    return;
  }
  !$relationship->requester ? $relationship->requester = user_load(array(
    'uid' => $relationship->requester_id,
  )) : NULL;
  !$relationship->requestee ? $relationship->requestee = user_load(array(
    'uid' => $relationship->requestee_id,
  )) : NULL;
  $requester = $relationship->requester;
  $requestee = $relationship->requestee;
  $send_to = array();
  switch ($op) {
    case 'request':
    case 'cancel':
      $message_to[] = $requestee;
      break;
    case 'approve':
    case 'disapprove':
      $message_to[] = $requester;
      break;
    case 'remove':
      $message_to[] = $requester;
      if (!$relationship->is_oneway) {
        $message_to[] = $requestee;
      }
      break;
    default:
      return;
  }
  $sender = user_load(array(
    'uid' => variable_get('user_relationship_privatemsg_sender', 1),
  ));
  foreach ($message_to as $target) {

    // This prevents possible "You cannot contact" messages from the Privatemsg module
    if ($sender->uid == $target->uid) {
      continue;
    }
    $replacements = user_relationship_privatemsg_replacements($relationship);
    if ($op == 'remove') {
      $replacements['@profile_uid'] = $target->uid;
    }
    $message_function = "user_relationship_privatemsg_{$op}_default";
    $subject = t(variable_get("user_relationship_privatemsg_{$op}_subject", constant(strtoupper("user_relationship_privatemsg_{$op}_subject"))), $replacements);
    $message = t(variable_get("user_relationship_privatemsg_{$op}_message", $message_function()), $replacements);
    _privatemsg_send($sender, $target, $subject, $message, FILTER_FORMAT_DEFAULT, 0, 'user-relationship-notification');
  }
}

/**
 * hook_form_alter()
 */
function user_relationship_privatemsg_form_alter($form_id, &$form) {
  global $user;
  switch ($form_id) {
    case 'privatemsg_new':
      $relationships = user_relationships_load(array(
        'requester_id' => $user->uid,
      ), FALSE, 'requestee_id', NULL, NULL, TRUE);
      $contacts = array();
      foreach ($relationships as $relationship_list) {
        foreach ($relationship_list as $relationship) {
          $contacts[$relationship->plural_name][$relationship->requestee_name] = $relationship->requestee_name;
        }
      }
      $form['quick']['#options'] = array_merge($form['quick']['#options'], $contacts);
      break;
    case 'privatemsg_contacts_form':
      $relationships = user_relationships_load(array(
        'requester_id' => $user->uid,
      ), FALSE, 'rid', NULL, NULL, TRUE);
      foreach ($relationships as $relationship) {
        $form['contacts'][$relationship->requestee_id]['selected'] = array(
          '#type' => 'checkbox',
        );
        $form['contacts'][$relationship->requestee_id]['name'] = array(
          '#type' => 'value',
          '#value' => $relationship->requestee_name,
        );
        $form['contacts'][$relationship->requestee_id]['contact'] = array(
          '#type' => 'value',
          '#value' => theme('privatemsg_username', (object) array(
            'uid' => $relationship->requestee_id,
            'name' => $relationship->requestee_name,
          )),
        );
        $form['contacts'][$relationship->requestee_id]['operations'] = array(
          '#type' => 'value',
          '#value' => l(t('Write private message'), 'privatemsg/new/' . $relationship->requestee_id),
        );
      }
      if ($relationships) {
        $form['selected'] = array(
          '#type' => 'fieldset',
          '#collapsible' => FALSE,
          '#collapsed' => FALSE,
          '#prefix' => '<div class="container-inline">',
          '#suffix' => '</div>',
        );
        $form['selected']['label'] = array(
          '#value' => '<div><strong>' . t('With selected:') . '</strong> &nbsp; &nbsp;</div>',
        );
        $form['selected']['write_message'] = array(
          '#type' => 'submit',
          '#value' => t('Write private message'),
        );
      }
      break;
    case 'user_relationships_settings':
      $relationship = user_relationships_types_load();
      $relationship = array_pop($relationship);
      $form['privatemsg'] = array(
        '#type' => 'fieldset',
        '#title' => t('Privatemsg Options'),
        '#weight' => -10,
      );
      $sender = user_load(array(
        'uid' => variable_get('user_relationship_privatemsg_sender', 1),
      ));
      $form['privatemsg']['user_relationship_privatemsg_sender'] = array(
        '#type' => 'textfield',
        '#title' => t('Sender'),
        '#size' => 50,
        '#maxlength' => 64,
        '#required' => TRUE,
        '#default_value' => $sender->name,
        '#autocomplete_path' => 'privatemsg/autocomplete',
      );
      $user_relationship_privatemsg_ops = variable_get('user_relationship_privatemsg_ops', array());
      foreach ($user_relationship_privatemsg_ops as $op) {
        $message_function = "user_relationship_privatemsg_{$op}_default";
        $form['privatemsg'][$op] = array(
          '#type' => 'fieldset',
          '#title' => t(ucfirst($op)),
          '#collapsible' => TRUE,
          '#collapsed' => TRUE,
        );
        $form['privatemsg'][$op]["user_relationship_privatemsg_send_{$op}"] = array(
          '#type' => 'checkbox',
          '#title' => t('Send @op messages', array(
            '@op' => $op,
          )),
          '#default_value' => variable_get("user_relationship_privatemsg_send_{$op}", TRUE),
        );
        $form['privatemsg'][$op]["user_relationship_privatemsg_{$op}_subject"] = array(
          '#type' => 'textfield',
          '#title' => t('@Op relationship email subject', array(
            '@Op' => ucfirst($op),
          )),
          '#default_value' => variable_get("user_relationship_privatemsg_{$op}_subject", constant(strtoupper("user_relationship_privatemsg_{$op}_subject"))),
        );
        $form['privatemsg'][$op]["user_relationship_privatemsg_{$op}_message"] = array(
          '#type' => 'textarea',
          '#title' => t('@Op relationship email message', array(
            '@Op' => ucfirst($op),
          )),
          '#default_value' => variable_get("user_relationship_privatemsg_{$op}_message", $message_function()),
          '#description' => t('Replacement strings are: %macros', array(
            '%macros' => implode(', ', array_keys(user_relationship_privatemsg_replacements($relationship))),
          )),
        );
      }
      break;
  }
}

/**
 * hook_user_relationships()
 */
function user_relationship_privatemsg_user_relationships($type, &$relationship, $category = NULL) {
  if (in_array($type, array(
    'post-save',
    'delete',
  ))) {
    user_relationship_privatemsg_send($category, $relationship);
  }
}