t('ID')),
array('data' => t('Name')),
array('data' => t('Weight')),
array('data' => t('Author may set')),
array('data' => t('In default queries')),
array('data' => t('Default status')),
array('data' => t('Operations'))
);
foreach (element_children($form['status']) as $key) {
$rows[] = array(
'class' => 'draggable',
'data' => array(
drupal_render($form['status'][$key]['sid']),
drupal_render($form['status'][$key]['name']),
drupal_render($form['status'][$key]['weight']),
drupal_render($form['status'][$key]['author_has']),
drupal_render($form['status'][$key]['default_query']),
drupal_render($form['default_state'][$key]),
drupal_render($form['delete'][$key]),
),
);
}
$rows[] = array(
'class' => 'draggable',
'data' => array(
NULL,
drupal_render($form['status_add']['name']),
drupal_render($form['status_add']['weight']),
drupal_render($form['status_add']['author_has']),
drupal_render($form['status_add']['default_query']),
NULL, NULL,
),
);
$output = '
' . theme('table', $header, $rows, array('id' => 'project-issue-status-admin-table')) . '
';
$output .= drupal_render($form);
return $output;
}
function project_issue_admin_states_form(&$form_state) {
$result = db_query('SELECT * FROM {project_issue_state} ORDER BY weight');
$default_state = variable_get('project_issue_default_state', 1);
$default_states = project_issue_default_states();
$form['status']['#tree'] = TRUE;
while ($state = db_fetch_object($result)) {
$options[$state->sid] = '';
$form['status'][$state->sid]['sid'] = array(
'#type' => 'markup',
'#value' => $state->sid,
);
$form['status'][$state->sid]['name'] = array(
'#type' => 'textfield',
'#default_value' => $state->name,
'#size' => 20,
'#maxlength' => 255,
);
$form['status'][$state->sid]['weight'] = array(
'#type' => 'weight',
'#default_value' => $state->weight,
'#delta' => 15,
'#attributes' => array('class' => 'project-issue-status-weight'),
);
$form['status'][$state->sid]['author_has'] = array(
'#type' => 'checkbox',
'#default_value' => $state->author_has,
);
$form['status'][$state->sid]['default_query'] = array(
'#type' => 'checkbox',
'#default_value' => in_array($state->sid, $default_states),
);
$del_link = ($state->sid != $default_state) ? l(t('Delete'), 'admin/project/project-issue-status/delete/'. $state->sid) : '';
$form['delete'][$state->sid] = array(
'#type' => 'markup',
'#value' => $del_link,
);
}
$form['default_state'] = array(
'#type' => 'radios',
'#options' => $options,
'#default_value' => $default_state,
);
$form['status_add']['name'] = array(
'#type' => 'textfield',
'#size' => 20,
'#maxlength' => 255,
);
$form['status_add']['weight'] = array(
'#type' => 'weight',
'#default_value' => 0,
'#delta' => 15,
'#attributes' => array('class' => 'project-issue-status-weight'),
);
$form['status_add']['author_has'] = array(
'#type' => 'checkbox',
);
$form['status_add']['default_query'] = array(
'#type' => 'checkbox',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
$form['#tree'] = TRUE;
return $form;
}
/**
* Submit handler for project_issue_admin_states_form.
*/
function project_issue_admin_states_form_submit($form, &$form_state) {
// Check for and apply changes or additions to project issue status options.
if (isset($form_state['values']['default_state'])) {
variable_set('project_issue_default_state', $form_state['values']['default_state']);
}
// Update existing status options.
if($form_state['values']['status']) {
foreach ($form_state['values']['status'] as $sid => $value) {
$state = db_fetch_object(db_query('SELECT name, weight, author_has, default_query FROM {project_issue_state} WHERE sid = %d', $sid));
// Check to see whether the record needs updating.
if (($state->name != $value['name']) || ($state->weight != $value['weight']) || ($state->author_has != $value['author_has']) || ($state->default_query != $value['default_query'])) {
db_query("UPDATE {project_issue_state} SET name = '%s', weight = %d, author_has = %d, default_query = %d WHERE sid = %d", $value['name'], $value['weight'], $value['author_has'], $value['default_query'], $sid);
}
}
}
// Add any new status options.
if (isset($form_state['values']['status_add']) && !empty($form_state['values']['status_add']['name'])) {
// Check to see whether the state already exists:
$issue_state = db_result(db_query("SELECT COUNT(*) FROM {project_issue_state} WHERE name = '%s'", $form_state['values']['status_add']['name']));
if (empty($issue_state)) {
db_query("INSERT INTO {project_issue_state} (name, weight, author_has, default_query) VALUES ('%s', %d, %d, %d)", $form_state['values']['status_add']['name'], $form_state['values']['status_add']['weight'], $form_state['values']['status_add']['author_has'], $form_state['values']['status_add']['default_query']);
}
else {
drupal_set_message(t('Status %status already exists.', array ('%status' => $form_state['values']['status_add']['name'])), 'error');
}
}
}
function project_issue_delete_state_confirm(&$form_state, $sid) {
$states = project_issue_state();
$name = $states[$sid];
$total = db_result(db_query('SELECT COUNT(nid) AS total FROM {project_issues} WHERE sid = %d', $sid));
if ($total > 0) {
$form['new_sid'] = array(
'#type' => 'select',
'#title' => t('Reassign status'),
'#default_value' => $sid,
'#options' => $states,
'#description' => t('There are !total existing issues with the status of @name. Please select a new status for these issues.', array('!total' => $total, '@name' => $name)),
);
}
$form['sid'] = array(
'#type' => 'value',
'#value' => $sid,
);
$form['name'] = array(
'#type' => 'hidden',
'#value' => $name,
);
return confirm_form(
$form,
t('Are you sure you want to delete the status option %name?', array('%name' => $name)),
'admin/project/project-issue-status',
t('This action cannot be undone.'),
t('Delete'), t('Cancel')
);
}
function project_issue_delete_state_confirm_validate($form, &$form_state) {
if ($form_state['values']['new_sid'] == $form_state['values']['sid']) {
form_set_error('new_sid', t('Choose a new issue status for existing issues of status %name.', array('%name' => $form_state['values']['name'])));
}
}
function project_issue_delete_state_confirm_submit($form, &$form_state) {
if ($form_state['values']['new_sid']) {
db_query('UPDATE {project_issues} SET sid = %d WHERE sid = %d', $form_state['values']['new_sid'], $form_state['values']['sid']);
}
db_query('DELETE FROM {project_issue_state} WHERE sid = %d', $form_state['values']['sid']);
drupal_set_message(t('Project issue status %issue deleted.', array('%issue' => $form_state['values']['name'])));
$form_state['redirect'] ='admin/project/project-issue-status';
}