created advanced search form

This commit is contained in:
Bachir Soussi Chiadmi 2014-07-29 12:27:02 +02:00
parent 7ee6c9dc12
commit 124e1a7bc2

View File

@ -374,7 +374,7 @@ function materio_search_api_block_info() {
'cache' => DRUPAL_NO_CACHE
);
$blocks['materio_search_api_advanced_search'] = array(
$blocks['materio_sa_adv_search'] = array(
'info' => t('Materio search api advanced search'),
'cache' => DRUPAL_NO_CACHE
);
@ -428,7 +428,7 @@ function materio_search_api_block_view($delta = '') {
// $block['content'] = theme('materio_search_api_filters_block', array());
// }
// break;
case 'materio_search_api_advanced_search':
case 'materio_sa_adv_search':
if(user_access('use materio search api advanced search')){
$block['subject'] = t('Advanced Search');
$block['content'] = theme('materio_search_api_advanced_search_block', array());
@ -596,10 +596,175 @@ function materio_search_api_search_form_submit($form, &$form_state){
}
/**
* materiobase_search_form()
*/
function materio_search_api_advanced_search_form($form, &$form_state){
// dsm($form_state, 'form_state');
// dsm($form, 'form');
// global $user;
$form = array();
$vocabularies = variable_get('advancedsearchvocs', array());
foreach ($vocabularies as $vid) {
$voc = taxonomy_vocabulary_load($vid);
// dsm($voc, 'voc');
// $form['voc-'.$vid] = array(
// '#type' => 'fieldset',
// '#title' => $voc->name,
// '#tree' => true,
// );
$tree = taxonomy_get_tree($vid, 0, 1);
// dsm($tree, 'tree');
# don't know how to add parent term condition
// $query = new EntityFieldQuery();
// $result = $query->entityCondition('entity_type', 'taxonomy_term')
// ->propertyCondition('vid', $vid)
// // ->propertyCondition('parent', 0)
// // ->fieldCondition('field_used_on_advanced_search', 'value', 0, "!=")
// ->propertyOrderBy('weight')
// ->execute();
// dsm($result, 'result');
// if (!empty($result['taxonomy_term'])) {
// }
foreach ($tree as $term) {
$term = taxonomy_term_load($term->tid);
// dsm($term, "term");
if($term->field_used_on_advanced_search['und'][0]['value'] == 0){
continue;
}
$children = taxonomy_get_children($term->tid, $vid);
// dsm($children, "children");
$form['tree-'.$term->tid] = array(
'#type' => 'fieldset',
// '#title' => $term->name,
'#attributes' => array("class"=>array("treelevel1")),
'#tree' => true,
);
$form['tree-'.$term->tid]['children'] = array(
'#type' => 'select',
'#title' => $term->name,
'#attributes' => array(
"class"=>array("treelevel1"),
"title"=>"-Please select-",
), //, "form-control"
'#theme_wrappers' => array('materio_search_api_form_element'),
'#empty_option' => '-Please select-',
'#empty_value' => 1,
);
$options = array();
foreach ($children as $tid => $child) {
// $child = taxonomy_term_load($child->tid);
// if($child->field_used_on_advanced_search['und'][0]['value'] == 0){
// continue;
// }
$children2 = taxonomy_get_children($child->tid, $vid);
// dsm($children2, "children2");
if(count($children2))
$options[$tid] = $child->name;
$options2 = [];
foreach ($children2 as $tid2 => $child2) {
// $child2 = taxonomy_term_load($child2->tid);
// if($child2->field_used_on_advanced_search['und'][0]['value'] == 0){
// continue;
// }
$options2[$tid2] = $child2->name;
}
if(count($options2))
$form['tree-'.$term->tid]['tid-'.$child->tid] = array(
'#type' => 'select',
'#title' => $child->name,
'#multiple' => true,
'#attributes' => array(
"class" => array("treelevel2", $child->tid), // , "form-control"
"title" => "-Please select-",
),
'#theme_wrappers' => array('materio_search_api_form_element'),
'#empty_option' => '-Please select-',
'#empty_value' => 1,
'#options' => $options2,
);
// $form['tree-'.$term->tid]['child-'.$tid] = array(
// '#type' => 'checkbox',
// '#title' => $child->name,
// // '#options' => $options,
// );
}
$form['tree-'.$term->tid]['children']['#options'] = $options;
// break;
}
}
$form['show'] = array(
'#type' => 'submit',//'image_button',
// '#src' => drupal_get_path('module', 'materio_search_api') . '/images/search.png',
'#value' => t('Find'),
'#attributes' => array("class"=>array("btn","btn-lg")),
'#prefix' => '<div class="submits">',
'#suffix' => '</div>',
);
return $form;
}
function materio_search_api_advanced_search_form_validate($form, &$form_state){
// dsm($form, '$form');
// dsm($form_state, '$form_state');
// dsm(strlen($form_state['values']['searchfield']));
// if (strlen(trim($form_state['values']['searchfield'])) <= 1) {
// form_set_error('searchfield', 'Please enter at least 2 characters keyword.');
// }
}
function materio_search_api_advanced_search_form_submit($form, &$form_state){
// dsm($form_state, 'form_state');
// global $user;
// if(user_access('use materio search api filters')){
// foreach($form_state['values']['bundles_filter'] as $bundle => $value)
// if($value)
// $bundles[] = $bundle;
// # if no filter checked we checked them all by default
// if(!isset($bundles))
// foreach($form_state['values']['bundles_filter'] as $bundle => $value)
// $bundles[] = $bundle;
// }else{
// # if user have no access to filters
// $index = search_api_index_load(variable_get('mainsearchindex', -1));
// $indexed_bundles = $index->options['data_alter_callbacks']['search_api_alter_bundle_filter']['settings']['bundles'];
// foreach ($indexed_bundles as $bundle) {
// $bundles[] = $bundle;
// }
// }
// user_save($user, array("data"=>array('materiosearchapi_bundlesfilter' => $bundles)));
// $form_state['redirect'] = 'explore/'.$form_state['values']['searchfield'];
}
/**
* viewmode
*/
function _materio_search_api_change_viewmode($vm){
// dsm($vm, '_materio_search_api_change_viewmode');
@ -675,7 +840,10 @@ function materio_search_api_theme($existing, $type, $theme, $path) {
'template' => 'materio-search-api-advanced-search-block',
'path' => drupal_get_path('module', 'materio_search_api').'/templates',
'arguments' => array(),
)
),
'materio_search_api_form_element' => array(
'render element' => 'element',
),
);
}
@ -869,11 +1037,85 @@ function template_preprocess_materio_search_api_actuality(&$vars){
}
function template_preprocess_materio_search_api_advanced_search_block(&$vars){
dsm($vars, "vars");
// dsm($vars, "vars");
$vars['searchform'] = drupal_get_form("materio_search_api_advanced_search_form");
}
function theme_materio_search_api_form_element($variables) {
// dsm($variables, 'variables');
$element = &$variables['element'];
// This function is invoked as theme wrapper, but the rendered form element
// may not necessarily have been processed by form_builder().
$element += array(
'#title_display' => 'before',
);
// Add element #id for #type 'item'.
if (isset($element['#markup']) && !empty($element['#id'])) {
$attributes['id'] = $element['#id'];
}
// Add element's #type and #name as class to aid with JS/CSS selectors.
$attributes['class'] = array('form-item');
if (!empty($element['#type'])) {
$attributes['class'][] = 'form-type-' . strtr($element['#type'], '_', '-');
}
if (!empty($element['#name'])) {
$attributes['class'][] = 'form-item-' . strtr($element['#name'], array(' ' => '-', '_' => '-', '[' => '-', ']' => ''));
}
// Add a class for disabled elements to facilitate cross-browser styling.
if (!empty($element['#attributes']['disabled'])) {
$attributes['class'][] = 'form-disabled';
}
# adding element class to wrapper
foreach ($element['#attributes']['class'] as $value) {
$attributes['class'][] = $value;
}
$output = '<div' . drupal_attributes($attributes) . '>' . "\n";
// If #title is not set, we don't display any label or required marker.
if (!isset($element['#title'])) {
$element['#title_display'] = 'none';
}
$prefix = isset($element['#field_prefix']) ? '<span class="field-prefix">' . $element['#field_prefix'] . '</span> ' : '';
$suffix = isset($element['#field_suffix']) ? ' <span class="field-suffix">' . $element['#field_suffix'] . '</span>' : '';
switch ($element['#title_display']) {
case 'before':
case 'invisible':
$output .= ' ' . theme('form_element_label', $variables);
$output .= ' ' . $prefix . $element['#children'] . $suffix . "\n";
break;
case 'after':
$output .= ' ' . $prefix . $element['#children'] . $suffix;
$output .= ' ' . theme('form_element_label', $variables) . "\n";
break;
case 'none':
case 'attribute':
// Output no label and no required marker, only the children.
$output .= ' ' . $prefix . $element['#children'] . $suffix . "\n";
break;
}
if (!empty($element['#description'])) {
$output .= '<div class="description">' . $element['#description'] . "</div>\n";
}
$output .= "</div>\n";
return $output;
}
/**
* - - - - - - - - - - - - SEARCH API PAGE - - - - - - - - - - - -
*/