first test of launch a research, read the url args and prepopulate the form, ajax add and remove filter are not working anymore

This commit is contained in:
Bachir Soussi Chiadmi 2017-10-10 16:51:22 +02:00
parent c90cfa63e4
commit 1b9f8e3ab4
3 changed files with 237 additions and 82 deletions

View File

@ -736,21 +736,50 @@ function materio_search_api_advanced_search_form($form, &$form_state){
// dsm($form, 'form'); // dsm($form, 'form');
// global $user; // global $user;
// $form = array(); // $form = array();
// TODO: get vid from settings
$vid = 15; // onthologie
$voc = taxonomy_vocabulary_load($vid);
$voc_machinename = $voc->machine_name;
// dsm($voc, "voc");
$values = $form_state['values']; $values = $form_state['values'];
// add a back to search/base home bouton if on explore/foo
$args = arg(); $args = arg();
$path = array_shift($args); $path = array_shift($args);
if ($path == 'explore' || $path == 'bookmarks' || $path == 'lists' ) {
$link = l('<i class="fi-home"></i>', base_path().'actuality', array( // TODO: get the keywords from args and reconstruct the filter lines with default values
'html'=>true, // dsm($args, "args");
'attributes'=>array('class'=>'back-search-home') $keywords = explode("+", $args[0]);
)); // dsm($keywords, 'keywords');
$form['actu'] = array(
'#type' => 'markup', $default_values = array();
'#markup' => $link, foreach ($keywords as $key => $value) {
); $name = str_replace('"', '', $value);
//Get the term
$terms = taxonomy_get_term_by_name($name, $voc_machinename);
$term = array_shift($terms);
// dsm($term, $term->tid.' : '.$term->name);
// get parents
if(isset($term->tid)){
$parents = taxonomy_get_parents_all($term->tid);
// dsm($parents, 'parents');
// build default values
for ($p=count($parents)-1; $p >=0 ; $p--) {
$default_values[$key][] = $parents[$p]->tid;
} }
}
}
// dsm($default_values, 'default_values');
// define default number of lines, 1 or more if some were already added
$form_state['filterlines'] =
isset($form_state['filterlines'])
? $form_state['filterlines']
: count($default_values)
? count($default_values)
: 1;
// filters form container // filters form container
$form['filters'] = array( $form['filters'] = array(
@ -759,12 +788,6 @@ function materio_search_api_advanced_search_form($form, &$form_state){
'#suffix' => '</div>', '#suffix' => '</div>',
); );
// 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; $trigger = FALSE;
if (!empty($form_state['triggering_element']['#name'])) { if (!empty($form_state['triggering_element']['#name'])) {
$trigger = $form_state['triggering_element']; $trigger = $form_state['triggering_element'];
@ -781,13 +804,22 @@ function materio_search_api_advanced_search_form($form, &$form_state){
} }
// remove a line if needed // remove a line if needed
if(strpos($trigger['#name'], 'rm-filter-') === 0){ if(strpos($trigger['#name'], 'rm-filter-') === 0){
// $form_state['filterlines'] = $form_state['filterlines']+1; // $form_state['filterlines'] = $form_state['filterlines']+1;
$rmline = $trigger['#return_value']; $rmline = $trigger['#return_value'];
} }
} }
// TODO: show result count live
// TODO: filter next select form item
// build first level taxonomy tree and select options
$taxotree = taxonomy_get_tree($vid, 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);
}
// build filters lines (ajax enabled) // build filters lines (ajax enabled)
for ($l=0; $l < $form_state['filterlines']; $l++) { for ($l=0; $l < $form_state['filterlines']; $l++) {
@ -814,18 +846,22 @@ function materio_search_api_advanced_search_form($form, &$form_state){
) )
); );
// build first level taxonomy tree and select options // get the default value
$taxotree = taxonomy_get_tree(15, 0, 1, false); // from from_state values if ajax
$level_0_ops = array(0=>t("Choose a filter")); // or from url args
foreach ($taxotree as $index => $term) { // or 0
$level_0_ops[$term->tid] = t($term->name); if(isset($values['filter-'.$l.'-0']) && $values['filter-'.$l.'-0']){
$default = $values['filter-'.$l.'-0'];
}else{
$default = isset($default_values[$l][0]) ? $default_values[$l][0] : 0;
} }
// form select element for first level // form select element for first level
$form['filters']['filterline-'.$ll]['filter-'.$ll.'-0'] = array( $form['filters']['filterline-'.$ll]['filter-'.$ll.'-0'] = array(
'#type' => 'select', '#type' => 'select',
'#options' => $level_0_ops, '#options' => $level_0_ops,
'#name' => 'filter-'.$ll.'-0', '#name' => 'filter-'.$ll.'-0',
'#default_value' => 0, '#default_value' => $default,
'#ajax' => array( '#ajax' => array(
'callback' => 'materio_search_api_advanced_search_select_callback', 'callback' => 'materio_search_api_advanced_search_select_callback',
'wrapper' => 'advancedsearch-filters', 'wrapper' => 'advancedsearch-filters',
@ -833,24 +869,30 @@ function materio_search_api_advanced_search_form($form, &$form_state){
); );
// add level 1 filter if level 0 chosen // add level 1 filter if level 0 chosen
if(isset($values['filter-'.$l.'-0']) if($default){
&& $values['filter-'.$l.'-0'] // $default = $values['filter-'.$l.'-0'];
){ // $form['filters']['filterline-'.$ll]['filter-'.$ll.'-0']['#default_value'] = $default;
$default = $values['filter-'.$l.'-0'];
$form['filters']['filterline-'.$ll]['filter-'.$ll.'-0']['#default_value'] = $default;
// build second level taxonomy tree and select options // build second level taxonomy tree and select options
$taxotree1 = taxonomy_get_tree(15, $default, 1, false); $taxotree1 = taxonomy_get_tree($vid, $default, 1, false);
$level_1_ops = array(0=>t("Choose a filter")); $level_1_ops = array(0=>t("Choose a filter"));
foreach ($taxotree1 as $index => $term) { foreach ($taxotree1 as $index => $term) {
$level_1_ops[$term->tid] = t($term->name); $level_1_ops[$term->tid] = t($term->name);
} }
if(isset($values['filter-'.$l.'-1']) && $values['filter-'.$l.'-1']){
$default = $values['filter-'.$l.'-1'];
}else{
$default = isset($default_values[$l][1]) ? $default_values[$l][1] : 0;
}
// dsm($default, "default 1");
// form select element for second level // form select element for second level
$form['filters']['filterline-'.$ll]['filter-'.$ll.'-1'] = array( $form['filters']['filterline-'.$ll]['filter-'.$ll.'-1'] = array(
'#type' => 'select', '#type' => 'select',
'#options' => $level_1_ops, '#options' => $level_1_ops,
'#name' => 'filter-'.$ll.'-1', '#name' => 'filter-'.$ll.'-1',
'#default_value' => 0, '#default_value' => $default,
'#ajax' => array( '#ajax' => array(
'callback' => 'materio_search_api_advanced_search_select_callback', 'callback' => 'materio_search_api_advanced_search_select_callback',
'wrapper' => 'advancedsearch-filters', 'wrapper' => 'advancedsearch-filters',
@ -858,15 +900,17 @@ function materio_search_api_advanced_search_form($form, &$form_state){
); );
// add level 2 filter if level 1 chosen // add level 2 filter if level 1 chosen
if(isset($values['filter-'.$l.'-1']) if($default){
&& $values['filter-'.$l.'-1'] // $default = $values['filter-'.$l.'-1'];
){ // $form['filters']['filterline-'.$ll]['filter-'.$ll.'-1']['#default_value'] = $default;
$default = $values['filter-'.$l.'-1'];
$form['filters']['filterline-'.$ll]['filter-'.$ll.'-1']['#default_value'] = $default;
// build second level taxonomy tree and select options // build second level taxonomy tree and select options
$taxotree2 = taxonomy_get_tree(15, $default, 1, false); $taxotree2 = taxonomy_get_tree($vid, $default, 1, false);
if(count($taxotree2)){ if(count($taxotree2)){
$default = isset($default_values[$l][2]) ? $default_values[$l][2] : 0;
// dsm($default, "default 2");
$level_2_ops = array(0=>t("Choose a filter")); $level_2_ops = array(0=>t("Choose a filter"));
foreach ($taxotree2 as $index => $term) { foreach ($taxotree2 as $index => $term) {
$level_2_ops[$term->tid] = t($term->name); $level_2_ops[$term->tid] = t($term->name);
@ -876,7 +920,7 @@ function materio_search_api_advanced_search_form($form, &$form_state){
'#type' => 'select', '#type' => 'select',
'#options' => $level_2_ops, '#options' => $level_2_ops,
'#name' => 'filter-'.$ll.'-2', '#name' => 'filter-'.$ll.'-2',
'#default_value' => 0, '#default_value' => $default,
); );
} }
} }
@ -904,7 +948,6 @@ function materio_search_api_advanced_search_form($form, &$form_state){
$form_state['filterlines'] = $form_state['filterlines']-1; $form_state['filterlines'] = $form_state['filterlines']-1;
} }
// button to add a new line of criterias // button to add a new line of criterias
$form['filters']['addfilters'] = array( $form['filters']['addfilters'] = array(
'#type' => 'image_button', '#type' => 'image_button',
@ -917,10 +960,29 @@ function materio_search_api_advanced_search_form($form, &$form_state){
'wrapper' => 'advancedsearch-filters', 'wrapper' => 'advancedsearch-filters',
), ),
'#executes_submit_callback' => false, '#executes_submit_callback' => false,
'#attributes' => array(
'class'=>array('add-filter')
),
); );
// filters form container
$form['rightcol'] = array(
'#type' => 'container',
);
// add a back to search/base home bouton if on explore/foo
if ($path == 'explore' || $path == 'bookmarks' || $path == 'lists' ) {
$link = l('<i class="fi-home"></i>', base_path().'actuality', array(
'html'=>true,
'attributes'=>array('class'=>'back-search-home')
));
$form['rightcol']['actu'] = array(
'#type' => 'markup',
'#markup' => $link,
);
}
// submit the search // submit the search
$form['search'] = array( $form['rightcol']['search'] = array(
'#type' => 'image_button', '#type' => 'image_button',
'#src' => drupal_get_path('module', 'materio_search_api') . '/images/search.png', '#src' => drupal_get_path('module', 'materio_search_api') . '/images/search.png',
'#title' => t('Search'), '#title' => t('Search'),
@ -943,6 +1005,45 @@ function materio_search_api_advanced_search_rmline_callback($form, &$form_state)
return $form['filters']; return $form['filters'];
} }
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');
$values = $form_state['values'];
$filterlines = isset($form_state['filterlines']) ? $form_state['filterlines'] : 0;
$keywords = array();
// extract last tag of each lines
for ($l=0; $l < $filterlines ; $l++) {
for ($i=2; $i > 0 ; $i--) {
if(isset($values['filter-'.$l.'-'.$i]) && $values['filter-'.$l.'-'.$i]){
$term = taxonomy_term_load($values['filter-'.$l.'-'.$i]);
$keywords[$term->tid] = '"'.$term->name.'"';
continue 2;
}else{
continue;
}
}
}
// dsm($keywords, 'keywordstid');
$keywords_str = implode("+", $keywords);
// dsm($keywords_str);
$form_state['redirect'] = 'explore/'.$keywords_str; //rawurlencode($keywords_str);
}
/** /**
* viewmode * viewmode

View File

@ -3900,25 +3900,46 @@ body.home-v2 #main {
#tool-bar #block-materio-search-api-mo-searchapi-advanced-search > .inner:active { #tool-bar #block-materio-search-api-mo-searchapi-advanced-search > .inner:active {
transition: box-shadow 0s ease-out; transition: box-shadow 0s ease-out;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); }
#tool-bar #materio-search-api-advanced-search-form .filter-line { #tool-bar #materio-search-api-advanced-search-form > div {
position: relative; }
#tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters, #tool-bar #materio-search-api-advanced-search-form #edit-rightcol {
display: inline-block;
vertical-align: top; }
#tool-bar #materio-search-api-advanced-search-form #edit-rightcol {
position: relative;
text-align: center; }
#tool-bar #materio-search-api-advanced-search-form #edit-rightcol > * {
display: block; }
#tool-bar #materio-search-api-advanced-search-form #edit-rightcol a.back-search-home {
color: #000;
padding-top: 0.45em; }
#tool-bar #materio-search-api-advanced-search-form #edit-rightcol a.back-search-home i:before {
font-size: 1.3em; }
#tool-bar #materio-search-api-advanced-search-form #edit-rightcol #edit-search {
margin: 1em 0 0.5em; }
#tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters {
padding-right: 0.5em;
margin-right: 0.5em;
border-right: 1px solid #ccc; }
#tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .filter-line {
margin: 0.3em 0; margin: 0.3em 0;
padding-top: 0.3em; } padding-top: 0.3em; }
#tool-bar #materio-search-api-advanced-search-form .filter-line:not(:first-child) { #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .filter-line:not(:first-child) {
border-top: 1px dotted black; } border-top: 1px solid #ccc; }
#tool-bar #materio-search-api-advanced-search-form .filter-line .form-item { #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .filter-line .form-item {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
font-size: 12px; font-size: 12px;
line-height: 1; line-height: 1;
text-transform: capitalize; text-transform: capitalize;
margin: 0 0em 0 0; } margin: 0 0em 0 0; }
#tool-bar #materio-search-api-advanced-search-form .filter-line select { #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .filter-line select {
width: auto; } width: auto; }
#tool-bar #materio-search-api-advanced-search-form .rm-btn { #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .rm-btn {
float: right; float: right;
margin: 0.4em 0 0.4em 0.4em; } margin: 0.4em 0 0.4em 0.4em; }
#tool-bar #materio-search-api-advanced-search-form #edit-search { #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .add-filter {
float: right; } margin: 0.5em 0; }
#center { #center {
border-radius: 10px; border-radius: 10px;

View File

@ -1118,12 +1118,42 @@ $headerouterheight:$headerheight+$headerpaddingtop+$headerpaddingbottom;
} }
#materio-search-api-advanced-search-form{ #materio-search-api-advanced-search-form{
>div{
position: relative;
}
#advancedsearch-filters, #edit-rightcol{
display: inline-block;
vertical-align: top;
}
#edit-rightcol{
position: relative;
text-align: center;
>*{display:block;}
a.back-search-home{
color:#000;
padding-top: 0.45em;
i:before{
font-size:1.3em;
}
}
#edit-search{
margin: 1em 0 0.5em;
}
}
#advancedsearch-filters{
padding-right: 0.5em;
margin-right: 0.5em;
border-right: 1px solid #ccc;
.filter-line{ .filter-line{
margin:0.3em 0; margin:0.3em 0;
padding-top:0.3em; padding-top:0.3em;
&:not(:first-child){ &:not(:first-child){
border-top: 1px dotted black; border-top: 1px solid #ccc;
} }
.form-item{ .form-item{
display:inline-block; display:inline-block;
@ -1146,11 +1176,14 @@ $headerouterheight:$headerheight+$headerpaddingtop+$headerpaddingbottom;
margin:0.4em 0 0.4em 0.4em; margin:0.4em 0 0.4em 0.4em;
} }
#edit-search{ .add-filter{
float: right; margin:0.5em 0;
} }
} }
}
} }