/** * {@inheritdoc} */ public function indexClear() { // All NodeSearch pages share a common search index "type" equal to // the plugin ID. search_index_clear($this->getPluginId()); }
/** * {@inheritdoc} */ public static function preDelete(EntityStorageInterface $storage, array $entities) { parent::preDelete($storage, $entities); // Ensure that all nodes deleted are removed from the search index. if (\Drupal::moduleHandler()->moduleExists('search')) { foreach ($entities as $entity) { search_index_clear('node_search', $entity->nid->value); } } }
/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $fid = $this->id; $pid = db_query("SELECT pid FROM {photos_image} WHERE fid = :fid", array(':fid' => $fid))->fetchField(); // Get album type. $type = $form_state->getValue('type'); if ($type <> 'sub_album') { // Remove from search index. if (\Drupal::moduleHandler()->moduleExists('search')) { search_index_clear('photos', $fid); } // Delete image. $v = photos_file_del($fid, 0, 1); // Update album count. if (isset($_GET['pid']) && intval($_GET['pid']) == $_GET['pid']) photos_set_count('node_album', $_GET['pid']); if (isset($_GET['uid']) && intval($_GET['uid']) == $_GET['uid']) photos_set_count('user_image', $_GET['uid']); } else { // Remove from sub-album. $v = db_delete('photos_node') ->condition('fid', $fid) ->execute(); // Update sub-album count. if (isset($_GET['nid']) && intval($_GET['nid']) == $_GET['nid']) photos_set_count('node_node', $_GET['nid']); } if ($v) { drupal_set_message(t('Image deleted.')); // Invalidate cache tags. Cache::invalidateTags(array('node:' . $pid, 'photos:album:' . $pid, 'photos:image:' . $fid)); // @todo redirect to album or sub-album. $url = Url::fromUri('base:photos/album/' . $pid); $form_state->setRedirectUrl($url); } else { drupal_set_message(t('Delete failed.')); // Redirect to cancel URL. $form_state->setRedirectUrl($this->getCancelUrl()); } }
/** * 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 indexClear() { search_index_clear($this->getPluginId()); }