xref: /template/writr/tpl_functions.php (revision a5bfa42ccf072b9a27a1f053404eac34fe6a8bc1)
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/**
15*a5bfa42cSLouis Ouellet * Generate the HTML for the Site-Branding Area
16ec13a77cSLouis Ouellet *
17ec13a77cSLouis Ouellet * @return string
18ec13a77cSLouis Ouellet */
19*a5bfa42cSLouis Ouelletif (!function_exists('tpl_getSiteBranding')) {
20*a5bfa42cSLouis Ouellet    function tpl_getSiteBranding()
21ec13a77cSLouis Ouellet    {
22*a5bfa42cSLouis Ouellet        // Retrieve the global variables
23ec13a77cSLouis Ouellet        global $ID,$conf;
24ec13a77cSLouis Ouellet
25*a5bfa42cSLouis Ouellet        // Initialize the return value
26ec13a77cSLouis Ouellet        $return = '';
27*a5bfa42cSLouis Ouellet
28*a5bfa42cSLouis Ouellet        // Initialize the logo size and images
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        }
50ec13a77cSLouis Ouellet
51633ba5c6SLouis Ouellet        $return .= '<a class="site-logo"  href="'.$link.'" title="'.$conf['title'].'" rel="home" accesskey="h" title="[H]">';
52ec13a77cSLouis Ouellet        $return .= '<img src="'.$logo.'" '.$logoSize[3].' alt="" class="no-grav header-image" />';
53ec13a77cSLouis Ouellet        $return .= '</a>';
54ec13a77cSLouis Ouellet
55*a5bfa42cSLouis Ouellet        // Initialize the site branding
56*a5bfa42cSLouis Ouellet        $title = $conf['title'];
57*a5bfa42cSLouis Ouellet        if(tpl_getConf('doTitleChangesByNamespace')){
58*a5bfa42cSLouis Ouellet            $nstitle = tpl_include_page('nstitle', 0, 1);
59*a5bfa42cSLouis Ouellet            if ($nstitle) {
60*a5bfa42cSLouis Ouellet                $title = $nstitle;
61*a5bfa42cSLouis Ouellet            }
62*a5bfa42cSLouis Ouellet        }
63*a5bfa42cSLouis Ouellet        $tagline = $conf['tagline'];
64*a5bfa42cSLouis Ouellet        if(tpl_getConf('doTaglineChangesByNamespace')){
65*a5bfa42cSLouis Ouellet            $nstagline = tpl_include_page('nstagline', 0, 1);
66*a5bfa42cSLouis Ouellet            if ($nstagline) {
67*a5bfa42cSLouis Ouellet                $tagline = $nstagline;
68*a5bfa42cSLouis Ouellet            }
69*a5bfa42cSLouis Ouellet        }
70*a5bfa42cSLouis Ouellet        $return .= '<div class="site-branding">';
71*a5bfa42cSLouis Ouellet        $return .= '<h1 class="site-title"><a href="'.$link.'" rel="home" accesskey="h" title="[H]">'.$title.'</a></h1>';
72*a5bfa42cSLouis Ouellet        if($tagline){
73*a5bfa42cSLouis Ouellet            $return .= '<h2 class="site-description">'.$tagline.'</h2>';
74*a5bfa42cSLouis Ouellet        }
75*a5bfa42cSLouis Ouellet        $return .= '</div>';
76*a5bfa42cSLouis Ouellet
77ec13a77cSLouis Ouellet        return $return;
78ec13a77cSLouis Ouellet    }
79ec13a77cSLouis Ouellet}
80df5bf7f3SLouis Ouellet
81df5bf7f3SLouis Ouellet/**
82df5bf7f3SLouis Ouellet * Generate the gravatar URL for a given email
83df5bf7f3SLouis Ouellet *
84df5bf7f3SLouis Ouellet * @return string
85df5bf7f3SLouis Ouellet */
86df5bf7f3SLouis Ouelletif (!function_exists('tpl_getGravatarURL')) {
87df5bf7f3SLouis Ouellet    function tpl_getGravatarURL($email, $size = 96)
88df5bf7f3SLouis Ouellet    {
89df5bf7f3SLouis Ouellet        return 'https://www.gravatar.com/avatar/'.md5(strtolower(trim($email))).'?s='.$size;
90df5bf7f3SLouis Ouellet    }
91df5bf7f3SLouis Ouellet}
92df5bf7f3SLouis Ouellet
93df5bf7f3SLouis Ouellet
94df5bf7f3SLouis Ouellet/**
95df5bf7f3SLouis Ouellet * Generate the HTML for a menu
96df5bf7f3SLouis Ouellet *
97df5bf7f3SLouis Ouellet * @return string
98df5bf7f3SLouis Ouellet */
99df5bf7f3SLouis Ouelletif (!function_exists('tpl_getMenu')) {
100df5bf7f3SLouis Ouellet    function tpl_getMenu($menu)
101df5bf7f3SLouis Ouellet    {
102df5bf7f3SLouis Ouellet        switch($menu){
103df5bf7f3SLouis Ouellet            case 'usermenu':
104df5bf7f3SLouis Ouellet                return tpl_getUserMenu();
105df5bf7f3SLouis Ouellet                break;
1067311aa0dSLouis Ouellet            case 'sidebarmenu':
1077311aa0dSLouis Ouellet                return tpl_getSidebarMenu();
1087311aa0dSLouis Ouellet                break;
109df5bf7f3SLouis Ouellet        }
110df5bf7f3SLouis Ouellet    }
111df5bf7f3SLouis Ouellet}
112df5bf7f3SLouis Ouellet
113df5bf7f3SLouis Ouellet/**
114df5bf7f3SLouis Ouellet * Generate the HTML for the user menu
115df5bf7f3SLouis Ouellet *
116df5bf7f3SLouis Ouellet * @return string
117df5bf7f3SLouis Ouellet */
118df5bf7f3SLouis Ouelletif (!function_exists('tpl_getUserMenu')) {
119df5bf7f3SLouis Ouellet    function tpl_getUserMenu()
120df5bf7f3SLouis Ouellet    {
121df5bf7f3SLouis Ouellet        global $lang,$ID,$conf,$INFO;
122df5bf7f3SLouis Ouellet
123df5bf7f3SLouis Ouellet        $return = '';
124df5bf7f3SLouis Ouellet
125df5bf7f3SLouis Ouellet        $items = (new \dokuwiki\Menu\UserMenu())->getItems();
126df5bf7f3SLouis Ouellet
127df5bf7f3SLouis Ouellet        if(isset($INFO['userinfo'])){
128df5bf7f3SLouis Ouellet            $return .= '<div class="dropdown user-tools">';
12936603110SLouis 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">';
130df5bf7f3SLouis Ouellet                    $return .= '<i class="bi bi-person"></i>'.$INFO['userinfo']['name'];
131df5bf7f3SLouis Ouellet                $return .= '</a>';
132df5bf7f3SLouis Ouellet                $return .= '<ul class="dropdown-menu" role="menu">';
133df5bf7f3SLouis Ouellet                    $return .= '<li>';
134df5bf7f3SLouis Ouellet                        $return .= '<p class="avatar">';
135df5bf7f3SLouis Ouellet                            $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail']).'" />';
136df5bf7f3SLouis Ouellet                        $return .= '</p>';
137df5bf7f3SLouis Ouellet                    $return .= '</li>';
138df5bf7f3SLouis Ouellet                    foreach($items as $item) {
139df5bf7f3SLouis Ouellet                        $return .= '<li>'
140df5bf7f3SLouis Ouellet                            .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
141df5bf7f3SLouis Ouellet                            .'<i></i> '
142df5bf7f3SLouis Ouellet                            .$item->getLabel()
143df5bf7f3SLouis Ouellet                            .'</a></li>';
144df5bf7f3SLouis Ouellet                    }
145df5bf7f3SLouis Ouellet                $return .= '</ul>';
146df5bf7f3SLouis Ouellet            $return .= '</div>';
147df5bf7f3SLouis Ouellet        } else {
148df5bf7f3SLouis Ouellet            $return .= '<div class="inline user-tools">';
149df5bf7f3SLouis Ouellet            foreach($items as $item) {
150df5bf7f3SLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
151df5bf7f3SLouis Ouellet                    .'<i></i> '
152df5bf7f3SLouis Ouellet                    .$item->getLabel()
153df5bf7f3SLouis Ouellet                    .'</a>';
154df5bf7f3SLouis Ouellet            }
155df5bf7f3SLouis Ouellet            $return .= '</div>';
156df5bf7f3SLouis Ouellet        }
157df5bf7f3SLouis Ouellet
158df5bf7f3SLouis Ouellet        return $return;
159df5bf7f3SLouis Ouellet    }
160df5bf7f3SLouis Ouellet}
1617311aa0dSLouis Ouellet
1627311aa0dSLouis Ouellet/**
1637311aa0dSLouis Ouellet * Generate the HTML for the sidebar menus
1647311aa0dSLouis Ouellet *
1657311aa0dSLouis Ouellet * @return string
1667311aa0dSLouis Ouellet */
1677311aa0dSLouis Ouelletif (!function_exists('tpl_getSidebarMenu')) {
1687311aa0dSLouis Ouellet    function tpl_getSidebarMenu()
1697311aa0dSLouis Ouellet    {
1707311aa0dSLouis Ouellet        global $lang,$ID,$conf,$INFO;
1717311aa0dSLouis Ouellet
1727311aa0dSLouis Ouellet        $userItems = (new \dokuwiki\Menu\UserMenu())->getItems();
1737311aa0dSLouis Ouellet        $siteItems = (new \dokuwiki\Menu\SiteMenu())->getItems();
1747311aa0dSLouis Ouellet
1757311aa0dSLouis Ouellet        $return = '';
1767311aa0dSLouis Ouellet
1777311aa0dSLouis Ouellet        $return .= '<div id="writr__sidebar__tools">';
1787311aa0dSLouis Ouellet
1797311aa0dSLouis Ouellet        if(isset($INFO['userinfo'])){
1807311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
1817311aa0dSLouis 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">';
1827311aa0dSLouis Ouellet                    $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail'], 32).'" />';
1837311aa0dSLouis Ouellet                    $return .= '<span>'.$INFO['userinfo']['name'].'</span>';
1847311aa0dSLouis Ouellet                $return .= '</a>';
1857311aa0dSLouis Ouellet                $return .= '<div id="user-tools-menu" class="collapsed">';
1867311aa0dSLouis Ouellet                    $return .= '<ul class="menu" role="menu">';
1877311aa0dSLouis Ouellet                        foreach($userItems as $item) {
1887311aa0dSLouis Ouellet                            $return .= '<li>'
1897311aa0dSLouis Ouellet                                .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
1907311aa0dSLouis Ouellet                                .'<i></i> '
1917311aa0dSLouis Ouellet                                .$item->getLabel()
1927311aa0dSLouis Ouellet                                .'</a></li>';
1937311aa0dSLouis Ouellet                        }
1947311aa0dSLouis Ouellet                    $return .= '</ul>';
1957311aa0dSLouis Ouellet                $return .= '</div>';
1967311aa0dSLouis Ouellet            $return .= '</div>';
1977311aa0dSLouis Ouellet        } else {
1987311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
1997311aa0dSLouis Ouellet            foreach($userItems as $item) {
2007311aa0dSLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
2017311aa0dSLouis Ouellet                    .'<i></i> '
2027311aa0dSLouis Ouellet                    .$item->getLabel()
2037311aa0dSLouis Ouellet                    .'</a>';
2047311aa0dSLouis Ouellet            }
2057311aa0dSLouis Ouellet            $return .= '</div>';
2067311aa0dSLouis Ouellet        }
2077311aa0dSLouis Ouellet
2087311aa0dSLouis Ouellet        $return .= '</div>';
2097311aa0dSLouis Ouellet
2107311aa0dSLouis Ouellet        return $return;
2117311aa0dSLouis Ouellet    }
2127311aa0dSLouis Ouellet}
213