You are here

function rules_ui_add_element in Rules 7.2

Add a new element a rules configuration.

1 string reference to 'rules_ui_add_element'
RulesUIController::config_menu in ui/ui.controller.inc
Generates menu items to manipulate rules configurations.

File

ui/ui.forms.inc, line 261
Rules User Interface forms.

Code

function rules_ui_add_element($form, &$form_state, $rules_config, $plugin_name, RulesContainerPlugin $parent, $base_path) {
  $cache = rules_get_cache();
  if (!isset($cache['plugin_info'][$plugin_name]['class'])) {
    drupal_not_found();
    exit;
  }
  RulesPluginUI::$basePath = $base_path;
  $plugin_is_abstract = in_array('RulesAbstractPlugin', class_parents($cache['plugin_info'][$plugin_name]['class']));

  // In the first step create the element and in the second step show its edit
  // form.
  if ($plugin_is_abstract && !isset($form_state['rules_element'])) {
    RulesPluginUI::formDefaults($form, $form_state);
    $form_state += array(
      'parent_element' => $parent,
      'plugin' => $plugin_name,
    );
    $form['element_name'] = array(
      '#type' => 'select',
      '#title' => t('Select the %element to add', array(
        '%element' => $plugin_name,
      )),
      '#options' => RulesPluginUI::getOptions($plugin_name),
      '#ajax' => rules_ui_form_default_ajax() + array(
        'trigger_as' => array(
          'name' => 'continue',
        ),
      ),
    );
    $form['continue'] = array(
      '#type' => 'submit',
      '#name' => 'continue',
      '#value' => t('Continue'),
      '#ajax' => rules_ui_form_default_ajax(),
    );
  }
  elseif (!$plugin_is_abstract) {

    // Create the initial, empty element.
    $element = rules_plugin_factory($plugin_name);

    // Always add the new element at the bottom, thus set an appropriate weight.
    $iterator = $parent
      ->getIterator();
    if ($sibling = end($iterator)) {
      $element->weight = $sibling->weight + 1;
    }
    $element
      ->setParent($parent);
    $form_state['rules_element'] = $element;
  }
  if (isset($form_state['rules_element'])) {
    $form_state['rules_element']
      ->form($form, $form_state, array(
      'button' => TRUE,
      'init' => TRUE,
    ));
    $form['#validate'][] = 'rules_ui_edit_element_validate';
    $form['#submit'][] = 'rules_ui_edit_element_submit';
  }
  return $form;
}