Completed
Push — master ( 02a2d0...8117b3 )
by Fabien
54:58
created
ext_localconf.php 2 patches
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -3,39 +3,39 @@
 block discarded – undo
3 3
 
4 4
 call_user_func(function () {
5 5
 
6
-    $configuration = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
7
-        \TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class
8
-    )->get('media');
6
+	$configuration = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
7
+		\TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class
8
+	)->get('media');
9 9
 
10
-    $GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][1547054767] = [
11
-        'nodeName' => 'findUploader',
12
-        'priority' => 40,
13
-        'class' => \Fab\Media\Backend\TceForms::class,
14
-    ];
10
+	$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][1547054767] = [
11
+		'nodeName' => 'findUploader',
12
+		'priority' => 40,
13
+		'class' => \Fab\Media\Backend\TceForms::class,
14
+	];
15 15
 
16
-    $disableTitleMetadataExtractor = isset($configuration['disable_title_metadata_extractor']) ? $configuration['disable_title_metadata_extractor'] : FALSE;
17
-    if (!$disableTitleMetadataExtractor) {
16
+	$disableTitleMetadataExtractor = isset($configuration['disable_title_metadata_extractor']) ? $configuration['disable_title_metadata_extractor'] : FALSE;
17
+	if (!$disableTitleMetadataExtractor) {
18 18
 
19
-        // Register basic metadata extractor. Will feed the file with a "title" when indexing, e.g. upload, through scheduler
20
-        \TYPO3\CMS\Core\Resource\Index\ExtractorRegistry::getInstance()->registerExtractionService(\Fab\Media\Index\TitleMetadataExtractor::class );
21
-    }
19
+		// Register basic metadata extractor. Will feed the file with a "title" when indexing, e.g. upload, through scheduler
20
+		\TYPO3\CMS\Core\Resource\Index\ExtractorRegistry::getInstance()->registerExtractionService(\Fab\Media\Index\TitleMetadataExtractor::class );
21
+	}
22 22
 
23
-    // Hook for traditional file upload, trigger metadata indexing as well.
24
-    // Could be done at the Core level in the future...
25
-    $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_extfilefunc.php']['processData'][] = 'Fab\Media\Hook\FileUploadHook';
23
+	// Hook for traditional file upload, trigger metadata indexing as well.
24
+	// Could be done at the Core level in the future...
25
+	$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_extfilefunc.php']['processData'][] = 'Fab\Media\Hook\FileUploadHook';
26 26
 
27
-    if (TYPO3_MODE === 'BE') {
27
+	if (TYPO3_MODE === 'BE') {
28 28
 
29
-        // Special process to fill column "usage" which indicates the total number of file reference including soft references.
30
-        $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'Fab\Media\Hook\DataHandlerHook';
29
+		// Special process to fill column "usage" which indicates the total number of file reference including soft references.
30
+		$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'Fab\Media\Hook\DataHandlerHook';
31 31
 
32
-        $hasMediaFilePicker = isset($configuration['has_media_file_picker']) ? $configuration['has_media_file_picker'] : FALSE;
33
-        if ($hasMediaFilePicker) {
32
+		$hasMediaFilePicker = isset($configuration['has_media_file_picker']) ? $configuration['has_media_file_picker'] : FALSE;
33
+		if ($hasMediaFilePicker) {
34 34
 
35
-            // Override classes for the Object Manager.
36
-            $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\TYPO3\CMS\Backend\Form\FormResultCompiler::class] = array(
37
-                'className' => \Fab\Media\Override\Backend\Form\FormResultCompiler::class
38
-            );
39
-        }
40
-    }
35
+			// Override classes for the Object Manager.
36
+			$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\TYPO3\CMS\Backend\Form\FormResultCompiler::class] = array(
37
+				'className' => \Fab\Media\Override\Backend\Form\FormResultCompiler::class
38
+			);
39
+		}
40
+	}
41 41
 });
42 42
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 defined('TYPO3_MODE') or die();
3 3
 
