search_api-8.x-1.15/tests/search_api_test/src/Plugin/search_api/backend/TestBackend.php

tests/search_api_test/src/Plugin/search_api/backend/TestBackend.php
<?php

namespace Drupal\search_api_test\Plugin\search_api\backend;

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\search_api\Backend\BackendPluginBase;
use Drupal\search_api\IndexInterface;
use Drupal\search_api\Plugin\PluginFormTrait;
use Drupal\search_api\Query\QueryInterface;
use Drupal\search_api\Utility\Utility;
use Drupal\search_api_test\TestPluginTrait;

/**
 * Provides a dummy backend for testing purposes.
 *
 * @SearchApiBackend(
 *   id = "search_api_test",
 *   label = @Translation("Test backend"),
 *   description = @Translation("Dummy backend implementation")
 * )
 */
class TestBackend extends BackendPluginBase implements PluginFormInterface {

  use PluginFormTrait;
  use TestPluginTrait {
    checkError as traitCheckError;
  }

  /**
   * {@inheritdoc}
   */
  public function postInsert() {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this);
      return;
    }
    $this->checkError(__FUNCTION__);
  }

  /**
   * {@inheritdoc}
   */
  public function preUpdate() {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this);
      return;
    }
    $this->checkError(__FUNCTION__);
  }

  /**
   * {@inheritdoc}
   */
  public function postUpdate() {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      return call_user_func($override, $this);
    }
    $this->checkError(__FUNCTION__);
    return $this->getReturnValue(__FUNCTION__, FALSE);
  }

  /**
   * {@inheritdoc}
   */
  public function viewSettings() {
    return [
      [
        'label' => 'Dummy Info',
        'info' => 'Dummy Value',
        'status' => 'error',
      ],
      [
        'label' => 'Dummy Info 2',
        'info' => 'Dummy Value 2',
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getSupportedFeatures() {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      return call_user_func($override, $this);
    }
    return ['search_api_mlt'];
  }

  /**
   * {@inheritdoc}
   */
  public function supportsDataType($type) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      return call_user_func($override, $this, $type);
    }
    return in_array($type, ['search_api_test', 'search_api_test_altering']);
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return ['test' => ''];
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form['test'] = [
      '#type' => 'textfield',
      '#title' => 'Test',
      '#default_value' => $this->configuration['test'],
    ];
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function indexItems(IndexInterface $index, array $items) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      return call_user_func($override, $this, $index, $items);
    }
    $this->checkError(__FUNCTION__);

    $state = \Drupal::state();
    $key = 'search_api_test.backend.indexed.' . $index->id();
    $indexed_values = $state->get($key, []);
    $skip = $state->get('search_api_test.backend.indexItems.skip', []);
    $skip = array_flip($skip);
    /** @var \Drupal\search_api\Item\ItemInterface $item */
    foreach ($items as $id => $item) {
      if (isset($skip[$id])) {
        unset($items[$id]);
        continue;
      }
      $indexed_values[$id] = [];
      foreach ($item->getFields() as $field_id => $field) {
        $indexed_values[$id][$field_id] = $field->getValues();
      }
    }
    $state->set($key, $indexed_values);

    return array_keys($items);
  }

  /**
   * {@inheritdoc}
   */
  public function addIndex(IndexInterface $index) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this, $index);
      return;
    }
    $this->checkError(__FUNCTION__);
  }

  /**
   * {@inheritdoc}
   */
  public function updateIndex(IndexInterface $index) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this, $index);
      return;
    }
    $this->checkError(__FUNCTION__);
    $index->reindex();
  }

  /**
   * {@inheritdoc}
   */
  public function removeIndex($index) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this, $index);
      return;
    }
    $this->checkError(__FUNCTION__);
  }

  /**
   * {@inheritdoc}
   */
  public function deleteItems(IndexInterface $index, array $item_ids) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this, $index, $item_ids);
      return;
    }
    $this->checkError(__FUNCTION__);

    $state = \Drupal::state();
    $key = 'search_api_test.backend.indexed.' . $index->id();
    $indexed_values = $state->get($key, []);
    /** @var \Drupal\search_api\Item\ItemInterface $item */
    foreach ($item_ids as $item_id) {
      unset($indexed_values[$item_id]);
    }
    $state->set($key, $indexed_values);
  }

  /**
   * {@inheritdoc}
   */
  public function deleteAllIndexItems(IndexInterface $index, $datasource_id = NULL) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this, $index, $datasource_id);
      return;
    }
    $this->checkError(__FUNCTION__);

    $key = 'search_api_test.backend.indexed.' . $index->id();
    if (!$datasource_id) {
      \Drupal::state()->delete($key);
      return;
    }

    $indexed = \Drupal::state()->get($key, []);
    /** @var \Drupal\search_api\Item\ItemInterface $item */
    foreach (array_keys($indexed) as $item_id) {
      list($item_datasource_id) = Utility::splitCombinedId($item_id);
      if ($item_datasource_id == $datasource_id) {
        unset($indexed[$item_id]);
      }
    }
    \Drupal::state()->set($key, $indexed);
  }

  /**
   * {@inheritdoc}
   */
  public function search(QueryInterface $query) {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      call_user_func($override, $this, $query);
      return;
    }
    $this->checkError(__FUNCTION__);

    $results = $query->getResults();
    $result_items = [];
    $datasources = $query->getIndex()->getDatasources();
    /** @var \Drupal\search_api\Datasource\DatasourceInterface $datasource */
    $datasource = reset($datasources);
    $datasource_id = $datasource->getPluginId();
    $fields_helper = \Drupal::getContainer()->get('search_api.fields_helper');
    if ($query->getKeys() && $query->getKeys()[0] == 'test') {
      $item_id = Utility::createCombinedId($datasource_id, '1');
      $item = $fields_helper->createItem($query->getIndex(), $item_id, $datasource);
      $item->setScore(2);
      $item->setExcerpt('test');
      $result_items[$item_id] = $item;
    }
    elseif ($query->getOption('search_api_mlt')) {
      $item_id = Utility::createCombinedId($datasource_id, '2');
      $item = $fields_helper->createItem($query->getIndex(), $item_id, $datasource);
      $item->setScore(2);
      $item->setExcerpt('test test');
      $result_items[$item_id] = $item;
    }
    else {
      $item_id = Utility::createCombinedId($datasource_id, '1');
      $item = $fields_helper->createItem($query->getIndex(), $item_id, $datasource);
      $item->setScore(1);
      $result_items[$item_id] = $item;
      $item_id = Utility::createCombinedId($datasource_id, '2');
      $item = $fields_helper->createItem($query->getIndex(), $item_id, $datasource);
      $item->setScore(1);
      $result_items[$item_id] = $item;
    }
    $results->setResultItems($result_items);
    $results->setResultCount(count($result_items));
  }

  /**
   * {@inheritdoc}
   */
  public function isAvailable() {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      return call_user_func($override, $this);
    }
    return $this->getReturnValue(__FUNCTION__, TRUE);
  }

  /**
   * {@inheritdoc}
   */
  public function getDiscouragedProcessors() {
    if ($override = $this->getMethodOverride(__FUNCTION__)) {
      // Safeguard against "stupid" dummy methods used in tests, such as
      // \Drupal\search_api_test\MethodOverrides::overrideTestBackendMethod().
      $ret = call_user_func($override, $this);
      return is_array($ret) ? $ret : [];
    }
    return $this->getReturnValue(__FUNCTION__, []);
  }

  /**
   * {@inheritdoc}
   */
  public function calculateDependencies() {
    return !empty($this->configuration['dependencies']) ? $this->configuration['dependencies'] : [];
  }

  /**
   * {@inheritdoc}
   */
  public function onDependencyRemoval(array $dependencies) {
    $remove = $this->getReturnValue(__FUNCTION__, FALSE);
    if ($remove) {
      unset($this->configuration['dependencies']);
    }
    return $remove;
  }

  /**
   * {@inheritdoc}
   */
  protected function checkError($method) {
    $this->traitCheckError($method);
    $this->logMethodCall($method);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc