137748cd8SNickeau<?php 237748cd8SNickeau/** 337748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved. 437748cd8SNickeau * 537748cd8SNickeau * This source code is licensed under the GPL license found in the 637748cd8SNickeau * COPYING file in the root directory of this source tree. 737748cd8SNickeau * 837748cd8SNickeau * @license GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html) 937748cd8SNickeau * @author ComboStrap <support@combostrap.com> 1037748cd8SNickeau * 1137748cd8SNickeau */ 1237748cd8SNickeau 1337748cd8SNickeaunamespace ComboStrap; 1437748cd8SNickeau 1537748cd8SNickeau 1604fd306cSNickeauuse ComboStrap\Meta\Field\PageTemplateName; 1704fd306cSNickeauuse ComboStrap\Meta\Field\Region; 1804fd306cSNickeauuse ComboStrap\Web\Url; 1904fd306cSNickeauuse ComboStrap\Web\UrlRewrite; 2082a60d03SNickeauuse Exception; 21c3437056SNickeau 2237748cd8SNickeauclass Site 2337748cd8SNickeau{ 2437748cd8SNickeau 2537748cd8SNickeau const STRAP_TEMPLATE_NAME = "strap"; 2637748cd8SNickeau 2737748cd8SNickeau const SVG_LOGO_IDS = array( 2804fd306cSNickeau 'wiki:logo.svg', 2904fd306cSNickeau 'logo.svg' 3037748cd8SNickeau ); 3137748cd8SNickeau 3237748cd8SNickeau const PNG_LOGO_IDS = array( 3304fd306cSNickeau 'logo.png', 3404fd306cSNickeau 'wiki:logo.png', 3504fd306cSNickeau 'favicon-32×32.png', 3604fd306cSNickeau 'favicon-16×16.png', 3704fd306cSNickeau 'apple-touch-icon.png', 3804fd306cSNickeau 'android-chrome-192x192.png' 3937748cd8SNickeau ); 4004fd306cSNickeau /** 4104fd306cSNickeau * Name of the main header slot 4204fd306cSNickeau */ 4304fd306cSNickeau public const SLOT_MAIN_HEADER_NAME = "slot_main_header"; 4404fd306cSNickeau /** 4504fd306cSNickeau * Name of the main footer slot 4604fd306cSNickeau */ 4704fd306cSNickeau public const SLOT_MAIN_FOOTER_NAME = "slot_main_footer"; 4804fd306cSNickeau 4904fd306cSNickeau public const SLOT_MAIN_SIDE_NAME = "slot_main_side"; 5004fd306cSNickeau 5104fd306cSNickeau const CANONICAL = "configuration"; 5204fd306cSNickeau /** 5304fd306cSNickeau * Strap Template meta (version, release date, ...) 5404fd306cSNickeau * @var array 5504fd306cSNickeau */ 5604fd306cSNickeau private static $STRAP_TEMPLATE_INFO; 5704fd306cSNickeau private $executingContext; 5804fd306cSNickeau 5970bbd7f1Sgerardnico private $config; 6070bbd7f1Sgerardnico 6104fd306cSNickeau /** 6204fd306cSNickeau * @param ExecutionContext $executingContext 6304fd306cSNickeau */ 6404fd306cSNickeau public function __construct(ExecutionContext $executingContext) 6504fd306cSNickeau { 6604fd306cSNickeau $this->executingContext = $executingContext; 6704fd306cSNickeau } 6837748cd8SNickeau 6937748cd8SNickeau 7037748cd8SNickeau /** 7104fd306cSNickeau * @return WikiPath[] 721fa8c418SNickeau */ 7304fd306cSNickeau public static function getLogoImagesAsPath(): array 7437748cd8SNickeau { 751fa8c418SNickeau $logosPaths = PluginUtility::mergeAttributes(self::PNG_LOGO_IDS, self::SVG_LOGO_IDS); 761fa8c418SNickeau $logos = []; 771fa8c418SNickeau foreach ($logosPaths as $logoPath) { 7804fd306cSNickeau $dokuPath = WikiPath::createMediaPathFromId($logoPath); 7982a60d03SNickeau if (FileSystems::exists($dokuPath)) { 8082a60d03SNickeau try { 8104fd306cSNickeau $logos[] = $dokuPath; 8282a60d03SNickeau } catch (Exception $e) { 8382a60d03SNickeau // The image is not valid 8482a60d03SNickeau LogUtility::msg("The logo ($logoPath) is not a valid image. {$e->getMessage()}"); 8582a60d03SNickeau } 8682a60d03SNickeau } 871fa8c418SNickeau } 881fa8c418SNickeau return $logos; 8937748cd8SNickeau } 9037748cd8SNickeau 9104fd306cSNickeau /** 9204fd306cSNickeau * @deprecated see {@link SiteConfig::setUrlRewriteToDoku()} 9304fd306cSNickeau */ 9404fd306cSNickeau public static function setUrlRewriteToDoku() 9504fd306cSNickeau { 9604fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv()->getConfig() 9704fd306cSNickeau ->setUrlRewriteToDoku(); 9804fd306cSNickeau } 9904fd306cSNickeau 10004fd306cSNickeau /** 10104fd306cSNickeau * Web server rewrite (Apache rewrite (htaccess), Nginx) 10204fd306cSNickeau * @deprecated see {@link SiteConfig::setUrlRewriteToWebServer()} 10304fd306cSNickeau */ 10404fd306cSNickeau public static function setUrlRewriteToWebServer() 10504fd306cSNickeau { 10604fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv()->getConfig() 10704fd306cSNickeau ->setUrlRewriteToWebServer(); 10804fd306cSNickeau } 10904fd306cSNickeau 11004fd306cSNickeau /** 11104fd306cSNickeau * https://www.dokuwiki.org/config:useslash 11204fd306cSNickeau * @return void 11304fd306cSNickeau */ 11404fd306cSNickeau public static function useSlashSeparatorInEndpointUrl() 11504fd306cSNickeau { 11604fd306cSNickeau global $conf; 11704fd306cSNickeau $conf['useslash'] = 1; // use slash instead of ; 11804fd306cSNickeau } 11904fd306cSNickeau 12004fd306cSNickeau 12104fd306cSNickeau public static function getUrlEndpointSeparator(): string 12204fd306cSNickeau { 12304fd306cSNickeau $defaultSeparator = WikiPath::NAMESPACE_SEPARATOR_DOUBLE_POINT; 12404fd306cSNickeau $slashSeparator = "/"; 12504fd306cSNickeau global $conf; 12604fd306cSNickeau $key = 'useslash'; 12704fd306cSNickeau $value = $conf[$key]; 12804fd306cSNickeau try { 12904fd306cSNickeau $valueInt = DataType::toInteger($value); 13004fd306cSNickeau } catch (ExceptionBadArgument $e) { 13104fd306cSNickeau LogUtility::internalError("The ($key) configuration does not have an integer value ($value). Default separator returned"); 13204fd306cSNickeau return $defaultSeparator; 13304fd306cSNickeau } 13404fd306cSNickeau switch ($valueInt) { 13504fd306cSNickeau case 0: 13604fd306cSNickeau return $defaultSeparator; 13704fd306cSNickeau case 1: 13804fd306cSNickeau return $slashSeparator; 13904fd306cSNickeau default: 14004fd306cSNickeau LogUtility::internalError("The ($key) configuration has an integer value ($valueInt) that is not a valid one (0 or 1). Default separator returned"); 14104fd306cSNickeau return $defaultSeparator; 14204fd306cSNickeau } 14304fd306cSNickeau } 14404fd306cSNickeau 14504fd306cSNickeau 14604fd306cSNickeau public static function getTocMinHeadings(): int 14704fd306cSNickeau { 14804fd306cSNickeau global $conf; 14904fd306cSNickeau $confKey = 'tocminheads'; 15004fd306cSNickeau $tocMinHeads = $conf[$confKey]; 15104fd306cSNickeau if ($tocMinHeads === null) { 15204fd306cSNickeau return 0; 15304fd306cSNickeau } 15404fd306cSNickeau try { 15504fd306cSNickeau return DataType::toInteger($tocMinHeads); 15604fd306cSNickeau } catch (ExceptionBadArgument $e) { 15704fd306cSNickeau LogUtility::error("The configuration ($confKey) is not an integer. Error:{$e->getMessage()}", self::CANONICAL); 15804fd306cSNickeau return 0; 15904fd306cSNickeau } 16004fd306cSNickeau } 16104fd306cSNickeau 16204fd306cSNickeau 16304fd306cSNickeau /** 16404fd306cSNickeau * @param int $int 16504fd306cSNickeau * @deprecated 16604fd306cSNickeau */ 16704fd306cSNickeau public static function setTocMinHeading(int $int) 16804fd306cSNickeau { 16904fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 17004fd306cSNickeau ->getConfig() 17104fd306cSNickeau ->setTocMinHeading($int); 17204fd306cSNickeau } 17304fd306cSNickeau 17404fd306cSNickeau public static function getTopTocLevel(): int 17504fd306cSNickeau { 17604fd306cSNickeau global $conf; 17704fd306cSNickeau $confKey = 'toptoclevel'; 17804fd306cSNickeau $value = $conf[$confKey]; 17904fd306cSNickeau try { 18004fd306cSNickeau return DataType::toInteger($value); 18104fd306cSNickeau } catch (ExceptionBadArgument $e) { 18204fd306cSNickeau LogUtility::error("The configuration ($confKey) has a value ($value) that is not an integer", self::CANONICAL); 18304fd306cSNickeau return 1; 18404fd306cSNickeau } 18504fd306cSNickeau } 18604fd306cSNickeau 18704fd306cSNickeau /** 18804fd306cSNickeau * @param int $int 18904fd306cSNickeau * @return void 19004fd306cSNickeau * @deprecated 19104fd306cSNickeau */ 19204fd306cSNickeau public static function setTocTopLevel(int $int) 19304fd306cSNickeau { 19404fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 19504fd306cSNickeau ->getConfig() 19604fd306cSNickeau ->setTocTopLevel($int); 19704fd306cSNickeau 19804fd306cSNickeau } 19904fd306cSNickeau 20004fd306cSNickeau /** 20104fd306cSNickeau * @return int 20204fd306cSNickeau * https://www.dokuwiki.org/config:breadcrumbs 20304fd306cSNickeau */ 20404fd306cSNickeau public static function getVisitedPagesCountInHistoricalBreadCrumb(): int 20504fd306cSNickeau { 20604fd306cSNickeau global $conf; 20704fd306cSNickeau $confKey = 'breadcrumbs'; 20804fd306cSNickeau $visitedPagesInBreadCrumb = $conf[$confKey]; 20904fd306cSNickeau $defaultReturnValue = 10; 21004fd306cSNickeau if ($visitedPagesInBreadCrumb === null) { 21104fd306cSNickeau return $defaultReturnValue; 21204fd306cSNickeau } 21304fd306cSNickeau try { 21404fd306cSNickeau return DataType::toInteger($visitedPagesInBreadCrumb); 21504fd306cSNickeau } catch (ExceptionBadArgument $e) { 21604fd306cSNickeau LogUtility::error("The configuration ($confKey) has value ($visitedPagesInBreadCrumb) that is not an integer. Error:{$e->getMessage()}"); 21704fd306cSNickeau return $defaultReturnValue; 21804fd306cSNickeau } 21904fd306cSNickeau 22004fd306cSNickeau } 22104fd306cSNickeau 22204fd306cSNickeau /** 22304fd306cSNickeau * This setting enables the standard DokuWiki XHTML renderer to be replaced by a render plugin that also provides XHTML output. 22404fd306cSNickeau * @param string $string 22504fd306cSNickeau * @return void 22604fd306cSNickeau */ 22704fd306cSNickeau public static function setXhtmlRenderer(string $string) 22804fd306cSNickeau { 22904fd306cSNickeau global $conf; 23004fd306cSNickeau $conf["renderer_xhtml"] = $string; 23104fd306cSNickeau } 23204fd306cSNickeau 23304fd306cSNickeau /** 23404fd306cSNickeau * The host of the actual server 23504fd306cSNickeau * (may be virtual) 23604fd306cSNickeau * @return string 23704fd306cSNickeau */ 23804fd306cSNickeau public static function getServerHost(): string 23904fd306cSNickeau { 24004fd306cSNickeau /** 24104fd306cSNickeau * Based on {@link getBaseURL()} 24204fd306cSNickeau * to be dokuwiki compliant 24304fd306cSNickeau */ 24404fd306cSNickeau $remoteHost = $_SERVER['HTTP_HOST']; 24504fd306cSNickeau if ($remoteHost !== null) { 24604fd306cSNickeau return $remoteHost; 24704fd306cSNickeau } 24804fd306cSNickeau $remoteHost = $_SERVER['SERVER_NAME']; 24904fd306cSNickeau if ($remoteHost !== null) { 25004fd306cSNickeau return $remoteHost; 25104fd306cSNickeau } 25204fd306cSNickeau /** 25304fd306cSNickeau * OS name 25404fd306cSNickeau */ 25504fd306cSNickeau return php_uname('n'); 25604fd306cSNickeau } 25704fd306cSNickeau 25804fd306cSNickeau public static function getLangDirection() 25904fd306cSNickeau { 26004fd306cSNickeau global $lang; 26104fd306cSNickeau return $lang['direction']; 26204fd306cSNickeau } 26304fd306cSNickeau 26404fd306cSNickeau /** 26504fd306cSNickeau * Set a site configuration outside a {@link ExecutionContext} 26604fd306cSNickeau * It permits to configure the installation before execution 26704fd306cSNickeau * 26804fd306cSNickeau * For instance, we set the {@link PageTemplateName::CONF_DEFAULT_NAME default page layout} as {@link PageTemplateName::BLANK_TEMPLATE_VALUE} 26904fd306cSNickeau * in test by default to speed ud test. In a normal environment, the default is {@link PageTemplateName::HOLY_TEMPLATE_VALUE} 27004fd306cSNickeau * 27104fd306cSNickeau * @param $key 27204fd306cSNickeau * @param $value 27304fd306cSNickeau * @param string|null $namespace - the plugin name 27404fd306cSNickeau * @return void 27504fd306cSNickeau * @deprecated use {@link SiteConfig::setConf()} 27604fd306cSNickeau */ 27704fd306cSNickeau public static function setConf($key, $value, ?string $namespace = PluginUtility::PLUGIN_BASE_NAME) 27804fd306cSNickeau { 27904fd306cSNickeau global $conf; 28004fd306cSNickeau if ($namespace !== null) { 28104fd306cSNickeau $conf['plugin'][$namespace][$key] = $value; 28204fd306cSNickeau } else { 28304fd306cSNickeau $conf[$key] = $value; 28404fd306cSNickeau } 28504fd306cSNickeau } 28604fd306cSNickeau 28704fd306cSNickeau public static function getLangObject(): Lang 28804fd306cSNickeau { 28904fd306cSNickeau return Lang::createFromValue(Site::getLang()); 29004fd306cSNickeau } 29104fd306cSNickeau 29204fd306cSNickeau 29304fd306cSNickeau public static function getOldDirectory(): LocalPath 29404fd306cSNickeau { 29504fd306cSNickeau global $conf; 29604fd306cSNickeau /** 29704fd306cSNickeau * Data dir is the pages dir (savedir is the data dir) 29804fd306cSNickeau */ 29904fd306cSNickeau $oldDirConf = $conf['olddir']; 30004fd306cSNickeau if ($oldDirConf === null) { 30104fd306cSNickeau throw new ExceptionRuntime("The old directory ($oldDirConf) is null"); 30204fd306cSNickeau } 30304fd306cSNickeau return LocalPath::createFromPathString($oldDirConf); 30404fd306cSNickeau } 30504fd306cSNickeau 30604fd306cSNickeau 30704fd306cSNickeau function getEmailObfuscationConfiguration() 30804fd306cSNickeau { 30904fd306cSNickeau global $conf; 31004fd306cSNickeau return $conf['mailguard']; 31104fd306cSNickeau } 31237748cd8SNickeau 31337748cd8SNickeau /** 31437748cd8SNickeau * @return string|null 31537748cd8SNickeau */ 3164cadd4f8SNickeau public static function getLogoUrlAsSvg(): ?string 31737748cd8SNickeau { 31837748cd8SNickeau 31937748cd8SNickeau 32037748cd8SNickeau $url = null; 32137748cd8SNickeau foreach (self::SVG_LOGO_IDS as $svgLogo) { 32237748cd8SNickeau 32337748cd8SNickeau $svgLogoFN = mediaFN($svgLogo); 32437748cd8SNickeau if (file_exists($svgLogoFN)) { 32537748cd8SNickeau $url = ml($svgLogo, '', true, '', true); 32637748cd8SNickeau break; 3274cadd4f8SNickeau } 32837748cd8SNickeau } 32937748cd8SNickeau return $url; 33037748cd8SNickeau } 33137748cd8SNickeau 33204fd306cSNickeau /** 33304fd306cSNickeau * @throws ExceptionNotFound 33404fd306cSNickeau */ 33504fd306cSNickeau public static function getLogoAsSvgImage(): WikiPath 3364cadd4f8SNickeau { 3374cadd4f8SNickeau foreach (self::SVG_LOGO_IDS as $svgLogo) { 33804fd306cSNickeau $image = WikiPath::createMediaPathFromId($svgLogo); 33904fd306cSNickeau if (FileSystems::exists($image)) { 3404cadd4f8SNickeau return $image; 3414cadd4f8SNickeau } 3424cadd4f8SNickeau } 34304fd306cSNickeau throw new ExceptionNotFound("No Svg Logo Image found"); 3444cadd4f8SNickeau } 3454cadd4f8SNickeau 34604fd306cSNickeau /** 34704fd306cSNickeau * @throws ExceptionNotFound 34804fd306cSNickeau */ 34904fd306cSNickeau public static function getLogoAsRasterImage(): FetcherRaster 35004fd306cSNickeau { 35104fd306cSNickeau foreach (self::PNG_LOGO_IDS as $pngLogo) { 35204fd306cSNickeau $pngLogoPath = WikiPath::createMediaPathFromId($pngLogo); 35304fd306cSNickeau if (!FileSystems::exists($pngLogoPath)) { 35404fd306cSNickeau continue; 35504fd306cSNickeau } 35604fd306cSNickeau try { 35704fd306cSNickeau return FetcherRaster::createImageRasterFetchFromPath($pngLogoPath); 35804fd306cSNickeau } catch (ExceptionCompile $e) { 35904fd306cSNickeau LogUtility::error("Error while getting the log as raster image: The png logo ($pngLogo) returns an error. {$e->getMessage()}", self::CANONICAL, $e); 36004fd306cSNickeau continue; 36104fd306cSNickeau } 36204fd306cSNickeau } 36304fd306cSNickeau throw new ExceptionNotFound("No raster logo image was found"); 36404fd306cSNickeau } 36504fd306cSNickeau 36604fd306cSNickeau 367c30389faSgerardnico public static function getLogoUrlAsPng(): ?string 36837748cd8SNickeau { 36937748cd8SNickeau 37037748cd8SNickeau $url = null; 371c30389faSgerardnico foreach (self::PNG_LOGO_IDS as $pngId) { 37237748cd8SNickeau 373c30389faSgerardnico $svgLogoFN = mediaFN($pngId); 37437748cd8SNickeau if (file_exists($svgLogoFN)) { 375c30389faSgerardnico try { 376c30389faSgerardnico $url = FetcherRaster::createImageRasterFetchFromId($pngId) 377c30389faSgerardnico ->getFetchUrl() 378c30389faSgerardnico ->toAbsoluteUrl() 379c30389faSgerardnico ->toHtmlString(); 380c30389faSgerardnico } catch (ExceptionBadArgument|ExceptionBadSyntax|ExceptionNotExists $e) { 381c30389faSgerardnico LogUtility::internalError("Hardcoded id should not give an error for the png logo url", self::CANONICAL, $e); 382c30389faSgerardnico continue; 383c30389faSgerardnico } 38437748cd8SNickeau break; 38537748cd8SNickeau }; 38637748cd8SNickeau } 38737748cd8SNickeau return $url; 38837748cd8SNickeau } 38937748cd8SNickeau 39037748cd8SNickeau /** 39137748cd8SNickeau * @return mixed 3924cadd4f8SNickeau * @deprecated use {@link Site::getName()} instead 3934cadd4f8SNickeau * https://www.dokuwiki.org/config:title 39437748cd8SNickeau */ 39537748cd8SNickeau public static function getTitle() 39637748cd8SNickeau { 39737748cd8SNickeau global $conf; 39837748cd8SNickeau return $conf['title']; 39937748cd8SNickeau } 40037748cd8SNickeau 40137748cd8SNickeau /** 4024cadd4f8SNickeau * https://www.dokuwiki.org/config:title 4034cadd4f8SNickeau */ 4044cadd4f8SNickeau public static function setName($name) 4054cadd4f8SNickeau { 4064cadd4f8SNickeau global $conf; 4074cadd4f8SNickeau $conf['title'] = $name; 4084cadd4f8SNickeau } 4094cadd4f8SNickeau 4104cadd4f8SNickeau /** 41137748cd8SNickeau * @param string $sep - the separator - generally ("-") but not always 41237748cd8SNickeau * @return string 41337748cd8SNickeau * 41437748cd8SNickeau * Locale always canonicalizes to upper case. 41537748cd8SNickeau */ 41604fd306cSNickeau public static function getLocale(string $sep = "-"): string 41737748cd8SNickeau { 41837748cd8SNickeau 41937748cd8SNickeau $locale = null; 42037748cd8SNickeau 42137748cd8SNickeau $lang = self::getLang(); 42204fd306cSNickeau 423c3437056SNickeau $country = self::getLanguageRegion(); 42404fd306cSNickeau 42537748cd8SNickeau $locale = strtolower($lang) . $sep . strtoupper($country); 42637748cd8SNickeau 42737748cd8SNickeau return $locale; 42837748cd8SNickeau } 42937748cd8SNickeau 43037748cd8SNickeau /** 43137748cd8SNickeau * 43237748cd8SNickeau * ISO 3166 alpha-2 country code 43337748cd8SNickeau * 43437748cd8SNickeau */ 43504fd306cSNickeau public static function getLanguageRegion(): string 43637748cd8SNickeau { 43704fd306cSNickeau $region = SiteConfig::getConfValue(Region::CONF_SITE_LANGUAGE_REGION); 438c3437056SNickeau if (!empty($region)) { 439c3437056SNickeau return $region; 44037748cd8SNickeau } else { 441c3437056SNickeau 442c3437056SNickeau if (extension_loaded("intl")) { 443c3437056SNickeau $locale = locale_get_default(); 44404fd306cSNickeau $localeParts = explode("_", $locale, 2); 445c3437056SNickeau if (sizeof($localeParts) === 2) { 446c3437056SNickeau return $localeParts[1]; 447c3437056SNickeau } 448c3437056SNickeau } 44937748cd8SNickeau } 45004fd306cSNickeau return "us"; 45137748cd8SNickeau 45237748cd8SNickeau } 45337748cd8SNickeau 45437748cd8SNickeau /** 45504fd306cSNickeau * @return string 45637748cd8SNickeau * Wrapper around https://www.dokuwiki.org/config:lang 45737748cd8SNickeau */ 45804fd306cSNickeau public static function getLang(): string 45937748cd8SNickeau { 46037748cd8SNickeau global $conf; 461c3437056SNickeau $lang = $conf['lang']; 46204fd306cSNickeau if ($lang === null) { 46304fd306cSNickeau return "en"; 46437748cd8SNickeau } 46504fd306cSNickeau return $lang; 46604fd306cSNickeau } 46737748cd8SNickeau 46837748cd8SNickeau /** 46937748cd8SNickeau * In a {@link PluginUtility::isDevOrTest()} dev environment, 47037748cd8SNickeau * don't set the 47137748cd8SNickeau * https://www.dokuwiki.org/config:baseurl 47237748cd8SNickeau * to be able to test the metadata / social integration 47337748cd8SNickeau * via a tunnel 474c3437056SNickeau * 47537748cd8SNickeau */ 47604fd306cSNickeau public static function getBaseUrl(): string 47704fd306cSNickeau { 47837748cd8SNickeau 47904fd306cSNickeau /** 48004fd306cSNickeau * Same as {@link getBaseURL()} ?? 48104fd306cSNickeau */ 48204fd306cSNickeau global $conf; 48304fd306cSNickeau $baseUrl = $conf['baseurl']; 48404fd306cSNickeau if (!empty($baseUrl)) { 48504fd306cSNickeau return $baseUrl; 48604fd306cSNickeau } 48737748cd8SNickeau return DOKU_URL; 48837748cd8SNickeau 48937748cd8SNickeau } 49037748cd8SNickeau 49137748cd8SNickeau public static function getTag() 49237748cd8SNickeau { 49337748cd8SNickeau global $conf; 49470bbd7f1Sgerardnico return $conf['tag'] ?? null; 49537748cd8SNickeau } 49637748cd8SNickeau 49737748cd8SNickeau public static function setTemplate($template) 49837748cd8SNickeau { 49937748cd8SNickeau global $conf; 50037748cd8SNickeau $conf['template'] = $template; 50137748cd8SNickeau } 50237748cd8SNickeau 50304fd306cSNickeau /** 50404fd306cSNickeau * @return void 50504fd306cSNickeau * @deprecated 50604fd306cSNickeau */ 507c3437056SNickeau public static function setCacheXhtmlOn() 50837748cd8SNickeau { 50937748cd8SNickeau // ensure the value is not -1, which disables caching 51037748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 51137748cd8SNickeau global $conf; 51237748cd8SNickeau $conf['cachetime'] = 60 * 60; 51337748cd8SNickeau } 51437748cd8SNickeau 51537748cd8SNickeau public static function debugIsOn() 51637748cd8SNickeau { 51737748cd8SNickeau global $conf; 51837748cd8SNickeau return $conf['allowdebug']; 51937748cd8SNickeau } 52037748cd8SNickeau 52137748cd8SNickeau public static function setCacheDefault() 52237748cd8SNickeau { 52337748cd8SNickeau // The value is -1, which disables caching 52437748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 52537748cd8SNickeau global $conf; 52637748cd8SNickeau $conf['cachetime'] = -1; 52737748cd8SNickeau } 52837748cd8SNickeau 52937748cd8SNickeau public static function useHeadingAsTitle() 53037748cd8SNickeau { 53137748cd8SNickeau // https://www.dokuwiki.org/config:useheading 53237748cd8SNickeau global $conf; 53337748cd8SNickeau $conf['useheading'] = 1; 53437748cd8SNickeau } 53537748cd8SNickeau 53637748cd8SNickeau public static function useHeadingDefault() 53737748cd8SNickeau { 53837748cd8SNickeau // https://www.dokuwiki.org/config:useheading 53937748cd8SNickeau global $conf; 54037748cd8SNickeau $conf['useheading'] = 0; 54137748cd8SNickeau } 54237748cd8SNickeau 54337748cd8SNickeau public static function getTemplate() 54437748cd8SNickeau { 54537748cd8SNickeau global $conf; 54637748cd8SNickeau return $conf['template']; 54737748cd8SNickeau 54837748cd8SNickeau } 54937748cd8SNickeau 55037748cd8SNickeau public static function isStrapTemplate() 55137748cd8SNickeau { 55237748cd8SNickeau global $conf; 55337748cd8SNickeau return $conf['template'] == self::STRAP_TEMPLATE_NAME; 55437748cd8SNickeau } 55537748cd8SNickeau 55637748cd8SNickeau 55704fd306cSNickeau public static function getPageDirectory(): LocalPath 55837748cd8SNickeau { 55937748cd8SNickeau global $conf; 560c3437056SNickeau /** 5614cadd4f8SNickeau * Data dir is the pages dir (savedir is the data dir) 562c3437056SNickeau */ 5634cadd4f8SNickeau $pageDirectory = $conf['datadir']; 5644cadd4f8SNickeau if ($pageDirectory === null) { 56504fd306cSNickeau throw new ExceptionRuntime("The page directory ($pageDirectory) is null"); 5664cadd4f8SNickeau } 56704fd306cSNickeau return LocalPath::createFromPathString($pageDirectory); 56837748cd8SNickeau } 56937748cd8SNickeau 57037748cd8SNickeau public static function disableHeadingSectionEditing() 57137748cd8SNickeau { 57204fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 57304fd306cSNickeau ->getConfig() 57404fd306cSNickeau ->setDisableHeadingSectionEditing(); 57537748cd8SNickeau } 57637748cd8SNickeau 57737748cd8SNickeau public static function setBreadCrumbOn() 57837748cd8SNickeau { 57937748cd8SNickeau global $conf; 58037748cd8SNickeau $conf['youarehere'] = 1; 58137748cd8SNickeau } 58237748cd8SNickeau 583c3437056SNickeau public static function isHtmlRenderCacheOn(): bool 584c3437056SNickeau { 58504fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv() 58604fd306cSNickeau ->getConfig() 58704fd306cSNickeau ->isXhtmlCacheOn(); 588c3437056SNickeau } 589c3437056SNickeau 59004fd306cSNickeau /** 59104fd306cSNickeau * @return LocalPath 59204fd306cSNickeau * @deprecated 59304fd306cSNickeau */ 5944cadd4f8SNickeau public static function getDataDirectory(): LocalPath 595c3437056SNickeau { 59604fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv()->getConfig()->getDataDirectory(); 597c3437056SNickeau } 598c3437056SNickeau 599c3437056SNickeau public static function isLowQualityProtectionEnable(): bool 600c3437056SNickeau { 60104fd306cSNickeau return SiteConfig::getConfValue(LowQualityPage::CONF_LOW_QUALITY_PAGE_PROTECTION_ENABLE) === 1; 602c3437056SNickeau } 603c3437056SNickeau 60404fd306cSNickeau /** 60504fd306cSNickeau * @return string 60604fd306cSNickeau * @deprecated 60704fd306cSNickeau */ 60804fd306cSNickeau public static function getIndexPageName() 609c3437056SNickeau { 61004fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv()->getConfig()->getIndexPageName(); 611c3437056SNickeau } 612c3437056SNickeau 613c3437056SNickeau /** 614c3437056SNickeau * @return mixed - Application / Website name 615c3437056SNickeau */ 616c3437056SNickeau public static function getName() 617c3437056SNickeau { 6184cadd4f8SNickeau return self::getTitle(); 619c3437056SNickeau } 620c3437056SNickeau 621c3437056SNickeau public static function getTagLine() 622c3437056SNickeau { 623c3437056SNickeau global $conf; 624c3437056SNickeau return $conf['tagline']; 625c3437056SNickeau } 626c3437056SNickeau 627c3437056SNickeau /** 62804fd306cSNickeau * @return int 629c3437056SNickeau */ 63004fd306cSNickeau public static function getXhtmlCacheTime(): int 631c3437056SNickeau { 632c3437056SNickeau global $conf; 633c3437056SNickeau $cacheTime = $conf['cachetime']; 634c3437056SNickeau if ($cacheTime === null) { 63504fd306cSNickeau LogUtility::internalError("The global `cachetime` configuration was not set.", self::CANONICAL); 63604fd306cSNickeau return FetcherMarkup::MAX_CACHE_AGE; 637c3437056SNickeau } 63804fd306cSNickeau try { 63904fd306cSNickeau return DataType::toInteger($cacheTime); 64004fd306cSNickeau } catch (ExceptionBadArgument $e) { 64104fd306cSNickeau LogUtility::error("The global `cachetime` configuration has a value ($cacheTime) that is not an integer. Error: {$e->getMessage()}", self::CANONICAL); 64204fd306cSNickeau return FetcherMarkup::MAX_CACHE_AGE; 643c3437056SNickeau } 644c3437056SNickeau } 645c3437056SNickeau 646c3437056SNickeau /** 647c3437056SNickeau * Absolute vs Relative URL 648c3437056SNickeau * https://www.dokuwiki.org/config:canonical 649c3437056SNickeau */ 6504cadd4f8SNickeau public static function shouldUrlBeAbsolute(): bool 651c3437056SNickeau { 652c3437056SNickeau global $conf; 6534cadd4f8SNickeau $value = $conf['canonical']; 6544cadd4f8SNickeau if ($value === 1) { 6554cadd4f8SNickeau return true; 6564cadd4f8SNickeau } 6574cadd4f8SNickeau return false; 6584cadd4f8SNickeau } 6594cadd4f8SNickeau 6604cadd4f8SNickeau /** 6614cadd4f8SNickeau * @param string $description 6624cadd4f8SNickeau * Same as {@link Site::setDescription()} 6634cadd4f8SNickeau */ 6644cadd4f8SNickeau public static function setTagLine(string $description) 6654cadd4f8SNickeau { 6664cadd4f8SNickeau global $conf; 6674cadd4f8SNickeau $conf['tagline'] = $description; 6684cadd4f8SNickeau } 6694cadd4f8SNickeau 6704cadd4f8SNickeau /** 6714cadd4f8SNickeau * @param string $description 6724cadd4f8SNickeau * 6734cadd4f8SNickeau */ 6744cadd4f8SNickeau public static function setDescription(string $description) 6754cadd4f8SNickeau { 6764cadd4f8SNickeau self::setTagLine($description); 6774cadd4f8SNickeau } 6784cadd4f8SNickeau 67904fd306cSNickeau /** 68004fd306cSNickeau * @param string $primaryColorValue 68104fd306cSNickeau * @return void 68204fd306cSNickeau * @deprecated 68304fd306cSNickeau */ 6844cadd4f8SNickeau public static function setPrimaryColor(string $primaryColorValue) 6854cadd4f8SNickeau { 68604fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 68704fd306cSNickeau ->getConfig() 68804fd306cSNickeau ->setPrimaryColor($primaryColorValue); 6894cadd4f8SNickeau } 6904cadd4f8SNickeau 69104fd306cSNickeau /** 69204fd306cSNickeau * @param $default 69304fd306cSNickeau * @return ColorRgb|null 69404fd306cSNickeau * @deprecated use {@link SiteConfig::getPrimaryColor()} instead 69504fd306cSNickeau */ 69604fd306cSNickeau public static function getPrimaryColor(string $default = null): ?ColorRgb 6974cadd4f8SNickeau { 69804fd306cSNickeau try { 69904fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv() 70004fd306cSNickeau ->getConfig() 70104fd306cSNickeau ->getPrimaryColor(); 70204fd306cSNickeau } catch (ExceptionNotFound $e) { 70304fd306cSNickeau if ($default === null) { 7044cadd4f8SNickeau return null; 7054cadd4f8SNickeau } 7064cadd4f8SNickeau try { 70704fd306cSNickeau return ColorRgb::createFromString($default); 70804fd306cSNickeau } catch (ExceptionBadArgument $e) { 70904fd306cSNickeau LogUtility::internalError("The value ($default) is not a valid color"); 7104cadd4f8SNickeau return null; 7114cadd4f8SNickeau } 7124cadd4f8SNickeau } 71304fd306cSNickeau } 7144cadd4f8SNickeau 7154cadd4f8SNickeau public static function getSecondaryColor($default = null): ?ColorRgb 7164cadd4f8SNickeau { 7174cadd4f8SNickeau $value = Site::getSecondaryColorValue($default); 7184cadd4f8SNickeau if ($value === null) { 7194cadd4f8SNickeau return null; 7204cadd4f8SNickeau } 7214cadd4f8SNickeau try { 7224cadd4f8SNickeau return ColorRgb::createFromString($value); 72304fd306cSNickeau } catch (ExceptionCompile $e) { 7244cadd4f8SNickeau LogUtility::msg("The secondary color value configuration ($value) is not valid. Error: {$e->getMessage()}"); 7254cadd4f8SNickeau return null; 7264cadd4f8SNickeau } 7274cadd4f8SNickeau } 7284cadd4f8SNickeau 7294cadd4f8SNickeau public static function setSecondaryColor(string $secondaryColorValue) 7304cadd4f8SNickeau { 73104fd306cSNickeau self::setConf(ColorRgb::SECONDARY_COLOR_CONF, $secondaryColorValue); 7324cadd4f8SNickeau } 7334cadd4f8SNickeau 7344cadd4f8SNickeau public static function unsetPrimaryColor() 7354cadd4f8SNickeau { 73604fd306cSNickeau self::setConf(BrandingColors::PRIMARY_COLOR_CONF, null); 7374cadd4f8SNickeau } 7384cadd4f8SNickeau 7394cadd4f8SNickeau 74004fd306cSNickeau /** 74104fd306cSNickeau * @return bool 74204fd306cSNickeau * @deprecated 74304fd306cSNickeau */ 7444cadd4f8SNickeau public static function isBrandingColorInheritanceEnabled(): bool 7454cadd4f8SNickeau { 74604fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv()->getConfig()->isBrandingColorInheritanceEnabled(); 7474cadd4f8SNickeau } 7484cadd4f8SNickeau 7494cadd4f8SNickeau 7504cadd4f8SNickeau /** 75104fd306cSNickeau * @param $default 75204fd306cSNickeau * @return string|null 7534cadd4f8SNickeau */ 75404fd306cSNickeau public static function getPrimaryColorValue($default = null): ?string 7554cadd4f8SNickeau { 75604fd306cSNickeau $value = SiteConfig::getConfValue(BrandingColors::PRIMARY_COLOR_CONF, $default); 7574cadd4f8SNickeau if ($value !== null && trim($value) !== "") { 7584cadd4f8SNickeau return $value; 7594cadd4f8SNickeau } 7604cadd4f8SNickeau if (PluginUtility::isTest()) { 7614cadd4f8SNickeau // too much trouble 7624cadd4f8SNickeau // the load of styles is not consistent 7634cadd4f8SNickeau return null; 7644cadd4f8SNickeau } 7654cadd4f8SNickeau $styles = ColorRgb::getDokuWikiStyles(); 7664cadd4f8SNickeau return $styles["replacements"]["__theme_color__"]; 7674cadd4f8SNickeau 7684cadd4f8SNickeau } 7694cadd4f8SNickeau 7704cadd4f8SNickeau public static function getSecondaryColorValue($default = null) 7714cadd4f8SNickeau { 77204fd306cSNickeau $value = SiteConfig::getConfValue(ColorRgb::SECONDARY_COLOR_CONF, $default); 7734cadd4f8SNickeau if ($value === null || trim($value) === "") { 7744cadd4f8SNickeau return null; 7754cadd4f8SNickeau } 7764cadd4f8SNickeau return $value; 7774cadd4f8SNickeau } 7784cadd4f8SNickeau 7794cadd4f8SNickeau public static function setCanonicalUrlType(string $value) 7804cadd4f8SNickeau { 78104fd306cSNickeau self::setConf(PageUrlType::CONF_CANONICAL_URL_TYPE, $value); 7824cadd4f8SNickeau } 7834cadd4f8SNickeau 7844cadd4f8SNickeau public static function setCanonicalUrlTypeToDefault() 7854cadd4f8SNickeau { 78604fd306cSNickeau self::setConf(PageUrlType::CONF_CANONICAL_URL_TYPE, null); 7874cadd4f8SNickeau } 7884cadd4f8SNickeau 7894cadd4f8SNickeau public static function isBrandingColorInheritanceFunctional(): bool 7904cadd4f8SNickeau { 7914cadd4f8SNickeau return self::isBrandingColorInheritanceEnabled() && Site::getPrimaryColorValue() !== null; 7924cadd4f8SNickeau } 7934cadd4f8SNickeau 7944cadd4f8SNickeau public static function getMediaDirectory(): LocalPath 7954cadd4f8SNickeau { 7964cadd4f8SNickeau global $conf; 7974cadd4f8SNickeau $mediaDirectory = $conf['mediadir']; 7984cadd4f8SNickeau if ($mediaDirectory === null) { 79904fd306cSNickeau throw new ExceptionRuntime("The media directory ($mediaDirectory) is null"); 8004cadd4f8SNickeau } 80104fd306cSNickeau return LocalPath::createFromPathString($mediaDirectory); 8024cadd4f8SNickeau } 8034cadd4f8SNickeau 8044cadd4f8SNickeau public static function getCacheDirectory(): LocalPath 8054cadd4f8SNickeau { 8064cadd4f8SNickeau global $conf; 8074cadd4f8SNickeau $cacheDirectory = $conf['cachedir']; 8084cadd4f8SNickeau if ($cacheDirectory === null) { 80904fd306cSNickeau throw new ExceptionRuntime("The cache directory ($cacheDirectory) is null"); 8104cadd4f8SNickeau } 81104fd306cSNickeau return LocalPath::createFromPathString($cacheDirectory); 8124cadd4f8SNickeau } 8134cadd4f8SNickeau 8144cadd4f8SNickeau 8154cadd4f8SNickeau /** 81604fd306cSNickeau * @throws ExceptionCompile 8174cadd4f8SNickeau */ 81804fd306cSNickeau private static function checkTemplateVersion() 81904fd306cSNickeau { 82004fd306cSNickeau /** 82104fd306cSNickeau * Check the version 82204fd306cSNickeau */ 82304fd306cSNickeau if (self::$STRAP_TEMPLATE_INFO === null) { 82404fd306cSNickeau self::$STRAP_TEMPLATE_INFO = confToHash(__DIR__ . '/../../../tpl/strap/template.info.txt'); 82504fd306cSNickeau } 82604fd306cSNickeau $templateVersion = self::$STRAP_TEMPLATE_INFO['version']; 82704fd306cSNickeau $comboVersion = PluginUtility::$INFO_PLUGIN['version']; 82804fd306cSNickeau /** @noinspection DuplicatedCode */ 82904fd306cSNickeau if ($templateVersion !== $comboVersion) { 83004fd306cSNickeau $strapName = "Strap"; 83104fd306cSNickeau $comboName = "Combo"; 83204fd306cSNickeau $strapLink = "<a href=\"https://www.dokuwiki.org/template:strap\">$strapName</a>"; 83304fd306cSNickeau $comboLink = "<a href=\"https://www.dokuwiki.org/plugin:combo\">$comboName</a>"; 83404fd306cSNickeau if ($comboVersion > $templateVersion) { 83504fd306cSNickeau $upgradeTarget = $strapName; 83604fd306cSNickeau } else { 83704fd306cSNickeau $upgradeTarget = $comboName; 83804fd306cSNickeau } 83904fd306cSNickeau $upgradeLink = "<a href=\"" . wl() . "&do=admin&page=extension" . "\">upgrade <b>$upgradeTarget</b> via the extension manager</a>"; 84004fd306cSNickeau $message = "You should $upgradeLink to the latest version to get a fully functional experience. The version of $comboLink is ($comboVersion) while the version of $strapLink is ($templateVersion)."; 84104fd306cSNickeau LogUtility::msg($message); 84204fd306cSNickeau throw new ExceptionCompile($message); 8434cadd4f8SNickeau } 8444cadd4f8SNickeau } 8454cadd4f8SNickeau 84604fd306cSNickeau /** 84704fd306cSNickeau * @throws ExceptionNotFound 84804fd306cSNickeau */ 84904fd306cSNickeau public static function getLogoImage(): WikiPath 85004fd306cSNickeau { 85104fd306cSNickeau $logosImages = Site::getLogoImagesAsPath(); 85204fd306cSNickeau if (empty($logosImages)) { 85304fd306cSNickeau throw new ExceptionNotFound("No logo image was installed", "logo"); 85404fd306cSNickeau } 85504fd306cSNickeau return $logosImages[0]; 85604fd306cSNickeau } 85704fd306cSNickeau 85804fd306cSNickeau 85904fd306cSNickeau /** 86004fd306cSNickeau * @return void 86104fd306cSNickeau * @deprecated 86204fd306cSNickeau */ 86304fd306cSNickeau public static function enableSectionEditing() 86404fd306cSNickeau { 86504fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv()->getConfig()->setEnableSectionEditing(); 86604fd306cSNickeau } 86704fd306cSNickeau 86804fd306cSNickeau public static function setDefaultTemplate() 86904fd306cSNickeau { 87004fd306cSNickeau global $conf; 87104fd306cSNickeau $conf['template'] = "dokuwiki"; 87204fd306cSNickeau } 87304fd306cSNickeau 87404fd306cSNickeau /** 87504fd306cSNickeau * @return LocalPath[] 87604fd306cSNickeau */ 87704fd306cSNickeau public static function getConfigurationFiles(): array 87804fd306cSNickeau { 87904fd306cSNickeau $files = []; 88004fd306cSNickeau foreach (getConfigFiles('main') as $fileConfig) { 88104fd306cSNickeau $files[] = LocalPath::createFromPathString($fileConfig); 88204fd306cSNickeau } 88304fd306cSNickeau return $files; 88404fd306cSNickeau } 88504fd306cSNickeau 88604fd306cSNickeau /** 88704fd306cSNickeau * @return string the base directory for all url 88804fd306cSNickeau * @throws ExceptionNotFound 88904fd306cSNickeau */ 89004fd306cSNickeau public static function getUrlPathBaseDir(): string 89104fd306cSNickeau { 89204fd306cSNickeau /** 89304fd306cSNickeau * Based on {@link getBaseURL()} 89404fd306cSNickeau */ 89504fd306cSNickeau global $conf; 89604fd306cSNickeau if (!empty($conf['basedir'])) { 89704fd306cSNickeau return $conf['basedir']; 89804fd306cSNickeau } 89904fd306cSNickeau $scriptName = LocalPath::createFromPathString($_SERVER['SCRIPT_NAME']); 90004fd306cSNickeau if ($scriptName->getExtension() === 'php') { 90104fd306cSNickeau return Url::toUrlSeparator($scriptName->getParent()->toAbsoluteId()); 90204fd306cSNickeau } 90304fd306cSNickeau $phpSelf = LocalPath::createFromPathString($_SERVER['PHP_SELF']); 90404fd306cSNickeau if ($phpSelf->getExtension() === "php") { 90504fd306cSNickeau return Url::toUrlSeparator($scriptName->getParent()->toAbsoluteId()); 90604fd306cSNickeau } 90704fd306cSNickeau if ($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']) { 90804fd306cSNickeau $dir = preg_replace('/^' . preg_quote($_SERVER['DOCUMENT_ROOT'], '/') . '/', '', 90904fd306cSNickeau $_SERVER['SCRIPT_FILENAME']); 91004fd306cSNickeau return Url::toUrlSeparator(dirname('/' . $dir)); 91104fd306cSNickeau } 91204fd306cSNickeau throw new ExceptionNotFound("No Base dir"); 91304fd306cSNickeau 91404fd306cSNickeau } 91504fd306cSNickeau 916*ad79af66SNico public static function getUseSlash(): int 917*ad79af66SNico { 918*ad79af66SNico global $conf; 919*ad79af66SNico $useSlash = $conf['useslash']; 920*ad79af66SNico return DataType::toBoolean($useSlash); 921*ad79af66SNico 922*ad79af66SNico } 923*ad79af66SNico 92404fd306cSNickeau public static function getUrlRewrite(): string 92504fd306cSNickeau { 92604fd306cSNickeau global $conf; 92704fd306cSNickeau $confKey = UrlRewrite::CONF_KEY; 92804fd306cSNickeau $urlRewrite = $conf[$confKey]; 92904fd306cSNickeau try { 93004fd306cSNickeau $urlRewriteInt = DataType::toInteger($urlRewrite); 93104fd306cSNickeau } catch (ExceptionBadArgument $e) { 93204fd306cSNickeau LogUtility::internalError("The ($confKey) configuration is not an integer ($urlRewrite)"); 93304fd306cSNickeau return UrlRewrite::NO_REWRITE; 93404fd306cSNickeau } 93504fd306cSNickeau switch ($urlRewriteInt) { 93604fd306cSNickeau case UrlRewrite::NO_REWRITE_DOKU_VALUE: 93704fd306cSNickeau return UrlRewrite::NO_REWRITE; 93804fd306cSNickeau case UrlRewrite::WEB_SERVER_REWRITE_DOKU_VALUE: 93904fd306cSNickeau return UrlRewrite::WEB_SERVER_REWRITE; 94004fd306cSNickeau case UrlRewrite::DOKU_REWRITE_DOKU_VALUE: 94104fd306cSNickeau return UrlRewrite::VALUE_DOKU_REWRITE; 94204fd306cSNickeau default: 94304fd306cSNickeau LogUtility::internalError("The ($confKey) configuration value ($urlRewriteInt) is not a valid value (0, 1 or 2). No rewrite"); 94404fd306cSNickeau return UrlRewrite::NO_REWRITE; 94504fd306cSNickeau } 94604fd306cSNickeau } 94704fd306cSNickeau 94804fd306cSNickeau public static function getDefaultMediaLinking(): string 94904fd306cSNickeau { 95004fd306cSNickeau return SiteConfig::getConfValue(MediaMarkup::CONF_DEFAULT_LINKING, MediaMarkup::LINKING_DIRECT_VALUE); 95104fd306cSNickeau } 95204fd306cSNickeau 95304fd306cSNickeau public static function shouldEndpointUrlBeAbsolute(): bool 95404fd306cSNickeau { 95504fd306cSNickeau global $conf; 95604fd306cSNickeau return $conf['canonical'] === 1; 95704fd306cSNickeau } 95804fd306cSNickeau 95904fd306cSNickeau public static function setEndpointToAbsoluteUrl() 96004fd306cSNickeau { 96104fd306cSNickeau global $conf; 96204fd306cSNickeau $conf['canonical'] = 1; 96304fd306cSNickeau } 96404fd306cSNickeau 96504fd306cSNickeau public static function setEndpointToDefaultUrl() 96604fd306cSNickeau { 96704fd306cSNickeau global $conf; 96804fd306cSNickeau $conf['canonical'] = 0; 96904fd306cSNickeau } 97004fd306cSNickeau 97104fd306cSNickeau public function getConfig(): SiteConfig 97204fd306cSNickeau { 97304fd306cSNickeau if (isset($this->config)) { 97404fd306cSNickeau return $this->config; 97504fd306cSNickeau } 97604fd306cSNickeau $this->config = new SiteConfig($this->executingContext); 97704fd306cSNickeau return $this->config; 978c3437056SNickeau } 979c3437056SNickeau 98037748cd8SNickeau 98137748cd8SNickeau} 982