graphql_compose-1.0.0-beta20/src/Plugin/GraphQLCompose/FieldType/DateTimeItem.php

src/Plugin/GraphQLCompose/FieldType/DateTimeItem.php
<?php

declare(strict_types=1);

namespace Drupal\graphql_compose\Plugin\GraphQLCompose\FieldType;

use Drupal\graphql_compose\Attribute\FieldType;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemInterface;
use Drupal\graphql\GraphQL\Execution\FieldContext;
use Drupal\graphql_compose\Plugin\GraphQL\DataProducer\FieldProducerItemInterface;
use Drupal\graphql_compose\Plugin\GraphQL\DataProducer\FieldProducerTrait;
use Drupal\graphql_compose\Plugin\GraphQLCompose\GraphQLComposeFieldTypeBase;

/**
 * {@inheritdoc}
 */
#[FieldType(
  id: "datetime",
  type_sdl: "DateTime",
)]
class DateTimeItem extends GraphQLComposeFieldTypeBase implements FieldProducerItemInterface {

  use FieldProducerTrait;

  /**
   * {@inheritdoc}
   */
  public function resolveFieldItem(FieldItemInterface $item, FieldContext $context) {
    $value = $item->date ?? $item->value ?? 'now';
    $value = $this->toDrupalDateTime($value);

    return $value ? $this->toDateTimeType($value) : NULL;
  }

  /**
   * Convert a mixed value to a DrupalDateTime object.
   *
   * @param mixed $value
   *   The value to convert.
   *
   * @return \Drupal\Core\Datetime\DrupalDateTime|null
   *   The converted DrupalDateTime object or NULL if conversion fails.
   */
  protected function toDrupalDateTime(mixed $value): ?DrupalDateTime {
    switch (TRUE) {
      case $value instanceof DrupalDateTime:
        return $value;

      case $value instanceof \DateTime:
        return DrupalDateTime::createFromDateTime($value);

      case is_numeric($value):
        return DrupalDateTime::createFromTimestamp($value, new \DateTimeZone('UTC'));

      case is_string($value):
        return new DrupalDateTime($value, new \DateTimeZone('UTC'));

      default:
        return NULL;
    }
  }

  /**
   * Convert a DrupalDateTime object to a date time type.
   *
   * @param \Drupal\Core\Datetime\DrupalDateTime $value
   *   The DrupalDateTime object to convert.
   *
   * @return array
   *   The converted date time type as GraphQL expects.
   */
  protected function toDateTimeType(DrupalDateTime $value): array {
    return [
      'timestamp' => $value->getTimestamp(),
      'timezone' => $value->getTimezone()->getName(),
      'offset' => $value->format('P'),
      'time' => $value->format(\DateTime::RFC3339),
    ];
  }

}

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

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