/**
  * 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;
 }