You are here

function workbench_scheduler_schedules_action_form in Workbench Scheduler 7

Same name and namespace in other branches
  1. 7.2 actions/workbench_scheduler.action.inc \workbench_scheduler_schedules_action_form()

Workbench scheduler actions form.

Parameters

$options:

Return value

array

File

actions/workbench_scheduler.action.inc, line 7

Code

function workbench_scheduler_schedules_action_form($options) {
  $form = array();
  $types = node_type_get_types();

  // Get all schedules from all content types.
  $cts_schedules = workbench_scheduler_load_type_schedules(array_keys($types));
  foreach ($cts_schedules as $ct => $schedules) {
    foreach ($schedules as $sid => $schedule) {
      $type_schedules[$sid] = $schedule;
    }
  }

  // Add a scheduler section.
  $form['workbench_scheduler'] = array(
    '#type' => 'fieldset',
    '#title' => 'Workbench Schedule',
    '#description' => t('Select a schedule for changing moderation states.'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#group' => 'additional_settings',
    '#access' => user_access('set workbench schedule'),
  );

  // Build an options array for which schedules to choose.
  $schedule_options = array();

  // Add default option of no schedule.
  $schedule_options[] = array(
    'label' => t('No Schedule'),
    'start_state' => '',
    'end_state' => '',
  );

  // Retrieve a list of human safe moderation state names.
  $moderation_states = workbench_scheduler_state_labels();

  // Add each type schedule to the options array.
  foreach ($type_schedules as $schedule) {
    $schedule_options[$schedule->sid] = array(
      'label' => $schedule->label,
      'start_state' => !empty($schedule->start_state) ? $moderation_states[$schedule->start_state] : '',
      'end_state' => !empty($schedule->end_state) ? $moderation_states[$schedule->end_state] : '',
    );
    drupal_add_js(array(
      'workbench_scheduler' => array(
        'schedules' => $schedule_options,
      ),
    ), 'setting');

    // Create table select for selecting schedule.
    $form['workbench_scheduler']['workbench_scheduler_sid'] = array(
      '#type' => 'tableselect',
      '#title' => t('Select Schedule'),
      '#description' => t('Select the schedule to use for this node.'),
      '#options' => $schedule_options,
      '#multiple' => FALSE,
      '#header' => array(
        'label' => t('Name'),
        'start_state' => t('Start State'),
        'end_state' => t('End State'),
      ),
    );

    // Fieldset for collecting schedule dates.
    $form['workbench_scheduler']['dates'] = array(
      '#type' => 'fieldset',
      '#title' => t('Schedule Dates'),
      '#description' => t('Select the start and/or end dates to trigger states changes for this node.'),
      '#states' => array(
        'invisible' => array(
          ':input[name=workbench_scheduler_sid]' => array(
            'value' => '0',
          ),
        ),
      ),
    );

    // Start date.
    if (!empty($schedule->start_state)) {
      $form['workbench_scheduler']['dates']['workbench_scheduler_start_date'] = array(
        '#type' => 'date_popup',
        '#date_format' => 'Y-m-d H:i',
        '#title' => t('Start date'),
        '#description' => t('Select the date to switch this node to the scheduled \'start state\''),
      );
    }

    // End date.
    if (!empty($schedule->end_state)) {
      $form['workbench_scheduler']['dates']['workbench_scheduler_end_date'] = array(
        '#type' => 'date_popup',
        '#date_format' => 'Y-m-d H:i',
        '#title' => t('End date'),
        '#description' => t('Select the date to switch this node to the scheduled \'end state\''),
      );
    }
    $node_schedule = isset($form['#node']->workbench_schedule) ? $form['#node']->workbench_schedule : FALSE;

    // Have a node schedule(editing a node)? Use for defaults.
    if ($node_schedule) {
      $form['workbench_scheduler']['workbench_scheduler_sid']['#default_value'] = $node_schedule->sid;
      if ($node_schedule->start_date) {

        // Format date for field.
        $start_date = format_date($node_schedule->start_date, 'custom', 'Y-m-d H:i:s');
        $form['workbench_scheduler']['dates']['workbench_scheduler_start_date']['#default_value'] = $start_date;
      }
      if ($node_schedule->end_date) {

        // Format date for field.
        $end_date = format_date($node_schedule->end_date, 'custom', 'Y-m-d H:i:s');
        $form['workbench_scheduler']['dates']['workbench_scheduler_end_date']['#default_value'] = $end_date;
      }
    }
  }

  // Add custom validation and submission hooks.
  $form['#validate'][] = 'workbench_scheduler_node_form_validate';

  // Add to submit button action so that will have access to the new.
  // Nid & vid values.
  $form['actions']['submit']['#submit'][] = 'workbench_scheduler_node_form_submit';
  return $form;
}