function faq_order_settings_form in Frequently Asked Questions 7
Same name and namespace in other branches
- 6 faq.admin.inc \faq_order_settings_form()
- 7.2 faq.admin.inc \faq_order_settings_form()
Define the elements for the FAQ Settings page - order tab.
Parameters
array $form_state: Store the submitted form values.
Return value
array The form code, before being converted to HTML format.
1 string reference to 'faq_order_settings_form'
- faq_menu in ./
faq.module - Implements hook_menu().
File
- ./
faq.admin.inc, line 502 - Administrative page callbacks for the faq module.
Code
function faq_order_settings_form($form, $form_state, $category = NULL) {
$order = $date_order = '';
drupal_add_js(array(
'faq' => array(
'faq_hide_qa_accordion' => variable_get('faq_hide_qa_accordion', FALSE),
),
), array(
'type' => 'setting',
'scope' => JS_DEFAULT,
));
drupal_add_js(array(
'faq' => array(
'faq_category_hide_qa_accordion' => variable_get('faq_category_hide_qa_accordion', FALSE),
),
), array(
'type' => 'setting',
'scope' => JS_DEFAULT,
));
drupal_add_js(drupal_get_path('module', 'faq') . '/faq.js');
drupal_add_css(drupal_get_path('module', 'faq') . '/faq.css');
$use_categories = variable_get('faq_use_categories', FALSE);
if (!$use_categories) {
$step = "order";
}
elseif (!isset($form_state['values']) && empty($category)) {
$step = "categories";
}
else {
$step = "order";
}
$form['step'] = array(
'#type' => 'value',
'#value' => $step,
);
// Categorized q/a.
if ($step == "categories") {
// Get list of categories.
$vocabularies = taxonomy_get_vocabularies('faq');
$options = array();
foreach ($vocabularies as $vid => $vobj) {
$tree = taxonomy_get_tree($vid);
foreach ($tree as $term) {
if (!faq_taxonomy_term_count_nodes($term->tid)) {
continue;
}
$options[$term->tid] = faq_tt("taxonomy:term:{$term->tid}:name", $term->name);
$form['choose_cat']['faq_category'] = array(
'#type' => 'select',
'#title' => t('Choose a category'),
'#description' => t('Choose a category that you wish to order the questions for.'),
'#options' => $options,
'#multiple' => FALSE,
);
$form['choose_cat']['search'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#submit' => array(
'faq_order_settings_choose_cat_form_submit',
),
);
}
}
}
else {
$default_sorting = variable_get('faq_default_sorting', 'DESC');
$default_weight = 0;
if ($default_sorting != 'DESC') {
$default_weight = 1000000;
}
$options = array();
if (!empty($form_state['values']['faq_category'])) {
$category = $form_state['values']['faq_category'];
}
// Uncategorized ordering.
$query = db_select('node', 'n')
->fields('n', array(
'nid',
'title',
))
->addTag('node_access')
->condition('n.type', 'faq')
->condition('n.status', 1);
// Works, but involves variable concatenation - safe though, since
// $default_weight is an integer.
$query
->addExpression("COALESCE(w.weight, {$default_weight})", 'effective_weight');
// Doesn't work in Postgres.
// $query->addExpression('COALESCE(w.weight, CAST(:default_weight as SIGNED))', 'effective_weight', array(':default_weight' => $default_weight));
if (empty($category)) {
$category = 0;
$w_alias = $query
->leftJoin('faq_weights', 'w', 'n.nid = %alias.nid AND %alias.tid = :category', array(
':category' => $category,
));
$query
->orderBy('effective_weight', 'ASC')
->orderBy('n.sticky', 'DESC')
->orderBy('n.created', $default_sorting == 'DESC' ? 'DESC' : 'ASC');
}
else {
$ti_alias = $query
->innerJoin('taxonomy_index', 'ti', '(n.nid = %alias.nid)');
$w_alias = $query
->leftJoin('faq_weights', 'w', 'n.nid = %alias.nid AND %alias.tid = :category', array(
':category' => $category,
));
$query
->condition('ti.tid', $category);
$query
->orderBy('effective_weight', 'ASC')
->orderBy('n.sticky', 'DESC')
->orderBy('n.created', $default_sorting == 'DESC' ? 'DESC' : 'ASC');
}
$options = $query
->execute()
->fetchAll();
$form['weight']['faq_category'] = array(
'#type' => 'value',
'#value' => $category,
);
// Show table ordering form.
$form['order_no_cats']['#tree'] = TRUE;
$form['order_no_cats']['#theme'] = 'faq_draggable_question_order_table';
$i = 0;
foreach ($options as $record) {
$form['order_no_cats'][$i]['nid'] = array(
'#type' => 'hidden',
'#value' => $record->nid,
);
$form['order_no_cats'][$i]['title'] = array(
'#markup' => check_plain($record->title),
);
$form['order_no_cats'][$i]['sort'] = array(
'#type' => 'weight',
'#delta' => count($options),
'#default_value' => $i,
);
$i++;
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save order'),
'#weight' => 3,
'#submit' => array(
'faq_order_settings_reorder_form_submit',
),
);
}
return $form;
}