Exemple #1
0
 /**
  * {@inheritdoc}
  */
 public function indexClear()
 {
     // All NodeSearch pages share a common search index "type" equal to
     // the plugin ID.
     search_index_clear($this->getPluginId());
 }
Exemple #2
0
 /**
  * {@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());
 }