xref: /template/writr/tpl_functions.php (revision 9b92d44a862ebccd27e230cbf645ed5926224d6c)
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
28*9b92d44aSLouis 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) {
54a5bfa42cSLouis Ouellet                $title = $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) {
61a5bfa42cSLouis Ouellet                $tagline = $nstagline;
62a5bfa42cSLouis Ouellet            }
63a5bfa42cSLouis Ouellet        }
64*9b92d44aSLouis Ouellet
65*9b92d44aSLouis Ouellet        // Initialize the logo
66*9b92d44aSLouis Ouellet        $return .= '<a class="site-logo" href="'.$link.'" title="'.$title.'" rel="home" accesskey="h" title="[H]">';
67*9b92d44aSLouis Ouellet        $return .= '<img src="'.$logo.'" '.$logoSize[3].' alt="" class="no-grav header-image" />';
68*9b92d44aSLouis Ouellet        $return .= '</a>';
69*9b92d44aSLouis Ouellet
70*9b92d44aSLouis Ouellet        // Initialize the site branding
71a5bfa42cSLouis Ouellet        $return .= '<div class="site-branding">';
72a5bfa42cSLouis Ouellet        $return .= '<h1 class="site-title"><a href="'.$link.'" rel="home" accesskey="h" title="[H]">'.$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'])){
129df5bf7f3SLouis Ouellet            $return .= '<div class="dropdown user-tools">';
13036603110SLouis 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">';
131df5bf7f3SLouis Ouellet                    $return .= '<i class="bi bi-person"></i>'.$INFO['userinfo']['name'];
132df5bf7f3SLouis Ouellet                $return .= '</a>';
133df5bf7f3SLouis Ouellet                $return .= '<ul class="dropdown-menu" role="menu">';
134df5bf7f3SLouis Ouellet                    $return .= '<li>';
135df5bf7f3SLouis Ouellet                        $return .= '<p class="avatar">';
136df5bf7f3SLouis Ouellet                            $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail']).'" />';
137df5bf7f3SLouis Ouellet                        $return .= '</p>';
138df5bf7f3SLouis Ouellet                    $return .= '</li>';
139df5bf7f3SLouis Ouellet                    foreach($items as $item) {
140df5bf7f3SLouis Ouellet                        $return .= '<li>'
141df5bf7f3SLouis Ouellet                            .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
142df5bf7f3SLouis Ouellet                            .'<i></i> '
143df5bf7f3SLouis Ouellet                            .$item->getLabel()
144df5bf7f3SLouis Ouellet                            .'</a></li>';
145df5bf7f3SLouis Ouellet                    }
146df5bf7f3SLouis Ouellet                $return .= '</ul>';
147df5bf7f3SLouis Ouellet            $return .= '</div>';
148df5bf7f3SLouis Ouellet        } else {
149df5bf7f3SLouis Ouellet            $return .= '<div class="inline user-tools">';
150df5bf7f3SLouis Ouellet            foreach($items as $item) {
151df5bf7f3SLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
152df5bf7f3SLouis Ouellet                    .'<i></i> '
153df5bf7f3SLouis Ouellet                    .$item->getLabel()
154df5bf7f3SLouis Ouellet                    .'</a>';
155df5bf7f3SLouis Ouellet            }
156df5bf7f3SLouis Ouellet            $return .= '</div>';
157df5bf7f3SLouis Ouellet        }
158df5bf7f3SLouis Ouellet
159df5bf7f3SLouis Ouellet        return $return;
160df5bf7f3SLouis Ouellet    }
161df5bf7f3SLouis Ouellet}
1627311aa0dSLouis Ouellet
1637311aa0dSLouis Ouellet/**
1647311aa0dSLouis Ouellet * Generate the HTML for the sidebar menus
1657311aa0dSLouis Ouellet *
1667311aa0dSLouis Ouellet * @return string
1677311aa0dSLouis Ouellet */
1687311aa0dSLouis Ouelletif (!function_exists('tpl_getSidebarMenu')) {
1697311aa0dSLouis Ouellet    function tpl_getSidebarMenu()
1707311aa0dSLouis Ouellet    {
1717311aa0dSLouis Ouellet        global $lang,$ID,$conf,$INFO;
1727311aa0dSLouis Ouellet
1737311aa0dSLouis Ouellet        $userItems = (new \dokuwiki\Menu\UserMenu())->getItems();
1747311aa0dSLouis Ouellet        $siteItems = (new \dokuwiki\Menu\SiteMenu())->getItems();
1757311aa0dSLouis Ouellet
1767311aa0dSLouis Ouellet        $return = '';
1777311aa0dSLouis Ouellet
1787311aa0dSLouis Ouellet        $return .= '<div id="writr__sidebar__tools">';
1797311aa0dSLouis Ouellet
1807311aa0dSLouis Ouellet        if(isset($INFO['userinfo'])){
1817311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
1827311aa0dSLouis 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">';
1837311aa0dSLouis Ouellet                    $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail'], 32).'" />';
1847311aa0dSLouis Ouellet                    $return .= '<span>'.$INFO['userinfo']['name'].'</span>';
1857311aa0dSLouis Ouellet                $return .= '</a>';
1867311aa0dSLouis Ouellet                $return .= '<div id="user-tools-menu" class="collapsed">';
1877311aa0dSLouis Ouellet                    $return .= '<ul class="menu" role="menu">';
1887311aa0dSLouis Ouellet                        foreach($userItems as $item) {
1897311aa0dSLouis Ouellet                            $return .= '<li>'
1907311aa0dSLouis Ouellet                                .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
1917311aa0dSLouis Ouellet                                .'<i></i> '
1927311aa0dSLouis Ouellet                                .$item->getLabel()
1937311aa0dSLouis Ouellet                                .'</a></li>';
1947311aa0dSLouis Ouellet                        }
1957311aa0dSLouis Ouellet                    $return .= '</ul>';
1967311aa0dSLouis Ouellet                $return .= '</div>';
1977311aa0dSLouis Ouellet            $return .= '</div>';
1987311aa0dSLouis Ouellet        } else {
1997311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
2007311aa0dSLouis Ouellet            foreach($userItems as $item) {
2017311aa0dSLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
2027311aa0dSLouis Ouellet                    .'<i></i> '
2037311aa0dSLouis Ouellet                    .$item->getLabel()
2047311aa0dSLouis Ouellet                    .'</a>';
2057311aa0dSLouis Ouellet            }
2067311aa0dSLouis Ouellet            $return .= '</div>';
2077311aa0dSLouis Ouellet        }
2087311aa0dSLouis Ouellet
2097311aa0dSLouis Ouellet        $return .= '</div>';
2107311aa0dSLouis Ouellet
2117311aa0dSLouis Ouellet        return $return;
2127311aa0dSLouis Ouellet    }
2137311aa0dSLouis Ouellet}
214