xref: /template/writr/tpl_functions.php (revision df086b5d18607305c1d6bc970ab71c253e1e246c)
1dccf9898SAnika Henke<?php
2dccf9898SAnika Henke/**
3dccf9898SAnika Henke * Template Functions
4dccf9898SAnika Henke *
5dccf9898SAnika Henke * This file provides template specific custom functions that are
6dccf9898SAnika Henke * not provided by the DokuWiki core.
7dccf9898SAnika Henke * It is common practice to start each function with an underscore
8dccf9898SAnika Henke * to make sure it won't interfere with future core functions.
9dccf9898SAnika Henke */
10dccf9898SAnika Henke
11dccf9898SAnika Henke// must be run from within DokuWiki
12dccf9898SAnika Henkeif (!defined('DOKU_INC')) die();
13ec13a77cSLouis Ouellet
14ec13a77cSLouis Ouellet/**
15a5bfa42cSLouis Ouellet * Generate the HTML for the Site-Branding Area
16ec13a77cSLouis Ouellet *
17ec13a77cSLouis Ouellet * @return string
18ec13a77cSLouis Ouellet */
19a5bfa42cSLouis Ouelletif (!function_exists('tpl_getSiteBranding')) {
20a5bfa42cSLouis Ouellet    function tpl_getSiteBranding()
21ec13a77cSLouis Ouellet    {
22a5bfa42cSLouis Ouellet        // Retrieve the global variables
23ec13a77cSLouis Ouellet        global $ID,$conf;
24ec13a77cSLouis Ouellet
25a5bfa42cSLouis Ouellet        // Initialize the return value
26ec13a77cSLouis Ouellet        $return = '';
27a5bfa42cSLouis Ouellet
289b92d44aSLouis Ouellet        // Initialize the site branding configurations
29ec13a77cSLouis Ouellet        $logoSize = array();
30ec13a77cSLouis Ouellet        $logoImages = array();
31ec13a77cSLouis Ouellet        if(tpl_getConf('doLogoChangesByNamespace')){
32ec13a77cSLouis Ouellet            $namespace = "";
33ec13a77cSLouis Ouellet            $namespaces = array();
34ec13a77cSLouis Ouellet            foreach(explode(':',getNS($ID)) as $ns){
35ec13a77cSLouis Ouellet                $namespace .= "$ns:";
36ec13a77cSLouis Ouellet                $namespaces[] = $namespace;
37ec13a77cSLouis Ouellet            }
38ec13a77cSLouis Ouellet            foreach(array_reverse($namespaces)  as $namespace){
39ec13a77cSLouis Ouellet                $logoImages[] = ":".trim($namespace,":").":logo.png";
40ec13a77cSLouis Ouellet            }
41ec13a77cSLouis Ouellet        }
42ec13a77cSLouis Ouellet        $logoImages[] = ':logo.png';
43ec13a77cSLouis Ouellet        $logoImages[] = ':wiki:logo.png';
44ec13a77cSLouis Ouellet        $logoImages[] = 'images/logo.png';
45ec13a77cSLouis Ouellet        $logo = tpl_getMediaFile($logoImages, false, $logoSize);
46633ba5c6SLouis Ouellet        $link = wl();
47633ba5c6SLouis Ouellet        if(tpl_getConf('doLogoLinkChangesByNamespace')){
4857925973SLouis Ouellet            $link = str_replace(['/_media','logo.png'],['',$conf['start']],$logo);
49633ba5c6SLouis Ouellet        }
50a5bfa42cSLouis Ouellet        $title = $conf['title'];
51a5bfa42cSLouis Ouellet        if(tpl_getConf('doTitleChangesByNamespace')){
52a5bfa42cSLouis Ouellet            $nstitle = tpl_include_page('nstitle', 0, 1);
53a5bfa42cSLouis Ouellet            if ($nstitle) {
5422de1cfbSLouis Ouellet                $title = str_replace(['<p>','</p>',"\n"],'',$nstitle);
55a5bfa42cSLouis Ouellet            }
56a5bfa42cSLouis Ouellet        }
57a5bfa42cSLouis Ouellet        $tagline = $conf['tagline'];
58a5bfa42cSLouis Ouellet        if(tpl_getConf('doTaglineChangesByNamespace')){
59a5bfa42cSLouis Ouellet            $nstagline = tpl_include_page('nstagline', 0, 1);
60a5bfa42cSLouis Ouellet            if ($nstagline) {
6122de1cfbSLouis Ouellet                $tagline = str_replace(['<p>','</p>',"\n"],'',$nstagline);
62a5bfa42cSLouis Ouellet            }
63a5bfa42cSLouis Ouellet        }
649b92d44aSLouis Ouellet
659b92d44aSLouis Ouellet        // Initialize the logo
663974649aSLouis Ouellet        $return .= '<a class="site-logo" href="'.$link.'" title="'.$title.'" rel="home" accesskey="h">';
673974649aSLouis Ouellet        $return .= '<img src="'.$logo.'" '.$logoSize[3].' class="no-grav header-image" />';
689b92d44aSLouis Ouellet        $return .= '</a>';
699b92d44aSLouis Ouellet
709b92d44aSLouis Ouellet        // Initialize the site branding
71a5bfa42cSLouis Ouellet        $return .= '<div class="site-branding">';
723974649aSLouis Ouellet        $return .= '<h1 class="site-title"><a href="'.$link.'" rel="home" accesskey="h" title="'.$title.'">'.$title.'</a></h1>';
73a5bfa42cSLouis Ouellet        if($tagline){
74a5bfa42cSLouis Ouellet            $return .= '<h2 class="site-description">'.$tagline.'</h2>';
75a5bfa42cSLouis Ouellet        }
76a5bfa42cSLouis Ouellet        $return .= '</div>';
77a5bfa42cSLouis Ouellet
78ec13a77cSLouis Ouellet        return $return;
79ec13a77cSLouis Ouellet    }
80ec13a77cSLouis Ouellet}
81df5bf7f3SLouis Ouellet
82df5bf7f3SLouis Ouellet/**
83df5bf7f3SLouis Ouellet * Generate the gravatar URL for a given email
84df5bf7f3SLouis Ouellet *
85df5bf7f3SLouis Ouellet * @return string
86df5bf7f3SLouis Ouellet */
87df5bf7f3SLouis Ouelletif (!function_exists('tpl_getGravatarURL')) {
88df5bf7f3SLouis Ouellet    function tpl_getGravatarURL($email, $size = 96)
89df5bf7f3SLouis Ouellet    {
90df5bf7f3SLouis Ouellet        return 'https://www.gravatar.com/avatar/'.md5(strtolower(trim($email))).'?s='.$size;
91df5bf7f3SLouis Ouellet    }
92df5bf7f3SLouis Ouellet}
93df5bf7f3SLouis Ouellet
94df5bf7f3SLouis Ouellet
95df5bf7f3SLouis Ouellet/**
96df5bf7f3SLouis Ouellet * Generate the HTML for a menu
97df5bf7f3SLouis Ouellet *
98df5bf7f3SLouis Ouellet * @return string
99df5bf7f3SLouis Ouellet */
100df5bf7f3SLouis Ouelletif (!function_exists('tpl_getMenu')) {
101df5bf7f3SLouis Ouellet    function tpl_getMenu($menu)
102df5bf7f3SLouis Ouellet    {
103df5bf7f3SLouis Ouellet        switch($menu){
104df5bf7f3SLouis Ouellet            case 'usermenu':
105df5bf7f3SLouis Ouellet                return tpl_getUserMenu();
106df5bf7f3SLouis Ouellet                break;
1077311aa0dSLouis Ouellet            case 'sidebarmenu':
1087311aa0dSLouis Ouellet                return tpl_getSidebarMenu();
1097311aa0dSLouis Ouellet                break;
110df5bf7f3SLouis Ouellet        }
111df5bf7f3SLouis Ouellet    }
112df5bf7f3SLouis Ouellet}
113df5bf7f3SLouis Ouellet
114df5bf7f3SLouis Ouellet/**
115df5bf7f3SLouis Ouellet * Generate the HTML for the user menu
116df5bf7f3SLouis Ouellet *
117df5bf7f3SLouis Ouellet * @return string
118df5bf7f3SLouis Ouellet */
119df5bf7f3SLouis Ouelletif (!function_exists('tpl_getUserMenu')) {
120df5bf7f3SLouis Ouellet    function tpl_getUserMenu()
121df5bf7f3SLouis Ouellet    {
122df5bf7f3SLouis Ouellet        global $lang,$ID,$conf,$INFO;
123df5bf7f3SLouis Ouellet
124df5bf7f3SLouis Ouellet        $return = '';
125df5bf7f3SLouis Ouellet
126df5bf7f3SLouis Ouellet        $items = (new \dokuwiki\Menu\UserMenu())->getItems();
127df5bf7f3SLouis Ouellet
128df5bf7f3SLouis Ouellet        if(isset($INFO['userinfo'])){
129*df086b5dSLouis Ouellet            $return .= '<div class="tools-menus">';
130df5bf7f3SLouis Ouellet                $return .= '<div class="dropdown user-tools">';
13136603110SLouis Ouellet                    $return .= '<a href="'.wl($ID).'" class="dropdown-toggle" title="'.$lang['user_tools'].'" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">';
132df5bf7f3SLouis Ouellet                        $return .= '<i class="bi bi-person"></i>'.$INFO['userinfo']['name'];
133df5bf7f3SLouis Ouellet                    $return .= '</a>';
134df5bf7f3SLouis Ouellet                    $return .= '<ul class="dropdown-menu" role="menu">';
135df5bf7f3SLouis Ouellet                        $return .= '<li>';
136df5bf7f3SLouis Ouellet                            $return .= '<p class="avatar">';
137df5bf7f3SLouis Ouellet                                $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail']).'" />';
138df5bf7f3SLouis Ouellet                            $return .= '</p>';
139df5bf7f3SLouis Ouellet                        $return .= '</li>';
140df5bf7f3SLouis Ouellet                        foreach($items as $item) {
141df5bf7f3SLouis Ouellet                            $return .= '<li>'
142df5bf7f3SLouis Ouellet                                .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
143df5bf7f3SLouis Ouellet                                .'<i></i> '
144df5bf7f3SLouis Ouellet                                .$item->getLabel()
145df5bf7f3SLouis Ouellet                                .'</a></li>';
146df5bf7f3SLouis Ouellet                        }
147df5bf7f3SLouis Ouellet                    $return .= '</ul>';
148df5bf7f3SLouis Ouellet                $return .= '</div>';
149*df086b5dSLouis Ouellet                if(tpl_getConf('enableStarredBookmark')){
150*df086b5dSLouis Ouellet                    if (!plugin_isdisabled('sqlite')) {
151*df086b5dSLouis Ouellet                        if (!plugin_isdisabled('starred')) {
152*df086b5dSLouis Ouellet                            $return .= '<div class="dropdown bookmarks">';
153*df086b5dSLouis Ouellet                                $return .= '<a href="#" class="dropdown-toggle starred" title="'.tpl_getLang('Bookmarks').'" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">';
154*df086b5dSLouis Ouellet                                    $return .= '<i class="bi bi-star"></i>'.tpl_getLang('Bookmarks');
155*df086b5dSLouis Ouellet                                $return .= '</a>';
156*df086b5dSLouis Ouellet                                $return .= '<ul class="dropdown-menu" role="menu">';
157*df086b5dSLouis Ouellet                                $instructions = p_get_instructions('{{starred>min}}');
158*df086b5dSLouis Ouellet                                if(count($instructions) <= 3) {
159*df086b5dSLouis Ouellet                                    $render = p_render('xhtml',$instructions,$info);
160*df086b5dSLouis Ouellet                                    // Sanitize the output
161*df086b5dSLouis Ouellet                                    $render = preg_replace('/<div class="plugin_starred">/', '', $render);
162*df086b5dSLouis Ouellet                                    $render = preg_replace('/<\/div>/', '', $render);
163*df086b5dSLouis Ouellet                                    $render = preg_replace('/<div class="li">/', '', $render);
164*df086b5dSLouis Ouellet                                    $render = preg_replace('/<\/div>/', '', $render);
165*df086b5dSLouis Ouellet                                    $render = preg_replace('/<ul>/', '', $render);
166*df086b5dSLouis Ouellet                                    $render = preg_replace('/<\/ul>/', '', $render);
167*df086b5dSLouis Ouellet                                    $render = preg_replace('/<li class="level1">/', '<li>', $render);
168*df086b5dSLouis Ouellet                                    $return .= $render;
169*df086b5dSLouis Ouellet                                }
170*df086b5dSLouis Ouellet                                $return .= '</ul>';
171*df086b5dSLouis Ouellet                            $return .= '</div>';
172*df086b5dSLouis Ouellet                        }
173*df086b5dSLouis Ouellet                    }
174*df086b5dSLouis Ouellet                }
175*df086b5dSLouis Ouellet            $return .= '</div>';
176df5bf7f3SLouis Ouellet        } else {
177df5bf7f3SLouis Ouellet            $return .= '<div class="inline user-tools">';
178df5bf7f3SLouis Ouellet            foreach($items as $item) {
179df5bf7f3SLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
180df5bf7f3SLouis Ouellet                    .'<i></i> '
181df5bf7f3SLouis Ouellet                    .$item->getLabel()
182df5bf7f3SLouis Ouellet                    .'</a>';
183df5bf7f3SLouis Ouellet            }
184df5bf7f3SLouis Ouellet            $return .= '</div>';
185df5bf7f3SLouis Ouellet        }
186df5bf7f3SLouis Ouellet
187df5bf7f3SLouis Ouellet        return $return;
188df5bf7f3SLouis Ouellet    }
189df5bf7f3SLouis Ouellet}
1907311aa0dSLouis Ouellet
1917311aa0dSLouis Ouellet/**
1927311aa0dSLouis Ouellet * Generate the HTML for the sidebar menus
1937311aa0dSLouis Ouellet *
1947311aa0dSLouis Ouellet * @return string
1957311aa0dSLouis Ouellet */
1967311aa0dSLouis Ouelletif (!function_exists('tpl_getSidebarMenu')) {
1977311aa0dSLouis Ouellet    function tpl_getSidebarMenu()
1987311aa0dSLouis Ouellet    {
1997311aa0dSLouis Ouellet        global $lang,$ID,$conf,$INFO;
2007311aa0dSLouis Ouellet
2017311aa0dSLouis Ouellet        $userItems = (new \dokuwiki\Menu\UserMenu())->getItems();
2027311aa0dSLouis Ouellet        $siteItems = (new \dokuwiki\Menu\SiteMenu())->getItems();
2037311aa0dSLouis Ouellet
2047311aa0dSLouis Ouellet        $return = '';
2057311aa0dSLouis Ouellet
2067311aa0dSLouis Ouellet        $return .= '<div id="writr__sidebar__tools">';
2077311aa0dSLouis Ouellet
2087311aa0dSLouis Ouellet        if(isset($INFO['userinfo'])){
2097311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
2107311aa0dSLouis Ouellet                $return .= '<a href="'.wl($ID).'" class="" title="'.$lang['user_tools'].'" data-target="#user-tools-menu" data-toggle="collapse" role="button" aria-haspopup="true" aria-expanded="false">';
2117311aa0dSLouis Ouellet                    $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail'], 32).'" />';
2127311aa0dSLouis Ouellet                    $return .= '<span>'.$INFO['userinfo']['name'].'</span>';
2137311aa0dSLouis Ouellet                $return .= '</a>';
2147311aa0dSLouis Ouellet                $return .= '<div id="user-tools-menu" class="collapsed">';
2157311aa0dSLouis Ouellet                    $return .= '<ul class="menu" role="menu">';
2167311aa0dSLouis Ouellet                        foreach($userItems as $item) {
2177311aa0dSLouis Ouellet                            $return .= '<li>'
2187311aa0dSLouis Ouellet                                .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
2197311aa0dSLouis Ouellet                                .'<i></i> '
2207311aa0dSLouis Ouellet                                .$item->getLabel()
2217311aa0dSLouis Ouellet                                .'</a></li>';
2227311aa0dSLouis Ouellet                        }
2237311aa0dSLouis Ouellet                    $return .= '</ul>';
2247311aa0dSLouis Ouellet                $return .= '</div>';
2257311aa0dSLouis Ouellet            $return .= '</div>';
2267311aa0dSLouis Ouellet        } else {
2277311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
2287311aa0dSLouis Ouellet            foreach($userItems as $item) {
2297311aa0dSLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
2307311aa0dSLouis Ouellet                    .'<i></i> '
2317311aa0dSLouis Ouellet                    .$item->getLabel()
2327311aa0dSLouis Ouellet                    .'</a>';
2337311aa0dSLouis Ouellet            }
2347311aa0dSLouis Ouellet            $return .= '</div>';
2357311aa0dSLouis Ouellet        }
2367311aa0dSLouis Ouellet
2377311aa0dSLouis Ouellet        $return .= '</div>';
2387311aa0dSLouis Ouellet
2397311aa0dSLouis Ouellet        return $return;
2407311aa0dSLouis Ouellet    }
2417311aa0dSLouis Ouellet}
242