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' => ' ',
'#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' => ' ',
'#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;
}
}
}
}
}