diff --git a/sites/all/modules/gui/materiobasemod/materio_search_api.module b/sites/all/modules/gui/materiobasemod/materio_search_api.module
index 381d8ee9..d28e6e9a 100755
--- a/sites/all/modules/gui/materiobasemod/materio_search_api.module
+++ b/sites/all/modules/gui/materiobasemod/materio_search_api.module
@@ -736,21 +736,50 @@ function materio_search_api_advanced_search_form($form, &$form_state){
// dsm($form, 'form');
// global $user;
// $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'];
- // add a back to search/base home bouton if on explore/foo
$args = arg();
$path = array_shift($args);
- if ($path == 'explore' || $path == 'bookmarks' || $path == 'lists' ) {
- $link = l('', base_path().'actuality', array(
- 'html'=>true,
- 'attributes'=>array('class'=>'back-search-home')
- ));
- $form['actu'] = array(
- '#type' => 'markup',
- '#markup' => $link,
- );
+
+ // TODO: get the keywords from args and reconstruct the filter lines with default values
+ // dsm($args, "args");
+ $keywords = explode("+", $args[0]);
+ // dsm($keywords, 'keywords');
+
+ $default_values = array();
+ 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
$form['filters'] = array(
@@ -759,12 +788,6 @@ function materio_search_api_advanced_search_form($form, &$form_state){
'#suffix' => '',
);
- // 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'];
@@ -781,13 +804,22 @@ function materio_search_api_advanced_search_form($form, &$form_state){
}
// remove a line if needed
-
if(strpos($trigger['#name'], 'rm-filter-') === 0){
// $form_state['filterlines'] = $form_state['filterlines']+1;
$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)
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
- $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);
+ // get the default value
+ // from from_state values if ajax
+ // or from url args
+ // or 0
+ 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['filters']['filterline-'.$ll]['filter-'.$ll.'-0'] = array(
'#type' => 'select',
'#options' => $level_0_ops,
'#name' => 'filter-'.$ll.'-0',
- '#default_value' => 0,
+ '#default_value' => $default,
'#ajax' => array(
'callback' => 'materio_search_api_advanced_search_select_callback',
'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
- 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;
+ if($default){
+ // $default = $values['filter-'.$l.'-0'];
+ // $form['filters']['filterline-'.$ll]['filter-'.$ll.'-0']['#default_value'] = $default;
// 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"));
foreach ($taxotree1 as $index => $term) {
$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['filters']['filterline-'.$ll]['filter-'.$ll.'-1'] = array(
'#type' => 'select',
'#options' => $level_1_ops,
'#name' => 'filter-'.$ll.'-1',
- '#default_value' => 0,
+ '#default_value' => $default,
'#ajax' => array(
'callback' => 'materio_search_api_advanced_search_select_callback',
'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
- 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;
+ if($default){
+ // $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);
+ $taxotree2 = taxonomy_get_tree($vid, $default, 1, false);
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"));
foreach ($taxotree2 as $index => $term) {
$level_2_ops[$term->tid] = t($term->name);
@@ -876,7 +920,7 @@ function materio_search_api_advanced_search_form($form, &$form_state){
'#type' => 'select',
'#options' => $level_2_ops,
'#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;
}
-
// button to add a new line of criterias
$form['filters']['addfilters'] = array(
'#type' => 'image_button',
@@ -917,10 +960,29 @@ function materio_search_api_advanced_search_form($form, &$form_state){
'wrapper' => 'advancedsearch-filters',
),
'#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('', base_path().'actuality', array(
+ 'html'=>true,
+ 'attributes'=>array('class'=>'back-search-home')
+ ));
+ $form['rightcol']['actu'] = array(
+ '#type' => 'markup',
+ '#markup' => $link,
+ );
+ }
+
// submit the search
- $form['search'] = array(
+ $form['rightcol']['search'] = array(
'#type' => 'image_button',
'#src' => drupal_get_path('module', 'materio_search_api') . '/images/search.png',
'#title' => t('Search'),
@@ -943,6 +1005,45 @@ function materio_search_api_advanced_search_rmline_callback($form, &$form_state)
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
diff --git a/sites/all/themes/gui/materiobasetheme/css/styles.css b/sites/all/themes/gui/materiobasetheme/css/styles.css
index 1e654544..8962f33b 100644
--- a/sites/all/themes/gui/materiobasetheme/css/styles.css
+++ b/sites/all/themes/gui/materiobasetheme/css/styles.css
@@ -3900,25 +3900,46 @@ body.home-v2 #main {
#tool-bar #block-materio-search-api-mo-searchapi-advanced-search > .inner:active {
transition: box-shadow 0s ease-out;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); }
- #tool-bar #materio-search-api-advanced-search-form .filter-line {
- margin: 0.3em 0;
- padding-top: 0.3em; }
- #tool-bar #materio-search-api-advanced-search-form .filter-line:not(:first-child) {
- border-top: 1px dotted black; }
- #tool-bar #materio-search-api-advanced-search-form .filter-line .form-item {
- display: inline-block;
- vertical-align: middle;
- font-size: 12px;
- line-height: 1;
- text-transform: capitalize;
- margin: 0 0em 0 0; }
- #tool-bar #materio-search-api-advanced-search-form .filter-line select {
- width: auto; }
- #tool-bar #materio-search-api-advanced-search-form .rm-btn {
- float: right;
- margin: 0.4em 0 0.4em 0.4em; }
- #tool-bar #materio-search-api-advanced-search-form #edit-search {
- float: right; }
+ #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;
+ padding-top: 0.3em; }
+ #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .filter-line:not(:first-child) {
+ border-top: 1px solid #ccc; }
+ #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .filter-line .form-item {
+ display: inline-block;
+ vertical-align: middle;
+ font-size: 12px;
+ line-height: 1;
+ text-transform: capitalize;
+ margin: 0 0em 0 0; }
+ #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .filter-line select {
+ width: auto; }
+ #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .rm-btn {
+ float: right;
+ margin: 0.4em 0 0.4em 0.4em; }
+ #tool-bar #materio-search-api-advanced-search-form #advancedsearch-filters .add-filter {
+ margin: 0.5em 0; }
#center {
border-radius: 10px;
diff --git a/sites/all/themes/gui/materiobasetheme/scss/styles.scss b/sites/all/themes/gui/materiobasetheme/scss/styles.scss
index 821d83f4..5d467e2b 100644
--- a/sites/all/themes/gui/materiobasetheme/scss/styles.scss
+++ b/sites/all/themes/gui/materiobasetheme/scss/styles.scss
@@ -1118,37 +1118,70 @@ $headerouterheight:$headerheight+$headerpaddingtop+$headerpaddingbottom;
}
#materio-search-api-advanced-search-form{
- .filter-line{
- margin:0.3em 0;
- padding-top:0.3em;
+ >div{
+ position: relative;
+ }
- &:not(:first-child){
- border-top: 1px dotted black;
+ #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;
+ }
}
- .form-item{
- display:inline-block;
- vertical-align: middle;
- @include fs12; line-height:1;
- // padding-right:3em;
- text-transform: capitalize;
- // min-width : 4em;
- margin:0 0em 0 0;
- }
-
- select{
- width:auto;
-
+ #edit-search{
+ margin: 1em 0 0.5em;
}
}
- .rm-btn{
- float: right;
- margin:0.4em 0 0.4em 0.4em;
+ #advancedsearch-filters{
+ padding-right: 0.5em;
+ margin-right: 0.5em;
+ border-right: 1px solid #ccc;
+
+ .filter-line{
+ margin:0.3em 0;
+ padding-top:0.3em;
+
+ &:not(:first-child){
+ border-top: 1px solid #ccc;
+ }
+ .form-item{
+ display:inline-block;
+ vertical-align: middle;
+ @include fs12; line-height:1;
+ // padding-right:3em;
+ text-transform: capitalize;
+ // min-width : 4em;
+ margin:0 0em 0 0;
+ }
+
+ select{
+ width:auto;
+
+ }
+ }
+
+ .rm-btn{
+ float: right;
+ margin:0.4em 0 0.4em 0.4em;
+ }
+
+ .add-filter{
+ margin:0.5em 0;
+ }
}
- #edit-search{
- float: right;
- }
+
}
}