/** * @param string $internalUrl * @return mixed The URL to access the target file from outside, if available, or FALSE. */ public static function toExternalUrl($internalUrl) { $currentProc = ProcManager::getInstance()->getCurrentProcess(); if ($currentProc) { $checknum = $currentProc->getChecknum(); } else { $checknum = -1; } $urlParts = AdvancedPathLib::parse_url($internalUrl); if ($urlParts === false) { return $internalUrl; } if ($urlParts['scheme'] === EyeosAbstractVirtualFile::URL_SCHEME_SYSTEM) { // EXTERN try { $externPath = AdvancedPathLib::resolvePath($urlParts['path'], '/extern', AdvancedPathLib::OS_UNIX | AdvancedPathLib::RESOLVEPATH_RETURN_REFDIR_RELATIVE); return 'index.php?extern=' . $externPath; } catch (Exception $e) { } // APPS try { $appPath = AdvancedPathLib::resolvePath($urlParts['path'], '/apps', AdvancedPathLib::OS_UNIX | AdvancedPathLib::RESOLVEPATH_RETURN_REFDIR_RELATIVE); $appName = utf8_substr($appPath, 1, utf8_strpos($appPath, '/', 1)); $appFile = utf8_substr($appPath, utf8_strlen($appName) + 1); return 'index.php?checknum=' . $checknum . '&appName=' . $appName . '&appFile=' . $appFile; } catch (Exception $e) { } return $internalUrl; } //TODO return $internalUrl; }
public function testResolvePath() { $refDir = EYEOS_TESTS_TMP_PATH; $this->assertEquals(EYEOS_TESTS_TMP_PATH . '/path/myDir', AdvancedPathLib::resolvePath('/path/to/../myDir', $refDir)); $this->assertEquals('/path/myDir', AdvancedPathLib::resolvePath('/path/to/../myDir', $refDir, AdvancedPathLib::RESOLVEPATH_RETURN_REFDIR_RELATIVE)); $this->assertEquals('/path/myDir', AdvancedPathLib::resolvePath(EYEOS_TESTS_TMP_PATH . '/path/to/../myDir', $refDir, AdvancedPathLib::RESOLVEPATH_RETURN_REFDIR_RELATIVE)); $this->assertEquals('/path/myDir', AdvancedPathLib::resolvePath(realpath(EYEOS_TESTS_TMP_PATH) . '/path/to/../myDir', $refDir, AdvancedPathLib::RESOLVEPATH_RETURN_REFDIR_RELATIVE)); try { AdvancedPathLib::resolvePath(EYEOS_TESTS_TMP_PATH . '/path/to/../../my/../incorrectDir/../..', $refDir, AdvancedPathLib::RESOLVEPATH_RETURN_REFDIR_RELATIVE); $this->fail(); } catch (InvalidArgumentException $e) { // normal situation } }