X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp%2FBaseURL.php;h=9a8348510de65d8993de6480c1c8d1bb8f390c3c;hb=204e52ea307b182175ae0c64d6eb69c71a104658;hp=8d76a0d2d25d9dcaa519dc87a64f88907e2bc046;hpb=1de3960e267a8d298348fbca18cf1be1f6a20f7a;p=friendica.git diff --git a/src/App/BaseURL.php b/src/App/BaseURL.php index 8d76a0d2d2..9a8348510d 100644 --- a/src/App/BaseURL.php +++ b/src/App/BaseURL.php @@ -1,10 +1,31 @@ . + * + */ namespace Friendica\App; -use Friendica\Core\Config\Configuration; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\System; use Friendica\Util\Network; use Friendica\Util\Strings; +use Friendica\Network\HTTPException; /** * A class which checks and contains the basic @@ -35,7 +56,7 @@ class BaseURL /** * The Friendica Config * - * @var Configuration + * @var IManageConfigValues */ private $config; @@ -211,7 +232,7 @@ class BaseURL { $parsed = @parse_url($url); - if (empty($parsed)) { + if (empty($parsed) || empty($parsed['host'])) { return false; } @@ -251,10 +272,10 @@ class BaseURL } /** - * @param Configuration $config The Friendica configuration - * @param array $server The $_SERVER array + * @param IManageConfigValues $config The Friendica IConfiguration + * @param array $server The $_SERVER array */ - public function __construct(Configuration $config, array $server) + public function __construct(IManageConfigValues $config, array $server) { $this->config = $config; $this->server = $server; @@ -353,7 +374,7 @@ class BaseURL if (!empty($relative_script_path)) { // Module if (!empty($this->server['QUERY_STRING'])) { - $this->urlPath = trim(rdirname($relative_script_path, substr_count(trim($this->server['QUERY_STRING'], '/'), '/') + 1), '/'); + $this->urlPath = trim(dirname($relative_script_path, substr_count(trim($this->server['QUERY_STRING'], '/'), '/') + 1), '/'); } else { // Root page $this->urlPath = trim($relative_script_path, '/'); @@ -414,4 +435,31 @@ class BaseURL return $url; } } + + /** + * Redirects to another module relative to the current Friendica base URL. + * If you want to redirect to a external URL, use System::externalRedirectTo() + * + * @param string $toUrl The destination URL (Default is empty, which is the default page of the Friendica node) + * @param bool $ssl if true, base URL will try to get called with https:// (works just for relative paths) + * + * @throws HTTPException\InternalServerErrorException In Case the given URL is not relative to the Friendica node + */ + public function redirect($toUrl = '', $ssl = false) + { + if (!empty(parse_url($toUrl, PHP_URL_SCHEME))) { + throw new HTTPException\InternalServerErrorException("'$toUrl is not a relative path, please use System::externalRedirectTo"); + } + + $redirectTo = $this->get($ssl) . '/' . ltrim($toUrl, '/'); + System::externalRedirect($redirectTo); + } + + /** + * Returns the base url as string + */ + public function __toString() + { + return $this->get(); + } }