Actions snippets

The Actions.module is a powerful way to automate tasks on your website. Actions are small "snippets" of php code that can be triggered on certain events. For an example of a module that uses actions, see workflow.module.

To use these actions, create a custom module in modules directory and paste the actions snippet into your module.

Example
<?php
//This is my module

function action_do_something($op, $edit = array(), $node) {
/* ACTION SNIPPET CODE GOES HERE */
}
?>

###########
Send an email to everyone in a role group
Drupal 4.7

This action will send an email to everyone user in the selected role groups. This is useful for workflow changes to alert editors that they have nodes to review.
<?php
function action_send_email_torolegroup($op, $edit = array(), $node) {
  switch($op) {
    case 'metadata':
      return array(
        'description' => t('Send Email to a role group'),
        'type' => t('Email'),
        'batchable' => false,
        'configurable' => true,
      );

    case 'do':
      // note this is the user who owns the node, not global $user
      $user = user_load(array('uid' => $node->uid));
      $site_name = variable_get('site_name', 'Drupal');
      $from = "$site_name <" . variable_get('site_mail', ini_get('sendmail_from')) . '>';
      $subject = $edit['subject'];
      $message = $edit['message'];

      foreach($edit['recipients'] as $rid => $chose_role) {
        if ($chose_role) {
          $recipient_roles[] = $rid;
        }

      }

      $recipient_addresses = array();

      if ($recipient_roles[2]) { //email every one! wow. that's why a watchdog is invoked

        watchdog('action', t('Sent an email to every single registered user. Use with caution.'));

        $result = db_query('SELECT mail FROM {users} WHERE uid > 0');
        while($account = db_fetch_object($result)) {
          $recipient_addresses[] = $account->mail;
        }
      } else {
        $roles = implode(',', $recipient_roles);
        $result = db_query('SELECT DISTINCT u.mail FROM {users} u INNER JOIN {users_roles} r ON u.uid = r.uid WHERE r.rid IN (%s)', $roles);
        while($account = db_fetch_object($result)) {
          $recipient_addresses[] = $account->mail;
        }
      }

      if (isset($node) && is_object($node)) {
        $variables = array(
          '%site_name' => $site_name,
          '%username' => $user->name,
          '%uid' => $node->uid,
          '%node_url' => url('node/' . $node->nid, NULL, NULL, TRUE),
          '%node_type' => $node->type,
          '%title' => $node->title,
          '%teaser' => strip_tags($node->teaser),
          '%body' => strip_tags($node->body)
          );

        $message = strtr($message, $variables);
      }
      foreach ($recipient_addresses as $recipient) {
        if (user_mail($recipient, $subject, $message, "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from" )) {
          watchdog('action', t('Sent email to %recipient', array('%recipient' => $recipient)));
        }
        else {
          watchdog('error', t('Unable to send email to %recipient', array('%recipient' => $recipient)));
        }
      }
      break;

    // return an HTML config form for the action
    case 'form':
      // default values for form
      //  if (!isset($edit['recipients'])) $edit['recipients'] = '';
      if (!isset($edit['subject'])) $edit['subject'] = '';
      if (!isset($edit['message'])) $edit['message'] = '';
      $form = array();
      $roles = user_roles();
      unset($roles[1]); // good bye anonymous users!
      //unset($roles[2]); // good bye authenticated users!

      $form['recipients'] = array(
        '#type' => 'checkboxes',
        '#title' => t('Recipient Role Groups'),
        '#default_value' => $edit['recipients'],
        '#options' => $roles,
        '#description' => t('Select which roles should receive this email.'),
    );

      $form['subject'] = array(
        '#type' => 'textfield',
        '#title' => t('Subject'),
        '#default_value' => $edit['subject'],
        '#size' => '20',
        '#maxlength' => '254',
        '#description' => t('The subject of the message.'),
      );
      $form['message'] = array(
        '#type' => 'textarea',
        '#title' => t('Message'),
        '#default_value' => $edit['message'],
        '#cols' => '80',
        '#rows' => '20',
        '#description' => t('The message that should be sent.  You may include the following variables: %site_name, %username, %node_url, %node_type, %title, %teaser, %body'),
      );
      return $form;

    // validate the HTML form
    case 'validate':
      $errors = array();

      $roleselected = false;
      foreach($edit['recipients'] as $rid => $selected) {
        if ($selected) {
          $roleselected = true;
        }
      }
      if (!$roleselected) {
        $errors['recipients'] = t('Please enter at least one recieptient role group');
      }

      foreach ($errors as $name => $message) {
        form_set_error($name, $message);
      }

      return count($errors) == 0;

    // process the HTML form to store configuration
    case 'submit':

      $params = array(
        'recipients' => $edit['recipients'],
        'subject'  => $edit['subject'],
        'message'  => $edit['message']);
      return $params;
  }
}
?>
#####################
