crm_core-8.x-3.x-dev/modules/crm_core_match/src/Plugin/crm_core_match/field/NameFieldHandler.php

modules/crm_core_match/src/Plugin/crm_core_match/field/NameFieldHandler.php
<?php

namespace Drupal\crm_core_match\Plugin\crm_core_match\field;

use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\crm_core_contact\ContactInterface;

/**
 * Class for evaluating name fields.
 *
 * @CrmCoreMatchFieldHandler (
 *   id = "name"
 * )
 */
class NameFieldHandler extends FieldHandlerBase {

  use StringTranslationTrait;

  /**
   * Configuration.
   *
   * @var array
   */
  protected $configuration = [
    'title' => [
      'score' => 3,
    ],
    'given' => [
      'score' => 10,
    ],
    'middle' => [
      'score' => 1,
    ],
    'family' => [
      'score' => 10,
    ],
    'generational' => [
      'score' => 1,
    ],
    'credentials' => [
      'score' => 1,
    ],
  ];

  /**
   * {@inheritdoc}
   */
  public function getPropertyNames() {
    return [
      'title',
      'given',
      'middle',
      'family',
      'generational',
      'credentials',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getOperators($property = 'value') {
    return [
      'CONTAINS' => $this->t('Contains'),
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function match(ContactInterface $contact, $property = 'family') {
    $field_name = $this->field->getName();
    $valid_parts = [];
    if ($contact->get($field_name)->{$property}) {
      $valid_parts[$property] = $contact->get($field_name)->{$property};
    }

    // Get the matches.
    $matches = [];
    foreach ($valid_parts as $property => $value) {
      $query = $this->entityTypeManager->getStorage('crm_core_individual')->getQuery();
      $query->condition('type', $contact->bundle());
      if ($contact->id()) {
        $query->condition('individual_id', $contact->id(), '<>');
      }
      $query->condition($field_name . '.' . $property, $value, 'CONTAINS');
      $ids = $query->accessCheck(FALSE)->execute();
      foreach ($ids as $id) {
        $matches[$id] = $this->getScore($property);
      }
    }

    arsort($matches);
    $result = [];
    foreach ($matches as $id => $score) {
      $result[$id] = [
        $this->field->getName() . '.' . $property => $score,
      ];
    }
    return $result;
  }

}

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

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