@ -29,8 +29,8 @@ function search_widget_prepare(&$htmlHeadXtra) {
/**
* Get one term html select
*/
function format_one_specific_field_select($prefix, $sf_term_array, $op) {
$multiple_select .= '< select multiple = "multiple" size = "7" class = "sf-select-multiple " name = "sf_'. $prefix .'[]" > ';
function format_one_specific_field_select($prefix, $sf_term_array, $op, $extra_select_attr='size="7" class="sf-select-multiple"' ) {
$multiple_select .= '< select ' . $ extra_select_attr . ' title = "'. $prefix .'" id = "sf-'. $prefix .' " name = "sf_'. $prefix .'[]" > ';
$all_selected = '';
if (!empty($_REQUEST['sf_'. $prefix]) ) {
@ -62,12 +62,13 @@ function format_one_specific_field_select($prefix, $sf_term_array, $op) {
/**
* Get terms html selects
*/
function format_specific_fields_selects($sf_terms, $op) {
function format_specific_fields_selects($sf_terms, $op, $prefilter_prefix='' ) {
// Process each prefix type term
$i = 0;
$max = count($sf_terms);
$multiple_selects .='';
foreach ($sf_terms as $prefix => $sf_term_array) {
if ($prefix == $prefilter_prefix) continue;
$multiple_select = '';
if ($i>0) {
//print "+" image
@ -88,7 +89,7 @@ function format_specific_fields_selects($sf_terms, $op) {
$sf_value = get_specific_field_list(array( 'code' => "'$prefix'" ));
$sf_value = array_shift($sf_value);
$multiple_select .= '< td > < label class = "sf-select-multiple-title" for = "sf_'. $prefix .'[]" > '.$icons_for_search_terms[$prefix].' '.$sf_value['name'].'< / label > < br / > ';
$multiple_select .= format_one_specific_field_select($prefix, $sf_term_array, $op);
$multiple_select .= format_one_specific_field_select($prefix, $sf_term_array, $op, 'multiple="multiple" size="7" class="sf-select-multiple"' );
$multiple_select .= '< / td > ';
$multiple_selects .= $multiple_select;
$i++;
@ -97,25 +98,28 @@ function format_specific_fields_selects($sf_terms, $op) {
}
/**
* Show search form
* Build the normal form.
*
* First, natural way.
*/
function display_search_form($action, $show_thesaurus, $sf_terms, $op) {
function search_widget_normal _form($action, $show_thesaurus, $sf_terms, $op) {
$thesaurus_icon = Display::return_icon('thesaurus.gif', get_lang('SearchAdvancedOptions'), array('id'=>'thesaurus-icon'));
$advanced_options = '< a id = "tags-toggle" href = "#" > '. get_lang('SearchAdvancedOptions') .'< / a > ';
$display_thesaurus = ($show_thesaurus==true? 'block': 'none');
$help = '< h3 > '. get_lang('SearchKeywordsHelpTitle') .'< / h3 > '. get_lang('SearchKeywordsHelpComment');
$mode = (!empty($_REQUEST['mode'])? htmlentities($_REQUEST['mode']): 'gallery');
$type = (!empty($_REQUEST['type'])? htmlentities($_REQUEST['type']): 'normal');
/**
* POST avoid long urls, but we are using GET because
* SortableTableFromArray pagination is done with simple links, so now we
* could not send a form in pagination
*/
$form = '
< form id = "dokeos_search" action = "'. $action .'?mode='. $mode .'" method = "get" >
< form id = "dokeos_search" action = "'. $action .'" method = "GET" >
< input type = "text" id = "query" name = "query" size = "40" / >
< input type = "hidden" name = "mode" value = "'. $mode .'" / >
< input type = "hidden" name = "type" value = "'. $type .'" / >
< input type = "text" id = "query" name = "query" size = "40" / >
< input type = "hidden" name = "tablename_page_nr" value = "1" / >
< input type = "submit" id = "submit" value = "'. get_lang(" Search " ) . ' " / >
< br / > < br / >
@ -152,7 +156,110 @@ function display_search_form($action, $show_thesaurus, $sf_terms, $op) {
< / div >
< / form >
< br style = "clear: both;" / >
';
';
return $form;
}
/**
* Build the prefilter form.
*
* This type allow filter all other multiple select terms by one term in a dinamic way
*/
function search_widget_prefilter_form($action, $show_thesaurus, $sf_terms, $op, $prefilter_prefix=NULL) {
$thesaurus_icon = Display::return_icon('thesaurus.gif', get_lang('SearchAdvancedOptions'), array('id'=>'thesaurus-icon'));
$advanced_options = '< a id = "tags-toggle" href = "#" > '. get_lang('SearchAdvancedOptions') .'< / a > ';
$display_thesaurus = ($show_thesaurus==true? 'block': 'none');
$help = '< h3 > '. get_lang('SearchKeywordsHelpTitle') .'< / h3 > '. get_lang('SearchKeywordsHelpComment');
$mode = (!empty($_REQUEST['mode'])? htmlentities($_REQUEST['mode']): 'gallery');
$type = (!empty($_REQUEST['type'])? htmlentities($_REQUEST['type']): 'normal');
/**
* POST avoid long urls, but we are using GET because
* SortableTableFromArray pagination is done with simple links, so now we
* could not send a form in pagination
*/
$form = '
< form id = "dokeos_search" action = "'. $action .'" method = "GET" >
< input type = "text" id = "query" name = "query" size = "40" / >
< input type = "hidden" name = "mode" value = "'. $mode .'" / >
< input type = "hidden" name = "type" value = "'. $type .'" / >
< input type = "hidden" name = "tablename_page_nr" value = "1" / >
< input type = "submit" id = "submit" value = "'. get_lang(" Search " ) . ' " / >
< br / > < br / >
< span class = "search-links-box" > '. $thesaurus_icon . $advanced_options .' < / span >
< div id = "tags" class = "tags" style = "display:'. $display_thesaurus .';" >
< div class = "search-help-box" > '. $help .'< / div >
< table >
< tr >
';
if (!is_null($prefilter_prefix)) {
//sorting the array of terms
$temp = array();
foreach ($sf_terms[$prefilter_prefix] as $key => $value) {
$temp[trim(stripslashes($value['name']))] = $key;
}
$temp = array_flip($temp);
unset($sf_term_array);
natcasesort($temp);
$sf_term_array = $temp;
// get specific field name
$sf_value = get_specific_field_list(array( 'code' => "'$prefilter_prefix'" ));
$sf_value = array_shift($sf_value);
$form .= '< label class = "sf-select-multiple-title" for = "sf_'. $prefix .'[]" > '.$icons_for_search_terms[$prefix].' '.$sf_value['name'].'< / label > < br / > ';
$form .= format_one_specific_field_select($prefilter_prefix, $sf_term_array, $op, 'id="prefilter"');
$form .= format_specific_fields_selects($sf_terms, $op, $prefilter_prefix);
} else {
$form .= format_specific_fields_selects($sf_terms, $op);
}
$or_checked = '';
$and_checked = '';
if ($op == 'or') {
$or_checked = 'checked="checked"';
} else if ($op == 'and') {
$and_checked = 'checked="checked"';
}
$form .= '
< / tr >
< tr >
< td id = "operator-select" >
'. get_lang('SearchCombineSearchWith') .':< br / >
< input type = "radio" class = "search-operator" name = "operator" value = "or" ' . $ or_checked . ' > '. strtoupper(get_lang('Or')) .'< / input >
< input type = "radio" class = "search-operator" name = "operator" value = "and" ' . $ and_checked . ' > '. strtoupper(get_lang('And')) .'< / input >
< / td >
< td > < / td >
< td >
< br / >
< input class = "lower-submit" type = "submit" value = "'. get_lang('Search') .'" / >
< input type = "submit" id = "tags-clean" value = "'. get_lang('SearchResetKeywords') .'" / >
< / td >
< / tr >
< / table >
< / div >
< / form >
< br style = "clear: both;" / >
';
return $form;
}
/**
* Show search form
*/
function display_search_form($action, $show_thesaurus, $sf_terms, $op) {
$type = (!empty($_REQUEST['type'])? htmlentities($_REQUEST['type']): 'normal');
switch ($type) {
case 'prefilter':
$prefilter_prefix = 'E'; //TODO: should be api_get_setting('search_prefilter_prefix')
$form = search_widget_prefilter_form($action, $show_thesaurus, $sf_terms, $op, $prefilter_prefix);
break;
case 'normal':
default:
$form = search_widget_normal_form($action, $show_thesaurus, $sf_terms, $op);
}
// show built form
echo $form;
}