Index: CHANGELOG.txt =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/apachesolr_multilingual/CHANGELOG.txt,v retrieving revision 1.13.2.25 diff -u -r1.13.2.25 CHANGELOG.txt --- CHANGELOG.txt 29 Jun 2010 14:44:36 -0000 1.13.2.25 +++ CHANGELOG.txt 2 Jul 2010 11:43:40 -0000 @@ -5,6 +5,8 @@ [ ] mkalkbrenner: If "language" neutral" is mapped to another language the document gets indexed using this language. "Language neutral" will not occure as an filter in the language facet anymore. [ ] mkalkbrenner: Skip dataDir in solrconfig.xml for Multi Core Setup [ ] mkalkbrenner: Allow user to adjust Auto Commit Max Time +[#394728] mkalkbrenner: By default filter by the user's language and provide setting on settings page. +[ ] mkalkbrenner: fixed bug that language specific highlighting did not work if spell checking is disabled Apache Solr Multilingual 6.x-1.0-alpha5, 2010-06-28 Index: apachesolr_multilingual.admin.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/apachesolr_multilingual/apachesolr_multilingual.admin.inc,v retrieving revision 1.3.2.10 diff -u -r1.3.2.10 apachesolr_multilingual.admin.inc --- apachesolr_multilingual.admin.inc 29 Jun 2010 14:44:36 -0000 1.3.2.10 +++ apachesolr_multilingual.admin.inc 2 Jul 2010 11:43:40 -0000 @@ -45,6 +45,20 @@ '#description' => t('Select a language to treat content marked as language neutral. Language neutral will not occur as an filter option any more.'), ); + $form['apachesolr_multilingual_language_settings']['apachesolr_multilingual_auto_language_filter'] = array( + '#type' => 'checkbox', + '#title' => t("Limit search to user's language by default"), + '#default_value' => variable_get('apachesolr_multilingual_auto_language_filter', 0), + '#description' => t("Show only search results that match the user's current language."), + ); + + $form['apachesolr_multilingual_language_settings']['apachesolr_multilingual_auto_language_filter_detachable'] = array( + '#type' => 'checkbox', + '#title' => t("Limit search to user's language could be disabled by user"), + '#default_value' => variable_get('apachesolr_multilingual_auto_language_filter_detachable', 0), + '#description' => t("Displays a checkbox on search result page to search over all languages if \"Limit search to user's language by default\" is active."), + ); + $form['apachesolr_multilingual_clir'] = array( '#type' => 'fieldset', '#title' => t('CLIR'), Index: apachesolr_multilingual.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/apachesolr_multilingual/apachesolr_multilingual.module,v retrieving revision 1.3.2.13 diff -u -r1.3.2.13 apachesolr_multilingual.module --- apachesolr_multilingual.module 29 Jun 2010 12:04:14 -0000 1.3.2.13 +++ apachesolr_multilingual.module 2 Jul 2010 11:43:40 -0000 @@ -294,18 +294,42 @@ function apachesolr_multilingual_apachesolr_modify_query(&$query, &$params, $caller) { - if (variable_get('apachesolr_search_spellcheck', FALSE)) { - foreach (variable_get('apachesolr_multilingual_languages', array()) as $language) { - if ($query->has_filter('language', $language)) { - $params['spellcheck.dictionary'] = 'spellchecker_' . $language; - break; + global $language; + + $filter_language = ''; + + // We assume that a user is not able to select two different languages as filter + $language_filters = $query->get_filters('language'); + if (!empty($language_filters)) { + $filter_language = $language_filters[0]['#value']; + } + + $languages = variable_get('apachesolr_multilingual_languages', array()); + + if (!$filter_language && variable_get('apachesolr_multilingual_auto_language_filter', 0) && + (!variable_get('apachesolr_multilingual_auto_language_filter_detachable', 0) || + (variable_get('apachesolr_multilingual_auto_language_filter_detachable', 0) && !$_GET['detach-auto-language-filter']))) { + if (!empty($language->language)) { + if (in_array($language->language, $languages)) { + $filter_language = $language->language; + $query->add_filter('language', $filter_language); + } + } + elseif (variable_get('apachesolr_multilingual_map_language_neutral', '')) { + $filter_language = variable_get('apachesolr_multilingual_map_language_neutral', ''); + if ($filter_language) { + $query->add_filter('language', $filter_language); } } } - if ($query->has_filter('language', $language)) { - // $params['hl.fl'] = 'title_' . $language . ',body_' . $language; - $params['hl.fl'] = 'body_' . $language; + if ($filter_language && in_array($filter_language, $languages)) { + if (variable_get('apachesolr_search_spellcheck', FALSE)) { + $params['spellcheck.dictionary'] = 'spellchecker_' . $filter_language; + } + + // $params['hl.fl'] = 'title_' . $lang . ',body_' . $filter_language; + $params['hl.fl'] = 'body_' . $filter_language; } else { // $params['hl.fl'] = 'title,body'; @@ -313,3 +337,39 @@ } } + +/** + * Implements hook_form_search_form_alter(). + * + * @param $form + * @param $form_state + */ +function apachesolr_multilingual_form_search_form_alter(&$form, $form_state) { + if ($form['module']['#value'] == 'apachesolr_search') { + if (variable_get('apachesolr_multilingual_auto_language_filter', 0) && variable_get('apachesolr_multilingual_auto_language_filter_detachable', 0) && strpos($_GET['filters'], 'language:') === FALSE) { + $form['basic']['apachesolr_search']['detach_auto_language_filter'] = array( + '#type' => 'checkbox', + '#title' => t('Search all languages'), + '#default_value' => (int) isset($_GET['detach-auto-language-filter']), + ); + $form['#submit'] = array_merge(array('apachesolr_multilingual_form_search_submit'), $form['#submit']); + } + } +} + + +/** + * @see apachesolr_multilingual_form_search_form_alter() + */ +function apachesolr_multilingual_form_search_submit($form, &$form_state) { + $fv = $form_state['values']; + $get = unserialize($fv['apachesolr_search']['get']); + if ($fv['apachesolr_search']['detach_auto_language_filter']) { + $get['detach-auto-language-filter'] = '1'; + } + else { + unset($get['detach-auto-language-filter']); + } + $form_state['values']['apachesolr_search']['get'] = serialize($get); +} +