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 16*04fd306cSNickeauuse ComboStrap\Meta\Field\PageTemplateName; 17*04fd306cSNickeauuse ComboStrap\Meta\Field\Region; 18*04fd306cSNickeauuse ComboStrap\Web\Url; 19*04fd306cSNickeauuse ComboStrap\Web\UrlRewrite; 2082a60d03SNickeauuse Exception; 21c3437056SNickeau 2237748cd8SNickeauclass Site 2337748cd8SNickeau{ 2437748cd8SNickeau 2537748cd8SNickeau const STRAP_TEMPLATE_NAME = "strap"; 2637748cd8SNickeau 2737748cd8SNickeau const SVG_LOGO_IDS = array( 28*04fd306cSNickeau 'wiki:logo.svg', 29*04fd306cSNickeau 'logo.svg' 3037748cd8SNickeau ); 3137748cd8SNickeau 3237748cd8SNickeau const PNG_LOGO_IDS = array( 33*04fd306cSNickeau 'logo.png', 34*04fd306cSNickeau 'wiki:logo.png', 35*04fd306cSNickeau 'favicon-32×32.png', 36*04fd306cSNickeau 'favicon-16×16.png', 37*04fd306cSNickeau 'apple-touch-icon.png', 38*04fd306cSNickeau 'android-chrome-192x192.png' 3937748cd8SNickeau ); 40*04fd306cSNickeau /** 41*04fd306cSNickeau * Name of the main header slot 42*04fd306cSNickeau */ 43*04fd306cSNickeau public const SLOT_MAIN_HEADER_NAME = "slot_main_header"; 44*04fd306cSNickeau /** 45*04fd306cSNickeau * Name of the main footer slot 46*04fd306cSNickeau */ 47*04fd306cSNickeau public const SLOT_MAIN_FOOTER_NAME = "slot_main_footer"; 48*04fd306cSNickeau 49*04fd306cSNickeau public const SLOT_MAIN_SIDE_NAME = "slot_main_side"; 50*04fd306cSNickeau 51*04fd306cSNickeau const CANONICAL = "configuration"; 52*04fd306cSNickeau /** 53*04fd306cSNickeau * Strap Template meta (version, release date, ...) 54*04fd306cSNickeau * @var array 55*04fd306cSNickeau */ 56*04fd306cSNickeau private static $STRAP_TEMPLATE_INFO; 57*04fd306cSNickeau private $executingContext; 58*04fd306cSNickeau 59*04fd306cSNickeau /** 60*04fd306cSNickeau * @param ExecutionContext $executingContext 61*04fd306cSNickeau */ 62*04fd306cSNickeau public function __construct(ExecutionContext $executingContext) 63*04fd306cSNickeau { 64*04fd306cSNickeau $this->executingContext = $executingContext; 65*04fd306cSNickeau } 6637748cd8SNickeau 6737748cd8SNickeau 6837748cd8SNickeau /** 69*04fd306cSNickeau * @return WikiPath[] 701fa8c418SNickeau */ 71*04fd306cSNickeau public static function getLogoImagesAsPath(): array 7237748cd8SNickeau { 731fa8c418SNickeau $logosPaths = PluginUtility::mergeAttributes(self::PNG_LOGO_IDS, self::SVG_LOGO_IDS); 741fa8c418SNickeau $logos = []; 751fa8c418SNickeau foreach ($logosPaths as $logoPath) { 76*04fd306cSNickeau $dokuPath = WikiPath::createMediaPathFromId($logoPath); 7782a60d03SNickeau if (FileSystems::exists($dokuPath)) { 7882a60d03SNickeau try { 79*04fd306cSNickeau $logos[] = $dokuPath; 8082a60d03SNickeau } catch (Exception $e) { 8182a60d03SNickeau // The image is not valid 8282a60d03SNickeau LogUtility::msg("The logo ($logoPath) is not a valid image. {$e->getMessage()}"); 8382a60d03SNickeau } 8482a60d03SNickeau } 851fa8c418SNickeau } 861fa8c418SNickeau return $logos; 8737748cd8SNickeau } 8837748cd8SNickeau 89*04fd306cSNickeau /** 90*04fd306cSNickeau * @deprecated see {@link SiteConfig::setUrlRewriteToDoku()} 91*04fd306cSNickeau */ 92*04fd306cSNickeau public static function setUrlRewriteToDoku() 93*04fd306cSNickeau { 94*04fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv()->getConfig() 95*04fd306cSNickeau ->setUrlRewriteToDoku(); 96*04fd306cSNickeau } 97*04fd306cSNickeau 98*04fd306cSNickeau /** 99*04fd306cSNickeau * Web server rewrite (Apache rewrite (htaccess), Nginx) 100*04fd306cSNickeau * @deprecated see {@link SiteConfig::setUrlRewriteToWebServer()} 101*04fd306cSNickeau */ 102*04fd306cSNickeau public static function setUrlRewriteToWebServer() 103*04fd306cSNickeau { 104*04fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv()->getConfig() 105*04fd306cSNickeau ->setUrlRewriteToWebServer(); 106*04fd306cSNickeau } 107*04fd306cSNickeau 108*04fd306cSNickeau /** 109*04fd306cSNickeau * https://www.dokuwiki.org/config:useslash 110*04fd306cSNickeau * @return void 111*04fd306cSNickeau */ 112*04fd306cSNickeau public static function useSlashSeparatorInEndpointUrl() 113*04fd306cSNickeau { 114*04fd306cSNickeau global $conf; 115*04fd306cSNickeau $conf['useslash'] = 1; // use slash instead of ; 116*04fd306cSNickeau } 117*04fd306cSNickeau 118*04fd306cSNickeau 119*04fd306cSNickeau public static function getUrlEndpointSeparator(): string 120*04fd306cSNickeau { 121*04fd306cSNickeau $defaultSeparator = WikiPath::NAMESPACE_SEPARATOR_DOUBLE_POINT; 122*04fd306cSNickeau $slashSeparator = "/"; 123*04fd306cSNickeau global $conf; 124*04fd306cSNickeau $key = 'useslash'; 125*04fd306cSNickeau $value = $conf[$key]; 126*04fd306cSNickeau try { 127*04fd306cSNickeau $valueInt = DataType::toInteger($value); 128*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 129*04fd306cSNickeau LogUtility::internalError("The ($key) configuration does not have an integer value ($value). Default separator returned"); 130*04fd306cSNickeau return $defaultSeparator; 131*04fd306cSNickeau } 132*04fd306cSNickeau switch ($valueInt) { 133*04fd306cSNickeau case 0: 134*04fd306cSNickeau return $defaultSeparator; 135*04fd306cSNickeau case 1: 136*04fd306cSNickeau return $slashSeparator; 137*04fd306cSNickeau default: 138*04fd306cSNickeau LogUtility::internalError("The ($key) configuration has an integer value ($valueInt) that is not a valid one (0 or 1). Default separator returned"); 139*04fd306cSNickeau return $defaultSeparator; 140*04fd306cSNickeau } 141*04fd306cSNickeau } 142*04fd306cSNickeau 143*04fd306cSNickeau 144*04fd306cSNickeau public static function getTocMinHeadings(): int 145*04fd306cSNickeau { 146*04fd306cSNickeau global $conf; 147*04fd306cSNickeau $confKey = 'tocminheads'; 148*04fd306cSNickeau $tocMinHeads = $conf[$confKey]; 149*04fd306cSNickeau if ($tocMinHeads === null) { 150*04fd306cSNickeau return 0; 151*04fd306cSNickeau } 152*04fd306cSNickeau try { 153*04fd306cSNickeau return DataType::toInteger($tocMinHeads); 154*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 155*04fd306cSNickeau LogUtility::error("The configuration ($confKey) is not an integer. Error:{$e->getMessage()}", self::CANONICAL); 156*04fd306cSNickeau return 0; 157*04fd306cSNickeau } 158*04fd306cSNickeau } 159*04fd306cSNickeau 160*04fd306cSNickeau 161*04fd306cSNickeau /** 162*04fd306cSNickeau * @param int $int 163*04fd306cSNickeau * @deprecated 164*04fd306cSNickeau */ 165*04fd306cSNickeau public static function setTocMinHeading(int $int) 166*04fd306cSNickeau { 167*04fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 168*04fd306cSNickeau ->getConfig() 169*04fd306cSNickeau ->setTocMinHeading($int); 170*04fd306cSNickeau } 171*04fd306cSNickeau 172*04fd306cSNickeau public static function getTopTocLevel(): int 173*04fd306cSNickeau { 174*04fd306cSNickeau global $conf; 175*04fd306cSNickeau $confKey = 'toptoclevel'; 176*04fd306cSNickeau $value = $conf[$confKey]; 177*04fd306cSNickeau try { 178*04fd306cSNickeau return DataType::toInteger($value); 179*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 180*04fd306cSNickeau LogUtility::error("The configuration ($confKey) has a value ($value) that is not an integer", self::CANONICAL); 181*04fd306cSNickeau return 1; 182*04fd306cSNickeau } 183*04fd306cSNickeau } 184*04fd306cSNickeau 185*04fd306cSNickeau /** 186*04fd306cSNickeau * @param int $int 187*04fd306cSNickeau * @return void 188*04fd306cSNickeau * @deprecated 189*04fd306cSNickeau */ 190*04fd306cSNickeau public static function setTocTopLevel(int $int) 191*04fd306cSNickeau { 192*04fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 193*04fd306cSNickeau ->getConfig() 194*04fd306cSNickeau ->setTocTopLevel($int); 195*04fd306cSNickeau 196*04fd306cSNickeau } 197*04fd306cSNickeau 198*04fd306cSNickeau /** 199*04fd306cSNickeau * @return int 200*04fd306cSNickeau * https://www.dokuwiki.org/config:breadcrumbs 201*04fd306cSNickeau */ 202*04fd306cSNickeau public static function getVisitedPagesCountInHistoricalBreadCrumb(): int 203*04fd306cSNickeau { 204*04fd306cSNickeau global $conf; 205*04fd306cSNickeau $confKey = 'breadcrumbs'; 206*04fd306cSNickeau $visitedPagesInBreadCrumb = $conf[$confKey]; 207*04fd306cSNickeau $defaultReturnValue = 10; 208*04fd306cSNickeau if ($visitedPagesInBreadCrumb === null) { 209*04fd306cSNickeau return $defaultReturnValue; 210*04fd306cSNickeau } 211*04fd306cSNickeau try { 212*04fd306cSNickeau return DataType::toInteger($visitedPagesInBreadCrumb); 213*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 214*04fd306cSNickeau LogUtility::error("The configuration ($confKey) has value ($visitedPagesInBreadCrumb) that is not an integer. Error:{$e->getMessage()}"); 215*04fd306cSNickeau return $defaultReturnValue; 216*04fd306cSNickeau } 217*04fd306cSNickeau 218*04fd306cSNickeau } 219*04fd306cSNickeau 220*04fd306cSNickeau /** 221*04fd306cSNickeau * This setting enables the standard DokuWiki XHTML renderer to be replaced by a render plugin that also provides XHTML output. 222*04fd306cSNickeau * @param string $string 223*04fd306cSNickeau * @return void 224*04fd306cSNickeau */ 225*04fd306cSNickeau public static function setXhtmlRenderer(string $string) 226*04fd306cSNickeau { 227*04fd306cSNickeau global $conf; 228*04fd306cSNickeau $conf["renderer_xhtml"] = $string; 229*04fd306cSNickeau } 230*04fd306cSNickeau 231*04fd306cSNickeau /** 232*04fd306cSNickeau * The host of the actual server 233*04fd306cSNickeau * (may be virtual) 234*04fd306cSNickeau * @return string 235*04fd306cSNickeau */ 236*04fd306cSNickeau public static function getServerHost(): string 237*04fd306cSNickeau { 238*04fd306cSNickeau /** 239*04fd306cSNickeau * Based on {@link getBaseURL()} 240*04fd306cSNickeau * to be dokuwiki compliant 241*04fd306cSNickeau */ 242*04fd306cSNickeau $remoteHost = $_SERVER['HTTP_HOST']; 243*04fd306cSNickeau if ($remoteHost !== null) { 244*04fd306cSNickeau return $remoteHost; 245*04fd306cSNickeau } 246*04fd306cSNickeau $remoteHost = $_SERVER['SERVER_NAME']; 247*04fd306cSNickeau if ($remoteHost !== null) { 248*04fd306cSNickeau return $remoteHost; 249*04fd306cSNickeau } 250*04fd306cSNickeau /** 251*04fd306cSNickeau * OS name 252*04fd306cSNickeau */ 253*04fd306cSNickeau return php_uname('n'); 254*04fd306cSNickeau } 255*04fd306cSNickeau 256*04fd306cSNickeau public static function getLangDirection() 257*04fd306cSNickeau { 258*04fd306cSNickeau global $lang; 259*04fd306cSNickeau return $lang['direction']; 260*04fd306cSNickeau } 261*04fd306cSNickeau 262*04fd306cSNickeau /** 263*04fd306cSNickeau * Set a site configuration outside a {@link ExecutionContext} 264*04fd306cSNickeau * It permits to configure the installation before execution 265*04fd306cSNickeau * 266*04fd306cSNickeau * For instance, we set the {@link PageTemplateName::CONF_DEFAULT_NAME default page layout} as {@link PageTemplateName::BLANK_TEMPLATE_VALUE} 267*04fd306cSNickeau * in test by default to speed ud test. In a normal environment, the default is {@link PageTemplateName::HOLY_TEMPLATE_VALUE} 268*04fd306cSNickeau * 269*04fd306cSNickeau * @param $key 270*04fd306cSNickeau * @param $value 271*04fd306cSNickeau * @param string|null $namespace - the plugin name 272*04fd306cSNickeau * @return void 273*04fd306cSNickeau * @deprecated use {@link SiteConfig::setConf()} 274*04fd306cSNickeau */ 275*04fd306cSNickeau public static function setConf($key, $value, ?string $namespace = PluginUtility::PLUGIN_BASE_NAME) 276*04fd306cSNickeau { 277*04fd306cSNickeau global $conf; 278*04fd306cSNickeau if ($namespace !== null) { 279*04fd306cSNickeau $conf['plugin'][$namespace][$key] = $value; 280*04fd306cSNickeau } else { 281*04fd306cSNickeau $conf[$key] = $value; 282*04fd306cSNickeau } 283*04fd306cSNickeau } 284*04fd306cSNickeau 285*04fd306cSNickeau public static function getLangObject(): Lang 286*04fd306cSNickeau { 287*04fd306cSNickeau return Lang::createFromValue(Site::getLang()); 288*04fd306cSNickeau } 289*04fd306cSNickeau 290*04fd306cSNickeau 291*04fd306cSNickeau public static function getOldDirectory(): LocalPath 292*04fd306cSNickeau { 293*04fd306cSNickeau global $conf; 294*04fd306cSNickeau /** 295*04fd306cSNickeau * Data dir is the pages dir (savedir is the data dir) 296*04fd306cSNickeau */ 297*04fd306cSNickeau $oldDirConf = $conf['olddir']; 298*04fd306cSNickeau if ($oldDirConf === null) { 299*04fd306cSNickeau throw new ExceptionRuntime("The old directory ($oldDirConf) is null"); 300*04fd306cSNickeau } 301*04fd306cSNickeau return LocalPath::createFromPathString($oldDirConf); 302*04fd306cSNickeau } 303*04fd306cSNickeau 304*04fd306cSNickeau 305*04fd306cSNickeau function getEmailObfuscationConfiguration() 306*04fd306cSNickeau { 307*04fd306cSNickeau global $conf; 308*04fd306cSNickeau return $conf['mailguard']; 309*04fd306cSNickeau } 31037748cd8SNickeau 31137748cd8SNickeau /** 31237748cd8SNickeau * @return string|null 31337748cd8SNickeau */ 3144cadd4f8SNickeau public static function getLogoUrlAsSvg(): ?string 31537748cd8SNickeau { 31637748cd8SNickeau 31737748cd8SNickeau 31837748cd8SNickeau $url = null; 31937748cd8SNickeau foreach (self::SVG_LOGO_IDS as $svgLogo) { 32037748cd8SNickeau 32137748cd8SNickeau $svgLogoFN = mediaFN($svgLogo); 32237748cd8SNickeau if (file_exists($svgLogoFN)) { 32337748cd8SNickeau $url = ml($svgLogo, '', true, '', true); 32437748cd8SNickeau break; 3254cadd4f8SNickeau } 32637748cd8SNickeau } 32737748cd8SNickeau return $url; 32837748cd8SNickeau } 32937748cd8SNickeau 330*04fd306cSNickeau /** 331*04fd306cSNickeau * @throws ExceptionNotFound 332*04fd306cSNickeau */ 333*04fd306cSNickeau public static function getLogoAsSvgImage(): WikiPath 3344cadd4f8SNickeau { 3354cadd4f8SNickeau foreach (self::SVG_LOGO_IDS as $svgLogo) { 336*04fd306cSNickeau $image = WikiPath::createMediaPathFromId($svgLogo); 337*04fd306cSNickeau if (FileSystems::exists($image)) { 3384cadd4f8SNickeau return $image; 3394cadd4f8SNickeau } 3404cadd4f8SNickeau } 341*04fd306cSNickeau throw new ExceptionNotFound("No Svg Logo Image found"); 3424cadd4f8SNickeau } 3434cadd4f8SNickeau 344*04fd306cSNickeau /** 345*04fd306cSNickeau * @throws ExceptionNotFound 346*04fd306cSNickeau */ 347*04fd306cSNickeau public static function getLogoAsRasterImage(): FetcherRaster 348*04fd306cSNickeau { 349*04fd306cSNickeau foreach (self::PNG_LOGO_IDS as $pngLogo) { 350*04fd306cSNickeau $pngLogoPath = WikiPath::createMediaPathFromId($pngLogo); 351*04fd306cSNickeau if (!FileSystems::exists($pngLogoPath)) { 352*04fd306cSNickeau continue; 353*04fd306cSNickeau } 354*04fd306cSNickeau try { 355*04fd306cSNickeau return FetcherRaster::createImageRasterFetchFromPath($pngLogoPath); 356*04fd306cSNickeau } catch (ExceptionCompile $e) { 357*04fd306cSNickeau LogUtility::error("Error while getting the log as raster image: The png logo ($pngLogo) returns an error. {$e->getMessage()}", self::CANONICAL, $e); 358*04fd306cSNickeau continue; 359*04fd306cSNickeau } 360*04fd306cSNickeau } 361*04fd306cSNickeau throw new ExceptionNotFound("No raster logo image was found"); 362*04fd306cSNickeau } 363*04fd306cSNickeau 364*04fd306cSNickeau 36537748cd8SNickeau public static function getLogoUrlAsPng() 36637748cd8SNickeau { 36737748cd8SNickeau 36837748cd8SNickeau $url = null; 36937748cd8SNickeau foreach (self::PNG_LOGO_IDS as $svgLogo) { 37037748cd8SNickeau 37137748cd8SNickeau $svgLogoFN = mediaFN($svgLogo); 37237748cd8SNickeau 37337748cd8SNickeau if (file_exists($svgLogoFN)) { 37437748cd8SNickeau $url = ml($svgLogo, '', true, '', true); 37537748cd8SNickeau break; 37637748cd8SNickeau }; 37737748cd8SNickeau } 37837748cd8SNickeau return $url; 37937748cd8SNickeau } 38037748cd8SNickeau 38137748cd8SNickeau /** 38237748cd8SNickeau * @return mixed 3834cadd4f8SNickeau * @deprecated use {@link Site::getName()} instead 3844cadd4f8SNickeau * https://www.dokuwiki.org/config:title 38537748cd8SNickeau */ 38637748cd8SNickeau public static function getTitle() 38737748cd8SNickeau { 38837748cd8SNickeau global $conf; 38937748cd8SNickeau return $conf['title']; 39037748cd8SNickeau } 39137748cd8SNickeau 39237748cd8SNickeau /** 3934cadd4f8SNickeau * https://www.dokuwiki.org/config:title 3944cadd4f8SNickeau */ 3954cadd4f8SNickeau public static function setName($name) 3964cadd4f8SNickeau { 3974cadd4f8SNickeau global $conf; 3984cadd4f8SNickeau $conf['title'] = $name; 3994cadd4f8SNickeau } 4004cadd4f8SNickeau 4014cadd4f8SNickeau /** 40237748cd8SNickeau * @param string $sep - the separator - generally ("-") but not always 40337748cd8SNickeau * @return string 40437748cd8SNickeau * 40537748cd8SNickeau * Locale always canonicalizes to upper case. 40637748cd8SNickeau */ 407*04fd306cSNickeau public static function getLocale(string $sep = "-"): string 40837748cd8SNickeau { 40937748cd8SNickeau 41037748cd8SNickeau $locale = null; 41137748cd8SNickeau 41237748cd8SNickeau $lang = self::getLang(); 413*04fd306cSNickeau 414c3437056SNickeau $country = self::getLanguageRegion(); 415*04fd306cSNickeau 41637748cd8SNickeau $locale = strtolower($lang) . $sep . strtoupper($country); 41737748cd8SNickeau 41837748cd8SNickeau return $locale; 41937748cd8SNickeau } 42037748cd8SNickeau 42137748cd8SNickeau /** 42237748cd8SNickeau * 42337748cd8SNickeau * ISO 3166 alpha-2 country code 42437748cd8SNickeau * 42537748cd8SNickeau */ 426*04fd306cSNickeau public static function getLanguageRegion(): string 42737748cd8SNickeau { 428*04fd306cSNickeau $region = SiteConfig::getConfValue(Region::CONF_SITE_LANGUAGE_REGION); 429c3437056SNickeau if (!empty($region)) { 430c3437056SNickeau return $region; 43137748cd8SNickeau } else { 432c3437056SNickeau 433c3437056SNickeau if (extension_loaded("intl")) { 434c3437056SNickeau $locale = locale_get_default(); 435*04fd306cSNickeau $localeParts = explode("_", $locale, 2); 436c3437056SNickeau if (sizeof($localeParts) === 2) { 437c3437056SNickeau return $localeParts[1]; 438c3437056SNickeau } 439c3437056SNickeau } 44037748cd8SNickeau } 441*04fd306cSNickeau return "us"; 44237748cd8SNickeau 44337748cd8SNickeau } 44437748cd8SNickeau 44537748cd8SNickeau /** 446*04fd306cSNickeau * @return string 44737748cd8SNickeau * Wrapper around https://www.dokuwiki.org/config:lang 44837748cd8SNickeau */ 449*04fd306cSNickeau public static function getLang(): string 45037748cd8SNickeau { 45137748cd8SNickeau global $conf; 452c3437056SNickeau $lang = $conf['lang']; 453*04fd306cSNickeau if ($lang === null) { 454*04fd306cSNickeau return "en"; 45537748cd8SNickeau } 456*04fd306cSNickeau return $lang; 457*04fd306cSNickeau } 45837748cd8SNickeau 45937748cd8SNickeau /** 46037748cd8SNickeau * In a {@link PluginUtility::isDevOrTest()} dev environment, 46137748cd8SNickeau * don't set the 46237748cd8SNickeau * https://www.dokuwiki.org/config:baseurl 46337748cd8SNickeau * to be able to test the metadata / social integration 46437748cd8SNickeau * via a tunnel 465c3437056SNickeau * 46637748cd8SNickeau */ 467*04fd306cSNickeau public static function getBaseUrl(): string 468*04fd306cSNickeau { 46937748cd8SNickeau 470*04fd306cSNickeau /** 471*04fd306cSNickeau * Same as {@link getBaseURL()} ?? 472*04fd306cSNickeau */ 473*04fd306cSNickeau global $conf; 474*04fd306cSNickeau $baseUrl = $conf['baseurl']; 475*04fd306cSNickeau if (!empty($baseUrl)) { 476*04fd306cSNickeau return $baseUrl; 477*04fd306cSNickeau } 47837748cd8SNickeau return DOKU_URL; 47937748cd8SNickeau 48037748cd8SNickeau } 48137748cd8SNickeau 48237748cd8SNickeau public static function getTag() 48337748cd8SNickeau { 48437748cd8SNickeau global $conf; 48537748cd8SNickeau $tag = $conf['tag']; 48637748cd8SNickeau return ($tag ? $tag : null); 48737748cd8SNickeau } 48837748cd8SNickeau 48937748cd8SNickeau public static function setTemplate($template) 49037748cd8SNickeau { 49137748cd8SNickeau global $conf; 49237748cd8SNickeau $conf['template'] = $template; 49337748cd8SNickeau } 49437748cd8SNickeau 495*04fd306cSNickeau /** 496*04fd306cSNickeau * @return void 497*04fd306cSNickeau * @deprecated 498*04fd306cSNickeau */ 499c3437056SNickeau public static function setCacheXhtmlOn() 50037748cd8SNickeau { 50137748cd8SNickeau // ensure the value is not -1, which disables caching 50237748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 50337748cd8SNickeau global $conf; 50437748cd8SNickeau $conf['cachetime'] = 60 * 60; 50537748cd8SNickeau } 50637748cd8SNickeau 50737748cd8SNickeau public static function debugIsOn() 50837748cd8SNickeau { 50937748cd8SNickeau global $conf; 51037748cd8SNickeau return $conf['allowdebug']; 51137748cd8SNickeau } 51237748cd8SNickeau 51337748cd8SNickeau public static function setCacheDefault() 51437748cd8SNickeau { 51537748cd8SNickeau // The value is -1, which disables caching 51637748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 51737748cd8SNickeau global $conf; 51837748cd8SNickeau $conf['cachetime'] = -1; 51937748cd8SNickeau } 52037748cd8SNickeau 52137748cd8SNickeau public static function useHeadingAsTitle() 52237748cd8SNickeau { 52337748cd8SNickeau // https://www.dokuwiki.org/config:useheading 52437748cd8SNickeau global $conf; 52537748cd8SNickeau $conf['useheading'] = 1; 52637748cd8SNickeau } 52737748cd8SNickeau 52837748cd8SNickeau public static function useHeadingDefault() 52937748cd8SNickeau { 53037748cd8SNickeau // https://www.dokuwiki.org/config:useheading 53137748cd8SNickeau global $conf; 53237748cd8SNickeau $conf['useheading'] = 0; 53337748cd8SNickeau } 53437748cd8SNickeau 53537748cd8SNickeau public static function getTemplate() 53637748cd8SNickeau { 53737748cd8SNickeau global $conf; 53837748cd8SNickeau return $conf['template']; 53937748cd8SNickeau 54037748cd8SNickeau } 54137748cd8SNickeau 54237748cd8SNickeau public static function isStrapTemplate() 54337748cd8SNickeau { 54437748cd8SNickeau global $conf; 54537748cd8SNickeau return $conf['template'] == self::STRAP_TEMPLATE_NAME; 54637748cd8SNickeau } 54737748cd8SNickeau 54837748cd8SNickeau 549*04fd306cSNickeau public static function getPageDirectory(): LocalPath 55037748cd8SNickeau { 55137748cd8SNickeau global $conf; 552c3437056SNickeau /** 5534cadd4f8SNickeau * Data dir is the pages dir (savedir is the data dir) 554c3437056SNickeau */ 5554cadd4f8SNickeau $pageDirectory = $conf['datadir']; 5564cadd4f8SNickeau if ($pageDirectory === null) { 557*04fd306cSNickeau throw new ExceptionRuntime("The page directory ($pageDirectory) is null"); 5584cadd4f8SNickeau } 559*04fd306cSNickeau return LocalPath::createFromPathString($pageDirectory); 56037748cd8SNickeau } 56137748cd8SNickeau 56237748cd8SNickeau public static function disableHeadingSectionEditing() 56337748cd8SNickeau { 564*04fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 565*04fd306cSNickeau ->getConfig() 566*04fd306cSNickeau ->setDisableHeadingSectionEditing(); 56737748cd8SNickeau } 56837748cd8SNickeau 56937748cd8SNickeau public static function setBreadCrumbOn() 57037748cd8SNickeau { 57137748cd8SNickeau global $conf; 57237748cd8SNickeau $conf['youarehere'] = 1; 57337748cd8SNickeau } 57437748cd8SNickeau 575c3437056SNickeau public static function isHtmlRenderCacheOn(): bool 576c3437056SNickeau { 577*04fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv() 578*04fd306cSNickeau ->getConfig() 579*04fd306cSNickeau ->isXhtmlCacheOn(); 580c3437056SNickeau } 581c3437056SNickeau 582*04fd306cSNickeau /** 583*04fd306cSNickeau * @return LocalPath 584*04fd306cSNickeau * @deprecated 585*04fd306cSNickeau */ 5864cadd4f8SNickeau public static function getDataDirectory(): LocalPath 587c3437056SNickeau { 588*04fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv()->getConfig()->getDataDirectory(); 589c3437056SNickeau } 590c3437056SNickeau 591c3437056SNickeau public static function isLowQualityProtectionEnable(): bool 592c3437056SNickeau { 593*04fd306cSNickeau return SiteConfig::getConfValue(LowQualityPage::CONF_LOW_QUALITY_PAGE_PROTECTION_ENABLE) === 1; 594c3437056SNickeau } 595c3437056SNickeau 596*04fd306cSNickeau /** 597*04fd306cSNickeau * @return string 598*04fd306cSNickeau * @deprecated 599*04fd306cSNickeau */ 600*04fd306cSNickeau public static function getIndexPageName() 601c3437056SNickeau { 602*04fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv()->getConfig()->getIndexPageName(); 603c3437056SNickeau } 604c3437056SNickeau 605c3437056SNickeau /** 606c3437056SNickeau * @return mixed - Application / Website name 607c3437056SNickeau */ 608c3437056SNickeau public static function getName() 609c3437056SNickeau { 6104cadd4f8SNickeau return self::getTitle(); 611c3437056SNickeau } 612c3437056SNickeau 613c3437056SNickeau public static function getTagLine() 614c3437056SNickeau { 615c3437056SNickeau global $conf; 616c3437056SNickeau return $conf['tagline']; 617c3437056SNickeau } 618c3437056SNickeau 619c3437056SNickeau /** 620*04fd306cSNickeau * @return int 621c3437056SNickeau */ 622*04fd306cSNickeau public static function getXhtmlCacheTime(): int 623c3437056SNickeau { 624c3437056SNickeau global $conf; 625c3437056SNickeau $cacheTime = $conf['cachetime']; 626c3437056SNickeau if ($cacheTime === null) { 627*04fd306cSNickeau LogUtility::internalError("The global `cachetime` configuration was not set.", self::CANONICAL); 628*04fd306cSNickeau return FetcherMarkup::MAX_CACHE_AGE; 629c3437056SNickeau } 630*04fd306cSNickeau try { 631*04fd306cSNickeau return DataType::toInteger($cacheTime); 632*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 633*04fd306cSNickeau LogUtility::error("The global `cachetime` configuration has a value ($cacheTime) that is not an integer. Error: {$e->getMessage()}", self::CANONICAL); 634*04fd306cSNickeau return FetcherMarkup::MAX_CACHE_AGE; 635c3437056SNickeau } 636c3437056SNickeau } 637c3437056SNickeau 638c3437056SNickeau /** 639c3437056SNickeau * Absolute vs Relative URL 640c3437056SNickeau * https://www.dokuwiki.org/config:canonical 641c3437056SNickeau */ 6424cadd4f8SNickeau public static function shouldUrlBeAbsolute(): bool 643c3437056SNickeau { 644c3437056SNickeau global $conf; 6454cadd4f8SNickeau $value = $conf['canonical']; 6464cadd4f8SNickeau if ($value === 1) { 6474cadd4f8SNickeau return true; 6484cadd4f8SNickeau } 6494cadd4f8SNickeau return false; 6504cadd4f8SNickeau } 6514cadd4f8SNickeau 6524cadd4f8SNickeau /** 6534cadd4f8SNickeau * @param string $description 6544cadd4f8SNickeau * Same as {@link Site::setDescription()} 6554cadd4f8SNickeau */ 6564cadd4f8SNickeau public static function setTagLine(string $description) 6574cadd4f8SNickeau { 6584cadd4f8SNickeau global $conf; 6594cadd4f8SNickeau $conf['tagline'] = $description; 6604cadd4f8SNickeau } 6614cadd4f8SNickeau 6624cadd4f8SNickeau /** 6634cadd4f8SNickeau * @param string $description 6644cadd4f8SNickeau * 6654cadd4f8SNickeau */ 6664cadd4f8SNickeau public static function setDescription(string $description) 6674cadd4f8SNickeau { 6684cadd4f8SNickeau self::setTagLine($description); 6694cadd4f8SNickeau } 6704cadd4f8SNickeau 671*04fd306cSNickeau /** 672*04fd306cSNickeau * @param string $primaryColorValue 673*04fd306cSNickeau * @return void 674*04fd306cSNickeau * @deprecated 675*04fd306cSNickeau */ 6764cadd4f8SNickeau public static function setPrimaryColor(string $primaryColorValue) 6774cadd4f8SNickeau { 678*04fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv() 679*04fd306cSNickeau ->getConfig() 680*04fd306cSNickeau ->setPrimaryColor($primaryColorValue); 6814cadd4f8SNickeau } 6824cadd4f8SNickeau 683*04fd306cSNickeau /** 684*04fd306cSNickeau * @param $default 685*04fd306cSNickeau * @return ColorRgb|null 686*04fd306cSNickeau * @deprecated use {@link SiteConfig::getPrimaryColor()} instead 687*04fd306cSNickeau */ 688*04fd306cSNickeau public static function getPrimaryColor(string $default = null): ?ColorRgb 6894cadd4f8SNickeau { 690*04fd306cSNickeau try { 691*04fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv() 692*04fd306cSNickeau ->getConfig() 693*04fd306cSNickeau ->getPrimaryColor(); 694*04fd306cSNickeau } catch (ExceptionNotFound $e) { 695*04fd306cSNickeau if($default===null){ 6964cadd4f8SNickeau return null; 6974cadd4f8SNickeau } 6984cadd4f8SNickeau try { 699*04fd306cSNickeau return ColorRgb::createFromString($default); 700*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 701*04fd306cSNickeau LogUtility::internalError("The value ($default) is not a valid color"); 7024cadd4f8SNickeau return null; 7034cadd4f8SNickeau } 7044cadd4f8SNickeau } 705*04fd306cSNickeau } 7064cadd4f8SNickeau 7074cadd4f8SNickeau public static function getSecondaryColor($default = null): ?ColorRgb 7084cadd4f8SNickeau { 7094cadd4f8SNickeau $value = Site::getSecondaryColorValue($default); 7104cadd4f8SNickeau if ($value === null) { 7114cadd4f8SNickeau return null; 7124cadd4f8SNickeau } 7134cadd4f8SNickeau try { 7144cadd4f8SNickeau return ColorRgb::createFromString($value); 715*04fd306cSNickeau } catch (ExceptionCompile $e) { 7164cadd4f8SNickeau LogUtility::msg("The secondary color value configuration ($value) is not valid. Error: {$e->getMessage()}"); 7174cadd4f8SNickeau return null; 7184cadd4f8SNickeau } 7194cadd4f8SNickeau } 7204cadd4f8SNickeau 7214cadd4f8SNickeau public static function setSecondaryColor(string $secondaryColorValue) 7224cadd4f8SNickeau { 723*04fd306cSNickeau self::setConf(ColorRgb::SECONDARY_COLOR_CONF, $secondaryColorValue); 7244cadd4f8SNickeau } 7254cadd4f8SNickeau 7264cadd4f8SNickeau public static function unsetPrimaryColor() 7274cadd4f8SNickeau { 728*04fd306cSNickeau self::setConf(BrandingColors::PRIMARY_COLOR_CONF, null); 7294cadd4f8SNickeau } 7304cadd4f8SNickeau 7314cadd4f8SNickeau 732*04fd306cSNickeau /** 733*04fd306cSNickeau * @return bool 734*04fd306cSNickeau * @deprecated 735*04fd306cSNickeau */ 7364cadd4f8SNickeau public static function isBrandingColorInheritanceEnabled(): bool 7374cadd4f8SNickeau { 738*04fd306cSNickeau return ExecutionContext::getActualOrCreateFromEnv()->getConfig()->isBrandingColorInheritanceEnabled(); 7394cadd4f8SNickeau } 7404cadd4f8SNickeau 7414cadd4f8SNickeau 7424cadd4f8SNickeau /** 743*04fd306cSNickeau * @param $default 744*04fd306cSNickeau * @return string|null 7454cadd4f8SNickeau */ 746*04fd306cSNickeau public static function getPrimaryColorValue($default = null): ?string 7474cadd4f8SNickeau { 748*04fd306cSNickeau $value = SiteConfig::getConfValue(BrandingColors::PRIMARY_COLOR_CONF, $default); 7494cadd4f8SNickeau if ($value !== null && trim($value) !== "") { 7504cadd4f8SNickeau return $value; 7514cadd4f8SNickeau } 7524cadd4f8SNickeau if (PluginUtility::isTest()) { 7534cadd4f8SNickeau // too much trouble 7544cadd4f8SNickeau // the load of styles is not consistent 7554cadd4f8SNickeau return null; 7564cadd4f8SNickeau } 7574cadd4f8SNickeau $styles = ColorRgb::getDokuWikiStyles(); 7584cadd4f8SNickeau return $styles["replacements"]["__theme_color__"]; 7594cadd4f8SNickeau 7604cadd4f8SNickeau } 7614cadd4f8SNickeau 7624cadd4f8SNickeau public static function getSecondaryColorValue($default = null) 7634cadd4f8SNickeau { 764*04fd306cSNickeau $value = SiteConfig::getConfValue(ColorRgb::SECONDARY_COLOR_CONF, $default); 7654cadd4f8SNickeau if ($value === null || trim($value) === "") { 7664cadd4f8SNickeau return null; 7674cadd4f8SNickeau } 7684cadd4f8SNickeau return $value; 7694cadd4f8SNickeau } 7704cadd4f8SNickeau 7714cadd4f8SNickeau public static function setCanonicalUrlType(string $value) 7724cadd4f8SNickeau { 773*04fd306cSNickeau self::setConf(PageUrlType::CONF_CANONICAL_URL_TYPE, $value); 7744cadd4f8SNickeau } 7754cadd4f8SNickeau 7764cadd4f8SNickeau public static function setCanonicalUrlTypeToDefault() 7774cadd4f8SNickeau { 778*04fd306cSNickeau self::setConf(PageUrlType::CONF_CANONICAL_URL_TYPE, null); 7794cadd4f8SNickeau } 7804cadd4f8SNickeau 7814cadd4f8SNickeau public static function isBrandingColorInheritanceFunctional(): bool 7824cadd4f8SNickeau { 7834cadd4f8SNickeau return self::isBrandingColorInheritanceEnabled() && Site::getPrimaryColorValue() !== null; 7844cadd4f8SNickeau } 7854cadd4f8SNickeau 7864cadd4f8SNickeau public static function getMediaDirectory(): LocalPath 7874cadd4f8SNickeau { 7884cadd4f8SNickeau global $conf; 7894cadd4f8SNickeau $mediaDirectory = $conf['mediadir']; 7904cadd4f8SNickeau if ($mediaDirectory === null) { 791*04fd306cSNickeau throw new ExceptionRuntime("The media directory ($mediaDirectory) is null"); 7924cadd4f8SNickeau } 793*04fd306cSNickeau return LocalPath::createFromPathString($mediaDirectory); 7944cadd4f8SNickeau } 7954cadd4f8SNickeau 7964cadd4f8SNickeau public static function getCacheDirectory(): LocalPath 7974cadd4f8SNickeau { 7984cadd4f8SNickeau global $conf; 7994cadd4f8SNickeau $cacheDirectory = $conf['cachedir']; 8004cadd4f8SNickeau if ($cacheDirectory === null) { 801*04fd306cSNickeau throw new ExceptionRuntime("The cache directory ($cacheDirectory) is null"); 8024cadd4f8SNickeau } 803*04fd306cSNickeau return LocalPath::createFromPathString($cacheDirectory); 8044cadd4f8SNickeau } 8054cadd4f8SNickeau 8064cadd4f8SNickeau 8074cadd4f8SNickeau /** 808*04fd306cSNickeau * @throws ExceptionCompile 8094cadd4f8SNickeau */ 810*04fd306cSNickeau private static function checkTemplateVersion() 811*04fd306cSNickeau { 812*04fd306cSNickeau /** 813*04fd306cSNickeau * Check the version 814*04fd306cSNickeau */ 815*04fd306cSNickeau if (self::$STRAP_TEMPLATE_INFO === null) { 816*04fd306cSNickeau self::$STRAP_TEMPLATE_INFO = confToHash(__DIR__ . '/../../../tpl/strap/template.info.txt'); 817*04fd306cSNickeau } 818*04fd306cSNickeau $templateVersion = self::$STRAP_TEMPLATE_INFO['version']; 819*04fd306cSNickeau $comboVersion = PluginUtility::$INFO_PLUGIN['version']; 820*04fd306cSNickeau /** @noinspection DuplicatedCode */ 821*04fd306cSNickeau if ($templateVersion !== $comboVersion) { 822*04fd306cSNickeau $strapName = "Strap"; 823*04fd306cSNickeau $comboName = "Combo"; 824*04fd306cSNickeau $strapLink = "<a href=\"https://www.dokuwiki.org/template:strap\">$strapName</a>"; 825*04fd306cSNickeau $comboLink = "<a href=\"https://www.dokuwiki.org/plugin:combo\">$comboName</a>"; 826*04fd306cSNickeau if ($comboVersion > $templateVersion) { 827*04fd306cSNickeau $upgradeTarget = $strapName; 828*04fd306cSNickeau } else { 829*04fd306cSNickeau $upgradeTarget = $comboName; 830*04fd306cSNickeau } 831*04fd306cSNickeau $upgradeLink = "<a href=\"" . wl() . "&do=admin&page=extension" . "\">upgrade <b>$upgradeTarget</b> via the extension manager</a>"; 832*04fd306cSNickeau $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)."; 833*04fd306cSNickeau LogUtility::msg($message); 834*04fd306cSNickeau throw new ExceptionCompile($message); 8354cadd4f8SNickeau } 8364cadd4f8SNickeau } 8374cadd4f8SNickeau 838*04fd306cSNickeau /** 839*04fd306cSNickeau * @throws ExceptionNotFound 840*04fd306cSNickeau */ 841*04fd306cSNickeau public static function getLogoImage(): WikiPath 842*04fd306cSNickeau { 843*04fd306cSNickeau $logosImages = Site::getLogoImagesAsPath(); 844*04fd306cSNickeau if (empty($logosImages)) { 845*04fd306cSNickeau throw new ExceptionNotFound("No logo image was installed", "logo"); 846*04fd306cSNickeau } 847*04fd306cSNickeau return $logosImages[0]; 848*04fd306cSNickeau } 849*04fd306cSNickeau 850*04fd306cSNickeau 851*04fd306cSNickeau /** 852*04fd306cSNickeau * @return void 853*04fd306cSNickeau * @deprecated 854*04fd306cSNickeau */ 855*04fd306cSNickeau public static function enableSectionEditing() 856*04fd306cSNickeau { 857*04fd306cSNickeau ExecutionContext::getActualOrCreateFromEnv()->getConfig()->setEnableSectionEditing(); 858*04fd306cSNickeau } 859*04fd306cSNickeau 860*04fd306cSNickeau public static function setDefaultTemplate() 861*04fd306cSNickeau { 862*04fd306cSNickeau global $conf; 863*04fd306cSNickeau $conf['template'] = "dokuwiki"; 864*04fd306cSNickeau } 865*04fd306cSNickeau 866*04fd306cSNickeau /** 867*04fd306cSNickeau * @return LocalPath[] 868*04fd306cSNickeau */ 869*04fd306cSNickeau public static function getConfigurationFiles(): array 870*04fd306cSNickeau { 871*04fd306cSNickeau $files = []; 872*04fd306cSNickeau foreach (getConfigFiles('main') as $fileConfig) { 873*04fd306cSNickeau $files[] = LocalPath::createFromPathString($fileConfig); 874*04fd306cSNickeau } 875*04fd306cSNickeau return $files; 876*04fd306cSNickeau } 877*04fd306cSNickeau 878*04fd306cSNickeau /** 879*04fd306cSNickeau * @return string the base directory for all url 880*04fd306cSNickeau * @throws ExceptionNotFound 881*04fd306cSNickeau */ 882*04fd306cSNickeau public static function getUrlPathBaseDir(): string 883*04fd306cSNickeau { 884*04fd306cSNickeau /** 885*04fd306cSNickeau * Based on {@link getBaseURL()} 886*04fd306cSNickeau */ 887*04fd306cSNickeau global $conf; 888*04fd306cSNickeau if (!empty($conf['basedir'])) { 889*04fd306cSNickeau return $conf['basedir']; 890*04fd306cSNickeau } 891*04fd306cSNickeau $scriptName = LocalPath::createFromPathString($_SERVER['SCRIPT_NAME']); 892*04fd306cSNickeau if ($scriptName->getExtension() === 'php') { 893*04fd306cSNickeau return Url::toUrlSeparator($scriptName->getParent()->toAbsoluteId()); 894*04fd306cSNickeau } 895*04fd306cSNickeau $phpSelf = LocalPath::createFromPathString($_SERVER['PHP_SELF']); 896*04fd306cSNickeau if ($phpSelf->getExtension() === "php") { 897*04fd306cSNickeau return Url::toUrlSeparator($scriptName->getParent()->toAbsoluteId()); 898*04fd306cSNickeau } 899*04fd306cSNickeau if ($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']) { 900*04fd306cSNickeau $dir = preg_replace('/^' . preg_quote($_SERVER['DOCUMENT_ROOT'], '/') . '/', '', 901*04fd306cSNickeau $_SERVER['SCRIPT_FILENAME']); 902*04fd306cSNickeau return Url::toUrlSeparator(dirname('/' . $dir)); 903*04fd306cSNickeau } 904*04fd306cSNickeau throw new ExceptionNotFound("No Base dir"); 905*04fd306cSNickeau 906*04fd306cSNickeau } 907*04fd306cSNickeau 908*04fd306cSNickeau public static function getUrlRewrite(): string 909*04fd306cSNickeau { 910*04fd306cSNickeau global $conf; 911*04fd306cSNickeau $confKey = UrlRewrite::CONF_KEY; 912*04fd306cSNickeau $urlRewrite = $conf[$confKey]; 913*04fd306cSNickeau try { 914*04fd306cSNickeau $urlRewriteInt = DataType::toInteger($urlRewrite); 915*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 916*04fd306cSNickeau LogUtility::internalError("The ($confKey) configuration is not an integer ($urlRewrite)"); 917*04fd306cSNickeau return UrlRewrite::NO_REWRITE; 918*04fd306cSNickeau } 919*04fd306cSNickeau switch ($urlRewriteInt) { 920*04fd306cSNickeau case UrlRewrite::NO_REWRITE_DOKU_VALUE: 921*04fd306cSNickeau return UrlRewrite::NO_REWRITE; 922*04fd306cSNickeau case UrlRewrite::WEB_SERVER_REWRITE_DOKU_VALUE: 923*04fd306cSNickeau return UrlRewrite::WEB_SERVER_REWRITE; 924*04fd306cSNickeau case UrlRewrite::DOKU_REWRITE_DOKU_VALUE: 925*04fd306cSNickeau return UrlRewrite::VALUE_DOKU_REWRITE; 926*04fd306cSNickeau default: 927*04fd306cSNickeau LogUtility::internalError("The ($confKey) configuration value ($urlRewriteInt) is not a valid value (0, 1 or 2). No rewrite"); 928*04fd306cSNickeau return UrlRewrite::NO_REWRITE; 929*04fd306cSNickeau } 930*04fd306cSNickeau } 931*04fd306cSNickeau 932*04fd306cSNickeau public static function getDefaultMediaLinking(): string 933*04fd306cSNickeau { 934*04fd306cSNickeau return SiteConfig::getConfValue(MediaMarkup::CONF_DEFAULT_LINKING, MediaMarkup::LINKING_DIRECT_VALUE); 935*04fd306cSNickeau } 936*04fd306cSNickeau 937*04fd306cSNickeau public static function shouldEndpointUrlBeAbsolute(): bool 938*04fd306cSNickeau { 939*04fd306cSNickeau global $conf; 940*04fd306cSNickeau return $conf['canonical'] === 1; 941*04fd306cSNickeau } 942*04fd306cSNickeau 943*04fd306cSNickeau public static function setEndpointToAbsoluteUrl() 944*04fd306cSNickeau { 945*04fd306cSNickeau global $conf; 946*04fd306cSNickeau $conf['canonical'] = 1; 947*04fd306cSNickeau } 948*04fd306cSNickeau 949*04fd306cSNickeau public static function setEndpointToDefaultUrl() 950*04fd306cSNickeau { 951*04fd306cSNickeau global $conf; 952*04fd306cSNickeau $conf['canonical'] = 0; 953*04fd306cSNickeau } 954*04fd306cSNickeau 955*04fd306cSNickeau public function getConfig(): SiteConfig 956*04fd306cSNickeau { 957*04fd306cSNickeau if (isset($this->config)) { 958*04fd306cSNickeau return $this->config; 959*04fd306cSNickeau } 960*04fd306cSNickeau $this->config = new SiteConfig($this->executingContext); 961*04fd306cSNickeau return $this->config; 962c3437056SNickeau } 963c3437056SNickeau 96437748cd8SNickeau 96537748cd8SNickeau} 966