1*37748cd8SNickeau<?php 2*37748cd8SNickeau/** 3*37748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved. 4*37748cd8SNickeau * 5*37748cd8SNickeau * This source code is licensed under the GPL license found in the 6*37748cd8SNickeau * COPYING file in the root directory of this source tree. 7*37748cd8SNickeau * 8*37748cd8SNickeau * @license GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html) 9*37748cd8SNickeau * @author ComboStrap <support@combostrap.com> 10*37748cd8SNickeau * 11*37748cd8SNickeau */ 12*37748cd8SNickeau 13*37748cd8SNickeaunamespace ComboStrap; 14*37748cd8SNickeau 15*37748cd8SNickeau 16*37748cd8SNickeauclass Site 17*37748cd8SNickeau{ 18*37748cd8SNickeau 19*37748cd8SNickeau const CONF_SITE_ISO_COUNTRY = "siteIsoCountry"; 20*37748cd8SNickeau const STRAP_TEMPLATE_NAME = "strap"; 21*37748cd8SNickeau 22*37748cd8SNickeau const SVG_LOGO_IDS = array( 23*37748cd8SNickeau ':wiki:logo.svg', 24*37748cd8SNickeau ':logo.svg' 25*37748cd8SNickeau ); 26*37748cd8SNickeau 27*37748cd8SNickeau const PNG_LOGO_IDS = array( 28*37748cd8SNickeau ':logo.png', 29*37748cd8SNickeau ':wiki:logo.png', 30*37748cd8SNickeau ':favicon-32×32.png', 31*37748cd8SNickeau ':favicon-16×16.png', 32*37748cd8SNickeau ':apple-touch-icon.png', 33*37748cd8SNickeau ':android-chrome-192x192.png' 34*37748cd8SNickeau ); 35*37748cd8SNickeau 36*37748cd8SNickeau 37*37748cd8SNickeau /** 38*37748cd8SNickeau * @return string|null the html img tag or null 39*37748cd8SNickeau */ 40*37748cd8SNickeau public static function getLogoImgHtmlTag($tagAttributes = null) 41*37748cd8SNickeau { 42*37748cd8SNickeau $logoIds = self::getLogoIds(); 43*37748cd8SNickeau foreach ($logoIds as $logoId) { 44*37748cd8SNickeau $mediaLink = MediaLink::createMediaLinkFromNonQualifiedPath($logoId, null, $tagAttributes); 45*37748cd8SNickeau $mediaLink->setLazyLoad(false); 46*37748cd8SNickeau if ($mediaLink->exists()) { 47*37748cd8SNickeau return $mediaLink->renderMediaTag(); 48*37748cd8SNickeau } 49*37748cd8SNickeau } 50*37748cd8SNickeau return null; 51*37748cd8SNickeau } 52*37748cd8SNickeau 53*37748cd8SNickeau private static function getLogoIds() 54*37748cd8SNickeau { 55*37748cd8SNickeau return PluginUtility::mergeAttributes(self::PNG_LOGO_IDS,self::SVG_LOGO_IDS); 56*37748cd8SNickeau } 57*37748cd8SNickeau 58*37748cd8SNickeau 59*37748cd8SNickeau /** 60*37748cd8SNickeau * @return string|null 61*37748cd8SNickeau */ 62*37748cd8SNickeau public static function getLogoUrlAsSvg() 63*37748cd8SNickeau { 64*37748cd8SNickeau 65*37748cd8SNickeau 66*37748cd8SNickeau $url = null; 67*37748cd8SNickeau foreach (self::SVG_LOGO_IDS as $svgLogo) { 68*37748cd8SNickeau 69*37748cd8SNickeau $svgLogoFN = mediaFN($svgLogo); 70*37748cd8SNickeau 71*37748cd8SNickeau if (file_exists($svgLogoFN)) { 72*37748cd8SNickeau $url = ml($svgLogo, '', true, '', true); 73*37748cd8SNickeau break; 74*37748cd8SNickeau }; 75*37748cd8SNickeau } 76*37748cd8SNickeau return $url; 77*37748cd8SNickeau } 78*37748cd8SNickeau 79*37748cd8SNickeau public static function getLogoUrlAsPng() 80*37748cd8SNickeau { 81*37748cd8SNickeau 82*37748cd8SNickeau $url = null; 83*37748cd8SNickeau foreach (self::PNG_LOGO_IDS as $svgLogo) { 84*37748cd8SNickeau 85*37748cd8SNickeau $svgLogoFN = mediaFN($svgLogo); 86*37748cd8SNickeau 87*37748cd8SNickeau if (file_exists($svgLogoFN)) { 88*37748cd8SNickeau $url = ml($svgLogo, '', true, '', true); 89*37748cd8SNickeau break; 90*37748cd8SNickeau }; 91*37748cd8SNickeau } 92*37748cd8SNickeau return $url; 93*37748cd8SNickeau } 94*37748cd8SNickeau 95*37748cd8SNickeau /** 96*37748cd8SNickeau * https://www.dokuwiki.org/config:title 97*37748cd8SNickeau * @return mixed 98*37748cd8SNickeau */ 99*37748cd8SNickeau public static function getTitle() 100*37748cd8SNickeau { 101*37748cd8SNickeau global $conf; 102*37748cd8SNickeau return $conf['title']; 103*37748cd8SNickeau } 104*37748cd8SNickeau 105*37748cd8SNickeau /** 106*37748cd8SNickeau * @param string $sep - the separator - generally ("-") but not always 107*37748cd8SNickeau * @return string 108*37748cd8SNickeau * 109*37748cd8SNickeau * Locale always canonicalizes to upper case. 110*37748cd8SNickeau */ 111*37748cd8SNickeau public static function getLocale($sep = "-") 112*37748cd8SNickeau { 113*37748cd8SNickeau 114*37748cd8SNickeau $locale = null; 115*37748cd8SNickeau 116*37748cd8SNickeau $lang = self::getLang(); 117*37748cd8SNickeau if ($lang != null) { 118*37748cd8SNickeau $country = self::getCountry(); 119*37748cd8SNickeau if ($country != null) { 120*37748cd8SNickeau $locale = strtolower($lang) . $sep . strtoupper($country); 121*37748cd8SNickeau } 122*37748cd8SNickeau } 123*37748cd8SNickeau 124*37748cd8SNickeau return $locale; 125*37748cd8SNickeau } 126*37748cd8SNickeau 127*37748cd8SNickeau /** 128*37748cd8SNickeau * 129*37748cd8SNickeau * ISO 3166 alpha-2 country code 130*37748cd8SNickeau * 131*37748cd8SNickeau */ 132*37748cd8SNickeau public static function getCountry() 133*37748cd8SNickeau { 134*37748cd8SNickeau $country = PluginUtility::getConfValue(self::CONF_SITE_ISO_COUNTRY); 135*37748cd8SNickeau if (!empty($country)) { 136*37748cd8SNickeau if (!StringUtility::match($country, "[a-zA-Z]{2}")) { 137*37748cd8SNickeau LogUtility::msg("The country configuration value ($country) does not have two letters (ISO 3166 alpha-2 country code)", LogUtility::LVL_MSG_ERROR, "country"); 138*37748cd8SNickeau } 139*37748cd8SNickeau return $country; 140*37748cd8SNickeau } else { 141*37748cd8SNickeau return null; 142*37748cd8SNickeau } 143*37748cd8SNickeau 144*37748cd8SNickeau } 145*37748cd8SNickeau 146*37748cd8SNickeau /** 147*37748cd8SNickeau * @return mixed|null 148*37748cd8SNickeau * Wrapper around https://www.dokuwiki.org/config:lang 149*37748cd8SNickeau */ 150*37748cd8SNickeau private static function getLang() 151*37748cd8SNickeau { 152*37748cd8SNickeau 153*37748cd8SNickeau global $conf; 154*37748cd8SNickeau $locale = $conf['lang']; 155*37748cd8SNickeau return ($locale ? $locale : null); 156*37748cd8SNickeau } 157*37748cd8SNickeau 158*37748cd8SNickeau public static function getUrl() 159*37748cd8SNickeau { 160*37748cd8SNickeau 161*37748cd8SNickeau /** 162*37748cd8SNickeau * In a {@link PluginUtility::isDevOrTest()} dev environment, 163*37748cd8SNickeau * don't set the 164*37748cd8SNickeau * https://www.dokuwiki.org/config:baseurl 165*37748cd8SNickeau * to be able to test the metadata / social integration 166*37748cd8SNickeau * via a tunnel 167*37748cd8SNickeau */ 168*37748cd8SNickeau 169*37748cd8SNickeau return DOKU_URL; 170*37748cd8SNickeau 171*37748cd8SNickeau } 172*37748cd8SNickeau 173*37748cd8SNickeau public static function getTag() 174*37748cd8SNickeau { 175*37748cd8SNickeau global $conf; 176*37748cd8SNickeau $tag = $conf['tag']; 177*37748cd8SNickeau return ($tag ? $tag : null); 178*37748cd8SNickeau } 179*37748cd8SNickeau 180*37748cd8SNickeau /** 181*37748cd8SNickeau * @return string - the name of the sidebar page 182*37748cd8SNickeau */ 183*37748cd8SNickeau public static function getSidebarName() 184*37748cd8SNickeau { 185*37748cd8SNickeau global $conf; 186*37748cd8SNickeau return $conf["sidebar"]; 187*37748cd8SNickeau } 188*37748cd8SNickeau 189*37748cd8SNickeau public static function setTemplate($template) 190*37748cd8SNickeau { 191*37748cd8SNickeau global $conf; 192*37748cd8SNickeau $conf['template'] = $template; 193*37748cd8SNickeau } 194*37748cd8SNickeau 195*37748cd8SNickeau public static function setRenderingCacheOn() 196*37748cd8SNickeau { 197*37748cd8SNickeau // ensure the value is not -1, which disables caching 198*37748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 199*37748cd8SNickeau global $conf; 200*37748cd8SNickeau $conf['cachetime'] = 60 * 60; 201*37748cd8SNickeau } 202*37748cd8SNickeau 203*37748cd8SNickeau public static function debugIsOn() 204*37748cd8SNickeau { 205*37748cd8SNickeau global $conf; 206*37748cd8SNickeau return $conf['allowdebug']; 207*37748cd8SNickeau } 208*37748cd8SNickeau 209*37748cd8SNickeau public static function setTemplateToStrap() 210*37748cd8SNickeau { 211*37748cd8SNickeau global $conf; 212*37748cd8SNickeau $conf['template'] = 'strap'; 213*37748cd8SNickeau } 214*37748cd8SNickeau 215*37748cd8SNickeau public static function setTemplateToDefault() 216*37748cd8SNickeau { 217*37748cd8SNickeau global $conf; 218*37748cd8SNickeau $conf['template'] = 'dokuwiki'; 219*37748cd8SNickeau } 220*37748cd8SNickeau 221*37748cd8SNickeau public static function setCacheDefault() 222*37748cd8SNickeau { 223*37748cd8SNickeau // The value is -1, which disables caching 224*37748cd8SNickeau // https://www.dokuwiki.org/config:cachetime 225*37748cd8SNickeau global $conf; 226*37748cd8SNickeau $conf['cachetime'] = -1; 227*37748cd8SNickeau } 228*37748cd8SNickeau 229*37748cd8SNickeau public static function useHeadingAsTitle() 230*37748cd8SNickeau { 231*37748cd8SNickeau // https://www.dokuwiki.org/config:useheading 232*37748cd8SNickeau global $conf; 233*37748cd8SNickeau $conf['useheading'] = 1; 234*37748cd8SNickeau } 235*37748cd8SNickeau 236*37748cd8SNickeau public static function useHeadingDefault() 237*37748cd8SNickeau { 238*37748cd8SNickeau // https://www.dokuwiki.org/config:useheading 239*37748cd8SNickeau global $conf; 240*37748cd8SNickeau $conf['useheading'] = 0; 241*37748cd8SNickeau } 242*37748cd8SNickeau 243*37748cd8SNickeau public static function getTemplate() 244*37748cd8SNickeau { 245*37748cd8SNickeau global $conf; 246*37748cd8SNickeau return $conf['template']; 247*37748cd8SNickeau 248*37748cd8SNickeau } 249*37748cd8SNickeau 250*37748cd8SNickeau public static function isStrapTemplate() 251*37748cd8SNickeau { 252*37748cd8SNickeau global $conf; 253*37748cd8SNickeau return $conf['template'] == self::STRAP_TEMPLATE_NAME; 254*37748cd8SNickeau } 255*37748cd8SNickeau 256*37748cd8SNickeau public static function getAjaxUrl() 257*37748cd8SNickeau { 258*37748cd8SNickeau return self::getUrl() . "lib/exe/ajax.php"; 259*37748cd8SNickeau } 260*37748cd8SNickeau 261*37748cd8SNickeau public static function getPageDirectory() 262*37748cd8SNickeau { 263*37748cd8SNickeau global $conf; 264*37748cd8SNickeau return $conf['datadir']; 265*37748cd8SNickeau } 266*37748cd8SNickeau 267*37748cd8SNickeau public static function disableHeadingSectionEditing() 268*37748cd8SNickeau { 269*37748cd8SNickeau global $conf; 270*37748cd8SNickeau $conf['maxseclevel'] = 0; 271*37748cd8SNickeau } 272*37748cd8SNickeau 273*37748cd8SNickeau public static function setBreadCrumbOn() 274*37748cd8SNickeau { 275*37748cd8SNickeau global $conf; 276*37748cd8SNickeau $conf['youarehere'] = 1; 277*37748cd8SNickeau } 278*37748cd8SNickeau 279*37748cd8SNickeau 280*37748cd8SNickeau} 281