Beispiel #1
0
 /**
  * {@inheritdoc}
  */
 public function markForReindex()
 {
     // All NodeSearch pages share a common search index "type" equal to
     // the plugin ID.
     search_mark_for_reindex($this->getPluginId());
 }
Beispiel #2
0
 /**
  * Update search index and search for comment.
  */
 function assertCommentAccess($assume_access, $message)
 {
     // Invoke search index update.
     search_mark_for_reindex('node_search', $this->node->id());
     $this->cronRun();
     // Search for the comment subject.
     $edit = array('keys' => "'" . $this->commentSubject . "'");
     $this->drupalPostForm('search/node', $edit, t('Search'));
     if ($assume_access) {
         $expected_node_result = $this->assertText($this->node->label());
         $expected_comment_result = $this->assertText($this->commentSubject);
     } else {
         $expected_node_result = $this->assertText(t('Your search yielded no results.'));
         $expected_comment_result = $this->assertText(t('Your search yielded no results.'));
     }
     $this->assertTrue($expected_node_result && $expected_comment_result, $message);
 }
 /**
  * Tests the indexing throttle and search results with multilingual nodes.
  */
 function testMultilingualSearch()
 {
     // Index only 2 nodes per cron run. We cannot do this setting in the UI,
     // because it doesn't go this low.
     $this->config('search.settings')->set('index.cron_limit', 2)->save();
     // Get a new search plugin, to make sure it has this setting.
     $this->plugin = $this->container->get('plugin.manager.search')->createInstance('node_search');
     // Update the index. This does the initial processing.
     $this->plugin->updateIndex();
     // Run the shutdown function. Testing is a unique case where indexing
     // and searching has to happen in the same request, so running the shutdown
     // function manually is needed to finish the indexing process.
     search_update_totals();
     $this->assertIndexCounts(6, 8, 'after updating partially');
     $this->assertDatabaseCounts(2, 0, 'after updating partially');
     // Now index the rest of the nodes.
     // Make sure index throttle is high enough, via the UI.
     $this->drupalPostForm('admin/config/search/pages', array('cron_limit' => 20), t('Save configuration'));
     $this->assertEqual(20, $this->config('search.settings')->get('index.cron_limit', 100), 'Config setting was saved correctly');
     // Get a new search plugin, to make sure it has this setting.
     $this->plugin = $this->container->get('plugin.manager.search')->createInstance('node_search');
     $this->plugin->updateIndex();
     search_update_totals();
     $this->assertIndexCounts(0, 8, 'after updating fully');
     $this->assertDatabaseCounts(8, 0, 'after updating fully');
     // Click the reindex button on the admin page, verify counts, and reindex.
     $this->drupalPostForm('admin/config/search/pages', array(), t('Re-index site'));
     $this->drupalPostForm(NULL, array(), t('Re-index site'));
     $this->assertIndexCounts(8, 8, 'after reindex');
     $this->assertDatabaseCounts(8, 0, 'after reindex');
     $this->plugin->updateIndex();
     search_update_totals();
     // Test search results.
     // This should find two results for the second and third node.
     $this->plugin->setSearch('English OR Hungarian', array(), array());
     $search_result = $this->plugin->execute();
     $this->assertEqual(count($search_result), 2, 'Found two results.');
     // Nodes are saved directly after each other and have the same created time
     // so testing for the order is not possible.
     $results = array($search_result[0]['title'], $search_result[1]['title']);
     $this->assertTrue(in_array('Third node this is the Hungarian title', $results), 'The search finds the correct Hungarian title.');
     $this->assertTrue(in_array('Second node this is the English title', $results), 'The search finds the correct English title.');
     // Now filter for Hungarian results only.
     $this->plugin->setSearch('English OR Hungarian', array('f' => array('language:hu')), array());
     $search_result = $this->plugin->execute();
     $this->assertEqual(count($search_result), 1, 'The search found only one result');
     $this->assertEqual($search_result[0]['title'], 'Third node this is the Hungarian title', 'The search finds the correct Hungarian title.');
     // Test for search with common key word across multiple languages.
     $this->plugin->setSearch('node', array(), array());
     $search_result = $this->plugin->execute();
     $this->assertEqual(count($search_result), 6, 'The search found total six results');
     // Test with language filters and common key word.
     $this->plugin->setSearch('node', array('f' => array('language:hu')), array());
     $search_result = $this->plugin->execute();
     $this->assertEqual(count($search_result), 2, 'The search found 2 results');
     // Test to check for the language of result items.
     foreach ($search_result as $result) {
         $this->assertEqual($result['langcode'], 'hu', 'The search found the correct Hungarian result');
     }
     // Mark one of the nodes for reindexing, using the API function, and
     // verify indexing status.
     search_mark_for_reindex('node_search', $this->searchableNodes[0]->id());
     $this->assertIndexCounts(1, 8, 'after marking one node to reindex via API function');
     // Update the index and verify the totals again.
     $this->plugin = $this->container->get('plugin.manager.search')->createInstance('node_search');
     $this->plugin->updateIndex();
     search_update_totals();
     $this->assertIndexCounts(0, 8, 'after indexing again');
     // Mark one node for reindexing by saving it, and verify indexing status.
     $this->searchableNodes[1]->save();
     $this->assertIndexCounts(1, 8, 'after marking one node to reindex via save');
     // The request time is always the same throughout test runs. Update the
     // request time to a previous time, to simulate it having been marked
     // previously.
     $current = REQUEST_TIME;
     $old = $current - 10;
     db_update('search_dataset')->fields(array('reindex' => $old))->condition('reindex', $current, '>=')->execute();
     // Save the node again. Verify that the request time on it is not updated.
     $this->searchableNodes[1]->save();
     $result = db_select('search_dataset', 'd')->fields('d', array('reindex'))->condition('type', 'node_search')->condition('sid', $this->searchableNodes[1]->id())->execute()->fetchField();
     $this->assertEqual($result, $old, 'Reindex time was not updated if node was already marked');
     // Add a bogus entry to the search index table using a different search
     // type. This will not appear in the index status, because it is not
     // managed by a plugin.
     search_index('foo', $this->searchableNodes[0]->id(), 'en', 'some text');
     $this->assertIndexCounts(1, 8, 'after adding a different index item');
     // Mark just this "foo" index for reindexing.
     search_mark_for_reindex('foo');
     $this->assertIndexCounts(1, 8, 'after reindexing the other search type');
     // Mark everything for reindexing.
     search_mark_for_reindex();
     $this->assertIndexCounts(8, 8, 'after reindexing everything');
     // Clear one item from the index, but with wrong language.
     $this->assertDatabaseCounts(8, 1, 'before clear');
     search_index_clear('node_search', $this->searchableNodes[0]->id(), 'hu');
     $this->assertDatabaseCounts(8, 1, 'after clear with wrong language');
     // Clear using correct language.
     search_index_clear('node_search', $this->searchableNodes[0]->id(), 'en');
     $this->assertDatabaseCounts(7, 1, 'after clear with right language');
     // Don't specify language.
     search_index_clear('node_search', $this->searchableNodes[1]->id());
     $this->assertDatabaseCounts(6, 1, 'unspecified language clear');
     // Clear everything in 'foo'.
     search_index_clear('foo');
     $this->assertDatabaseCounts(6, 0, 'other index clear');
     // Clear everything.
     search_index_clear();
     $this->assertDatabaseCounts(0, 0, 'complete clear');
 }
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state)
 {
     parent::submitForm($form, $form_state);
     $search_settings = $this->config('search.settings');
     // If these settings change, the default index needs to be rebuilt.
     if ($search_settings->get('index.minimum_word_size') != $form_state->getValue('minimum_word_size') || $search_settings->get('index.overlap_cjk') != $form_state->getValue('overlap_cjk')) {
         $search_settings->set('index.minimum_word_size', $form_state->getValue('minimum_word_size'));
         $search_settings->set('index.overlap_cjk', $form_state->getValue('overlap_cjk'));
         // Specifically mark items in the default index for reindexing, since
         // these settings are used in the search_index() function.
         drupal_set_message($this->t('The default search index will be rebuilt.'));
         search_mark_for_reindex();
     }
     $search_settings->set('index.cron_limit', $form_state->getValue('cron_limit'))->set('logging', $form_state->getValue('logging'))->save();
     drupal_set_message($this->t('The configuration options have been saved.'));
 }
 /**
  * {@inheritdoc}
  */
 public function markForReindex() {
   search_mark_for_reindex($this->getPluginId());
 }