4
-call_user_func(function () {
4
+call_user_func(function() {
5 5
 
6 6
     $configuration = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
7 7
         \TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
     if (!$disableTitleMetadataExtractor) {
18 18
 
19 19
         // Register basic metadata extractor. Will feed the file with a "title" when indexing, e.g. upload, through scheduler
20
-        \TYPO3\CMS\Core\Resource\Index\ExtractorRegistry::getInstance()->registerExtractionService(\Fab\Media\Index\TitleMetadataExtractor::class );
20
+        \TYPO3\CMS\Core\Resource\Index\ExtractorRegistry::getInstance()->registerExtractionService(\Fab\Media\Index\TitleMetadataExtractor::class);
21 21
     }
22 22
 
23 23
     // Hook for traditional file upload, trigger metadata indexing as well.
Please login to merge, or discard this patch.
ext_emconf.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -1,30 +1,30 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 $EM_CONF[$_EXTKEY] = [
4
-    'title' => 'Media management',
5
-    'description' => 'Media management system for TYPO3 CMS.',
6
-    'category' => 'module',
7
-    'author' => 'Fabien Udriot',
8
-    'author_email' => '[email protected]',
9
-    'state' => 'stable',
10
-    'version' => '5.2.0-dev',
11
-    'autoload' => [
12
-        'psr-4' => ['Fab\\Media\\' => 'Classes']
13
-    ],
14
-    'constraints' =>
15
-        [
16
-            'depends' =>
17
-                [
18
-                    'typo3' => '10.4.0-10.4.99',
19
-                    'vidi' => '4.0.0-0.0.0',
20
-                ],
21
-            'conflicts' =>
22
-                [
23
-                ],
24
-            'suggests' =>
25
-                [
26
-                    'metadata' => '',
27
-                    'filemetadata' => '',
28
-                ],
29
-        ]
4
+	'title' => 'Media management',
5
+	'description' => 'Media management system for TYPO3 CMS.',
6
+	'category' => 'module',
7
+	'author' => 'Fabien Udriot',
8
+	'author_email' => '[email protected]',
9
+	'state' => 'stable',
10
+	'version' => '5.2.0-dev',
11
+	'autoload' => [
12
+		'psr-4' => ['Fab\\Media\\' => 'Classes']
13
+	],
14
+	'constraints' =>
15
+		[
16
+			'depends' =>
17
+				[
18
+					'typo3' => '10.4.0-10.4.99',
19
+					'vidi' => '4.0.0-0.0.0',
20
+				],
21
+			'conflicts' =>
22
+				[
23
+				],
24
+			'suggests' =>
25
+				[
26
+					'metadata' => '',
27
+					'filemetadata' => '',
28
+				],
29
+		]
30 30
 ];
Please login to merge, or discard this patch.
Classes/Backend/TceForms.php 2 patches
Indentation   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -20,37 +20,37 @@
 block discarded – undo
20 20
 class TceForms extends AbstractFormElement
21 21
 {
22 22
 
23
-    /**
24
-     * @return array
25
-     */
26
-    public function render()
27
-    {
28
-        // Load StyleSheets in the Page Renderer
29
-        $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
30
-        $cssFile = ExtensionManagementUtility::extPath('media') . 'Resources/Public/StyleSheets/fineuploader.tce.css';
31
-        $pageRenderer->addCssFile($cssFile);
32
-
33
-        // language labels for JavaScript files
34
-        $pageRenderer->addInlineLanguageLabelFile(ExtensionManagementUtility::extPath('media') . 'Resources/Private/Language/locallang.xlf', 'media_file_upload');
35
-
36
-        // js files to be loaded
37
-        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('core') . 'Resources/Public/JavaScript/Contrib/jquery/jquery.min.js');
38
-        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media') . 'Resources/Public/JavaScript/Encoder.js');
39
-        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media') . 'Resources/Public/Libraries/Fineuploader/jquery.fineuploader-5.0.9.min.js');
40
-
41
-        $result = $this->initializeResultArray();
42
-
43
-        $fileMetadataRecord = $this->data['databaseRow'];
44
-
45
-        if ($fileMetadataRecord['file'] <= 0) {
46
-            throw new \Exception('I could not find a valid file identifier', 1392926871);
47
-        }
48
-
49
-        /** @var $fileUpload \Fab\Media\Form\FileUploadTceForms */
50
-        $fileUpload = GeneralUtility::makeInstance(\Fab\Media\Form\FileUploadTceForms::class);
51
-        $fileUpload->setValue($fileMetadataRecord['file'][0])->setPrefix(MediaModule::getParameterPrefix());
52
-        $result['html'] = $fileUpload->render();
53
-        return $result;
54
-    }
23
+	/**
24
+	 * @return array
25
+	 */
26
+	public function render()
27
+	{
28
+		// Load StyleSheets in the Page Renderer
29
+		$pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
30
+		$cssFile = ExtensionManagementUtility::extPath('media') . 'Resources/Public/StyleSheets/fineuploader.tce.css';
31
+		$pageRenderer->addCssFile($cssFile);
32
+
33
+		// language labels for JavaScript files
34
+		$pageRenderer->addInlineLanguageLabelFile(ExtensionManagementUtility::extPath('media') . 'Resources/Private/Language/locallang.xlf', 'media_file_upload');
35
+
36
+		// js files to be loaded
37
+		$pageRenderer->addJsFile(ExtensionManagementUtility::extPath('core') . 'Resources/Public/JavaScript/Contrib/jquery/jquery.min.js');
38
+		$pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media') . 'Resources/Public/JavaScript/Encoder.js');
39
+		$pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media') . 'Resources/Public/Libraries/Fineuploader/jquery.fineuploader-5.0.9.min.js');
40
+
41
+		$result = $this->initializeResultArray();
42
+
43
+		$fileMetadataRecord = $this->data['databaseRow'];
44
+
45
+		if ($fileMetadataRecord['file'] <= 0) {
46
+			throw new \Exception('I could not find a valid file identifier', 1392926871);
47
+		}
48
+
49
+		/** @var $fileUpload \Fab\Media\Form\FileUploadTceForms */
50
+		$fileUpload = GeneralUtility::makeInstance(\Fab\Media\Form\FileUploadTceForms::class);
51
+		$fileUpload->setValue($fileMetadataRecord['file'][0])->setPrefix(MediaModule::getParameterPrefix());
52
+		$result['html'] = $fileUpload->render();
53
+		return $result;
54
+	}
55 55
 
56 56
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -27,16 +27,16 @@
 block discarded – undo
27 27
     {
28 28
         // Load StyleSheets in the Page Renderer
29 29
         $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
30
-        $cssFile = ExtensionManagementUtility::extPath('media') . 'Resources/Public/StyleSheets/fineuploader.tce.css';
30
+        $cssFile = ExtensionManagementUtility::extPath('media').'Resources/Public/StyleSheets/fineuploader.tce.css';
31 31
         $pageRenderer->addCssFile($cssFile);
32 32
 
33 33
         // language labels for JavaScript files
34
-        $pageRenderer->addInlineLanguageLabelFile(ExtensionManagementUtility::extPath('media') . 'Resources/Private/Language/locallang.xlf', 'media_file_upload');
34
+        $pageRenderer->addInlineLanguageLabelFile(ExtensionManagementUtility::extPath('media').'Resources/Private/Language/locallang.xlf', 'media_file_upload');
35 35
 
36 36
         // js files to be loaded
37
-        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('core') . 'Resources/Public/JavaScript/Contrib/jquery/jquery.min.js');
38
-        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media') . 'Resources/Public/JavaScript/Encoder.js');
39
-        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media') . 'Resources/Public/Libraries/Fineuploader/jquery.fineuploader-5.0.9.min.js');
37
+        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('core').'Resources/Public/JavaScript/Contrib/jquery/jquery.min.js');
38
+        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media').'Resources/Public/JavaScript/Encoder.js');
39
+        $pageRenderer->addJsFile(ExtensionManagementUtility::extPath('media').'Resources/Public/Libraries/Fineuploader/jquery.fineuploader-5.0.9.min.js');
40 40
 
41 41
         $result = $this->initializeResultArray();
42 42
 
Please login to merge, or discard this patch.
Classes/Controller/AssetController.php 1 patch
Indentation   +309 added lines, -309 removed lines patch added patch discarded remove patch
@@ -42,314 +42,314 @@
 block discarded – undo
42 42
 class AssetController extends ActionController
43 43
 {
44 44
 
45
-    /**
46
-     * @var string
47
-     */
48
-    protected $dataType = 'sys_file';
49
-
50
-    /**
51
-     * @throws \Fab\Media\Exception\StorageNotOnlineException
52
-     * @throws \InvalidArgumentException
53
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException
54
-     */
55
-    public function initializeAction()
56
-    {
57
-        $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
58
-        $pageRenderer->addInlineLanguageLabelFile('EXT:media/Resources/Private/Language/locallang.xlf');
59
-
60
-        // Configure property mapping to retrieve the file object.
61
-        if ($this->arguments->hasArgument('file')) {
62
-
63
-            /** @var FileConverter $typeConverter */
64
-            $typeConverter = $this->objectManager->get(FileConverter::class);
65
-
66
-            $propertyMappingConfiguration = $this->arguments->getArgument('file')->getPropertyMappingConfiguration();
67
-            $propertyMappingConfiguration->setTypeConverter($typeConverter);
68
-        }
69
-    }
70
-
71
-    /**
72
-     * Force download of the file.
73
-     *
74
-     * @param File $file
75
-     * @param bool $forceDownload
76
-     * @return bool|string
77
-     * @throws \RuntimeException
78
-     */
79
-    public function downloadAction(File $file, $forceDownload = false)
80
-    {
81
-
82
-        if ($file->exists() && $file->getStorage()->isWithinFileMountBoundaries($file->getParentFolder())) {
83
-
84
-            // Emit signal before downloading the file.
85
-            $this->emitBeforeDownloadSignal($file);
86
-
87
-            // Read the file and dump it with the flag "forceDownload" set to true or false.
88
-            $file->getStorage()->dumpFileContents($file, $forceDownload);
89
-
90
-            $result = true;
91
-        } else {
92
-            $result = 'Access denied!';
93
-        }
94
-
95
-        return $result;
96
-    }
97
-
98
-    /**
99
-     * Handle file upload for a new file.
100
-     *
101
-     * @param string $combinedIdentifier
102
-     * @Extbase\Validate("\Fab\Media\Domain\Validator\StorageValidator", param="combinedIdentifier")
103
-     * @return string
104
-     */
105
-    public function createAction($combinedIdentifier)
106
-    {
107
-        /** @var UploadedFileInterface $uploadedFile */
108
-        $uploadedFile = $this->handleUpload();
109
-        if (!is_object($uploadedFile)) {
110
-            return htmlspecialchars(json_encode($uploadedFile), ENT_NOQUOTES);
111
-        }
112
-
113
-        // Get the target folder.
114
-        if ($this->getMediaModule()->hasFolderTree()) {
115
-            $targetFolder = $this->getMediaModule()->getFolderForCombinedIdentifier($combinedIdentifier);
116
-        } else {
117
-            $storage = ResourceFactory::getInstance()->getStorageObjectFromCombinedIdentifier($combinedIdentifier);
118
-            $targetFolder = $this->getMediaModule()->getTargetFolderForUploadedFile($uploadedFile, $storage);
119
-        }
120
-
121
-        try {
122
-            $conflictMode = DuplicationBehavior::RENAME;
123
-            $fileName = $uploadedFile->getName();
124
-            $file = $targetFolder->addFile($uploadedFile->getFileWithAbsolutePath(), $fileName, $conflictMode);
125
-
126
-            // Run the indexer for extracting metadata.
127
-            $this->getMediaIndexer($file->getStorage())
128
-                ->extractMetadata($file)
129
-                ->applyDefaultCategories($file);
130
-
131
-            $response = array(
132
-                'success' => true,
133
-                'uid' => $file->getUid(),
134
-                'name' => $file->getName(),
135
-                'thumbnail' => $this->getThumbnailService($file)->create(),
136
-            );
137
-        } catch (UploadException $e) {
138
-            $response = array('error' => 'The upload has failed, no uploaded file found!');
139
-        } catch (InsufficientUserPermissionsException $e) {
140
-            $response = array('error' => 'You are not allowed to upload files!');
141
-        } catch (UploadSizeException $e) {
142
-            $response = array('error' => vsprintf('The uploaded file "%s" exceeds the size-limit', array($uploadedFile->getName())));
143
-        } catch (InsufficientFolderWritePermissionsException $e) {
144
-            $response = array('error' => vsprintf('Destination path "%s" was not within your mount points!', array($targetFolder->getIdentifier())));
145
-        } catch (IllegalFileExtensionException $e) {
146
-            $response = array('error' => vsprintf('Extension of file name "%s" is not allowed in "%s"!', array($uploadedFile->getName(), $targetFolder->getIdentifier())));
147
-        } catch (ExistingTargetFileNameException $e) {
148
-            $response = array('error' => vsprintf('No unique filename available in "%s"!', array($targetFolder->getIdentifier())));
149
-        } catch (\RuntimeException $e) {
150
-            $response = array('error' => vsprintf('Uploaded file could not be moved! Write-permission problem in "%s"?', array($targetFolder->getIdentifier())));
151
-        }
152
-
153
-        // to pass data through iframe you will need to encode all html tags
154
-        header("Content-Type: text/plain");
155
-        return htmlspecialchars(json_encode($response), ENT_NOQUOTES);
156
-    }
157
-
158
-    /**
159
-     * Handle file upload for an existing file.
160
-     *
161
-     * @param File $file
162
-     * @return string
163
-     * @throws \InvalidArgumentException
164
-     * @throws \RuntimeException
165
-     */
166
-    public function updateAction(File $file)
167
-    {
168
-        $uploadedFile = $this->handleUpload();
169
-        if (!is_object($uploadedFile)) {
170
-            return htmlspecialchars(json_encode($uploadedFile), ENT_NOQUOTES);
171
-        }
172
-
173
-        /** @var $file File */
174
-        $targetFolder = $file->getStorage()->getFolder(dirname($file->getIdentifier()));
175
-
176
-        try {
177
-            $storage = $file->getStorage();
178
-            $storage->replaceFile($file, $uploadedFile->getFileWithAbsolutePath());
179
-
180
-            // Run the indexer for extracting metadata.
181
-            $this->getMediaIndexer($file->getStorage())
182
-                ->updateIndex($file)
183
-                ->extractMetadata($file);
184
-
185
-            // Clear cache on pages holding a reference to this file.
186
-            $this->getCacheService()->clearCache($file);
187
-
188
-            $response = array(
189
-                'success' => true,
190
-                'uid' => $file->getUid(),
191
-                'name' => $file->getName(),
192
-                'thumbnail' => $this->getThumbnailService($file)->create(),
193
-                'fileInfo' => $this->getMetadataViewHelper()->render($file),
194
-            );
195
-        } catch (UploadException $e) {
196
-            $response = array('error' => 'The upload has failed, no uploaded file found!');
197
-        } catch (InsufficientUserPermissionsException $e) {
198
-            $response = array('error' => 'You are not allowed to upload files!');
199
-        } catch (UploadSizeException $e) {
200
-            $response = array('error' => vsprintf('The uploaded file "%s" exceeds the size-limit', array($uploadedFile->getName())));
201
-        } catch (InsufficientFolderWritePermissionsException $e) {
202
-            $response = array('error' => vsprintf('Destination path "%s" was not within your mount points!', array($targetFolder->getIdentifier())));
203
-        } catch (IllegalFileExtensionException $e) {
204
-            $response = array('error' => vsprintf('Extension of file name "%s" is not allowed in "%s"!', array($uploadedFile->getName(), $targetFolder->getIdentifier())));
205
-        } catch (ExistingTargetFileNameException $e) {
206
-            $response = array('error' => vsprintf('No unique filename available in "%s"!', array($targetFolder->getIdentifier())));
207
-        } catch (\RuntimeException $e) {
208
-            $response = array('error' => vsprintf('Uploaded file could not be moved! Write-permission problem in "%s"?', array($targetFolder->getIdentifier())));
209
-        }
210
-
211
-        // to pass data through iframe you will need to encode all html tags
212
-        header("Content-Type: text/plain");
213
-        return htmlspecialchars(json_encode($response), ENT_NOQUOTES);
214
-    }
215
-
216
-    /**
217
-     * Returns an editing form for moving Files between storage.
218
-     *
219
-     * @param array $matches
220
-     * @throws \Exception
221
-     */
222
-    public function editStorageAction(array $matches = [])
223
-    {
224
-
225
-        $this->view->assign('storages', $this->getMediaModule()->getAllowedStorages());
226
-        $this->view->assign('storageTitle', Tca::table('sys_file_storage')->getTitle());
227
-
228
-        $fieldName = 'storage';
229
-
230
-        // Instantiate the Matcher object according different rules.
231
-        $matcher = MatcherObjectFactory::getInstance()->getMatcher($matches, $this->dataType);
232
-
233
-        // Fetch objects via the Content Service.
234
-        $contentService = $this->getContentService()->findBy($matcher);
235
-
236
-        $fieldType = Tca::table($this->dataType)->field($fieldName)->getType();
237
-
238
-        $this->view->assign('fieldType', ucfirst($fieldType));
239
-        $this->view->assign('dataType', $this->dataType);
240
-        $this->view->assign('matches', $matches);
241
-        $this->view->assign('fieldNameAndPath', $fieldName);
242
-        $this->view->assign('numberOfObjects', $contentService->getNumberOfObjects());
243
-        $this->view->assign('editWholeSelection', empty($matches['uid'])); // necessary??
244
-    }
245
-
246
-    /**
247
-     * Handle file upload.
248
-     *
249
-     * @return \Fab\Media\FileUpload\UploadedFileInterface|array
250
-     * @throws \InvalidArgumentException
251
-     */
252
-    protected function handleUpload()
253
-    {
254
-
255
-        /** @var $uploadManager UploadManager */
256
-        $uploadManager = GeneralUtility::makeInstance(UploadManager::class);
257
-
258
-        try {
259
-            /** @var $result \Fab\Media\FileUpload\UploadedFileInterface */
260
-            $result = $uploadManager->handleUpload();
261
-        } catch (\Exception $e) {
262
-            $result = array('error' => $e->getMessage());
263
-        }
264
-
265
-        return $result;
266
-    }
267
-
268
-    /**
269
-     * @return MetadataViewHelper
270
-     * @throws \InvalidArgumentException
271
-     */
272
-    protected function getMetadataViewHelper()
273
-    {
274
-        return GeneralUtility::makeInstance(MetadataViewHelper::class);
275
-    }
276
-
277
-    /**
278
-     * @param File $file
279
-     * @return ThumbnailService
280
-     * @throws \Fab\Media\Exception\InvalidKeyInArrayException
281
-     * @throws \InvalidArgumentException
282
-     */
283
-    protected function getThumbnailService(File $file)
284
-    {
285
-
286
-        /** @var $thumbnailService ThumbnailService */
287
-        $thumbnailService = GeneralUtility::makeInstance(ThumbnailService::class, $file);
288
-        $thumbnailService->setAppendTimeStamp(true)
289
-            ->setOutputType(ThumbnailInterface::OUTPUT_IMAGE_WRAPPED);
290
-        return $thumbnailService;
291
-    }
292
-
293
-    /**
294
-     * Get the instance of the Indexer service to update the metadata of the file.
295
-     *
296
-     * @param int|ResourceStorage $storage
297
-     * @return MediaIndexer
298
-     * @throws \InvalidArgumentException
299
-     */
300
-    protected function getMediaIndexer($storage)
301
-    {
302
-        return GeneralUtility::makeInstance(MediaIndexer::class, $storage);
303
-    }
304
-
305
-    /**
306
-     * @return CacheService
307
-     * @throws \InvalidArgumentException
308
-     */
309
-    protected function getCacheService()
310
-    {
311
-        return GeneralUtility::makeInstance(CacheService::class);
312
-    }
313
-
314
-    /**
315
-     * Signal that is emitted before a file is downloaded.
316
-     *
317
-     * @param File $file
318
-     * @return void
319
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
320
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
321
-     */
322
-    protected function emitBeforeDownloadSignal(File $file)
323
-    {
324
-        $this->getSignalSlotDispatcher()->dispatch('Fab\Media\Controller\Backend\AssetController', 'beforeDownload', array($file));
325
-    }
326
-
327
-    /**
328
-     * Get the SignalSlot dispatcher.
329
-     *
330
-     * @return Dispatcher
331
-     */
332
-    protected function getSignalSlotDispatcher()
333
-    {
334
-        return $this->objectManager->get(Dispatcher::class);
335
-    }
336
-
337
-    /**
338
-     * @return ContentService
339
-     * @throws \InvalidArgumentException
340
-     */
341
-    protected function getContentService()
342
-    {
343
-        return GeneralUtility::makeInstance(ContentService::class, $this->dataType);
344
-    }
345
-
346
-    /**
347
-     * @return MediaModule|object
348
-     * @throws \InvalidArgumentException
349
-     */
350
-    protected function getMediaModule()
351
-    {
352
-        return GeneralUtility::makeInstance(MediaModule::class);
353
-    }
45
+	/**
46
+	 * @var string
47
+	 */
48
+	protected $dataType = 'sys_file';
49
+
50
+	/**
51
+	 * @throws \Fab\Media\Exception\StorageNotOnlineException
52
+	 * @throws \InvalidArgumentException
53
+	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException
54
+	 */
55
+	public function initializeAction()
56
+	{
57
+		$pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
58
+		$pageRenderer->addInlineLanguageLabelFile('EXT:media/Resources/Private/Language/locallang.xlf');
59
+
60
+		// Configure property mapping to retrieve the file object.
61
+		if ($this->arguments->hasArgument('file')) {
62
+
63
+			/** @var FileConverter $typeConverter */
64
+			$typeConverter = $this->objectManager->get(FileConverter::class);
65
+
66
+			$propertyMappingConfiguration = $this->arguments->getArgument('file')->getPropertyMappingConfiguration();
67
+			$propertyMappingConfiguration->setTypeConverter($typeConverter);
68
+		}
69
+	}
70
+
71
+	/**
72
+	 * Force download of the file.
73
+	 *
74
+	 * @param File $file
75
+	 * @param bool $forceDownload
76
+	 * @return bool|string
77
+	 * @throws \RuntimeException
78
+	 */
79
+	public function downloadAction(File $file, $forceDownload = false)
80
+	{
81
+
82
+		if ($file->exists() && $file->getStorage()->isWithinFileMountBoundaries($file->getParentFolder())) {
83
+
84
+			// Emit signal before downloading the file.
85
+			$this->emitBeforeDownloadSignal($file);
86
+
87
+			// Read the file and dump it with the flag "forceDownload" set to true or false.
88
+			$file->getStorage()->dumpFileContents($file, $forceDownload);
89
+
90
+			$result = true;
91
+		} else {
92
+			$result = 'Access denied!';
93
+		}
94
+
95
+		return $result;
96
+	}
97
+
98
+	/**
99
+	 * Handle file upload for a new file.
100
+	 *
101
+	 * @param string $combinedIdentifier
102
+	 * @Extbase\Validate("\Fab\Media\Domain\Validator\StorageValidator", param="combinedIdentifier")
103
+	 * @return string
104
+	 */
105
+	public function createAction($combinedIdentifier)
106
+	{
107
+		/** @var UploadedFileInterface $uploadedFile */
108
+		$uploadedFile = $this->handleUpload();
109
+		if (!is_object($uploadedFile)) {
110
+			return htmlspecialchars(json_encode($uploadedFile), ENT_NOQUOTES);
111
+		}
112
+
113
+		// Get the target folder.
114
+		if ($this->getMediaModule()->hasFolderTree()) {
115
+			$targetFolder = $this->getMediaModule()->getFolderForCombinedIdentifier($combinedIdentifier);
116
+		} else {
117
+			$storage = ResourceFactory::getInstance()->getStorageObjectFromCombinedIdentifier($combinedIdentifier);
118
+			$targetFolder = $this->getMediaModule()->getTargetFolderForUploadedFile($uploadedFile, $storage);
119
+		}
120
+
121
+		try {
122
+			$conflictMode = DuplicationBehavior::RENAME;
123
+			$fileName = $uploadedFile->getName();
124
+			$file = $targetFolder->addFile($uploadedFile->getFileWithAbsolutePath(), $fileName, $conflictMode);
125
+
126
+			// Run the indexer for extracting metadata.
127
+			$this->getMediaIndexer($file->getStorage())
128
+				->extractMetadata($file)
129
+				->applyDefaultCategories($file);
130
+
131
+			$response = array(
132
+				'success' => true,
133
+				'uid' => $file->getUid(),
134
+				'name' => $file->getName(),
135
+				'thumbnail' => $this->getThumbnailService($file)->create(),
136
+			);
137
+		} catch (UploadException $e) {
138
+			$response = array('error' => 'The upload has failed, no uploaded file found!');
139
+		} catch (InsufficientUserPermissionsException $e) {
140
+			$response = array('error' => 'You are not allowed to upload files!');
141
+		} catch (UploadSizeException $e) {
142
+			$response = array('error' => vsprintf('The uploaded file "%s" exceeds the size-limit', array($uploadedFile->getName())));
143
+		} catch (InsufficientFolderWritePermissionsException $e) {
144
+			$response = array('error' => vsprintf('Destination path "%s" was not within your mount points!', array($targetFolder->getIdentifier())));
145
+		} catch (IllegalFileExtensionException $e) {
146
+			$response = array('error' => vsprintf('Extension of file name "%s" is not allowed in "%s"!', array($uploadedFile->getName(), $targetFolder->getIdentifier())));
147
+		} catch (ExistingTargetFileNameException $e) {
148
+			$response = array('error' => vsprintf('No unique filename available in "%s"!', array($targetFolder->getIdentifier())));
149
+		} catch (\RuntimeException $e) {
150
+			$response = array('error' => vsprintf('Uploaded file could not be moved! Write-permission problem in "%s"?', array($targetFolder->getIdentifier())));
151
+		}
152
+
153
+		// to pass data through iframe you will need to encode all html tags
154
+		header("Content-Type: text/plain");
155
+		return htmlspecialchars(json_encode($response), ENT_NOQUOTES);
156
+	}
157
+
158
+	/**
159
+	 * Handle file upload for an existing file.
160
+	 *
161
+	 * @param File $file
162
+	 * @return string
163
+	 * @throws \InvalidArgumentException
164
+	 * @throws \RuntimeException
165
+	 */
166
+	public function updateAction(File $file)
167
+	{
168
+		$uploadedFile = $this->handleUpload();
169
+		if (!is_object($uploadedFile)) {
170
+			return htmlspecialchars(json_encode($uploadedFile), ENT_NOQUOTES);
171
+		}
172
+
173
+		/** @var $file File */
174
+		$targetFolder = $file->getStorage()->getFolder(dirname($file->getIdentifier()));
175
+
176
+		try {
177
+			$storage = $file->getStorage();
178
+			$storage->replaceFile($file, $uploadedFile->getFileWithAbsolutePath());
179
+
180
+			// Run the indexer for extracting metadata.
181
+			$this->getMediaIndexer($file->getStorage())
182
+				->updateIndex($file)
183
+				->extractMetadata($file);
184
+
185
+			// Clear cache on pages holding a reference to this file.
186
+			$this->getCacheService()->clearCache($file);
187
+
188
+			$response = array(
189
+				'success' => true,
190
+				'uid' => $file->getUid(),
191
+				'name' => $file->getName(),
192
+				'thumbnail' => $this->getThumbnailService($file)->create(),
193
+				'fileInfo' => $this->getMetadataViewHelper()->render($file),
194
+			);
195
+		} catch (UploadException $e) {
196
+			$response = array('error' => 'The upload has failed, no uploaded file found!');
197
+		} catch (InsufficientUserPermissionsException $e) {
198
+			$response = array('error' => 'You are not allowed to upload files!');
199
+		} catch (UploadSizeException $e) {
200
+			$response = array('error' => vsprintf('The uploaded file "%s" exceeds the size-limit', array($uploadedFile->getName())));
201
+		} catch (InsufficientFolderWritePermissionsException $e) {
202
+			$response = array('error' => vsprintf('Destination path "%s" was not within your mount points!', array($targetFolder->getIdentifier())));
203
+		} catch (IllegalFileExtensionException $e) {
204
+			$response = array('error' => vsprintf('Extension of file name "%s" is not allowed in "%s"!', array($uploadedFile->getName(), $targetFolder->getIdentifier())));
205
+		} catch (ExistingTargetFileNameException $e) {
206
+			$response = array('error' => vsprintf('No unique filename available in "%s"!', array($targetFolder->getIdentifier())));
207
+		} catch (\RuntimeException $e) {
208
+			$response = array('error' => vsprintf('Uploaded file could not be moved! Write-permission problem in "%s"?', array($targetFolder->getIdentifier())));
209
+		}
210
+
211
+		// to pass data through iframe you will need to encode all html tags
212
+		header("Content-Type: text/plain");
213
+		return htmlspecialchars(json_encode($response), ENT_NOQUOTES);
214
+	}
215
+
216
+	/**
217
+	 * Returns an editing form for moving Files between storage.
218
+	 *
219
+	 * @param array $matches
220
+	 * @throws \Exception
221
+	 */
222
+	public function editStorageAction(array $matches = [])
223
+	{
224
+
225
+		$this->view->assign('storages', $this->getMediaModule()->getAllowedStorages());
226
+		$this->view->assign('storageTitle', Tca::table('sys_file_storage')->getTitle());
227
+
228
+		$fieldName = 'storage';
229
+
230
+		// Instantiate the Matcher object according different rules.
231
+		$matcher = MatcherObjectFactory::getInstance()->getMatcher($matches, $this->dataType);
232
+
233
+		// Fetch objects via the Content Service.
234
+		$contentService = $this->getContentService()->findBy($matcher);
235
+
236
+		$fieldType = Tca::table($this->dataType)->field($fieldName)->getType();
237
+
238
+		$this->view->assign('fieldType', ucfirst($fieldType));
239
+		$this->view->assign('dataType', $this->dataType);
240
+		$this->view->assign('matches', $matches);
241
+		$this->view->assign('fieldNameAndPath', $fieldName);
242
+		$this->view->assign('numberOfObjects', $contentService->getNumberOfObjects());
243
+		$this->view->assign('editWholeSelection', empty($matches['uid'])); // necessary??
244
+	}
245
+
246
+	/**
247
+	 * Handle file upload.
248
+	 *
249
+	 * @return \Fab\Media\FileUpload\UploadedFileInterface|array
250
+	 * @throws \InvalidArgumentException
251
+	 */
252
+	protected function handleUpload()
253
+	{
254
+
255
+		/** @var $uploadManager UploadManager */
256
+		$uploadManager = GeneralUtility::makeInstance(UploadManager::class);
257
+
258
+		try {
259
+			/** @var $result \Fab\Media\FileUpload\UploadedFileInterface */
260
+			$result = $uploadManager->handleUpload();
261
+		} catch (\Exception $e) {
262
+			$result = array('error' => $e->getMessage());
263
+		}
264
+
265
+		return $result;
266
+	}
267
+
268
+	/**
269
+	 * @return MetadataViewHelper
270
+	 * @throws \InvalidArgumentException
271
+	 */
272
+	protected function getMetadataViewHelper()
273
+	{
274
+		return GeneralUtility::makeInstance(MetadataViewHelper::class);
275
+	}
276
+
277
+	/**
278
+	 * @param File $file
279
+	 * @return ThumbnailService
280
+	 * @throws \Fab\Media\Exception\InvalidKeyInArrayException
281
+	 * @throws \InvalidArgumentException
282
+	 */
283
+	protected function getThumbnailService(File $file)
284
+	{
285
+
286
+		/** @var $thumbnailService ThumbnailService */
287
+		$thumbnailService = GeneralUtility::makeInstance(ThumbnailService::class, $file);
288
+		$thumbnailService->setAppendTimeStamp(true)
289
+			->setOutputType(ThumbnailInterface::OUTPUT_IMAGE_WRAPPED);
290
+		return $thumbnailService;
291
+	}
292
+
293
+	/**
294
+	 * Get the instance of the Indexer service to update the metadata of the file.
295
+	 *
296
+	 * @param int|ResourceStorage $storage
297
+	 * @return MediaIndexer
298
+	 * @throws \InvalidArgumentException
299
+	 */
300
+	protected function getMediaIndexer($storage)
301
+	{
302
+		return GeneralUtility::makeInstance(MediaIndexer::class, $storage);
303
+	}
304
+
305
+	/**
306
+	 * @return CacheService
307
+	 * @throws \InvalidArgumentException
308
+	 */
309
+	protected function getCacheService()
310
+	{
311
+		return GeneralUtility::makeInstance(CacheService::class);
312
+	}
313
+
314
+	/**
315
+	 * Signal that is emitted before a file is downloaded.
316
+	 *
317
+	 * @param File $file
318
+	 * @return void
319
+	 * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
320
+	 * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
321
+	 */
322
+	protected function emitBeforeDownloadSignal(File $file)
323
+	{
324
+		$this->getSignalSlotDispatcher()->dispatch('Fab\Media\Controller\Backend\AssetController', 'beforeDownload', array($file));
325
+	}
326
+
327
+	/**
328
+	 * Get the SignalSlot dispatcher.
329
+	 *
330
+	 * @return Dispatcher
331
+	 */
332
+	protected function getSignalSlotDispatcher()
333
+	{
334
+		return $this->objectManager->get(Dispatcher::class);
335
+	}
336
+
337
+	/**
338
+	 * @return ContentService
339
+	 * @throws \InvalidArgumentException
340
+	 */
341
+	protected function getContentService()
342
+	{
343
+		return GeneralUtility::makeInstance(ContentService::class, $this->dataType);
344
+	}
345
+
346
+	/**
347
+	 * @return MediaModule|object
348
+	 * @throws \InvalidArgumentException
349
+	 */
350
+	protected function getMediaModule()
351
+	{
352
+		return GeneralUtility::makeInstance(MediaModule::class);
353
+	}
354 354
 
355 355
 }
Please login to merge, or discard this patch.
Classes/Index/MediaIndexer.php 1 patch
Indentation   +149 added lines, -149 removed lines patch added patch discarded remove patch
@@ -23,154 +23,154 @@
 block discarded – undo
23 23
 class MediaIndexer
24 24
 {
25 25
 
26
-    /**
27
-     * @var ResourceStorage
28
-     */
29
-    protected $storage = null;
30
-
31
-    /**
32
-     * @param ResourceStorage $storage
33
-     */
34
-    public function __construct(ResourceStorage $storage)
35
-    {
36
-        $this->storage = $storage;
37
-    }
38
-
39
-    /**
40
-     * @param \TYPO3\CMS\Core\Resource\File $file
41
-     * @return $this
42
-     */
43
-    public function updateIndex(File $file)
44
-    {
45
-        $this->getCoreIndexer()->updateIndexEntry($file);
46
-        return $this;
47
-    }
48
-
49
-    /**
50
-     * @param \TYPO3\CMS\Core\Resource\File $file
51
-     * @return $this
52
-     */
53
-    public function extractMetadata(File $file)
54
-    {
55
-
56
-        $extractionServices = $this->getExtractorRegistry()->getExtractorsWithDriverSupport($this->storage->getDriverType());
57
-
58
-        $newMetaData = array(
59
-            0 => $file->_getMetaData()
60
-        );
61
-
62
-        foreach ($extractionServices as $services) {
63
-            if (is_array($services)) {
64
-                foreach ($services as $service) {
65
-                    if ($service->canProcess($file)) {
66
-                        $newMetaData[$service->getPriority()] = $service->extractMetaData($file, $newMetaData);
67
-                    }
68
-                }
69
-            } else {
70
-                $service = $services;
71
-                // We could optimise here for not repeating this bit
72
-                if ($service->canProcess($file)) {
73
-                    $newMetaData[$service->getPriority()] = $service->extractMetaData($file, $newMetaData);
74
-                }
75
-            }
76
-        }
77
-
78
-        ksort($newMetaData);
79
-        $metaData = [];
80
-        foreach ($newMetaData as $data) {
81
-            $metaData = array_merge($metaData, $data);
82
-        }
83
-        $file->updateProperties($metaData);
84
-        $this->getMetaDataRepository()->update($file->getUid(), $metaData);
85
-        $this->getFileIndexRepository()->updateIndexingTime($file->getUid());
86
-
87
-        return $this;
88
-    }
89
-
90
-    /**
91
-     * @param \TYPO3\CMS\Core\Resource\File $file
92
-     * @return $this
93
-     */
94
-    public function applyDefaultCategories(File $file)
95
-    {
96
-
97
-        $categoryList = ConfigurationUtility::getInstance()->get('default_categories');
98
-        $categories = GeneralUtility::trimExplode(',', $categoryList, true);
99
-
100
-        foreach ($categories as $category) {
101
-            $values = array(
102
-                'uid_local' => $category,
103
-                'uid_foreign' => $this->getFileMetadataIdentifier($file),
104
-                'tablenames' => 'sys_file_metadata',
105
-                'fieldname' => 'categories',
106
-            );
107
-            $this->getDataService()->insert('sys_category_record_mm', $values);
108
-        }
109
-
110
-        $metaData['categories'] = count($categories);
111
-        $file->updateProperties($metaData);
112
-        $this->getMetaDataRepository()->update($file->getUid(), $metaData);
113
-        $this->getFileIndexRepository()->updateIndexingTime($file->getUid());
114
-        return $this;
115
-    }
116
-
117
-    /**
118
-     * Retrieve the file metadata uid which is different from the file uid.
119
-     *
120
-     * @param \TYPO3\CMS\Core\Resource\File $file
121
-     * @return int
122
-     */
123
-    protected function getFileMetadataIdentifier(File $file)
124
-    {
125
-        $metadataProperties = $file->_getMetaData();
126
-        return isset($metadataProperties['_ORIG_uid']) ? (int)$metadataProperties['_ORIG_uid'] : (int)$metadataProperties['uid'];
127
-    }
128
-
129
-
130
-    /**
131
-     * Returns an instance of the FileIndexRepository
132
-     *
133
-     * @return FileIndexRepository
134
-     */
135
-    protected function getFileIndexRepository()
136
-    {
137
-        return FileIndexRepository::getInstance();
138
-    }
139
-
140
-    /**
141
-     * Returns an instance of the FileIndexRepository
142
-     *
143
-     * @return MetaDataRepository
144
-     */
145
-    protected function getMetaDataRepository()
146
-    {
147
-        return MetaDataRepository::getInstance();
148
-    }
149
-
150
-    /**
151
-     * Returns an instance of the FileIndexRepository
152
-     *
153
-     * @return ExtractorRegistry
154
-     */
155
-    protected function getExtractorRegistry()
156
-    {
157
-        return ExtractorRegistry::getInstance();
158
-    }
159
-
160
-    /**
161
-     * @return object|DataService
162
-     */
163
-    protected function getDataService(): DataService
164
-    {
165
-        return GeneralUtility::makeInstance(DataService::class);
166
-    }
167
-
168
-    /**
169
-     * @return \TYPO3\CMS\Core\Resource\Index\Indexer|object
170
-     */
171
-    protected function getCoreIndexer()
172
-    {
173
-        return GeneralUtility::makeInstance(\TYPO3\CMS\Core\Resource\Index\Indexer::class, $this->storage);
174
-    }
26
+	/**
27
+	 * @var ResourceStorage
28
+	 */
29
+	protected $storage = null;
30
+
31
+	/**
32
+	 * @param ResourceStorage $storage
33
+	 */
34
+	public function __construct(ResourceStorage $storage)
35
+	{
36
+		$this->storage = $storage;
37
+	}
38
+
39
+	/**
40
+	 * @param \TYPO3\CMS\Core\Resource\File $file
41
+	 * @return $this
42
+	 */
43
+	public function updateIndex(File $file)
44
+	{
45
+		$this->getCoreIndexer()->updateIndexEntry($file);
46
+		return $this;
47
+	}
48
+
49
+	/**
50
+	 * @param \TYPO3\CMS\Core\Resource\File $file
51
+	 * @return $this
52
+	 */
53
+	public function extractMetadata(File $file)
54
+	{
55
+
56
+		$extractionServices = $this->getExtractorRegistry()->getExtractorsWithDriverSupport($this->storage->getDriverType());
57
+
58
+		$newMetaData = array(
59
+			0 => $file->_getMetaData()
60
+		);
61
+
62
+		foreach ($extractionServices as $services) {
63
+			if (is_array($services)) {
64
+				foreach ($services as $service) {
65
+					if ($service->canProcess($file)) {
66
+						$newMetaData[$service->getPriority()] = $service->extractMetaData($file, $newMetaData);
67
+					}
68
+				}
69
+			} else {
70
+				$service = $services;
71
+				// We could optimise here for not repeating this bit
72
+				if ($service->canProcess($file)) {
73
+					$newMetaData[$service->getPriority()] = $service->extractMetaData($file, $newMetaData);
74
+				}
75
+			}
76
+		}
77
+
78
+		ksort($newMetaData);
79
+		$metaData = [];
80
+		foreach ($newMetaData as $data) {
81
+			$metaData = array_merge($metaData, $data);
82
+		}
83
+		$file->updateProperties($metaData);
84
+		$this->getMetaDataRepository()->update($file->getUid(), $metaData);
85
+		$this->getFileIndexRepository()->updateIndexingTime($file->getUid());
86
+
87
+		return $this;
88
+	}
89
+
90
+	/**
91
+	 * @param \TYPO3\CMS\Core\Resource\File $file
92
+	 * @return $this
93
+	 */
94
+	public function applyDefaultCategories(File $file)
95
+	{
96
+
97
+		$categoryList = ConfigurationUtility::getInstance()->get('default_categories');
98
+		$categories = GeneralUtility::trimExplode(',', $categoryList, true);
99
+
100
+		foreach ($categories as $category) {
101
+			$values = array(
102
+				'uid_local' => $category,
103
+				'uid_foreign' => $this->getFileMetadataIdentifier($file),
104
+				'tablenames' => 'sys_file_metadata',
105
+				'fieldname' => 'categories',
106
+			);
107
+			$this->getDataService()->insert('sys_category_record_mm', $values);
108
+		}
109
+
110
+		$metaData['categories'] = count($categories);
111
+		$file->updateProperties($metaData);
112
+		$this->getMetaDataRepository()->update($file->getUid(), $metaData);
113
+		$this->getFileIndexRepository()->updateIndexingTime($file->getUid());
114
+		return $this;
115
+	}
116
+
117
+	/**
118
+	 * Retrieve the file metadata uid which is different from the file uid.
119
+	 *
120
+	 * @param \TYPO3\CMS\Core\Resource\File $file
121
+	 * @return int
122
+	 */
123
+	protected function getFileMetadataIdentifier(File $file)
124
+	{
125
+		$metadataProperties = $file->_getMetaData();
126
+		return isset($metadataProperties['_ORIG_uid']) ? (int)$metadataProperties['_ORIG_uid'] : (int)$metadataProperties['uid'];
127
+	}
128
+
129
+
130
+	/**
131
+	 * Returns an instance of the FileIndexRepository
132
+	 *
133
+	 * @return FileIndexRepository
134
+	 */
135
+	protected function getFileIndexRepository()
136
+	{
137
+		return FileIndexRepository::getInstance();
138
+	}
139
+
140
+	/**
141
+	 * Returns an instance of the FileIndexRepository
142
+	 *
143
+	 * @return MetaDataRepository
144
+	 */
145
+	protected function getMetaDataRepository()
146
+	{
147
+		return MetaDataRepository::getInstance();
148
+	}
149
+
150
+	/**
151
+	 * Returns an instance of the FileIndexRepository
152
+	 *
153
+	 * @return ExtractorRegistry
154
+	 */
155
+	protected function getExtractorRegistry()
156
+	{
157
+		return ExtractorRegistry::getInstance();
158
+	}
159
+
160
+	/**
161
+	 * @return object|DataService
162
+	 */
163
+	protected function getDataService(): DataService
164
+	{
165
+		return GeneralUtility::makeInstance(DataService::class);
166
+	}
167
+
168
+	/**
169
+	 * @return \TYPO3\CMS\Core\Resource\Index\Indexer|object
170
+	 */
171
+	protected function getCoreIndexer()
172
+	{
173
+		return GeneralUtility::makeInstance(\TYPO3\CMS\Core\Resource\Index\Indexer::class, $this->storage);
174
+	}
175 175
 
176 176
 }
Please login to merge, or discard this patch.
Classes/FileUpload/Optimizer/Rotate.php 2 patches
Indentation   +148 added lines, -148 removed lines patch added patch discarded remove patch
@@ -18,153 +18,153 @@
 block discarded – undo
18 18
 class Rotate implements ImageOptimizerInterface
19 19
 {
20 20
 
21
-    /**
22
-     * @var \TYPO3\CMS\Frontend\Imaging\GifBuilder
23
-     */
24
-    protected $gifCreator;
25
-
26
-    /**
27
-     * Constructor
28
-     */
29
-    public function __construct()
30
-    {
31
-        $this->gifCreator = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Imaging\GifBuilder::class);
32
-        $this->gifCreator->absPrefix = Environment::getPublicPath() . '/';
33
-    }
34
-
35
-    /**
36
-     * Optimize the given uploaded image
37
-     *
38
-     * @param \Fab\Media\FileUpload\UploadedFileInterface $uploadedFile
39
-     * @return \Fab\Media\FileUpload\UploadedFileInterface
40
-     */
41
-    public function optimize($uploadedFile)
42
-    {
43
-
44
-        $orientation = $this->getOrientation($uploadedFile->getFileWithAbsolutePath());
45
-        $isRotated = $this->isRotated($orientation);
46
-
47
-        // Only rotate image if necessary!
48
-        if ($isRotated > 0) {
49
-            $transformation = $this->getTransformation($orientation);
50
-
51
-            $imParams = '###SkipStripProfile###';
52
-            if ($transformation !== '') {
53
-                $imParams .= ' ' . $transformation;
54
-            }
55
-
56
-            $tempFileInfo = $this->gifCreator->imageMagickConvert($uploadedFile->getFileWithAbsolutePath(), '', '', '', $imParams, '', [], true);
57
-            if ($tempFileInfo) {
58
-                // Replace original file
59
-                @unlink($uploadedFile->getFileWithAbsolutePath());
60
-                @rename($tempFileInfo[3], $uploadedFile->getFileWithAbsolutePath());
61
-
62
-                if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] === 'gm') {
63
-                    $this->resetOrientation($uploadedFile->getFileWithAbsolutePath());
64
-                }
65
-            }
66
-        }
67
-        return $uploadedFile;
68
-    }
69
-
70
-    /**
71
-     * Returns the EXIF orientation of a given picture.
72
-     *
73
-     * @param string $filename
74
-     * @return integer
75
-     */
76
-    protected function getOrientation($filename)
77
-    {
78
-        $extension = strtolower(substr($filename, strrpos($filename, '.') + 1));
79
-        $orientation = 1; // Fallback to "straight"
80
-        if (\TYPO3\CMS\Core\Utility\GeneralUtility::inList('jpg,jpeg,tif,tiff', $extension) && function_exists('exif_read_data')) {
81
-            try {
82
-                $exif = exif_read_data($filename);
83
-                if ($exif) {
84
-                    $orientation = $exif['Orientation'];
85
-                }
86
-            } catch (\Exception $e) {}
87
-        }
88
-        return $orientation;
89
-    }
90
-
91
-    /**
92
-     * Returns true if the given picture is rotated.
93
-     *
94
-     * @param integer $orientation EXIF orientation
95
-     * @return integer
96
-     * @see http://www.impulseadventure.com/photo/exif-orientation.html
97
-     */
98
-    protected function isRotated($orientation)
99
-    {
100
-        $ret = false;
101
-        switch ($orientation) {
102
-            case 2: // horizontal flip
103
-            case 3: // 180°
104
-            case 4: // vertical flip
105
-            case 5: // vertical flip + 90 rotate right
106
-            case 6: // 90° rotate right
107
-            case 7: // horizontal flip + 90 rotate right
108
-            case 8: // 90° rotate left
109
-                $ret = true;
110
-                break;
111
-        }
112
-        return $ret;
113
-    }
114
-
115
-    /**
116
-     * Returns a command line parameter to fix the orientation of a rotated picture.
117
-     *
118
-     * @param integer $orientation
119
-     * @return string
120
-     */
121
-    protected function getTransformation($orientation)
122
-    {
123
-        $transformation = '';
124
-        if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] !== 'gm') {
125
-            // ImageMagick
126
-            if ($orientation >= 2 && $orientation <= 8) {
127
-                $transformation = '-auto-orient';
128
-            }
129
-        } else {
130
-            // GraphicsMagick
131
-            switch ($orientation) {
132
-                case 2: // horizontal flip
133
-                    $transformation = '-flip horizontal';
134
-                    break;
135
-                case 3: // 180°
136
-                    $transformation = '-rotate 180';
137
-                    break;
138
-                case 4: // vertical flip
139
-                    $transformation = '-flip vertical';
140
-                    break;
141
-                case 5: // vertical flip + 90 rotate right
142
-                    $transformation = '-transpose';
143
-                    break;
144
-                case 6: // 90° rotate right
145
-                    $transformation = '-rotate 90';
146
-                    break;
147
-                case 7: // horizontal flip + 90 rotate right
148
-                    $transformation = '-transverse';
149
-                    break;
150
-                case 8: // 90° rotate left
151
-                    $transformation = '-rotate 270';
152
-                    break;
153
-            }
154
-        }
155
-        return $transformation;
156
-    }
157
-
158
-    /**
159
-     * Resets the EXIF orientation flag of a picture.
160
-     *
161
-     * @param string $filename
162
-     * @return void
163
-     * @see http://sylvana.net/jpegcrop/exif_orientation.html
164
-     */
165
-    protected function resetOrientation($filename)
166
-    {
167
-        JpegExifOrient::setOrientation($filename, 1);
168
-    }
21
+	/**
22
+	 * @var \TYPO3\CMS\Frontend\Imaging\GifBuilder
23
+	 */
24
+	protected $gifCreator;
25
+
26
+	/**
27
+	 * Constructor
28
+	 */
29
+	public function __construct()
30
+	{
31
+		$this->gifCreator = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Imaging\GifBuilder::class);
32
+		$this->gifCreator->absPrefix = Environment::getPublicPath() . '/';
33
+	}
34
+
35
+	/**
36
+	 * Optimize the given uploaded image
37
+	 *
38
+	 * @param \Fab\Media\FileUpload\UploadedFileInterface $uploadedFile
39
+	 * @return \Fab\Media\FileUpload\UploadedFileInterface
40
+	 */
41
+	public function optimize($uploadedFile)
42
+	{
43
+
44
+		$orientation = $this->getOrientation($uploadedFile->getFileWithAbsolutePath());
45
+		$isRotated = $this->isRotated($orientation);
46
+
47
+		// Only rotate image if necessary!
48
+		if ($isRotated > 0) {
49
+			$transformation = $this->getTransformation($orientation);
50
+
51
+			$imParams = '###SkipStripProfile###';
52
+			if ($transformation !== '') {
53
+				$imParams .= ' ' . $transformation;
54
+			}
55
+
56
+			$tempFileInfo = $this->gifCreator->imageMagickConvert($uploadedFile->getFileWithAbsolutePath(), '', '', '', $imParams, '', [], true);
57
+			if ($tempFileInfo) {
58
+				// Replace original file
59
+				@unlink($uploadedFile->getFileWithAbsolutePath());
60
+				@rename($tempFileInfo[3], $uploadedFile->getFileWithAbsolutePath());
61
+
62
+				if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] === 'gm') {
63
+					$this->resetOrientation($uploadedFile->getFileWithAbsolutePath());
64
+				}
65
+			}
66
+		}
67
+		return $uploadedFile;
68
+	}
69
+
70
+	/**
71
+	 * Returns the EXIF orientation of a given picture.
72
+	 *
73
+	 * @param string $filename
74
+	 * @return integer
75
+	 */
76
+	protected function getOrientation($filename)
77
+	{
78
+		$extension = strtolower(substr($filename, strrpos($filename, '.') + 1));
79
+		$orientation = 1; // Fallback to "straight"
80
+		if (\TYPO3\CMS\Core\Utility\GeneralUtility::inList('jpg,jpeg,tif,tiff', $extension) && function_exists('exif_read_data')) {
81
+			try {
82
+				$exif = exif_read_data($filename);
83
+				if ($exif) {
84
+					$orientation = $exif['Orientation'];
85
+				}
86
+			} catch (\Exception $e) {}
87
+		}
88
+		return $orientation;
89
+	}
90
+
91
+	/**
92
+	 * Returns true if the given picture is rotated.
93
+	 *
94
+	 * @param integer $orientation EXIF orientation
95
+	 * @return integer
96
+	 * @see http://www.impulseadventure.com/photo/exif-orientation.html
97
+	 */
98
+	protected function isRotated($orientation)
99
+	{
100
+		$ret = false;
101
+		switch ($orientation) {
102
+			case 2: // horizontal flip
103
+			case 3: // 180°
104
+			case 4: // vertical flip
105
+			case 5: // vertical flip + 90 rotate right
106
+			case 6: // 90° rotate right
107
+			case 7: // horizontal flip + 90 rotate right
108
+			case 8: // 90° rotate left
109
+				$ret = true;
110
+				break;
111
+		}
112
+		return $ret;
113
+	}
114
+
115
+	/**
116
+	 * Returns a command line parameter to fix the orientation of a rotated picture.
117
+	 *
118
+	 * @param integer $orientation
119
+	 * @return string
120
+	 */
121
+	protected function getTransformation($orientation)
122
+	{
123
+		$transformation = '';
124
+		if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5'] !== 'gm') {
125
+			// ImageMagick
126
+			if ($orientation >= 2 && $orientation <= 8) {
127
+				$transformation = '-auto-orient';
128
+			}
129
+		} else {
130
+			// GraphicsMagick
131
+			switch ($orientation) {
132
+				case 2: // horizontal flip
133
+					$transformation = '-flip horizontal';
134
+					break;
135
+				case 3: // 180°
136
+					$transformation = '-rotate 180';
137
+					break;
138
+				case 4: // vertical flip
139
+					$transformation = '-flip vertical';
140
+					break;
141
+				case 5: // vertical flip + 90 rotate right
142
+					$transformation = '-transpose';
143
+					break;
144
+				case 6: // 90° rotate right
145
+					$transformation = '-rotate 90';
146
+					break;
147
+				case 7: // horizontal flip + 90 rotate right
148
+					$transformation = '-transverse';
149
+					break;
150
+				case 8: // 90° rotate left
151
+					$transformation = '-rotate 270';
152
+					break;
153
+			}
154
+		}
155
+		return $transformation;
156
+	}
157
+
158
+	/**
159
+	 * Resets the EXIF orientation flag of a picture.
160
+	 *
161
+	 * @param string $filename
162
+	 * @return void
163
+	 * @see http://sylvana.net/jpegcrop/exif_orientation.html
164
+	 */
165
+	protected function resetOrientation($filename)
166
+	{
167
+		JpegExifOrient::setOrientation($filename, 1);
168
+	}
169 169
 
