diff --git a/materio_search_api.module b/materio_search_api.module index f886684c..6ddb4d08 100755 --- a/materio_search_api.module +++ b/materio_search_api.module @@ -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' => '
', + '#suffix' => '
', + ); + 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 = '' . "\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']) ? '' . $element['#field_prefix'] . ' ' : ''; + $suffix = isset($element['#field_suffix']) ? ' ' . $element['#field_suffix'] . '' : ''; + + 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 .= '
' . $element['#description'] . "
\n"; + } + + $output .= "\n"; + + return $output; +} + + + + + /** * - - - - - - - - - - - - SEARCH API PAGE - - - - - - - - - - - - */