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