170 170
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
     public function __construct()
30 30
     {
31 31
         $this->gifCreator = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Imaging\GifBuilder::class);
32
-        $this->gifCreator->absPrefix = Environment::getPublicPath() . '/';
32
+        $this->gifCreator->absPrefix = Environment::getPublicPath().'/';
33 33
     }
34 34
 
35 35
     /**
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
 
51 51
             $imParams = '###SkipStripProfile###';
52 52
             if ($transformation !== '') {
53
-                $imParams .= ' ' . $transformation;
53
+                $imParams .= ' '.$transformation;
54 54
             }
55 55
 
56 56
             $tempFileInfo = $this->gifCreator->imageMagickConvert($uploadedFile->getFileWithAbsolutePath(), '', '', '', $imParams, '', [], true);
Please login to merge, or discard this patch.
Classes/FileUpload/Optimizer/Resize.php 2 patches
Indentation   +111 added lines, -111 removed lines patch added patch discarded remove patch
@@ -19,116 +19,116 @@
 block discarded – undo
19 19
 class Resize implements ImageOptimizerInterface
20 20
 {
21 21
 
22
-    /**
23
-     * @var \TYPO3\CMS\Frontend\Imaging\GifBuilder
24
-     */
25
-    protected $gifCreator;
26
-
27
-    /**
28
-     * @var \TYPO3\CMS\Core\Resource\ResourceStorage
29
-     */
30
-    protected $storage;
31
-
32
-    /**
33
-     * Constructor
34
-     */
35
-    public function __construct($storage = null)
36
-    {
37
-        $this->storage = $storage;
38
-        $this->gifCreator = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Imaging\GifBuilder::class);
39
-        $this->gifCreator->absPrefix = Environment::getPublicPath() . '/';
40
-    }
41
-
42
-    /**
43
-     * Optimize the given uploaded image.
44
-     *
45
-     * @param \Fab\Media\FileUpload\UploadedFileInterface $uploadedFile
46
-     * @return \Fab\Media\FileUpload\UploadedFileInterface
47
-     */
48
-    public function optimize($uploadedFile)
49
-    {
50
-
51
-        $imageInfo = getimagesize($uploadedFile->getFileWithAbsolutePath());
52
-
53
-        $currentWidth = $imageInfo[0];
54
-        $currentHeight = $imageInfo[1];
55
-
56
-        // resize an image if this one is bigger than telling by the settings.
57
-        if (is_object($this->storage)) {
58
-            $storageRecord = $this->storage->getStorageRecord();
59
-        } else {
60
-            // Will only work in the BE for now.
61
-            $storage = $this->getMediaModule()->getCurrentStorage();
62
-            $storageRecord = $storage->getStorageRecord();
63
-        }
64
-
65
-        if (strlen($storageRecord['maximum_dimension_original_image']) > 0) {
66
-
67
-            /** @var \Fab\Media\Dimension $imageDimension */
68
-            $imageDimension = GeneralUtility::makeInstance(\Fab\Media\Dimension::class, $storageRecord['maximum_dimension_original_image']);
69
-            if ($currentWidth > $imageDimension->getWidth() || $currentHeight > $imageDimension->getHeight()) {
70
-
71
-                // resize taking the width as reference
72
-                $this->resize($uploadedFile->getFileWithAbsolutePath(), $imageDimension->getWidth(), $imageDimension->getHeight());
73
-            }
74
-        }
75
-        return $uploadedFile;
76
-    }
77
-
78
-    /**
79
-     * Resize an image according to given parameter.
80
-     *
81
-     * @throws \Exception
82
-     * @param string $fileNameAndPath
83
-     * @param int $width
84
-     * @param int $height
85
-     * @return void
86
-     */
87
-    public function resize($fileNameAndPath, $width = 0, $height = 0)
88
-    {
89
-
90
-        // Skip profile of the image
91
-        $imParams = '###SkipStripProfile###';
92
-        $options = array(
93
-            'maxW' => $width,
94
-            'maxH' => $height,
95
-        );
96
-
97
-        $tempFileInfo = $this->gifCreator->imageMagickConvert($fileNameAndPath, '', '', '', $imParams, '', $options, true);
98
-        if ($tempFileInfo) {
99
-
100
-            // Overwrite original file
101
-            @unlink($fileNameAndPath);
102
-            @rename($tempFileInfo[3], $fileNameAndPath);
103
-        }
104
-    }
105
-
106
-    /**
107
-     * Escapes a file name so it can safely be used on the command line.
108
-     *
109
-     * @see \TYPO3\CMS\Core\Imaging\GraphicalFunctions
110
-     * @param string $inputName filename to safeguard, must not be empty
111
-     * @return string $inputName escaped as needed
112
-     */
113
-    protected function wrapFileName($inputName)
114
-    {
115
-        if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) {
116
-            $currentLocale = setlocale(LC_CTYPE, 0);
117
-            setlocale(LC_CTYPE, $GLOBALS['TYPO3_CONF_VARS']['SYS']['systemLocale']);
118
-        }
119
-        $escapedInputName = escapeshellarg($inputName);
120
-        if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) {
121
-            setlocale(LC_CTYPE, $currentLocale);
122
-        }
123
-        return $escapedInputName;
124
-    }
125
-
126
-    /**
127
-     * @return MediaModule|object
128
-     */
129
-    protected function getMediaModule()
130
-    {
131
-        return GeneralUtility::makeInstance(\Fab\Media\Module\MediaModule::class);
132
-    }
22
+	/**
23
+	 * @var \TYPO3\CMS\Frontend\Imaging\GifBuilder
24
+	 */
25
+	protected $gifCreator;
26
+
27
+	/**
28
+	 * @var \TYPO3\CMS\Core\Resource\ResourceStorage
29
+	 */
30
+	protected $storage;
31
+
32
+	/**
33
+	 * Constructor
34
+	 */
35
+	public function __construct($storage = null)
36
+	{
37
+		$this->storage = $storage;
38
+		$this->gifCreator = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Imaging\GifBuilder::class);
39
+		$this->gifCreator->absPrefix = Environment::getPublicPath() . '/';
40
+	}
41
+
42
+	/**
43
+	 * Optimize the given uploaded image.
44
+	 *
45
+	 * @param \Fab\Media\FileUpload\UploadedFileInterface $uploadedFile
46
+	 * @return \Fab\Media\FileUpload\UploadedFileInterface
47
+	 */
48
+	public function optimize($uploadedFile)
49
+	{
50
+
51
+		$imageInfo = getimagesize($uploadedFile->getFileWithAbsolutePath());
52
+
53
+		$currentWidth = $imageInfo[0];
54
+		$currentHeight = $imageInfo[1];
55
+
56
+		// resize an image if this one is bigger than telling by the settings.
57
+		if (is_object($this->storage)) {
58
+			$storageRecord = $this->storage->getStorageRecord();
59
+		} else {
60
+			// Will only work in the BE for now.
61
+			$storage = $this->getMediaModule()->getCurrentStorage();
62
+			$storageRecord = $storage->getStorageRecord();
63
+		}
64
+
65
+		if (strlen($storageRecord['maximum_dimension_original_image']) > 0) {
66
+
67
+			/** @var \Fab\Media\Dimension $imageDimension */
68
+			$imageDimension = GeneralUtility::makeInstance(\Fab\Media\Dimension::class, $storageRecord['maximum_dimension_original_image']);
69
+			if ($currentWidth > $imageDimension->getWidth() || $currentHeight > $imageDimension->getHeight()) {
70
+
71
+				// resize taking the width as reference
72
+				$this->resize($uploadedFile->getFileWithAbsolutePath(), $imageDimension->getWidth(), $imageDimension->getHeight());
73
+			}
74
+		}
75
+		return $uploadedFile;
76
+	}
77
+
78
+	/**
79
+	 * Resize an image according to given parameter.
80
+	 *
81
+	 * @throws \Exception
82
+	 * @param string $fileNameAndPath
83
+	 * @param int $width
84
+	 * @param int $height
85
+	 * @return void
86
+	 */
87
+	public function resize($fileNameAndPath, $width = 0, $height = 0)
88
+	{
89
+
90
+		// Skip profile of the image
91
+		$imParams = '###SkipStripProfile###';
92
+		$options = array(
93
+			'maxW' => $width,
94
+			'maxH' => $height,
95
+		);
96
+
97
+		$tempFileInfo = $this->gifCreator->imageMagickConvert($fileNameAndPath, '', '', '', $imParams, '', $options, true);
98
+		if ($tempFileInfo) {
99
+
100
+			// Overwrite original file
101
+			@unlink($fileNameAndPath);
102
+			@rename($tempFileInfo[3], $fileNameAndPath);
103
+		}
104
+	}
105
+
106
+	/**
107
+	 * Escapes a file name so it can safely be used on the command line.
108
+	 *
109
+	 * @see \TYPO3\CMS\Core\Imaging\GraphicalFunctions
110
+	 * @param string $inputName filename to safeguard, must not be empty
111
+	 * @return string $inputName escaped as needed
112
+	 */
113
+	protected function wrapFileName($inputName)
114
+	{
115
+		if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) {
116
+			$currentLocale = setlocale(LC_CTYPE, 0);
117
+			setlocale(LC_CTYPE, $GLOBALS['TYPO3_CONF_VARS']['SYS']['systemLocale']);
118
+		}
119
+		$escapedInputName = escapeshellarg($inputName);
120
+		if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) {
121
+			setlocale(LC_CTYPE, $currentLocale);
122
+		}
123
+		return $escapedInputName;
124
+	}
125
+
126
+	/**
127
+	 * @return MediaModule|object
128
+	 */
129
+	protected function getMediaModule()
130
+	{
131
+		return GeneralUtility::makeInstance(\Fab\Media\Module\MediaModule::class);
132
+	}
133 133
 
134 134
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -36,7 +36,7 @@
 block discarded – undo
36 36
     {
37 37
         $this->storage = $storage;
38 38
         $this->gifCreator = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Imaging\GifBuilder::class);
39
-        $this->gifCreator->absPrefix = Environment::getPublicPath() . '/';
39
+        $this->gifCreator->absPrefix = Environment::getPublicPath().'/';
40 40
     }
41 41
 
42 42
     /**
Please login to merge, or discard this patch.