regcode_mailer.module in Registration codes 7
Same filename and directory in other branches
Main code functionality and hooks of regcode_mailer module.
File
regcode_mailer/regcode_mailer.moduleView source
<?php
/**
 * @file
 * Main code functionality and hooks of regcode_mailer module.
 */
/**
 * Implements hook_action_info().
 */
function regcode_mailer_action_info() {
  return array(
    'regcode_mailer_mail_action' => array(
      'type' => 'regcode',
      'label' => t('Mail codes'),
      'configurable' => TRUE,
      'triggers' => array(
        'any' => TRUE,
      ),
    ),
  );
}
/**
 * Form for the mail action.
 */
function regcode_mailer_mail_action_form() {
  $form = array();
  $form['regcode_mailer_subject'] = array(
    '#type' => 'textfield',
    '#title' => t('Subject'),
    '#required' => TRUE,
  );
  $form['regcode_mailer_message'] = array(
    '#type' => 'textarea',
    '#title' => t('Body'),
    '#description' => t('Enter the plaintext email to be sent to the user.'),
    '#rows' => 8,
    '#required' => TRUE,
  );
  $form['regcode_mailer_tokens'] = array(
    '#title' => t('Replacement patterns'),
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['regcode_mailer_tokens']['token_tree'] = array(
    '#theme' => 'token_tree',
    '#token_types' => array(
      'regcode',
    ),
  );
  $form['regcode_mailer_emails'] = array(
    '#type' => 'textarea',
    '#title' => t('Email addresses'),
    '#description' => t('List the email addresses to send the registration code to. Separate each email with a new line.'),
    '#rows' => 8,
    '#required' => TRUE,
  );
  $form['regcode_mailer_tags'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Tags'),
    '#options' => regcode_get_vocab_terms(),
    '#description' => t('You may assign tags to track which codes have been sent.'),
  );
  return $form;
}
/**
 * Validate action for the form.
 *
 * We need to ensure that they have actually used [regcode] somewhere.
 */
function regcode_mailer_mail_action_validate($form, $form_state) {
  $message = $form_state['values']['regcode_mailer_message'];
  if (strpos($message, '[regcode:code]') === FALSE && strpos($message, '[regcode:regurl]') === FALSE) {
    form_set_error('regcode_mailer_message', t('Cannot send message without registration code - you should insert either [regcode:code] or [regcode:regurl] token in the message body.'));
  }
}
/**
 * Submit action for the form.
 */
function regcode_mailer_mail_action_submit($form, $form_state) {
  $emails = array_filter(explode("\n", $form_state['values']['regcode_mailer_emails']));
  array_map('trim', $emails);
  return array(
    'subject' => $form_state['values']['regcode_mailer_subject'],
    'message' => $form_state['values']['regcode_mailer_message'],
    'emails' => $emails,
    'terms' => array_filter($form_state['values']['regcode_mailer_tags']),
  );
}
/**
 * Implements the mail action.
 */
function regcode_mailer_mail_action(&$object, &$context = array()) {
  static $i = 0;
  // Check we have enough emails for this action.
  if (!isset($context['emails'][$i])) {
    drupal_set_message(t('Ran out of emails, unable to send code (%code).', array(
      '%code' => $object->code,
    )));
    return FALSE;
  }
  // Params for the email.
  $params = array(
    'regcode' => $object,
    'message' => $context['message'],
    'subject' => $context['subject'],
  );
  // Send.
  $email = $context['emails'][$i];
  drupal_mail('regcode_mailer', 'regcode', $email, language_default(), $params);
  drupal_set_message(t('Sent message with code %code to %email', array(
    '%code' => $object->code,
    '%email' => $email,
  )));
  // Update the database.
  db_insert('regcode_mailer')
    ->fields(array(
    'rid' => $object->rid,
    'mailed' => REQUEST_TIME,
    'recipient' => $email,
  ))
    ->execute();
  // Tag the code.
  foreach ($context['terms'] as $term_id) {
    $record = array(
      'rid' => $object->rid,
      'tid' => $term_id,
    );
    db_merge('regcode_term')
      ->key($record)
      ->fields($record)
      ->execute();
  }
  $i++;
}
/**
 * Implements hook_mail().
 */
function regcode_mailer_mail($key, &$message, $params) {
  switch ($key) {
    case 'regcode':
      $token_data = array(
        'regcode' => $params['regcode'],
      );
      $message['subject'] = token_replace($params['subject'], $token_data);
      $message['body'][] = token_replace($params['message'], $token_data);
      break;
  }
}Functions
| Name   | Description | 
|---|---|
| regcode_mailer_action_info | Implements hook_action_info(). | 
| regcode_mailer_mail | Implements hook_mail(). | 
| regcode_mailer_mail_action | Implements the mail action. | 
| regcode_mailer_mail_action_form | Form for the mail action. | 
| regcode_mailer_mail_action_submit | Submit action for the form. | 
| regcode_mailer_mail_action_validate | Validate action for the form. | 
