Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / file / src / ComputedFileUrl.php
diff --git a/web/core/modules/file/src/ComputedFileUrl.php b/web/core/modules/file/src/ComputedFileUrl.php
new file mode 100644 (file)
index 0000000..2eb012e
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\file;
+
+use Drupal\Core\TypedData\TypedData;
+
+/**
+ * Computed file URL property class.
+ */
+class ComputedFileUrl extends TypedData {
+
+  /**
+   * Computed root-relative file URL.
+   *
+   * @var string
+   */
+  protected $url = NULL;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getValue() {
+    if ($this->url !== NULL) {
+      return $this->url;
+    }
+
+    assert($this->getParent()->getEntity() instanceof FileInterface);
+
+    $uri = $this->getParent()->getEntity()->getFileUri();
+    $this->url = file_url_transform_relative(file_create_url($uri));
+
+    return $this->url;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setValue($value, $notify = TRUE) {
+    $this->url = $value;
+
+    // Notify the parent of any changes.
+    if ($notify && isset($this->parent)) {
+      $this->parent->onChange($this->name);
+    }
+  }
+
+}