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

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

declare(strict_types=1);

namespace Drupal\graphql_compose\Plugin\GraphQLCompose\FieldType;

use Drupal\graphql_compose\Attribute\FieldType;
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;

/**
 * {@inheritdoc}
 */
#[FieldType(
  id: "smartdate",
  type_sdl: "SmartDate",
)]
class SmartDateItem extends DateTimeItem implements FieldProducerItemInterface {

  use FieldProducerTrait;

  /**
   * {@inheritdoc}
   */
  public function resolveFieldItem(FieldItemInterface $item, FieldContext $context) {

    $result = [
      'start' => $item->start_time ? $this->toDateTimeType($item->start_time) : NULL,
      'end' => $item->end_time ? $this->toDateTimeType($item->end_time) : NULL,
      'duration' => is_null($item->duration) ? NULL : (float) $item->duration,
      'timezone' => $item->timezone ?: NULL,
    ];

    if (!$this->moduleHandler->moduleExists('smart_date_recur')) {
      return $result;
    }

    $result['recurrence'] = [];

    if ($item->rrule) {
      /** @var \Drupal\smart_date_recur\Entity\SmartDateRule $rrule */
      $rrule = $this->entityTypeManager
        ->getStorage('smart_date_rule')
        ->load($item->rrule);

      if ($rrule) {
        foreach ($rrule->getRuleInstances() as $instance) {
          $start_date = $this->toDrupalDateTime($instance['value'] ?? NULL);
          $end_date = $this->toDrupalDateTime($instance['end_value'] ?? NULL);

          $result['recurrence'][] = [
            'start' => $start_date ? $this->toDateTimeType($start_date) : NULL,
            'end' => $end_date ? $this->toDateTimeType($end_date) : NULL,
          ];
        }
      }
    }

    return $result;
  }

}

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

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