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);
+}
+
