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); } }