|
@@ -0,0 +1,78 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace Drupal\materio_sapi\Plugin\search_api\processor;
|
|
|
+
|
|
|
+use Drupal\Core\Entity\EntityPublishedInterface;
|
|
|
+use Drupal\search_api\IndexInterface;
|
|
|
+use Drupal\search_api\Processor\ProcessorPluginBase;
|
|
|
+use Drupal\user\UserInterface;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Excludes unused terms from indexes.
|
|
|
+ *
|
|
|
+ * @SearchApiProcessor(
|
|
|
+ * id = "term_used",
|
|
|
+ * label = @Translation("Term used"),
|
|
|
+ * description = @Translation("Exclude unused taxonomy terms from being indexed."),
|
|
|
+ * stages = {
|
|
|
+ * "alter_items" = 0,
|
|
|
+ * },
|
|
|
+ * )
|
|
|
+ */
|
|
|
+class TermUsed extends ProcessorPluginBase {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public static function supportsIndex(IndexInterface $index) {
|
|
|
+ $interface = EntityPublishedInterface::class;
|
|
|
+ foreach ($index->getDatasources() as $datasource) {
|
|
|
+ $entity_type_id = $datasource->getEntityTypeId();
|
|
|
+ if (!$entity_type_id) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // We support users and any entities that implement
|
|
|
+ // \Drupal\Core\Entity\EntityPublishedInterface.
|
|
|
+ if ($entity_type_id === 'taxonomy_term') {
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ // $entity_type = \Drupal::entityTypeManager()
|
|
|
+ // ->getDefinition($entity_type_id);
|
|
|
+ // if ($entity_type && $entity_type->entityClassImplements($interface)) {
|
|
|
+ // return TRUE;
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public function alterIndexedItems(array &$items) {
|
|
|
+ // Annoyingly, this doc comment is needed for PHPStorm. See
|
|
|
+ // http://youtrack.jetbrains.com/issue/WI-23586
|
|
|
+ /** @var \Drupal\search_api\Item\ItemInterface $item */
|
|
|
+ foreach ($items as $item_id => $item) {
|
|
|
+ $term = $item->getOriginalObject()->getValue();
|
|
|
+ $enabled = TRUE;
|
|
|
+ // $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
|
|
|
+ // $count_query = $entity_storage->getQuery()
|
|
|
+ // ->condition('type', 'materiau')
|
|
|
+ // ->accessCheck(TRUE)
|
|
|
+ // ->condition('status', '1')
|
|
|
+ // ->count();
|
|
|
+ //
|
|
|
+ // $this->count = $this->count_query->execute();
|
|
|
+ $query = \Drupal::database()->select('taxonomy_index', 'ti');
|
|
|
+ $query->fields('ti', array('nid'));
|
|
|
+ $query->condition('ti.tid', $term->id());
|
|
|
+ $query->distinct(TRUE);
|
|
|
+ $result = $query->execute();
|
|
|
+ $nodeIds = $result->fetchCol();
|
|
|
+ if (!$nodeIds) {
|
|
|
+ unset($items[$item_id]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|