dcat-8.x-1.x-dev/dcat_import/src/Plugin/migrate/source/VcardDcatFeedSource.php

dcat_import/src/Plugin/migrate/source/VcardDcatFeedSource.php
<?php

namespace Drupal\dcat_import\Plugin\migrate\source;

use EasyRdf_Resource;
use EasyRdf_Graph;

/**
 * Agent feed source.
 *
 * @MigrateSource(
 *   id = "dcat.vcard"
 * )
 */
class VcardDcatFeedSource extends DcatFeedSource {

  /**
   * Not in use.
   *
   * @see getDcatData()
   */
  public function getDcatType() {
    return '';
  }

  /**
   * {@inheritdoc}
   */
  public function getDcatData(EasyRdf_Graph $graph) {
    $vcards = array();
    $datasets = $graph->allOfType('dcat:Dataset');

    /** @var EasyRdf_Resource $dataset */
    foreach ($datasets as $dataset) {
      $vcards = array_merge($vcards, $dataset->allResources('dcat:contactPoint'));
    }

    // Remove duplicates.
    $uris = array();
    /** @var EasyRdf_Resource $vcard */
    foreach ($vcards as $key => $vcard) {
      $uri = $vcard->getUri();
      if (isset($uris[$uri])) {
        unset($vcards[$key]);
      }
      else {
        $uris[$uri] = $uri;
      }
    }

    return $vcards;
  }

  /**
   * {@inheritdoc}
   */
  public function fields() {
    return array(
      'uri' => t('URI / ID'),
      'name' => t('Name'),
      'email' => t('Email'),
      'telephone' => t('Telephone'),
      'country' => t('Country'),
      'locality' => t('Locality'),
      'postal_code' => t('Postal code'),
      'region' => t('Region'),
      'street_address' => t('Street address'),
      'nickname' => t('Nickname'),
      'type' => t('Type'),
    );
  }

  /**
   * Resource type to vcard bundle mapping.
   *
   * @return array
   *   Bundle mapping.
   */
  private static function bundleMapping() {
    return [
      'vcard:Organization' => 'organization',
      'vcard:Individual' => 'individual',
      'vcard:Location' => 'location',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function convertResource(EasyRdf_Resource $resource) {
    if (isset(self::bundleMapping()[$resource->type()])) {
      $bundle = self::bundleMapping()[$resource->type()];
    }
    else {
      // Default to organization;
      $bundle = 'organization';
    }

    return parent::convertResource($resource) + [
      'uri' => $resource->getUri(),
      'type' => $bundle,
      'name' => $this->getValue($resource, 'vcard:fn'),
      'email' => $this->getEmailValue($resource, 'vcard:hasEmail'),
      'telephone' => $this->getValue($resource, 'vcard:hasTelephone'),
      'country' => $this->getValue($resource, 'vcard:country-name'),
      'locality' => $this->getValue($resource, 'vcard:locality'),
      'postal_code' => $this->getValue($resource, 'vcard:postal-code'),
      'region' => $this->getValue($resource, 'vcard:region'),
      'street_address' => $this->getValue($resource, 'vcard:street-address'),
      'nickname' => $this->getValue($resource, 'vcard:hasNickname'),
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getIds() {
    $ids['uri']['type'] = 'string';
    return $ids;
  }

}

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

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