[TASK] Create new processor registry
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Resource / Processing / ProcessingTask.php
1 <?php
2 namespace TYPO3\CMS\Core\Resource\Processing;
3
4 /***************************************************************
5 * Copyright notice
6 *
7 * (c) 2014 Frans Saris <franssaris@gmail.com>
8 * All rights reserved
9 *
10 * This script is part of the TYPO3 project. The TYPO3 project is
11 * free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * The GNU General Public License can be found at
17 * http://www.gnu.org/copyleft/gpl.html.
18 * A copy is found in the text file GPL.txt and important notices to the license
19 * from the author is found in LICENSE.txt distributed with these scripts.
20 *
21 *
22 * This script is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * This copyright notice MUST APPEAR in all copies of the script!
28 ***************************************************************/
29
30 /**
31 * ProcessingTask for processing multiple file processing requests
32 */
33 class ProcessingTask {
34
35 /**
36 * @var \TYPO3\CMS\Core\Resource\FileInterface
37 */
38 protected $originalFile;
39
40 /**
41 * @var array ProcessingRequestInterface[]
42 */
43 protected $processingRequests;
44
45 /**
46 * Constructor
47 *
48 * @param \TYPO3\CMS\Core\Resource\FileInterface $originalFile
49 * @param array $processingRequests
50 */
51 public function __construct(\TYPO3\CMS\Core\Resource\FileInterface $originalFile, array $processingRequests) {
52 $this->originalFile = $originalFile;
53
54 $this->callProcessingHook('preProcessingRequests', $processingRequests);
55 $this->processingRequests = $processingRequests;
56 $this->callProcessingHook('postProcessingRequests', $processingRequests);
57 }
58
59 /**
60 * Process all requests
61 *
62 * @return null|\TYPO3\CMS\Core\Resource\ProcessedFile
63 */
64 public function process() {
65 $processedFile = NULL;
66 $fileProcessorRegistry = FileProcessorRegistry::getInstance();
67
68 foreach ($this->processingRequests as $processingRequest) {
69 $processor = $fileProcessorRegistry->getProcessorFor($processedFile ?: $this->originalFile, $processingRequest);
70 if ($processor !== NULL) {
71 $processedFile = $processor->process($processedFile ?: $this->originalFile, $processingRequest);
72 }
73 }
74
75 return $processedFile;
76 }
77
78 /**
79 * Call processing Hook
80 *
81 * @param string $name name of the hook
82 * @param array $processingRequests processing requests by reference
83 * @throws \UnexpectedValueException
84 */
85 public function callProcessingHook($name, array &$processingRequests) {
86 if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ProcessingTask'][$name])) {
87 foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ProcessingTask'][$name] as $classRef) {
88 $hookObject = \TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj($classRef);
89 if (!$hookObject instanceof ProcessingTaskCustomizationHookInterface) {
90 throw new \UnexpectedValueException('$hookObject must implement interface TYPO3\\CMS\\Core\\Resource\\Processing\\ProcessingTaskCustomizationHookInterface', 1393686550);
91 }
92 $hookObject->manipulateRequests($this->originalFile, $processingRequests);
93 }
94 }
95 }
96 }