You are here

function support_substatus_form_alter in Support Ticketing System 6

File

support_substatus/support_substatus.module, line 174
Support Substatus -- allows per-status sub-status values, so for example a "pending" ticket can be further marked with "needs review", etc. @author Jeremy Andrews <jeremy@tag1consulting.com> @package Support

Code

function support_substatus_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'support_ticket_node_form') {
    $node = $form['#node'];
    if (_support_substatus_client_active($node->client)) {

      // @todo: move into functions
      drupal_add_js(drupal_get_path('module', 'support_substatus') . '/support_substatus.js');
      $states = _support_states();
      $substatus = array();
      foreach ($states as $ssid => $state) {
        $substatus[$ssid] = support_substatus_load_client($node->client, $ssid);
      }
      drupal_add_js(array(
        'substatus' => $substatus,
      ), 'setting');
      $form['support']['state']['#id'] = 'select-state';
      $support_form = array();
      foreach ($form['support'] as $key => $value) {
        $support_form[$key] = $value;
        if ($key == 'state') {
          $options = support_substatus_load_client(_support_current_client());
          $support_form['substatus'] = array(
            '#type' => 'select',
            '#title' => t('Status'),
            '#prefix' => '&nbsp;&nbsp;',
            '#options' => $options,
            '#id' => 'select-substatus',
            '#default_value' => isset($node->substatus) && isset($node->substatus->ssid) ? $node->substatus->ssid : support_substatus_default($options),
          );
        }
      }
      $form['support'] = $support_form;
    }
  }
  else {
    if ($form_id == 'comment_form') {
      $nid = $form['nid']['#value'];
      $node = node_load($nid);
      if (_support_substatus_client_active($node->client)) {

        // @todo: move into function
        drupal_add_js(drupal_get_path('module', 'support_substatus') . '/support_substatus.js');
        $states = _support_states();
        $substatus = array();
        foreach ($states as $ssid => $state) {
          $substatus[$ssid] = support_substatus_load_client($node->client, $ssid);
        }
        drupal_add_js(array(
          'substatus' => $substatus,
        ), 'setting');
        $form['support']['state']['#id'] = 'select-state';
        $support_form = array();
        foreach ($form['support'] as $key => $value) {
          $support_form[$key] = $value;
          if ($key == 'state') {
            $cid = $form['cid']['#value'];
            $default_value = _support_substatus_last_value($nid);
            $options = support_substatus_load_client(_support_current_client());
            $support_form['substatus'] = array(
              '#type' => 'select',
              '#title' => t('Status'),
              '#prefix' => '&nbsp;&nbsp;',
              '#options' => $options,
              '#id' => 'select-substatus',
              '#default_value' => $default_value,
            );
          }
        }
        $form['support'] = $support_form;
      }
    }
    else {
      if ($form_id == 'support_page_form') {
        if (user_access('view support substatus') && _support_substatus_client_active(_support_current_client())) {

          // @todo: make "substate" field sortable, is it possible?
          // Insert "Substate" into the ticket listing
          foreach ($form['header']['#value'] as $key => $value) {
            if ($value['data'] == 'State') {
              array_splice($form['header']['#value'], ++$key, 0, array(
                array(
                  'data' => t('Status'),
                ),
              ));
              break;
            }
          }
          $substatus = array();
          if (isset($form['id'])) {
            foreach ($form['id'] as $id => $data) {
              $ssid = _support_substatus_last_value($id);
              if ($ssid) {
                $status = db_result(db_query('SELECT substatus FROM {support_substatus} WHERE ssid = %d', $ssid));
                $substatus["substatus-{$id}"] = array(
                  '#value' => $status,
                );
              }
              else {
                $substatus["substatus-{$id}"] = array(
                  '#value' => '',
                );
              }
            }
          }
          $ssid = isset($_GET['ssid']) ? $_GET['ssid'] : '';
          $ssids = array();
          $unsanitized = explode(',', $ssid);
          foreach ($unsanitized as $element) {
            $element = (int) $element;
            if ($element) {
              $ssids[$element] = $element;
            }
          }
          $new_filter = array();
          foreach ($form['filter'] as $key => $value) {
            $new_filter[$key] = $value;
            if ($key == 'state') {
              $new_filter['substatus'] = array(
                '#type' => 'fieldset',
                '#title' => t('Status'),
                '#collapsible' => TRUE,
                '#collapsed' => empty($ssids),
              );
              $options = _support_substatus_client_substatus(_support_current_client());
              $new_filter['substatus']['ssid'] = array(
                '#type' => 'select',
                '#multiple' => TRUE,
                '#options' => $options,
                '#default_value' => !empty($ssids) ? $ssids : 0,
              );
            }
          }
          $form['filter'] = $new_filter;

          // @todo: don't bother inserting into the precise form location, this is unnecessary
          $new_form = array();
          foreach ($form as $key => $value) {
            $new_form[$key] = $value;
            if ($key == t('state')) {
              $new_form['substatus'] = $substatus;
            }
          }
          $form = $new_form;
        }
      }
    }
  }
}