You are here

function _ctools_plugin_configure_create_form_info in Chaos Tool Suite (ctools) 7

1 call to _ctools_plugin_configure_create_form_info()
ctools_plugin_configure_form in includes/plugins-admin.inc
Get a plugin configuration form.

File

includes/plugins-admin.inc, line 68
Contains generic plugin administration functions.

Code

function _ctools_plugin_configure_create_form_info(&$form_info, $plugin_definition, $op) {

  // Provide a few extra defaults.
  $form_info += array(
    'id' => 'ctools_plugin_configure_form',
    'show back' => TRUE,
  );
  $add_form = isset($form_info['add form name']) ? $form_info['add form name'] : 'add form';
  $edit_form = isset($form_info['edit form name']) ? $form_info['edit form name'] : 'edit form';

  // Figure out what the forms should actually be. Since they can be specified
  // in a couple of different ways (in order to support simple declarations for
  // the minimal forms but more complex declarations for powerful wizards).
  if ($op == 'add') {
    if (!empty($plugin_definition[$add_form])) {
      $info = $plugin_definition[$add_form];
    }
  }
  if (!isset($info) || $op == 'edit') {

    // Use the edit form for the add form if add form was completely left off.
    if (!empty($plugin_definition[$edit_form])) {
      $info = $plugin_definition[$edit_form];
    }
  }

  // If there is a default form wrapper, but no form is supplied,
  // use the wrapper as the form.
  if (empty($info) && !empty($form_info['default form'])) {
    $info = $form_info['default form'];
  }

  // @todo we may want to make these titles more settable?
  if (is_string($info)) {
    if (empty($plugin_definition['title'])) {
      $title = t('Configure');
    }
    elseif ($op == 'add') {
      $title = t('Configure new !plugin_title', array(
        '!plugin_title' => $plugin_definition['title'],
      ));
    }
    else {
      $title = t('Configure !plugin_title', array(
        '!plugin_title' => $plugin_definition['title'],
      ));
    }
    if (empty($form_info['order'])) {
      $form_info['order'] = array();
    }
    $form_info['order']['form'] = $title;
    if (empty($form_info['forms'])) {
      $form_info['forms'] = array();
    }
    $form_info['forms']['form'] = array(
      'title' => $title,
      'form id' => $info,
    );

    // Add the default form if one is specified.
    if (!empty($form_info['default form']) && $form_info['forms']['form']['form id'] != $form_info['default form']) {
      $form_info['forms']['form']['wrapper'] = $form_info['default form'];
    }

    // If no submit is supplied, supply the default submit which will do the
    // most obvious task.
    if (!function_exists($form_info['forms']['form']['form id'] . '_submit')) {

      // Store the original wrapper so we can chain it.
      if (!empty($form_info['forms']['form']['wrapper'])) {
        $form_info['forms']['form']['original wrapper'] = $form_info['forms']['form']['wrapper'];
      }
      $form_info['forms']['form']['wrapper'] = 'ctools_plugins_default_form_wrapper';
    }
  }
  elseif (is_array($info)) {
    if (empty($form_info['order'])) {
      $form_info['order'] = array();
    }
    if (empty($form_info['forms'])) {
      $form_info['forms'] = array();
    }
    $count = 0;
    $base = 'step';
    $wrapper = NULL;
    foreach ($info as $form_id => $title) {
      $step = $base . ++$count;
      if (empty($wrapper)) {
        $wrapper = $step;
      }
      if (is_array($title)) {
        if (!empty($title['default'])) {
          $wrapper = $step;
        }
        $title = $title['title'];
      }
      $form_info['order'][$step] = $title;
      $form_info['forms'][$step] = array(
        'title' => $title,
        'form id' => $form_id,
      );
    }
    if ($wrapper && !empty($form_info['default form'])) {
      $form_info['forms'][$wrapper]['wrapper'] = $form_info['default form'];
    }
  }
}