14
14
use SourceBroker \T3api \Service \FileReferenceService ;
15
15
use SourceBroker \T3api \Service \SerializerService ;
16
16
use SourceBroker \T3api \Service \UrlService ;
17
+ use TYPO3 \CMS \Core \LinkHandling \LinkService ;
17
18
use TYPO3 \CMS \Core \Resource \FileReference as Typo3FileReference ;
18
19
use TYPO3 \CMS \Core \Resource \Rendering \RendererRegistry ;
19
20
use TYPO3 \CMS \Core \Resource \ResourceFactory ;
25
26
use TYPO3 \CMS \Extbase \Error \Result ;
26
27
use TYPO3 \CMS \Extbase \Persistence \Generic \PersistenceManager ;
27
28
use TYPO3 \CMS \Extbase \Reflection \ObjectAccess ;
29
+ use TYPO3 \CMS \Frontend \ContentObject \ContentObjectRenderer ;
30
+ use TYPO3 \CMS \Frontend \Typolink \LinkFactory ;
28
31
29
32
/**
30
33
* Class FileReferenceHandler
@@ -38,37 +41,15 @@ class FileReferenceHandler extends AbstractHandler implements SerializeHandlerIn
38
41
*/
39
42
protected static $ supportedTypes = [self ::TYPE ];
40
43
41
- /**
42
- * @var ResourceFactory
43
- */
44
- protected $ resourceFactory ;
45
-
46
- /**
47
- * @var PersistenceManager
48
- */
49
- protected $ persistenceManager ;
50
-
51
- /**
52
- * @var SerializerService
53
- */
54
- protected $ serializerService ;
55
-
56
- /**
57
- * @var FileReferenceService
58
- */
59
- private $ fileReferenceService ;
60
-
61
44
public function __construct (
62
- ResourceFactory $ resourceFactory ,
63
- PersistenceManager $ persistenceManager ,
64
- SerializerService $ serializerService ,
65
- FileReferenceService $ fileReferenceService
66
- ) {
67
- $ this ->resourceFactory = $ resourceFactory ;
68
- $ this ->persistenceManager = $ persistenceManager ;
69
- $ this ->serializerService = $ serializerService ;
70
- $ this ->fileReferenceService = $ fileReferenceService ;
71
- }
45
+ public readonly ResourceFactory $ resourceFactory ,
46
+ public readonly PersistenceManager $ persistenceManager ,
47
+ public readonly SerializerService $ serializerService ,
48
+ public readonly FileReferenceService $ fileReferenceService ,
49
+ public readonly LinkFactory $ linkFactory ,
50
+ public readonly LinkService $ linkService ,
51
+ public readonly ContentObjectRenderer $ contentObjectRenderer
52
+ ) {}
72
53
73
54
/**
74
55
* @param SerializationVisitorInterface $visitor
@@ -85,43 +66,46 @@ public function serialize(
85
66
$ fileReference ,
86
67
array $ type ,
87
68
SerializationContext $ context
88
- ): array {
89
- /** @var Typo3FileReference $originalResource */
90
- $ originalResource = $ fileReference instanceof ExtbaseFileReference
91
- ? $ fileReference ->getOriginalResource ()
92
- : $ fileReference ;
93
- $ originalFile = $ originalResource ->getOriginalFile ();
94
-
95
- $ out = [
96
- 'uid ' => $ fileReference ->getUid (),
97
- 'url ' => $ this ->fileReferenceService ->getUrlFromResource ($ originalResource , $ context ),
98
- 'file ' => [
99
- 'uid ' => $ originalFile ->getUid (),
100
- 'name ' => $ originalFile ->getName (),
101
- 'mimeType ' => $ originalFile ->getMimeType (),
102
- 'size ' => $ originalFile ->getSize (),
103
- ],
104
- ];
105
-
106
- // TODO: move to some signal/slot
107
- if (preg_match ('#video/.*# ' , $ originalFile ->getMimeType ())) {
108
- $ fileRenderer = GeneralUtility::makeInstance (RendererRegistry::class)->getRenderer ($ originalFile );
109
- if ($ fileRenderer !== null && preg_match (
110
- '/src="([^"]+)"/ ' ,
111
- $ fileRenderer ->render ($ originalFile , 1 , 1 ),
112
- $ match
113
- )) {
114
- if ($ match [1 ] === '' ) {
115
- $ out ['urlEmbed ' ] = '' ;
116
- } else {
117
- $ out ['urlEmbed ' ] = UrlService::forceAbsoluteUrl (
118
- $ match [1 ],
119
- $ context ->getAttribute ('TYPO3_SITE_URL ' )
120
- );
69
+ ): ?array {
70
+ $ out = null ;
71
+ try {
72
+ /** @var Typo3FileReference $originalResource */
73
+ $ originalResource = $ fileReference instanceof ExtbaseFileReference
74
+ ? $ fileReference ->getOriginalResource ()
75
+ : $ fileReference ;
76
+ $ out ['url ' ] = $ this ->fileReferenceService ->getUrlFromResource ($ originalResource , $ context );
77
+ $ out ['uid ' ] = $ originalResource ->getUid ();
78
+
79
+ $ originalFile = $ originalResource ->getOriginalFile ();
80
+ $ out ['file ' ]['uid ' ] = $ originalFile ->getUid ();
81
+ $ out ['file ' ]['name ' ] = $ originalFile ->getName ();
82
+ $ out ['file ' ]['mimeType ' ] = $ originalFile ->getMimeType ();
83
+ $ out ['file ' ]['size ' ] = $ originalFile ->getSize ();
84
+
85
+ if (preg_match ('#video/.*# ' , $ originalFile ->getMimeType ())) {
86
+ $ fileRenderer = GeneralUtility::makeInstance (RendererRegistry::class)->getRenderer ($ originalFile );
87
+ if ($ fileRenderer !== null && preg_match (
88
+ '/src="([^"]+)"/ ' ,
89
+ $ fileRenderer ->render ($ originalFile , 1 , 1 ),
90
+ $ match
91
+ )) {
92
+ if ($ match [1 ] === '' ) {
93
+ $ out ['urlEmbed ' ] = '' ;
94
+ } else {
95
+ $ out ['urlEmbed ' ] = UrlService::forceAbsoluteUrl (
96
+ $ match [1 ],
97
+ $ context ->getAttribute ('TYPO3_SITE_URL ' )
98
+ );
99
+ }
121
100
}
122
101
}
123
- }
124
102
103
+ } catch (\Throwable $ e ) {
104
+ trigger_error (
105
+ $ e ->getMessage (),
106
+ E_USER_WARNING
107
+ );
108
+ }
125
109
return $ out ;
126
110
}
127
111
@@ -130,8 +114,8 @@ public function serialize(
130
114
* @param mixed $data
131
115
* @param array $type
132
116
* @param DeserializationContext $context
133
- * @throws ValidationException
134
117
* @return mixed|void
118
+ * @throws ValidationException
135
119
*/
136
120
public function deserialize (
137
121
DeserializationVisitorInterface $ visitor ,
@@ -181,8 +165,8 @@ public function deserialize(
181
165
* @param array $data
182
166
* @param string $type
183
167
* @param DeserializationContext $context
184
- * @throws ValidationException
185
168
* @return ExtbaseFileReference
169
+ * @throws ValidationException
186
170
*/
187
171
protected function createSysFileReference (
188
172
array $ data ,
0 commit comments