-10, '#value' => '

'. t('ON event %event', array('%event' => $event_label)) .'

'); } else { // Render rule set headline $rulesets = rules_get_rule_sets(); $ruleset_label = $rulesets[$element['#set']]['label']; $render['event_headline'] = array('#weight' => -10, '#value' => '

'. t('IN rule set %ruleset', array('%ruleset' => $ruleset_label)) .'

'); } $conditions = element_children($element['#conditions']); if (!empty($conditions)) { $render['condition_headline'] = array('#weight' => -6, '#value' => '

'. t('IF') .'

'); $render['conditions'] = $element['#conditions']; $render['conditions']['#weight'] = 0; /* render the conditions of the rule like an AND */ $render['conditions'] += array('#theme' => 'rules_operation', '#label' => t('AND'), '#_root' => TRUE); } $render['actions_headline'] = array('#weight' => 10, '#value' => '

'. t('DO') .'

'); $render['actions'] = $element['#actions']; $render['actions']['#weight'] = 20; $add_img = theme('rules_icon', 'add') .''; $link_options = array('attributes' => array('class' => 'modify'), 'query' => drupal_get_destination()); $render['condition_add'] = array('#weight' => 5, '#value' => $add_img . l(t('Add a condition'), RULES_ADMIN_RULE_PATH .'/'. $element['#name'] .'/add/condition/1', $link_options), '#prefix' => '

', '#suffix' => '

'); $render['action_add'] = array('#weight' => 100, '#value' => $add_img . l(t('Add an action'), RULES_ADMIN_RULE_PATH .'/'. $element['#name'] .'/add/action/'. $element['#actions']['#id'], $link_options), '#prefix' => '

', '#suffix' => '

'); //propagate the rule name down the tree, as the name is needed for rendering the elements $render['#rule'] = $element['#name']; rules_prepare_render($render); //add a surrounding div to prevent bugs with the fieldset $render['#prefix'] = '
'; $render['#suffix'] = '
'; return drupal_render($render); } /** * Propagates the #rule property down the tree * and set #sorted, as we have already sorted the rule. */ function rules_prepare_render(&$elements) { foreach (element_children($elements) as $key) { $elements[$key]['#rule'] = $elements['#rule']; $elements[$key]['#sorted'] = TRUE; rules_prepare_render($elements[$key]); } } function theme_rule($element) { return $element['#children']; } /** * Renders a condition */ function theme_condition($element) { $attributes = isset($element['#attributes']) ? $element['#attributes'] : array(); $title = theme('rules_icon', 'condition') . check_plain(rules_get_element_label($element)); $path = RULES_ADMIN_RULE_PATH .'/'. $element['#rule'] .'/edit/'. $element['#id']; $options = array('attributes' => _rules_attributes_add_class($attributes, 'condition'), 'query' => drupal_get_destination(), 'html' => TRUE); $link = l($title, $path, $options); $path = RULES_ADMIN_RULE_PATH .'/'. $element['#rule'] .'/add/op/'. $element['#id']; $options['attributes'] = _rules_attributes_add_class($attributes, 'condition_add'); $indent_link = l(theme_rules_icon('indent', t('Indent this condition by adding a logical operation.')), $path, $options); $print_op = $element['#negate'] ? theme('rules_logical_operation_label', 'not', t('NOT')) .' ' : ''; return $print_op . $link .' '. $indent_link; } /** * Renders an action */ function theme_action($element) { $attributes = isset($element['#attributes']) ? $element['#attributes'] : array(); $title = theme('rules_icon', 'action') . check_plain(rules_get_element_label($element)); $path = RULES_ADMIN_RULE_PATH .'/'. $element['#rule'] .'/edit/'. $element['#id']; $options = array('attributes' => _rules_attributes_add_class($attributes, 'action'), 'query' => drupal_get_destination(), 'html' => TRUE); return l($title, $path, $options); } /** * Themes a icon */ function theme_rules_icon($name, $title = NULL) { $path = drupal_get_path('module', 'rules_admin') .'/icons/'. $name .'.png'; return theme('image', $path, $name, $title ? $title : $name, array('class' => 'rules-icon')); } function _rules_attributes_add_class($attributes, $class) { if (isset($attributes['class'])) { $attributes['class'] .= ' '. $class; } else { $attributes['class'] = $class; } return $attributes; } /** * Themes the children of a logical operation. It put the operation in between each children. * This function is invoked through the #theme property of the logical operations. */ function theme_rules_operation($element) { if (count(element_children($element)) == 0 && !isset($element['#_root'])) { //no children, so drupal_render() won't render the element itself, so we do it ourself except for the condition root (AND) $element['#children'] = t('Empty'); return theme('OR', $element); } //render the children and put the operation between them $content = array(); foreach (element_children($element) as $key) { $content[] = drupal_render($element[$key]); } $print_op = theme('rules_logical_operation_label', drupal_strtolower($element['#label']), $element['#label']); return implode($print_op, $content); } /** * Themes the OR condition group */ function theme_OR($element) { $attributes = isset($element['#attributes']) ? $element['#attributes'] : array(); $element['#attributes'] = _rules_attributes_add_class($attributes, 'rules_'. $element['#type']); $element['#collapsible'] = FALSE; $print_op = $element['#negate'] ? t('NOT') .' ' : ''; $element['#title'] = t("!not%label group", array('!not' => $print_op, '%label' => $element['#label'])); $element['#children'] .= '

'. theme('rules_icon', 'add') . l(t('Add another condition to this group'), RULES_ADMIN_RULE_PATH .'/'. $element['#rule'] .'/add/condition/'. $element['#id']) .'

'; $element['#children'] .= '

'. theme('rules_icon', 'edit') . l(t('Edit this condition group'), RULES_ADMIN_RULE_PATH .'/'. $element['#rule'] .'/edit/'. $element['#id']) .'

'; return theme('fieldset', $element); } /** * Themes the AND condition group */ function theme_AND($element) { return theme('OR', $element); } /** * Themes the operation label */ function theme_rules_logical_operation_label($op, $label) { return "
$label
"; }