summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/node/node.module11
-rw-r--r--modules/search/search.test65
2 files changed, 73 insertions, 3 deletions
diff --git a/modules/node/node.module b/modules/node/node.module
index 47173cc04..8535a3d3f 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -2692,7 +2692,9 @@ function node_form_search_form_alter(&$form, $form_state) {
// Languages:
$language_options = array();
foreach (language_list('language') as $key => $entity) {
- $language_options[$key] = $entity->name;
+ if ($entity->enabled) {
+ $language_options[$key] = $entity->name;
+ }
}
if (count($language_options) > 1) {
$form['advanced']['language'] = array(
@@ -2728,8 +2730,11 @@ function node_search_validate($form, &$form_state) {
if (isset($form_state['values']['term']) && is_array($form_state['values']['term']) && count($form_state['values']['term'])) {
$keys = search_expression_insert($keys, 'term', implode(',', $form_state['values']['term']));
}
- if (isset($form_state['values']['language']) && is_array($form_state['values']['language']) && count($form_state['values']['language'])) {
- $keys = search_expression_insert($keys, 'language', implode(',', array_filter($form_state['values']['language'])));
+ if (isset($form_state['values']['language']) && is_array($form_state['values']['language'])) {
+ $languages = array_filter($form_state['values']['language']);
+ if (count($languages)) {
+ $keys = search_expression_insert($keys, 'language', implode(',', $languages));
+ }
}
if ($form_state['values']['or'] != '') {
if (preg_match_all('/ ("[^"]+"|[^" ]+)/i', ' ' . $form_state['values']['or'], $matches)) {
diff --git a/modules/search/search.test b/modules/search/search.test
index bf1f69419..45da4647f 100644
--- a/modules/search/search.test
+++ b/modules/search/search.test
@@ -1789,3 +1789,68 @@ class SearchPageOverride extends DrupalWebTestCase {
$this->assertText('Test page text is here', 'Page override is working');
}
}
+
+/**
+ * Test node search with multiple languages.
+ */
+class SearchLanguageTestCase extends DrupalWebTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Search language selection',
+ 'description' => 'Tests advanced search with different languages enabled.',
+ 'group' => 'Search',
+ );
+ }
+
+ /**
+ * Implementation setUp().
+ */
+ function setUp() {
+ parent::setUp('search', 'locale');
+
+ // Create and login user.
+ $test_user = $this->drupalCreateUser(array('access content', 'search content', 'use advanced search', 'administer nodes', 'administer languages', 'access administration pages'));
+ $this->drupalLogin($test_user);
+ }
+
+ function testLanguages() {
+ // Check that there are initially no languages displayed.
+ $this->drupalGet('search/node');
+ $this->assertNoText(t('Languages'), t('No languages to choose from.'));
+
+ // Add predefined language.
+ $edit = array('langcode' => 'fr');
+ $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
+ $this->assertText('fr', t('Language added successfully.'));
+
+ // Now we should have languages displayed.
+ $this->drupalGet('search/node');
+ $this->assertText(t('Languages'), t('Languages displayed to choose from.'));
+ $this->assertText(t('English'), t('English is a possible choice.'));
+ $this->assertText(t('French'), t('French is a possible choice.'));
+
+ // Ensure selecting no language does not make the query different.
+ $this->drupalPost('search/node', array(), t('Advanced search'));
+ $this->assertEqual($this->getUrl(), url('search/node/', array('absolute' => TRUE)), t('Correct page redirection, no language filtering.'));
+
+ // Pick French and ensure it is selected.
+ $edit = array('language[fr]' => TRUE);
+ $this->drupalPost('search/node', $edit, t('Advanced search'));
+ $this->assertFieldByXPath('//input[@name="keys"]', 'language:fr', t('Language filter added to query.'));
+
+ // Change the default language and disable English.
+ $path = 'admin/config/regional/language';
+ $this->drupalGet($path);
+ $this->assertFieldChecked('edit-site-default-en', t('English is the default language.'));
+ $edit = array('site_default' => 'fr');
+ $this->drupalPost(NULL, $edit, t('Save configuration'));
+ $this->assertNoFieldChecked('edit-site-default-en', t('Default language updated.'));
+ $edit = array('enabled[en]' => FALSE);
+ $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
+ $this->assertNoFieldChecked('edit-enabled-en', t('Language disabled.'));
+
+ // Check that there are again no languages displayed.
+ $this->drupalGet('search/node');
+ $this->assertNoText(t('Languages'), t('No languages to choose from.'));
+ }
+}