You are here

function heartbeat_rules_default_action_form in Heartbeat 6.3

Same name and namespace in other branches
  1. 6.4 modules/heartbeat_rules/hrules.rules.inc \heartbeat_rules_default_action_form()

Action drupal message configuration form.

File

./heartbeat.rules.inc, line 116

Code

function heartbeat_rules_default_action_form($settings, &$form, $form_state) {

  // Ahah is in the form, so cache it
  $form['#cache'] = TRUE;

  // Add the default empty values to the settings hash
  $settings += array(
    'uid_param' => '',
    'uid_target_param' => '',
    'nid_target_param' => '',
    'message_id_param' => '',
    'variables_param' => '',
  );
  $form['settings']['uid_param'] = array(
    '#type' => 'textfield',
    '#size' => '15',
    '#maxsize' => '25',
    '#title' => t('User'),
    '#default_value' => $settings['uid_param'],
    '#description' => t('The user doing the activity. Think well about who is the acting user for content related events. Is it the currently logged-in user or the author of the content.'),
    '#weight' => -5,
  );
  $form['settings']['uid_target_param'] = array(
    '#type' => 'textfield',
    '#size' => '15',
    '#maxsize' => '25',
    '#title' => t('User target'),
    '#default_value' => $settings['uid_target_param'],
    '#description' => t('The user target of the activity'),
    '#weight' => -4,
  );
  $form['settings']['nid_target_param'] = array(
    '#type' => 'textfield',
    '#size' => '15',
    '#maxsize' => '25',
    '#title' => t('Node target'),
    '#default_value' => $settings['nid_target_param'],
    '#description' => t('The node target of the activity'),
    '#weight' => -3,
  );
  $messages = heartbeat_messages('all', false, false);
  $options = array(
    0 => t('No message selected'),
  );
  foreach ($messages as $message) {
    $options[$message['message_id']] = $message['description'];
  }

  // Choose a message and addin ahah behavior to show variables
  $form['settings']['message_id_param'] = array(
    '#type' => 'select',
    '#title' => t('Choose a message'),
    '#default_value' => empty($settings['message_id_param']) ? 0 : $settings['message_id_param'],
    '#options' => $options,
    '#weight' => -2,
    '#description' => t('The message'),
    '#submit' => array(
      'heartbeat_rules_action_message_id_submit',
    ),
    // If no javascript action.
    '#ahah' => array(
      'path' => 'heartbeat/heartbeat_activity_rules_default/js',
      'wrapper' => 'message-variables',
      'event' => 'change',
      'method' => 'replace',
      'effect' => 'fade',
    ),
  );

  // Add a wrapper for the variables section.
  $form['settings']['message_id_wrapper'] = array(
    '#type' => 'markup',
    '#weight' => -1,
    '#prefix' => '<div class="clear-block" id="heartbeat-wrapper"><div id="message-variables">',
    '#suffix' => '</div></div>',
    '#value' => '',
  );

  // Show variables if message_id_param is set

  //dsm($form_state);
  if (!empty($form_state['values']['settings']['message_id_param'])) {

    // With the message id, we fetch the whole message
    $heartbeat_message_id = $form_state['values']['settings']['message_id_param'];
    $message = heartbeat_load_message($heartbeat_message_id);
    $defined_variables = heartbeat_match_variables($message->message);

    // If words are found as match to a heartbeat message variable,
    // variables are needed in the message
    if (count($defined_variables['words']) > 0) {

      // Add the textarea where all the magic variables go into
      $description = t('Variables are supported to build heartbeat messages at all time from a log.<br />
	    The syntax you must use for this is simple. You give your variable you want to use,
	    prefixed by @ or #. (# is for variables that need to be pretranslated)
	    <br />Assign your variable to a token available from the token replacement list,
	    and assign it with the "=".<br /><strong>Note! One variable assignment per line and no colons as assignment because colons are in the tokens as well.</strong>');
      $default_values = heartbeat_variables_compare($settings, $form_state['values']['variables_param'], $defined_variables['words']);

      // Container for just the message variables
      $form['settings']['variables_param'] = array(
        '#type' => 'textarea',
        '#title' => t('Assign a token to each of these variables used in the selected message'),
        '#suffix' => '<small>' . $description . '</small>',
        '#default_value' => $default_values,
        '#cols' => 60,
        '#rows' => 5,
        '#prefix' => t('<strong>Message</strong>: <em>@message</em>', array(
          '@message' => $message->message,
        )),
        '#required' => TRUE,
      );
    }
  }
  else {
    $form['settings']['message_id_wrapper']['variables_info'] = array(
      '#type' => 'markup',
      '#value' => t('Variables in the chosen message will appear here. Assign them to a token, available for this type of event.'),
    );
  }
}