|
@@ -735,7 +735,8 @@ function materio_search_api_advanced_search_form($form, &$form_state){
|
|
|
// dsm($form_state, 'form_state');
|
|
|
// dsm($form, 'form');
|
|
|
// global $user;
|
|
|
- $form = array();
|
|
|
+ // $form = array();
|
|
|
+ $values = $form_state['values'];
|
|
|
|
|
|
// add a back to search/base home bouton if on explore/foo
|
|
|
$args = arg();
|
|
@@ -751,124 +752,194 @@ function materio_search_api_advanced_search_form($form, &$form_state){
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- // filters
|
|
|
+ // filters form container
|
|
|
$form['filters'] = array(
|
|
|
'#type' => 'container',
|
|
|
'#prefix' => '<div id="advancedsearch-filters">',
|
|
|
'#suffix' => '</div>',
|
|
|
);
|
|
|
|
|
|
- // building first level texonomy tree
|
|
|
- $taxotree = taxonomy_get_tree(15, 0, 1, false);
|
|
|
- // dsm($taxotree, "taxotree");
|
|
|
- $level_0_ops = array(0=>t("Choose a filter"));
|
|
|
- foreach ($taxotree as $index => $term) {
|
|
|
- $level_0_ops[$term->tid] = $term->name;
|
|
|
+ // define default number of lines, 1 or more if some were already added
|
|
|
+ $form_state['filterlines'] =
|
|
|
+ isset($form_state['filterlines'])
|
|
|
+ ? $form_state['filterlines']
|
|
|
+ : 1;
|
|
|
+
|
|
|
+ $trigger = FALSE;
|
|
|
+ if (!empty($form_state['triggering_element']['#name'])) {
|
|
|
+ $trigger = $form_state['triggering_element'];
|
|
|
}
|
|
|
|
|
|
- $filterlines = isset($form_state['values']['filterlines']) ? $form_state['values']['filterlines'] : 1;
|
|
|
+ $rmline = false;
|
|
|
+ if ($trigger) {
|
|
|
+ // dsm($form_state['triggering_element'], $form_state['triggering_element']['#name']);
|
|
|
+ // dsm($values, 'form state values');
|
|
|
|
|
|
- if (!empty($form_state['triggering_element'])) {
|
|
|
- dsm($form_state['values'], 'form state values');
|
|
|
- }
|
|
|
+ // add a line if needed
|
|
|
+ if($trigger['#name'] == 'addfilters'){
|
|
|
+ $form_state['filterlines'] = $form_state['filterlines']+1;
|
|
|
+ }
|
|
|
|
|
|
- if(isset($form_state['triggering_element']['#name']) && $form_state['triggering_element']['#name'] == 'addfilters'){
|
|
|
- $filterlines = $filterlines + 1;
|
|
|
- }
|
|
|
+ // remove a line if needed
|
|
|
|
|
|
- $form['filterlines'] = array(
|
|
|
- '#type' => 'hidden',
|
|
|
- '#value' => $filterlines,
|
|
|
- );
|
|
|
+ if(strpos($trigger['#name'], 'rm-filter-') === 0){
|
|
|
+ // $form_state['filterlines'] = $form_state['filterlines']+1;
|
|
|
+ $rmline = $trigger['#return_value'];
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// build filters lines (ajax enabled)
|
|
|
- for ($i=0; $i < $filterlines; $i++) {
|
|
|
+ for ($l=0; $l < $form_state['filterlines']; $l++) {
|
|
|
|
|
|
- $form['filters']['filterline-'.$i] = array(
|
|
|
+ // if rmline this line,
|
|
|
+ // continue the loop withour creating the line
|
|
|
+ if($l === $rmline){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // if we are after the removed line,
|
|
|
+ // create a second counter ($ll) to keep a continuous order for form items
|
|
|
+ // and keep the current counter ($l) to retrieve de current values
|
|
|
+ // if before removed line or no removed line at all, $l = $ll
|
|
|
+ if($rmline !== false && $l > $rmline){
|
|
|
+ $ll = $l-1;
|
|
|
+ }else{
|
|
|
+ $ll = $l;
|
|
|
+ }
|
|
|
+ // dsm("l : ".$l." | ll : ".$ll);
|
|
|
+
|
|
|
+ $form['filters']['filterline-'.$ll] = array(
|
|
|
'#type' => 'container',
|
|
|
'#attributes' => array(
|
|
|
'class' => array("filter-line")
|
|
|
)
|
|
|
);
|
|
|
|
|
|
- $form['filters']['filterline-'.$i]['filter-'.$i.'-0'] = array(
|
|
|
+ // build first level taxonomy tree and select options
|
|
|
+ $taxotree = taxonomy_get_tree(15, 0, 1, false);
|
|
|
+ $level_0_ops = array(0=>t("Choose a filter"));
|
|
|
+ foreach ($taxotree as $index => $term) {
|
|
|
+ $level_0_ops[$term->tid] = t($term->name);
|
|
|
+ }
|
|
|
+ // form select element for first level
|
|
|
+ $form['filters']['filterline-'.$ll]['filter-'.$ll.'-0'] = array(
|
|
|
'#type' => 'select',
|
|
|
'#options' => $level_0_ops,
|
|
|
+ '#name' => 'filter-'.$ll.'-0',
|
|
|
+ '#default_value' => 0,
|
|
|
'#ajax' => array(
|
|
|
- 'callback' => 'materio_search_api_advanced_search_callback',
|
|
|
+ 'callback' => 'materio_search_api_advanced_search_select_callback',
|
|
|
'wrapper' => 'advancedsearch-filters',
|
|
|
- // 'methode' => 'replace',
|
|
|
- // 'effect' => 'fade',
|
|
|
),
|
|
|
);
|
|
|
|
|
|
// add level 1 filter if level 0 chosen
|
|
|
- if(isset($form_state["values"]['filter-'.$i.'-0'])
|
|
|
- & $form_state["values"]['filter-'.$i.'-0']
|
|
|
+ if(isset($values['filter-'.$l.'-0'])
|
|
|
+ && $values['filter-'.$l.'-0']
|
|
|
){
|
|
|
+ $default = $values['filter-'.$l.'-0'];
|
|
|
+ $form['filters']['filterline-'.$ll]['filter-'.$ll.'-0']['#default_value'] = $default;
|
|
|
|
|
|
- $value = $form_state["values"]['filter-'.$i.'-0'];
|
|
|
-
|
|
|
- $taxotree1 = taxonomy_get_tree(15, $value, 1, false);
|
|
|
- dsm($taxotree1, "taxotree1");
|
|
|
- $level_1_ops = array(
|
|
|
- 0=>t("Choose a filter")
|
|
|
- );
|
|
|
+ // build second level taxonomy tree and select options
|
|
|
+ $taxotree1 = taxonomy_get_tree(15, $default, 1, false);
|
|
|
+ $level_1_ops = array(0=>t("Choose a filter"));
|
|
|
foreach ($taxotree1 as $index => $term) {
|
|
|
- $level_1_ops[$term->tid] = $term->name;
|
|
|
+ $level_1_ops[$term->tid] = t($term->name);
|
|
|
}
|
|
|
-
|
|
|
- $form['filters']['filterline-'.$i]['filter-'.$i.'-1'] = array(
|
|
|
+ // form select element for second level
|
|
|
+ $form['filters']['filterline-'.$ll]['filter-'.$ll.'-1'] = array(
|
|
|
'#type' => 'select',
|
|
|
'#options' => $level_1_ops,
|
|
|
+ '#name' => 'filter-'.$ll.'-1',
|
|
|
+ '#default_value' => 0,
|
|
|
'#ajax' => array(
|
|
|
- 'callback' => 'materio_search_api_advanced_search_callback',
|
|
|
+ 'callback' => 'materio_search_api_advanced_search_select_callback',
|
|
|
'wrapper' => 'advancedsearch-filters',
|
|
|
- 'methode' => 'replace',
|
|
|
- // 'effect' => 'fade',
|
|
|
),
|
|
|
);
|
|
|
+
|
|
|
+ // add level 2 filter if level 1 chosen
|
|
|
+ if(isset($values['filter-'.$l.'-1'])
|
|
|
+ && $values['filter-'.$l.'-1']
|
|
|
+ ){
|
|
|
+ $default = $values['filter-'.$l.'-1'];
|
|
|
+ $form['filters']['filterline-'.$ll]['filter-'.$ll.'-1']['#default_value'] = $default;
|
|
|
+
|
|
|
+ // build second level taxonomy tree and select options
|
|
|
+ $taxotree2 = taxonomy_get_tree(15, $default, 1, false);
|
|
|
+ if(count($taxotree2)){
|
|
|
+ $level_2_ops = array(0=>t("Choose a filter"));
|
|
|
+ foreach ($taxotree2 as $index => $term) {
|
|
|
+ $level_2_ops[$term->tid] = t($term->name);
|
|
|
+ }
|
|
|
+ // form select element for third level
|
|
|
+ $form['filters']['filterline-'.$ll]['filter-'.$ll.'-2'] = array(
|
|
|
+ '#type' => 'select',
|
|
|
+ '#options' => $level_2_ops,
|
|
|
+ '#name' => 'filter-'.$ll.'-2',
|
|
|
+ '#default_value' => 0,
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ // add remove the line button
|
|
|
+ $form['filters']['filterline-'.$ll]['rm-filter-'.$ll] = array(
|
|
|
+ '#type' => 'image_button',
|
|
|
+ '#src' => drupal_get_path('module', 'materio_search_api') . '/images/rmfilter.png',
|
|
|
+ '#title' => t('Remove this filter line'),
|
|
|
+ '#name' => 'rm-filter-'.$ll,
|
|
|
+ '#return_value' => $ll,
|
|
|
+ '#executes_submit_callback' => false,
|
|
|
+ '#ajax' => array(
|
|
|
+ 'callback' => 'materio_search_api_advanced_search_rmline_callback',
|
|
|
+ 'wrapper' => 'advancedsearch-filters',
|
|
|
+ // 'trigger_as' => array("name"=>"rmfilters".$l),
|
|
|
+ ),
|
|
|
+ "#attributes" => array('class'=>array('rm-btn')),
|
|
|
+ );
|
|
|
+
|
|
|
+ } // end of lines loop
|
|
|
+
|
|
|
+ if($rmline !== false){
|
|
|
+ $form_state['filterlines'] = $form_state['filterlines']-1;
|
|
|
}
|
|
|
|
|
|
|
|
|
- // add a new line of criterias
|
|
|
- $form['addfilters'] = array(
|
|
|
+ // button to add a new line of criterias
|
|
|
+ $form['filters']['addfilters'] = array(
|
|
|
'#type' => 'image_button',
|
|
|
'#src' => drupal_get_path('module', 'materio_search_api') . '/images/addfilter.png',
|
|
|
'#title' => t('Add a filter line'),
|
|
|
- '#default_value' => 0,
|
|
|
- '#return_value' => 1,
|
|
|
'#name' => "addfilters",
|
|
|
- '#executes_submit_callback' => false,
|
|
|
+ '#return_value' => "add",
|
|
|
'#ajax' => array(
|
|
|
- 'callback' => 'materio_search_api_advanced_search_callback',
|
|
|
+ 'callback' => 'materio_search_api_advanced_search_addfilter_callback',
|
|
|
'wrapper' => 'advancedsearch-filters',
|
|
|
- 'trigger_as' => array("name"=>"addfilters"),
|
|
|
- // 'methode' => 'replacewith',
|
|
|
- // 'speed' => 5000,
|
|
|
- // 'effect' => 'slide',
|
|
|
),
|
|
|
+ '#executes_submit_callback' => false,
|
|
|
);
|
|
|
|
|
|
- // submit
|
|
|
- // $form['create'] = array(
|
|
|
- // '#type' => 'image_button',
|
|
|
- // '#src' => drupal_get_path('module', 'materio_search_api') . '/images/search.png',
|
|
|
- // '#value' => t('Search'),
|
|
|
- // '#name' => "search",
|
|
|
- // '#executes_submit_callback' => false,
|
|
|
- // );
|
|
|
+ // submit the search
|
|
|
+ $form['search'] = array(
|
|
|
+ '#type' => 'image_button',
|
|
|
+ '#src' => drupal_get_path('module', 'materio_search_api') . '/images/search.png',
|
|
|
+ '#title' => t('Search'),
|
|
|
+ '#name' => "search",
|
|
|
+ '#return_value' => "search",
|
|
|
+ );
|
|
|
|
|
|
return $form;
|
|
|
}
|
|
|
|
|
|
-function materio_search_api_advanced_search_callback($form, $form_state) {
|
|
|
- // dsm($form_state, "callback form state");
|
|
|
- // $form["filters"]['test']= array(
|
|
|
- // "#markup" => "test",
|
|
|
- // );
|
|
|
+function materio_search_api_advanced_search_select_callback($form, &$form_state) {
|
|
|
+ return $form['filters'];
|
|
|
+}
|
|
|
+
|
|
|
+function materio_search_api_advanced_search_addfilter_callback($form, &$form_state) {
|
|
|
+ return $form['filters'];
|
|
|
+}
|
|
|
+
|
|
|
+function materio_search_api_advanced_search_rmline_callback($form, &$form_state) {
|
|
|
return $form['filters'];
|
|
|
}
|
|
|
|