xref: /template/strap/ComboStrap/Site.php (revision 1fa8c418ed5809db58049141be41b7738471dd32)
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