View source
<?php
class rules_data_type_heartbeat_message extends rules_data_type {
function get_default_input_form($info, $value) {
$info += array(
'long' => FALSE,
'required' => TRUE,
'description' => '',
);
return array(
'#type' => $info['long'] ? 'textarea' : 'textfield',
'#title' => $info['label'],
'#description' => $info['description'],
'#required' => $info['required'],
'#default_value' => $value,
);
}
}
class rules_data_type_heartbeat_message_id extends rules_data_type_heartbeat_message {
function check_value($info, $value) {
return (double) $value;
}
}
class rules_data_type_heartbeat_access extends rules_data_type_heartbeat_message {
function check_value($info, $value) {
return (double) $value;
}
}
function heartbeat_rules_data_type_info() {
return array(
'heartbeat_message' => array(
'label' => t('logged heartbeat message in the most basic form'),
'class' => 'rules_data_type_heartbeat_message',
'identifiable' => FALSE,
'eval input' => TRUE,
),
'heartbeat_message_id' => array(
'label' => t('heartbeat message id'),
'class' => 'rules_data_type_heartbeat_message_id',
'identifiable' => FALSE,
'eval input' => TRUE,
),
'heartbeat_access' => array(
'label' => t('heartbeat message access'),
'class' => 'rules_data_type_heartbeat_access',
'identifiable' => FALSE,
'eval input' => TRUE,
),
);
}
function hrules_rules_action_info() {
$info = array(
'heartbeat_rules_default_action' => array(
'label' => t('Logs default activity'),
'eval input' => array(
'uid_param',
'uid_target_param',
'nid_param',
'nid_target_param',
'message_id_param',
'variables_param',
),
'help' => 'Create a relation between a user and something else(node, user, comment, etc ...).',
'module' => 'heartbeat',
),
'heartbeat_rules_users_action' => array(
'label' => t('Logs activity to indicate a relation between users'),
'eval input' => array(
'uid_param',
'uid_target_param',
'message_id_param',
'variables_param',
),
'help' => 'Create a relation between a user and another user. This is only helpfull for relationships like friends, collegues, ... but not when a user only addresses his content to another user.',
'module' => 'heartbeat',
),
);
return $info;
}
function heartbeat_rules_default_action_form($settings, &$form, $form_state) {
drupal_add_js(drupal_get_path('module', 'hrules') . '/hrules.js');
$settings += array(
'uid_param' => '',
'uid_target_param' => '',
'nid_param' => '',
'nid_target_param' => '',
'message_id_param' => '',
'variables_param' => '',
);
$form['settings']['uid_param'] = array(
'#type' => 'textfield',
'#size' => '15',
'#maxsize' => '25',
'#title' => t('User Id'),
'#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 Id'),
'#default_value' => $settings['uid_target_param'],
'#description' => t('The user target of the activity'),
'#weight' => -4,
);
$form['settings']['nid_param'] = array(
'#type' => 'textfield',
'#size' => '15',
'#maxsize' => '25',
'#title' => t('Node context Id'),
'#default_value' => $settings['nid_param'],
'#description' => t('The node for activity context'),
'#weight' => -3,
);
$form['settings']['nid_target_param'] = array(
'#type' => 'textfield',
'#size' => '15',
'#maxsize' => '25',
'#title' => t('Node target Id'),
'#default_value' => $settings['nid_target_param'],
'#description' => t('The node target of the activity. Only set one if the node is used! It is only handy to merge nodes within node targets, and thus separating the node target contexts (E.g.: Groups, references, ...'),
'#weight' => -3,
);
$messages = heartbeat_messages('all', FALSE, FALSE);
$options = array(
0 => t('No message selected'),
);
foreach ($messages as $message) {
$options[$message['message_id']] = !empty($message['description']) ? $message['description'] : str_replace('_', ' ', $message['message_id']);
}
$message_id = empty($settings['message_id_param']) ? 0 : $settings['message_id_param'];
$form['settings']['message_id_param'] = array(
'#type' => 'select',
'#title' => t('Choose a message'),
'#default_value' => $message_id,
'#options' => $options,
'#weight' => -2,
'#description' => t('The message'),
'#attributes' => array(
'onchange' => 'javascript:heartbeat_rule_get_variables(this); return false;',
),
);
$heartbeat_message_id = empty($form_state['values']['settings']['message_id_param']) ? $message_id : $form_state['values']['settings']['message_id_param'];
$form['settings']['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. Variables are supported to build heartbeat messages
at all time from a log.<br />
The syntax you must use goes like this. 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 lists above.
<br /><strong>Note</strong> One variable assignment per line and no colons as assignment because
colons are in the tokens as well.
<br /><strong>Synthax</strong><pre>
@username=[author:user-name-url]
@node_type=[node:type]
@node_title=[node:title-link]
@types=pages</pre>'),
);
$template_message = $template_message_concat = $default_values = '';
if ($heartbeat_message_id) {
$message = heartbeat_message_load($heartbeat_message_id, 'message_id');
if (isset($message)) {
$default_values = heartbeat_rule_action_get_variables($message, $settings['variables_param']);
$template_message = $message->message;
$template_message_concat = $message->message_concat;
}
else {
drupal_set_message(t('The message template "@template" has been removed or the module that had the definition for it has been disabled.', array(
'@template' => $heartbeat_message_id,
)));
}
}
$display = empty($settings['variables_param']) ? 'none' : 'block';
$template = '<blockquote>';
if (!empty($template_message)) {
$template .= t('<strong>Message</strong>: <div id="message-message">!message</div>', array(
'!message' => $template_message,
));
}
if (!empty($template_message_concat)) {
$template .= t('<strong>Grouping message</strong>: <div id="message-message">!message</div>', array(
'!message' => $template_message_concat,
));
}
$template .= '</blockquote>';
$form['settings']['variables_param'] = array(
'#type' => 'textarea',
'#title' => t('Assign a token to each of these variables used in the selected message'),
'#prefix' => '<div class="clear-block" id="heartbeat-wrapper">' . $template . '<div id="message-variables" style="display: ' . $display . '">',
'#suffix' => '</div></div>',
'#default_value' => $default_values,
'#cols' => 60,
'#rows' => 5,
);
}
function heartbeat_rules_default_action_submit(&$settings, $form, $form_state) {
$params = $form_state['values']['settings'];
$vars = $params['variables_param'];
$vars = eregi_replace("\r\n", "-|-", $vars);
$vars = eregi_replace("=", "=|=", $vars);
$settings['variables_param'] = $vars;
}
function heartbeat_rules_default_action($settings, $form = array(), $event_info = array()) {
if (is_array($settings)) {
heartbeat_api_log($settings['message_id_param'], $settings['uid_param'], $settings['uid_target_param'], $settings['nid_param'], $settings['nid_target_param'], $settings['variables_param']);
}
return TRUE;
}
function heartbeat_rules_users_action_form($settings, &$form, $form_state) {
heartbeat_rules_default_action_form($settings, $form, $form_state);
$form['settings']['nid_param'] = array(
'#type' => 'hidden',
'#value' => 0,
);
$form['settings']['nid_target_param'] = array(
'#type' => 'hidden',
'#value' => 0,
);
}
function heartbeat_rules_users_action_submit(&$settings, $form, $form_state) {
heartbeat_rules_default_action_submit($settings, $form, $form_state);
}
function heartbeat_rules_users_action($settings, $form = array(), $event_info = array()) {
if (is_array($settings)) {
heartbeat_api_log($settings['message_id_param'], $settings['uid_param'], $settings['uid_target_param'], 0, 0, $settings['variables_param'] . '-|-duplicate=|=1-|-');
}
return TRUE;
}