/** * signal slot for public url generation of a file * @see \TYPO3\CMS\Core\Resource\ResourceStorage and the function getPublicUrl * * @param \TYPO3\CMS\Core\Resource\ResourceStorage $t * @param \TYPO3\CMS\Core\Resource\Driver\LocalDriver $driver * @param object $resourceObject e.g. \TYPO3\CMS\Core\Resource\File, \TYPO3\CMS\Core\Resource\Folder, \TYPO3\CMS\Core\Resource\ProcessedFile * @param boolean $relativeToCurrentScript * @param array $urlData * * @return void */ public function preGeneratePublicUrl($t, $driver, $resourceObject, $relativeToCurrentScript, $urlData) { $this->emSettings = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf'][$this->extKey]); // check if resource is file if (is_a($resourceObject, 'TYPO3\\CMS\\Core\\Resource\\File')) { $fileData = $this->getFileData($resourceObject); $newPublicUrl = ''; $enable = true; // check if TYPO3 is in frontend mode if (TYPO3_MODE === 'FE') { if ($this->emSettings['disable_fe']) { $enable = false; } else { // check filetypes field if (!empty($this->emSettings['filetypes_fe'])) { $filetypes = explode(',', $this->emSettings['filetypes_fe']); if (in_array($fileData['extension'], $filetypes)) { } else { $enable = false; } } if ($enable) { $newPublicUrl = $driver->getPublicUrl($fileData['identifier']); } } } // check if TYPO3 is in backend mode and make the path relative to the current script // in order to make it possible to use the relative file if (TYPO3_MODE === 'BE' && $relativeToCurrentScript) { //DebuggerUtility::var_dump($this->emSettings); if ($this->emSettings['disable_be']) { $enable = false; } else { // check filetypes field if (!empty($this->emSettings['filetypes_be'])) { $filetypes = explode(',', $this->emSettings['filetypes_be']); if (in_array($fileData['extension'], $filetypes)) { } else { $enable = false; } } if ($enable) { $publicUrl = $driver->getPublicUrl($fileData['identifier']); $absolutePathToContainingFolder = PathUtility::dirname(PATH_site . $publicUrl); $pathPart = PathUtility::getRelativePathTo($absolutePathToContainingFolder); $filePart = substr(PATH_site . $publicUrl, strlen($absolutePathToContainingFolder) + 1); $newPublicUrl = $pathPart . $filePart; } } } if (!empty($newPublicUrl) && !empty($fileData['modDate']) && $enable) { $urlData['publicUrl'] = $newPublicUrl . '?v=' . $fileData['modDate']; } } }
/** * Returns the public URL to a file. * For the local driver, this will always return a path relative to PATH_site. * * @param string $identifier * @return string * @throws \TYPO3\CMS\Core\Resource\Exception */ public function getPublicUrl($identifier) { $publicUrl = parent::getPublicUrl($identifier); if (!empty($publicUrl)) { $publicUrl = rtrim($this->extensionConfiguration->getRemoteTypo3Url(), '/') . '/' . ltrim($publicUrl, '/'); } return $publicUrl; }