You are here

public static function UltimateCronPluginMultiple::jobSettingsForm in Ultimate Cron 7.2

Job settings form.

Overrides UltimateCronPlugin::jobSettingsForm

File

./ultimate_cron.plugin.inc, line 735
Plugin framework for Ultimate Cron.

Class

UltimateCronPluginMultiple
Class for handling multiple plugins.

Code

public static function jobSettingsForm(&$form, &$form_state, $plugin_type, $job) {

  // Check valid plugins.
  $plugins = _ultimate_cron_plugin_load_all($plugin_type);
  foreach ($plugins as $name => $plugin) {
    if (!$plugin
      ->isValid($job)) {
      unset($plugins[$name]);
    }
  }

  // No plugins = no settings = no vertical tabs for you mister!
  if (empty($plugins)) {
    return;
  }
  $weight = 10;
  $form_state['default_values']['settings'][$plugin_type] = array();
  $form['settings'][$plugin_type]['#tree'] = TRUE;
  foreach ($plugins as $name => $plugin) {
    $form_state['default_values']['settings'][$plugin_type][$name] = array();
    if (empty($form_state['values']['settings'][$plugin_type][$name])) {
      $form_state['values']['settings'][$plugin_type][$name] = array();
    }
    $form['settings'][$plugin_type][$name] = array(
      '#title' => $plugin->title,
      '#group' => 'settings_tabs',
      '#type' => 'fieldset',
      '#tree' => TRUE,
      '#visible' => TRUE,
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
      '#weight' => $weight++,
    );
    $defaults = $plugin
      ->getDefaultSettings($job);
    $form_state['default_values']['settings'][$plugin_type][$name] += $defaults;
    $form_state['values']['settings'][$plugin_type][$name] += ultimate_cron_blank_values($defaults);
    $plugin
      ->settingsForm($form, $form_state, $job);
    if (empty($form['settings'][$plugin_type][$name]['no_settings'])) {
      $plugin
        ->fallbackalize($form['settings'][$plugin_type][$name], $form_state['values']['settings'][$plugin_type][$name], $form_state['default_values']['settings'][$plugin_type][$name], FALSE);
    }
    else {
      unset($form['settings'][$plugin_type][$name]);
    }
  }
}