You are here

class HeartbeatAutocompleteMatcher in Heartbeat 8

Hierarchy

Expanded class hierarchy of HeartbeatAutocompleteMatcher

1 file declares its use of HeartbeatAutocompleteMatcher
HeartbeatAutocompleteController.php in src/Controller/HeartbeatAutocompleteController.php
1 string reference to 'HeartbeatAutocompleteMatcher'
heartbeat.services.yml in ./heartbeat.services.yml
heartbeat.services.yml
1 service uses HeartbeatAutocompleteMatcher
heartbeat_autocomplete.autocomplete_matcher in ./heartbeat.services.yml
Drupal\heartbeat\HeartbeatAutocompleteMatcher

File

src/HeartbeatAutocompleteMatcher.php, line 11

Namespace

Drupal\heartbeat
View source
class HeartbeatAutocompleteMatcher extends EntityAutocompleteMatcher {
  private $entityTypeManager;

  /**
   * Gets matched labels based on a given search string.
   */
  public function getMatches($target_type, $selection_handler, $selection_settings, $string = '') {
    if ($target_type !== 'user') {
      return parent::getMatches($target_type, $selection_handler, $selection_settings, $string);
    }
    $matches = [];
    $friendData = \json_decode(\Drupal::config('heartbeat_friendship.settings')
      ->get('data'));
    $friendUids = [];
    foreach ($friendData as $data) {
      $friendUids[] = $data->uid;
      $friendUids[] = $data->uid_target;
    }
    $options = [
      'target_type' => $target_type,
      'handler' => $selection_handler,
      'handler_settings' => $selection_settings,
    ];
    $handler = $this->selectionManager
      ->getInstance($options);
    if (isset($string)) {

      // Get an array of matching entities.
      $match_operator = !empty($selection_settings['match_operator']) ? $selection_settings['match_operator'] : 'CONTAINS';
      $entity_labels = $handler
        ->getReferenceableEntities($string, $match_operator, 10);

      // Loop through the entities and convert them into autocomplete output.
      foreach ($entity_labels as $values) {
        foreach ($values as $entity_id => $label) {
          if (in_array($entity_id, $friendUids)) {
            $entity = \Drupal::entityTypeManager()
              ->getStorage($target_type)
              ->load($entity_id);
            $entity = \Drupal::entityManager()
              ->getTranslationFromContext($entity);
            $type = !empty($entity->type->entity) ? $entity->type->entity
              ->label() : $entity
              ->bundle();
            $status = '';
            if ($entity
              ->getEntityType()
              ->id() == 'node') {
              $status = $entity
                ->isPublished() ? ", Published" : ", Unpublished";
            }
            $key = $label . ' (' . $entity_id . ')';

            // Strip things like starting/trailing white spaces, line breaks and tags.
            $key = preg_replace('/\\s\\s+/', ' ', str_replace("\n", '', trim(Html::decodeEntities(strip_tags($key)))));

            // Names containing commas or quotes must be wrapped in quotes.
            $key = Tags::encode($key);
            if ($entity instanceof UserInterface) {
              $pic = $entity
                ->get('user_picture')
                ->getValue();
              if (!empty($pic)) {
                $pic = File::load($pic[0]['target_id']);
                if ($pic !== null) {
                  $style = \Drupal::entityTypeManager()
                    ->getStorage('image_style')
                    ->load('thumbnail');
                  $rendered = '<div class="heartbeat-autocomplete-image"><img src="' . $style
                    ->buildUrl($pic
                    ->getFileUri()) . '" /></div>';
                }
              }
            }
            $label = '<a href="/user/' . $entity
              ->id() . '"><div class="heartbeat-autocomplete-user"> ' . $label . ' (' . $entity_id . ') [' . $type . $status . ']</div>' . $rendered . '</a>';
            $matches[] = [
              'value' => $key,
              'label' => $label,
            ];
          }
        }
      }
    }
    return $matches;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
EntityAutocompleteMatcher::$selectionManager protected property The entity reference selection handler plugin manager.
EntityAutocompleteMatcher::__construct public function Constructs a EntityAutocompleteMatcher object.
HeartbeatAutocompleteMatcher::$entityTypeManager private property
HeartbeatAutocompleteMatcher::getMatches public function Gets matched labels based on a given search string. Overrides EntityAutocompleteMatcher::getMatches