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 1637748cd8SNickeauclass Site 1737748cd8SNickeau{ 1837748cd8SNickeau 1937748cd8SNickeau const CONF_SITE_ISO_COUNTRY = "siteIsoCountry"; 2037748cd8SNickeau const STRAP_TEMPLATE_NAME = "strap"; 2137748cd8SNickeau 2237748cd8SNickeau const SVG_LOGO_IDS = array( 2337748cd8SNickeau ':wiki:logo.svg', 2437748cd8SNickeau ':logo.svg' 2537748cd8SNickeau ); 2637748cd8SNickeau 2737748cd8SNickeau const PNG_LOGO_IDS = array( 2837748cd8SNickeau ':logo.png', 2937748cd8SNickeau ':wiki:logo.png', 3037748cd8SNickeau ':favicon-32×32.png', 3137748cd8SNickeau ':favicon-16×16.png', 3237748cd8SNickeau ':apple-touch-icon.png', 3337748cd8SNickeau ':android-chrome-192x192.png' 3437748cd8SNickeau ); 3537748cd8SNickeau 3637748cd8SNickeau 3737748cd8SNickeau /** 3837748cd8SNickeau * @return string|null the html img tag or null 3937748cd8SNickeau */ 40*1fa8c418SNickeau public static function getLogoImgHtmlTag($tagAttributes = null): ?string 4137748cd8SNickeau { 4237748cd8SNickeau $logoIds = self::getLogoIds(); 4337748cd8SNickeau foreach ($logoIds as $logoId) { 44*1fa8c418SNickeau if ($logoId->exists()) { 45*1fa8c418SNickeau $mediaLink = MediaLink::createMediaLinkFromNonQualifiedPath($logoId->getAbsolutePath(), null, $tagAttributes); 4637748cd8SNickeau $mediaLink->setLazyLoad(false); 4737748cd8SNickeau return $mediaLink->renderMediaTag(); 4837748cd8SNickeau } 4937748cd8SNickeau } 5037748cd8SNickeau return null; 5137748cd8SNickeau } 5237748cd8SNickeau 53*1fa8c418SNickeau /** 54*1fa8c418SNickeau * @return Image[] 55*1fa8c418SNickeau */ 56*1fa8c418SNickeau private static function getLogoIds(): array 5737748cd8SNickeau { 58*1fa8c418SNickeau $logosPaths = PluginUtility::mergeAttributes(self::PNG_LOGO_IDS,self::SVG_LOGO_IDS); 59*1fa8c418SNickeau $logos = []; 60*1fa8c418SNickeau foreach ($logosPaths as $logoPath){ 61*1fa8c418SNickeau $logos[]=Image::createImageFromAbsolutePath($logoPath); 62*1fa8c418SNickeau } 63*1fa8c418SNickeau return $logos; 6437748cd8SNickeau } 6537748cd8SNickeau 6637748cd8SNickeau 6737748cd8SNickeau /** 6837748cd8SNickeau * @return string|null 6937748cd8SNickeau */ 7037748cd8SNickeau public static function getLogoUrlAsSvg() 7137748cd8SNickeau { 7237748cd8SNickeau 7337748cd8SNickeau 7437748cd8SNickeau $url = null; 7537748cd8SNickeau foreach (self::SVG_LOGO_IDS as $svgLogo) { 7637748cd8SNickeau 7737748cd8SNickeau $svgLogoFN = mediaFN($svgLogo); 7837748cd8SNickeau 7937748cd8SNickeau if (file_exists($svgLogoFN)) { 8037748cd8SNickeau $url = ml($svgLogo, '', true, '', true); 8137748cd8SNickeau break; 8237748cd8SNickeau }; 8337748cd8SNickeau } 8437748cd8SNickeau return $url; 8537748cd8SNickeau } 8637748cd8SNickeau 8737748cd8SNickeau public static function getLogoUrlAsPng() 8837748cd8SNickeau { 8937748cd8SNickeau 9037748cd8SNickeau $url = null; 9137748cd8SNickeau foreach (self::PNG_LOGO_IDS as $svgLogo) { 9237748cd8SNickeau 9337748cd8SNickeau $svgLogoFN = mediaFN($svgLogo); 9437748cd8SNickeau 9537748cd8SNickeau if (file_exists($svgLogoFN)) { 9637748cd8SNickeau $url = ml($svgLogo, '', true, '', true); 9737748cd8SNickeau break; 9837748cd8SNickeau }; 9937748cd8SNickeau } 10037748cd8SNickeau return $url; 10137748cd8SNickeau } 10237748cd8SNickeau 10337748cd8SNickeau /** 10437748cd8SNickeau * https://www.dokuwiki.org/config:title 10537748cd8SNickeau * @return mixed 10637748cd8SNickeau */ 10737748cd8SNickeau public static function getTitle() 10837748cd8SNickeau { 10937748cd8SNickeau global $conf; 11037748cd8SNickeau return $conf['title']; 11137748cd8SNickeau } 11237748cd8SNickeau 11337748cd8SNickeau /** 11437748cd8SNickeau * @param string $sep - the separator - generally ("-") but not always 11537748cd8SNickeau * @return string 11637748cd8SNickeau * 11737748cd8SNickeau * Locale always canonicalizes to upper case. 11837748cd8SNickeau */ 11937748cd8SNickeau public static function getLocale($sep = "-") 12037748cd8SNickeau { 12137748cd8SNickeau 12237748cd8SNickeau $locale = null; 12337748cd8SNickeau 12437748cd8SNickeau $lang = self::getLang(); 12537748cd8SNickeau if ($lang != null) { 12637748cd8SNickeau $country = self::getCountry(); 12737748cd8SNickeau if ($country != null) { 12837748cd8SNickeau $locale = strtolower($lang) . $sep . strtoupper($country); 12937748cd8SNickeau } 13037748cd8SNickeau } 13137748cd8SNickeau 13237748cd8SNickeau return $locale; 13337748cd8SNickeau } 13437748cd8SNickeau 13537748cd8SNickeau /** 13637748cd8SNickeau * 13737748cd8SNickeau * ISO 3166 alpha-2 country code 13837748cd8SNickeau * 13937748cd8SNickeau */ 14037748cd8SNickeau public static function getCountry() 14137748cd8SNickeau { 14237748cd8SNickeau $country = PluginUtility::getConfValue(self::CONF_SITE_ISO_COUNTRY); 14337748cd8SNickeau if (!empty($country)) { 14437748cd8SNickeau if (!StringUtility::match($country, "[a-zA-Z]{2}")) { 14537748cd8SNickeau LogUtility::msg("The country configuration value ($country) does not have two letters (ISO 3166 alpha-2 country code)", LogUtility::LVL_MSG_ERROR, "country"); 14637748cd8SNickeau } 14737748cd8SNickeau return $country; 14837748cd8SNickeau } else { 14937748cd8SNickeau return null; 15037748cd8SNickeau } 15137748cd8SNickeau 15237748cd8SNickeau } 15337748cd8SNickeau 15437748cd8SNickeau /** 15537748cd8SNickeau * @return mixed|null 15637748cd8SNickeau * Wrapper around https://www.dokuwiki.org/config:lang 15737748cd8SNickeau */ 15837748cd8SNickeau private static function getLang() 15937748cd8SNickeau { 16037748cd8SNickeau 16137748cd8SNickeau global $conf; 16237748cd8SNickeau $locale = $conf['lang']; 16337748cd8SNickeau return ($locale ? $locale : null); 16437748cd8SNickeau } 16537748cd8SNickeau 16637748cd8SNickeau public static function getUrl() 16737748cd8SNickeau { 16837748cd8SNickeau 16937748cd8SNickeau /** 17037748cd8SNickeau * In a {@link PluginUtility::isDevOrTest()} dev environment, 17137748cd8SNickeau * don't set the 17237748cd8SNickeau * https://www.dokuwiki.org/config:baseurl 17337748cd8SNickeau * to be able to test the metadata / social integration 17437748cd8SNickeau * via a tunnel 17537748cd8SNickeau */ 17637748cd8SNickeau 17737748cd8SNickeau return DOKU_URL; 17837748cd8SNickeau 17937748cd8SNickeau } 18037748cd8SNickeau 18137748cd8SNickeau public static function getTag() 18237748cd8SNickeau { 18337748cd8SNickeau global $conf; 18437748cd8SNickeau $tag = $conf['tag']; 18537748cd8SNickeau return ($tag ? $tag : null); 18637748cd8SNickeau } 18737748cd8SNickeau 18837748cd8SNickeau /** 18937748cd8SNickeau * @return string - the name of the sidebar page 19037748cd8SNickeau */ 19137748cd8SNickeau public static function getSidebarName() 19237748cd8SNickeau { 19337748cd8SNickeau global $conf; 19437748cd8SNickeau return $conf["sidebar"]; 19537748cd8SNickeau } 19637748cd8SNickeau 19737748cd8SNickeau public static function setTemplate($template) 19837748cd8SNickeau { 19937748cd8SNickeau global $conf; 20037748cd8SNickeau $conf['template'] = $template; 20137748cd8SNickeau } 20237748cd8SNickeau 20337748cd8SNickeau public static function setRenderingCacheOn() 20437748cd8SNickeau { 20537748cd8SNickeau // ensure the value is not -1, which disables caching 20637748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 20737748cd8SNickeau global $conf; 20837748cd8SNickeau $conf['cachetime'] = 60 * 60; 20937748cd8SNickeau } 21037748cd8SNickeau 21137748cd8SNickeau public static function debugIsOn() 21237748cd8SNickeau { 21337748cd8SNickeau global $conf; 21437748cd8SNickeau return $conf['allowdebug']; 21537748cd8SNickeau } 21637748cd8SNickeau 21737748cd8SNickeau public static function setTemplateToStrap() 21837748cd8SNickeau { 21937748cd8SNickeau global $conf; 22037748cd8SNickeau $conf['template'] = 'strap'; 22137748cd8SNickeau } 22237748cd8SNickeau 22337748cd8SNickeau public static function setTemplateToDefault() 22437748cd8SNickeau { 22537748cd8SNickeau global $conf; 22637748cd8SNickeau $conf['template'] = 'dokuwiki'; 22737748cd8SNickeau } 22837748cd8SNickeau 22937748cd8SNickeau public static function setCacheDefault() 23037748cd8SNickeau { 23137748cd8SNickeau // The value is -1, which disables caching 23237748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 23337748cd8SNickeau global $conf; 23437748cd8SNickeau $conf['cachetime'] = -1; 23537748cd8SNickeau } 23637748cd8SNickeau 23737748cd8SNickeau public static function useHeadingAsTitle() 23837748cd8SNickeau { 23937748cd8SNickeau // https://www.dokuwiki.org/config:useheading 24037748cd8SNickeau global $conf; 24137748cd8SNickeau $conf['useheading'] = 1; 24237748cd8SNickeau } 24337748cd8SNickeau 24437748cd8SNickeau public static function useHeadingDefault() 24537748cd8SNickeau { 24637748cd8SNickeau // https://www.dokuwiki.org/config:useheading 24737748cd8SNickeau global $conf; 24837748cd8SNickeau $conf['useheading'] = 0; 24937748cd8SNickeau } 25037748cd8SNickeau 25137748cd8SNickeau public static function getTemplate() 25237748cd8SNickeau { 25337748cd8SNickeau global $conf; 25437748cd8SNickeau return $conf['template']; 25537748cd8SNickeau 25637748cd8SNickeau } 25737748cd8SNickeau 25837748cd8SNickeau public static function isStrapTemplate() 25937748cd8SNickeau { 26037748cd8SNickeau global $conf; 26137748cd8SNickeau return $conf['template'] == self::STRAP_TEMPLATE_NAME; 26237748cd8SNickeau } 26337748cd8SNickeau 26437748cd8SNickeau public static function getAjaxUrl() 26537748cd8SNickeau { 26637748cd8SNickeau return self::getUrl() . "lib/exe/ajax.php"; 26737748cd8SNickeau } 26837748cd8SNickeau 26937748cd8SNickeau public static function getPageDirectory() 27037748cd8SNickeau { 27137748cd8SNickeau global $conf; 27237748cd8SNickeau return $conf['datadir']; 27337748cd8SNickeau } 27437748cd8SNickeau 27537748cd8SNickeau public static function disableHeadingSectionEditing() 27637748cd8SNickeau { 27737748cd8SNickeau global $conf; 27837748cd8SNickeau $conf['maxseclevel'] = 0; 27937748cd8SNickeau } 28037748cd8SNickeau 28137748cd8SNickeau public static function setBreadCrumbOn() 28237748cd8SNickeau { 28337748cd8SNickeau global $conf; 28437748cd8SNickeau $conf['youarehere'] = 1; 28537748cd8SNickeau } 28637748cd8SNickeau 28737748cd8SNickeau 28837748cd8SNickeau} 289