-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathDocumentMediaValueExtractor.php
More file actions
116 lines (97 loc) · 3.26 KB
/
DocumentMediaValueExtractor.php
File metadata and controls
116 lines (97 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
declare(strict_types=1);
namespace Drupal\oe_theme;
use Drupal\media\MediaInterface;
use Drupal\oe_theme\ValueObject\FileValueObject;
/**
* Extracts a FileValueObject from a document media.
*/
class DocumentMediaValueExtractor {
/**
* Determines and returns a correct FileValueObject from a Document media.
*
* @param \Drupal\media\MediaInterface $media
* The document media.
*
* @return \Drupal\oe_theme\ValueObject\FileValueObject|null
* The value object or NULL if could not be determined.
*/
public static function getFileValue(MediaInterface $media): ?FileValueObject {
if ($media->bundle() !== 'document') {
throw new \InvalidArgumentException('The expected media type is Document.');
}
$file_type = $media->get('oe_media_file_type')->value;
if (!$file_type) {
return NULL;
}
if ($file_type === 'remote') {
return static::getFromRemoteFile($media);
}
if ($file_type === 'local') {
return static::getFromLocalFile($media);
}
if ($file_type === 'circabc') {
return static::getFromCircaBcReference($media);
}
return NULL;
}
/**
* Returns a local FileValueObject from a local Document media.
*
* @param \Drupal\media\MediaInterface $media
* The document media.
*
* @return \Drupal\oe_theme\ValueObject\FileValueObject|null
* The value object or NULL if could not be determined.
*/
protected static function getFromLocalFile(MediaInterface $media): ?FileValueObject {
if ($media->get('oe_media_file')->isEmpty()) {
return NULL;
}
$file_entity = $media->get('oe_media_file')->entity;
return FileValueObject::fromFileEntity($file_entity)
->setTitle($media->getName())
->setLanguageCode($media->language()->getId());
}
/**
* Returns a remote FileValueObject from a remote Document media.
*
* @param \Drupal\media\MediaInterface $media
* The document media.
*
* @return \Drupal\oe_theme\ValueObject\FileValueObject|null
* The value object or NULL if could not be determined.
*/
protected static function getFromRemoteFile(MediaInterface $media): ?FileValueObject {
if ($media->get('oe_media_remote_file')->isEmpty()) {
return NULL;
}
$file_link = $media->get('oe_media_remote_file')->first();
return FileValueObject::fromFileLink($file_link)
->setTitle($media->getName())
->setLanguageCode($media->language()->getId());
}
/**
* Returns a remote FileValueObject from a CircaBC Document media.
*
* @param \Drupal\media\MediaInterface $media
* The document media.
*
* @return \Drupal\oe_theme\ValueObject\FileValueObject|null
* The value object or NULL if could not be determined.
*/
protected static function getFromCircaBcReference(MediaInterface $media): ?FileValueObject {
if ($media->get('oe_media_circabc_reference')->isEmpty()) {
return NULL;
}
$reference = $media->get('oe_media_circabc_reference')->first();
return FileValueObject::fromArray([
'name' => $reference->filename,
'url' => $reference->getFileUrl()->toString(),
'mime' => $reference->mime,
'size' => $reference->size,
])
->setTitle($media->getName())
->setLanguageCode($media->language()->getId());
}
}