'fieldset',
'#title' => t('Display ordering links'),
'#description' => t('Choose whether to show ordering links. Links can be shown for all categories associated to a node or for the currently active category. It is also possible to not show the ordering links at all.'),
);
$form['nodeorder_show_links']['nodeorder_show_links_on_node'] = array(
'#type' => 'radios',
'#title' => t('Choose how to display ordering links'),
'#default_value' => variable_get('nodeorder_show_links_on_node', 1),
'#description' => 'When displaying links based on the context, they will only be shown on taxonomy and nodeorder pages.',
'#options' => array(t('Don\'t display ordering links'), t('Display ordering links for all categories'), t('Display ordering links based on the active category')),
);
$form['nodeorder_link_to_ordering_page'] = array(
'#type' => 'checkbox',
'#title' => t('Display link to the ordering page'),
'#description' => t('If enabled, a tab will appear on all nodeorder/term/% and taxonomy/term/% pages that quickly allows administrators to get to the node ordering administration page for the term.'),
'#default_value' => variable_get('nodeorder_link_to_ordering_page', 1),
);
$form['nodeorder_link_to_ordering_page_taxonomy_admin'] = array(
'#type' => 'checkbox',
'#title' => t('Display link to the ordering page on taxonomy administration page'),
'#description' => t('If enabled, a tab will appear on admin/content/taxonomy/% pages that quickly allows administrators to get to the node ordering administration page for the term.'),
'#default_value' => variable_get('nodeorder_link_to_ordering_page_taxonomy_admin', 1),
);
$form['nodeorder_override_taxonomy_page'] = array(
'#type' => 'checkbox',
'#title' => t('Override the default taxonomy page with one from nodeorder'),
'#description' => t('Disabling this will allow the panels module to override taxonomy pages instead. See this issue for more information. You will have to clear caches for the change to take effect.'),
'#default_value' => variable_get('nodeorder_override_taxonomy_page', 1),
);
return system_settings_form($form);
}
/**
* Generate main blocks administration form.
*/
function nodeorder_admin_display_form($form, &$form_state, $tid) {
global $pager_page_array, $pager_total, $pager_total_items;
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$page_increment = variable_get('taxonomy_terms_per_page_admin', 100); // Number of terms per page.
$page_entries = 0; // Elements shown on this page.
$before_entries = 0; // Elements at the root level before this page.
$after_entries = 0; // Elements at the root level after this page.
$root_entries = 0; // Elements at the root level on this page.
$term = taxonomy_term_load($tid);
// Build form tree
$form = array(
'#tree' => TRUE,
'#parent_fields' => FALSE,
'#term' => $term,
);
drupal_set_title(t('Order nodes for %term_name', array('%term_name' => $term->name)), PASS_THROUGH);
$node_ids = taxonomy_select_nodes($tid, FALSE, FALSE, array('t.weight' => 'ASC'));
$nodes = node_load_multiple($node_ids);
$node_count = count($nodes);
// Weights range from -delta to +delta, so delta should be at least half
// of the amount of blocks present. This makes sure all blocks in the same
// region get an unique weight.
$weight_delta = round($node_count / 2);
foreach ($nodes as $node) {
$form[$node->nid]['#node'] = $node;
$form[$node->nid]['title'] = array(
'#markup' => check_plain($node->title));
$form[$node->nid]['weight'] = array(
'#type' => 'weight',
'#title' => t('Weight for @title', array('@title' => $node->title)),
'#title_display' => 'invisible',
'#delta' => $weight_delta,
'#default_value' => $node->nodeorder[$tid]['weight'],
);
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save order'),
);
return $form;
}
/**
* Process main blocks administration form submission.
*/
function nodeorder_admin_display_form_submit($form, &$form_state) {
$tid = $form['#term']->tid;
foreach ($form_state['values'] as $nid => $node) {
// Only take form elements that are blocks.
if (is_array($node) && array_key_exists('weight', $node)) {
db_update('taxonomy_index')->fields(array('weight' => $node['weight']))
->condition('tid', $tid)
->condition('nid', $nid)
->execute();
}
}
drupal_set_message(t('The node orders have been updated.'));
cache_clear_all();
return;
}
/**
* Returns HTML for the vocabulary overview form as a sortable list of vocabularies.
*
* @param $variables
* An associative array containing:
* - form: A render element representing the form.
*
* @see taxonomy_overview_vocabularies()
* @ingroup themeable
*/
function theme_nodeorder_admin_display_form($variables) {
$form = $variables['form'];
drupal_add_tabledrag('nodeorder', 'order', 'sibling', 'node-weight');
$errors = form_get_errors() != FALSE ? form_get_errors() : array();
$rows = array();
foreach (element_children($form) as $key) {
if (isset($form[$key]['#node'])) {
$node = &$form[$key];
$row = array();
$row[] = drupal_render($node['title']);
$node['weight']['#attributes']['class'] = array('node-weight');
$row[] = drupal_render($node['weight']);
$row = array('data' => $row);
$rows[$key] = $row;
}
}
// Add necessary classes to rows.
$row_position = 0;
foreach ($rows as $key => $row) {
$rows[$key]['class'] = array();
$rows[$key]['class'][] = 'draggable';
// Add an error class if this row contains a form error.
foreach ($errors as $error_key => $error) {
if (strpos($error_key, $key) === 0) {
$rows[$key]['class'][] = 'error';
}
}
$row_position++;
}
if (empty($rows)) {
$rows[] = array(array('data' => t('There are no nodes for this term.'), 'colspan' => '3'));
}
$header = array(t('Title'), t('Weight'), );
$output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'nodeorder')));
$output .= drupal_render_children($form);
return $output;
}