You are here

LinkIt.php in Entity Usage 8.2

File

src/Plugin/EntityUsage/Track/LinkIt.php
View source
<?php

namespace Drupal\entity_usage\Plugin\EntityUsage\Track;

use Drupal\Component\Utility\Html;

/**
 * Tracks usage of entities related in entity_reference fields.
 *
 * @EntityUsageTrack(
 *   id = "linkit",
 *   label = @Translation("LinkIt"),
 *   description = @Translation("Tracks relationships created with 'LinkIt' in formatted text fields."),
 *   field_types = {"text", "text_long", "text_with_summary"},
 * )
 */
class LinkIt extends TextFieldEmbedBase {

  /**
   * {@inheritdoc}
   */
  public function parseEntitiesFromText($text) {
    $dom = Html::load($text);
    $xpath = new \DOMXPath($dom);
    $entities = [];
    foreach ($xpath
      ->query('//a[@data-entity-type and @data-entity-uuid]') as $node) {

      // Note that this does not cover 100% of the situations. In the (unlikely
      // but possible) use case where the user embeds the same entity twice in
      // the same field, we are just recording 1 usage for this target entity,
      // when we should record 2. The alternative is to add a lot of complexity
      // to the update logic of our plugin, to deal with all possible
      // combinations in the update scenario.
      // @TODO Re-evaluate if this is worth the effort and overhead.
      $entities[$node
        ->getAttribute('data-entity-uuid')] = $node
        ->getAttribute('data-entity-type');
    }
    return $entities;
  }

}

Classes

Namesort descending Description
LinkIt Tracks usage of entities related in entity_reference fields.