$ruleset) { if (count($ruleset['arguments']) == 1) { // For now, we only accept rulesets with one argument (taken to be the 'type') $arg = key($ruleset['arguments']); $actions["views_bulk_operations_ruleset_action_{$ruleset_key}"] = array( 'type' => $ruleset['arguments'][$arg]['type'], 'parameters' => array('ruleset' => $ruleset_key), 'description' => $ruleset['label'], 'configurable' => FALSE, 'rules_ignore' => TRUE, 'callback' => 'views_bulk_operations_ruleset_action_one', ); } else if (!count($ruleset['arguments'])) { // No argument: system action $actions["views_bulk_operations_ruleset_action_{$ruleset_key}"] = array( 'type' => 'system', 'parameters' => array('ruleset' => $ruleset_key), 'description' => $ruleset['label'], 'configurable' => FALSE, 'rules_ignore' => TRUE, 'callback' => 'views_bulk_operations_ruleset_action_zero', ); } else { // General case $actions["views_bulk_operations_ruleset_action_{$ruleset_key}"] = array( 'type' => 'system', 'parameters' => array('ruleset' => $ruleset_key), 'description' => $ruleset['label'], 'configurable' => TRUE, 'rules_ignore' => TRUE, 'callback' => "views_bulk_operations_ruleset_action_{$ruleset_key}", 'form properties' => array('#arguments'), ); eval(" if (!function_exists('views_bulk_operations_ruleset_action_{$ruleset_key}')) { function views_bulk_operations_ruleset_action_{$ruleset_key}(&\$object, \$context) { \$context['ruleset'] = '$ruleset_key'; return views_bulk_operations_ruleset_action(\$object, \$context); } function views_bulk_operations_ruleset_action_{$ruleset_key}_form(\$context) { \$context['ruleset'] = '$ruleset_key'; return views_bulk_operations_ruleset_action_form(\$context); } function views_bulk_operations_ruleset_action_{$ruleset_key}_validate(\$form, \$form_state) { return views_bulk_operations_ruleset_action_validate(\$form, \$form_state); } function views_bulk_operations_ruleset_action_{$ruleset_key}_submit(\$form, \$form_state) { return views_bulk_operations_ruleset_action_submit(\$form, \$form_state); } } "); } } return $actions; } function views_bulk_operations_ruleset_action_one(&$object, $context) { rules_invoke_rule_set($context['ruleset'], $object); } function views_bulk_operations_ruleset_action_zero(&$object, $context) { rules_invoke_rule_set($context['ruleset']); } function views_bulk_operations_ruleset_action(&$object, $context) { $ruleset = rules_get_rule_sets($context['ruleset']); $args = array(); foreach ($ruleset['arguments'] as $key => $argument) { $args[$key] = @eval($context['args'][$key]); } rules_invoke_rule_set($context['ruleset'], $args); } function views_bulk_operations_ruleset_action_form($context) { $ruleset = rules_get_rule_sets($context['ruleset']); $form['#arguments'] = $ruleset['arguments']; foreach ($form['#arguments'] as $key => $argument) { $form[$key] = array( '#type' => 'textarea', '#title' => $argument['label'], '#description' => t('Argument of type %type. Enter PHP script that will return a value for this argument. Note that Rules expects a entire object (e.g. $node) rather than an id (e.g. $nid). The variables $object and $context are available to this script. Do not include <?php and ?> tags.', array('%type' => $argument['type']) ), '#default_value' => @$context['args'][$key], ); } return $form; } function views_bulk_operations_ruleset_action_validate($form, $form_state) { } function views_bulk_operations_ruleset_action_submit($form, $form_state) { $submit = array(); foreach ($form['#arguments'] as $key => $argument) { $submit['args'][$key] = $form_state['values'][$key]; } return $submit; }