Version 1
[yaffs-website] / web / core / lib / Drupal / Core / TypedData / Plugin / DataType / DurationIso8601.php
diff --git a/web/core/lib/Drupal/Core/TypedData/Plugin/DataType/DurationIso8601.php b/web/core/lib/Drupal/Core/TypedData/Plugin/DataType/DurationIso8601.php
new file mode 100644 (file)
index 0000000..8b3899a
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+namespace Drupal\Core\TypedData\Plugin\DataType;
+
+use Drupal\Core\TypedData\Type\DurationInterface;
+
+/**
+ * The duration ISO8601 data type.
+ *
+ * The plain value of this data type is a ISO8601 duration string.
+ *
+ * @DataType(
+ *   id = "duration_iso8601",
+ *   label = @Translation("Duration")
+ * )
+ */
+class DurationIso8601 extends StringData implements DurationInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDuration() {
+    if ($this->value) {
+      // @todo: Add support for negative intervals on top of the DateInterval
+      // constructor.
+      return new \DateInterval($this->value);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setDuration(\DateInterval $duration, $notify = TRUE) {
+    // Generate an ISO 8601 formatted string as supported by
+    // DateInterval::__construct() and setValue().
+    $this->value = $duration->format('%rP%yY%mM%dDT%hH%mM%sS');
+    // Notify the parent of any changes.
+    if ($notify && isset($this->parent)) {
+      $this->parent->onChange($this->name);
+    }
+  }
+
+}