/** * Render a given media file * * @param FileInterface|AbstractFileFolder $file * @param array $additionalConfig This array can hold additional configuration that is passed though to the Renderer object * @param string $width This can be a numeric value representing the fixed width of in pixels. But you can also perform simple calculations by adding "m" or "c" to the value. See imgResource.width for possible options. * @param string $height This can be a numeric value representing the fixed height in pixels. But you can also perform simple calculations by adding "m" or "c" to the value. See imgResource.width for possible options. * @return string Rendered tag */ public function render($file, $additionalConfig = array(), $width = null, $height = null) { // get Resource Object (non ExtBase version) if (is_callable(array($file, 'getOriginalResource'))) { // We have a domain model, so we need to fetch the FAL resource object from there $file = $file->getOriginalResource(); } $fileRenderer = RendererRegistry::getInstance()->getRenderer($file); // Fallback to image when no renderer is found if ($fileRenderer === null) { return $this->renderImage($file, $width, $height); } else { $additionalConfig = array_merge_recursive($this->arguments, $additionalConfig); return $fileRenderer->render($file, $width, $height, $additionalConfig); } }
/** * Render a given media file * * @return string Rendered tag * @throws \UnexpectedValueException */ public function render() { $file = $this->arguments['file']; $additionalConfig = $this->arguments['additionalConfig']; $width = $this->arguments['width']; $height = $this->arguments['height']; // get Resource Object (non ExtBase version) if (is_callable([$file, 'getOriginalResource'])) { // We have a domain model, so we need to fetch the FAL resource object from there $file = $file->getOriginalResource(); } if (!($file instanceof FileInterface || $file instanceof AbstractFileFolder)) { throw new \UnexpectedValueException('Supplied file object type ' . get_class($file) . ' must be FileInterface or AbstractFileFolder.', 1454252193); } $fileRenderer = RendererRegistry::getInstance()->getRenderer($file); // Fallback to image when no renderer is found if ($fileRenderer === null) { return $this->renderImage($file, $width, $height); } else { $additionalConfig = array_merge_recursive($this->arguments, $additionalConfig); return $fileRenderer->render($file, $width, $height, $additionalConfig); } }
/** * @test */ public function getRendererReturnsCorrectInstance2() { $rendererRegistry = \TYPO3\CMS\Core\Resource\Rendering\RendererRegistry::getInstance(); $rendererRegistry->registerRendererClass(\TYPO3\CMS\Core\Resource\Rendering\AudioTagRenderer::class); $rendererRegistry->registerRendererClass(\TYPO3\CMS\Core\Resource\Rendering\VideoTagRenderer::class); $fileResourceMock = $this->getMock(\TYPO3\CMS\Core\Resource\File::class, array(), array(), '', FALSE); $fileResourceMock->expects($this->any())->method('getMimeType')->will($this->returnValue('video/mp4')); $rendererRegistry->getRendererInstances(); $renderer = $rendererRegistry->getRenderer($fileResourceMock); $this->assertInstanceOf(\TYPO3\CMS\Core\Resource\Rendering\VideoTagRenderer::class, $renderer); }
<?php defined('TYPO3_MODE') or die; /** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */ $signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class); if (TYPO3_MODE === 'BE' && !(TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_INSTALL)) { // FAL SECURITY CHECKS $signalSlotDispatcher->connect(\TYPO3\CMS\Core\Resource\ResourceFactory::class, \TYPO3\CMS\Core\Resource\ResourceFactoryInterface::SIGNAL_PostProcessStorage, \TYPO3\CMS\Core\Resource\Security\StoragePermissionsAspect::class, 'addUserPermissionsToStorage'); $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'TYPO3\\CMS\\Core\\Resource\\Security\\FileMetadataPermissionsAspect'; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/alt_doc.php']['makeEditForm_accessCheck'][] = 'TYPO3\\CMS\\Core\\Resource\\Security\\FileMetadataPermissionsAspect->isAllowedToShowEditForm'; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms_inline.php']['checkAccess'][] = 'TYPO3\\CMS\\Core\\Resource\\Security\\FileMetadataPermissionsAspect->isAllowedToShowEditForm'; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['checkModifyAccessList'][] = 'TYPO3\\CMS\\Core\\Resource\\Security\\FileMetadataPermissionsAspect'; // PACKAGE MANAGEMENT $signalSlotDispatcher->connect('PackageManagement', 'packagesMayHaveChanged', \TYPO3\CMS\Core\Package\PackageManager::class, 'scanAvailablePackages'); } $signalSlotDispatcher->connect(\TYPO3\CMS\Core\Resource\ResourceStorage::class, \TYPO3\CMS\Core\Resource\ResourceStorageInterface::SIGNAL_PostFileDelete, \TYPO3\CMS\Core\Resource\Processing\FileDeletionAspect::class, 'removeFromRepository'); $signalSlotDispatcher->connect(\TYPO3\CMS\Core\Resource\ResourceStorage::class, \TYPO3\CMS\Core\Resource\ResourceStorageInterface::SIGNAL_PostFileAdd, \TYPO3\CMS\Core\Resource\Processing\FileDeletionAspect::class, 'cleanupProcessedFilesPostFileAdd'); $signalSlotDispatcher->connect(\TYPO3\CMS\Core\Resource\ResourceStorage::class, \TYPO3\CMS\Core\Resource\ResourceStorageInterface::SIGNAL_PostFileReplace, \TYPO3\CMS\Core\Resource\Processing\FileDeletionAspect::class, 'cleanupProcessedFilesPostFileReplace'); if (!\TYPO3\CMS\Core\Core\Bootstrap::usesComposerClassLoading()) { $signalSlotDispatcher->connect(\TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService::class, 'hasInstalledExtensions', \TYPO3\CMS\Core\Core\ClassLoadingInformation::class, 'writeClassLoadingInformation'); $signalSlotDispatcher->connect(\TYPO3\CMS\Extensionmanager\Utility\InstallUtility::class, 'afterExtensionUninstall', \TYPO3\CMS\Core\Core\ClassLoadingInformation::class, 'writeClassLoadingInformation'); } unset($signalSlotDispatcher); $GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['dumpFile'] = 'EXT:core/Resources/PHP/FileDumpEID.php'; /** @var \TYPO3\CMS\Core\Resource\Rendering\RendererRegistry $rendererRegistry */ $rendererRegistry = \TYPO3\CMS\Core\Resource\Rendering\RendererRegistry::getInstance(); $rendererRegistry->registerRendererClass(\TYPO3\CMS\Core\Resource\Rendering\AudioTagRenderer::class); $rendererRegistry->registerRendererClass(\TYPO3\CMS\Core\Resource\Rendering\VideoTagRenderer::class); $textExtractorRegistry = \TYPO3\CMS\Core\Resource\TextExtraction\TextExtractorRegistry::getInstance(); $textExtractorRegistry->registerTextExtractor(\TYPO3\CMS\Core\Resource\TextExtraction\PlainTextExtractor::class);
/** * Get the source-URL from the rendered onlineMediaObject * * @param File $file The original image file * @return string The source URL */ protected function getVideoFile(File $file) { // Get OnlineMediaHelper $fileRenderer = RendererRegistry::getInstance()->getRenderer($file); // Render the media according to the configured renderer $renderedOnlineMedia = $fileRenderer->render($file, 0, 0); // Get URL from generated code $src = []; preg_match_all('/src="(\\/\\/[^"]*)"/i', $renderedOnlineMedia, $src); if (is_array($src) && is_array($src[1]) && !empty($src[1][0])) { return $src[1][0]; } else { return ''; } }