xref: /template/writr/tpl_functions.php (revision 633ba5c6c92553fd1b4fba7e050e8519eb22d91a)
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/**
15ec13a77cSLouis Ouellet * Get the logo of the wiki
16ec13a77cSLouis Ouellet *
17ec13a77cSLouis Ouellet * @return string
18ec13a77cSLouis Ouellet */
19ec13a77cSLouis Ouelletif (!function_exists('tpl_getLogo')) {
20ec13a77cSLouis Ouellet    function tpl_getLogo()
21ec13a77cSLouis Ouellet    {
22ec13a77cSLouis Ouellet        global $ID,$conf;
23ec13a77cSLouis Ouellet
24ec13a77cSLouis Ouellet        $return = '';
25ec13a77cSLouis Ouellet        $logoSize = array();
26ec13a77cSLouis Ouellet        $logoImages = array();
27ec13a77cSLouis Ouellet        if(tpl_getConf('doLogoChangesByNamespace')){
28ec13a77cSLouis Ouellet            $namespace = "";
29ec13a77cSLouis Ouellet            $namespaces = array();
30ec13a77cSLouis Ouellet            foreach(explode(':',getNS($ID)) as $ns){
31ec13a77cSLouis Ouellet                $namespace .= "$ns:";
32ec13a77cSLouis Ouellet                $namespaces[] = $namespace;
33ec13a77cSLouis Ouellet            }
34ec13a77cSLouis Ouellet            foreach(array_reverse($namespaces)  as $namespace){
35ec13a77cSLouis Ouellet                $logoImages[] = ":".trim($namespace,":").":logo.png";
36ec13a77cSLouis Ouellet            }
37ec13a77cSLouis Ouellet        }
38ec13a77cSLouis Ouellet        $logoImages[] = ':logo.png';
39ec13a77cSLouis Ouellet        $logoImages[] = ':wiki:logo.png';
40ec13a77cSLouis Ouellet        $logoImages[] = 'images/logo.png';
41ec13a77cSLouis Ouellet        $logo = tpl_getMediaFile($logoImages, false, $logoSize);
42*633ba5c6SLouis Ouellet        $link = wl();
43*633ba5c6SLouis Ouellet        if(tpl_getConf('doLogoLinkChangesByNamespace')){
44*633ba5c6SLouis Ouellet            $link = str_replace(['/_media','logo.png'],['','index'],$logo);
45*633ba5c6SLouis Ouellet        }
46ec13a77cSLouis Ouellet
47*633ba5c6SLouis Ouellet        $return .= '<a class="site-logo"  href="'.$link.'" title="'.$conf['title'].'" rel="home" accesskey="h" title="[H]">';
48ec13a77cSLouis Ouellet        $return .= '<img src="'.$logo.'" '.$logoSize[3].' alt="" class="no-grav header-image" />';
49ec13a77cSLouis Ouellet        $return .= '</a>';
50ec13a77cSLouis Ouellet
51ec13a77cSLouis Ouellet        return $return;
52ec13a77cSLouis Ouellet    }
53ec13a77cSLouis Ouellet}
54df5bf7f3SLouis Ouellet
55df5bf7f3SLouis Ouellet/**
56df5bf7f3SLouis Ouellet * Generate the gravatar URL for a given email
57df5bf7f3SLouis Ouellet *
58df5bf7f3SLouis Ouellet * @return string
59df5bf7f3SLouis Ouellet */
60df5bf7f3SLouis Ouelletif (!function_exists('tpl_getGravatarURL')) {
61df5bf7f3SLouis Ouellet    function tpl_getGravatarURL($email, $size = 96)
62df5bf7f3SLouis Ouellet    {
63df5bf7f3SLouis Ouellet        return 'https://www.gravatar.com/avatar/'.md5(strtolower(trim($email))).'?s='.$size;
64df5bf7f3SLouis Ouellet    }
65df5bf7f3SLouis Ouellet}
66df5bf7f3SLouis Ouellet
67df5bf7f3SLouis Ouellet
68df5bf7f3SLouis Ouellet/**
69df5bf7f3SLouis Ouellet * Generate the HTML for a menu
70df5bf7f3SLouis Ouellet *
71df5bf7f3SLouis Ouellet * @return string
72df5bf7f3SLouis Ouellet */
73df5bf7f3SLouis Ouelletif (!function_exists('tpl_getMenu')) {
74df5bf7f3SLouis Ouellet    function tpl_getMenu($menu)
75df5bf7f3SLouis Ouellet    {
76df5bf7f3SLouis Ouellet        switch($menu){
77df5bf7f3SLouis Ouellet            case 'usermenu':
78df5bf7f3SLouis Ouellet                return tpl_getUserMenu();
79df5bf7f3SLouis Ouellet                break;
807311aa0dSLouis Ouellet            case 'sidebarmenu':
817311aa0dSLouis Ouellet                return tpl_getSidebarMenu();
827311aa0dSLouis Ouellet                break;
83df5bf7f3SLouis Ouellet        }
84df5bf7f3SLouis Ouellet    }
85df5bf7f3SLouis Ouellet}
86df5bf7f3SLouis Ouellet
87df5bf7f3SLouis Ouellet/**
88df5bf7f3SLouis Ouellet * Generate the HTML for the user menu
89df5bf7f3SLouis Ouellet *
90df5bf7f3SLouis Ouellet * @return string
91df5bf7f3SLouis Ouellet */
92df5bf7f3SLouis Ouelletif (!function_exists('tpl_getUserMenu')) {
93df5bf7f3SLouis Ouellet    function tpl_getUserMenu()
94df5bf7f3SLouis Ouellet    {
95df5bf7f3SLouis Ouellet        global $lang,$ID,$conf,$INFO;
96df5bf7f3SLouis Ouellet
97df5bf7f3SLouis Ouellet        $return = '';
98df5bf7f3SLouis Ouellet
99df5bf7f3SLouis Ouellet        $items = (new \dokuwiki\Menu\UserMenu())->getItems();
100df5bf7f3SLouis Ouellet
101df5bf7f3SLouis Ouellet        if(isset($INFO['userinfo'])){
102df5bf7f3SLouis Ouellet            $return .= '<div class="dropdown user-tools">';
10336603110SLouis 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">';
104df5bf7f3SLouis Ouellet                    $return .= '<i class="bi bi-person"></i>'.$INFO['userinfo']['name'];
105df5bf7f3SLouis Ouellet                $return .= '</a>';
106df5bf7f3SLouis Ouellet                $return .= '<ul class="dropdown-menu" role="menu">';
107df5bf7f3SLouis Ouellet                    $return .= '<li>';
108df5bf7f3SLouis Ouellet                        $return .= '<p class="avatar">';
109df5bf7f3SLouis Ouellet                            $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail']).'" />';
110df5bf7f3SLouis Ouellet                        $return .= '</p>';
111df5bf7f3SLouis Ouellet                    $return .= '</li>';
112df5bf7f3SLouis Ouellet                    foreach($items as $item) {
113df5bf7f3SLouis Ouellet                        $return .= '<li>'
114df5bf7f3SLouis Ouellet                            .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
115df5bf7f3SLouis Ouellet                            .'<i></i> '
116df5bf7f3SLouis Ouellet                            .$item->getLabel()
117df5bf7f3SLouis Ouellet                            .'</a></li>';
118df5bf7f3SLouis Ouellet                    }
119df5bf7f3SLouis Ouellet                $return .= '</ul>';
120df5bf7f3SLouis Ouellet            $return .= '</div>';
121df5bf7f3SLouis Ouellet        } else {
122df5bf7f3SLouis Ouellet            $return .= '<div class="inline user-tools">';
123df5bf7f3SLouis Ouellet            foreach($items as $item) {
124df5bf7f3SLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
125df5bf7f3SLouis Ouellet                    .'<i></i> '
126df5bf7f3SLouis Ouellet                    .$item->getLabel()
127df5bf7f3SLouis Ouellet                    .'</a>';
128df5bf7f3SLouis Ouellet            }
129df5bf7f3SLouis Ouellet            $return .= '</div>';
130df5bf7f3SLouis Ouellet        }
131df5bf7f3SLouis Ouellet
132df5bf7f3SLouis Ouellet        return $return;
133df5bf7f3SLouis Ouellet    }
134df5bf7f3SLouis Ouellet}
1357311aa0dSLouis Ouellet
1367311aa0dSLouis Ouellet/**
1377311aa0dSLouis Ouellet * Generate the HTML for the sidebar menus
1387311aa0dSLouis Ouellet *
1397311aa0dSLouis Ouellet * @return string
1407311aa0dSLouis Ouellet */
1417311aa0dSLouis Ouelletif (!function_exists('tpl_getSidebarMenu')) {
1427311aa0dSLouis Ouellet    function tpl_getSidebarMenu()
1437311aa0dSLouis Ouellet    {
1447311aa0dSLouis Ouellet        global $lang,$ID,$conf,$INFO;
1457311aa0dSLouis Ouellet
1467311aa0dSLouis Ouellet        $userItems = (new \dokuwiki\Menu\UserMenu())->getItems();
1477311aa0dSLouis Ouellet        $siteItems = (new \dokuwiki\Menu\SiteMenu())->getItems();
1487311aa0dSLouis Ouellet
1497311aa0dSLouis Ouellet        $return = '';
1507311aa0dSLouis Ouellet
1517311aa0dSLouis Ouellet        $return .= '<div id="writr__sidebar__tools">';
1527311aa0dSLouis Ouellet
1537311aa0dSLouis Ouellet        if(isset($INFO['userinfo'])){
1547311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
1557311aa0dSLouis 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">';
1567311aa0dSLouis Ouellet                    $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail'], 32).'" />';
1577311aa0dSLouis Ouellet                    $return .= '<span>'.$INFO['userinfo']['name'].'</span>';
1587311aa0dSLouis Ouellet                $return .= '</a>';
1597311aa0dSLouis Ouellet                $return .= '<div id="user-tools-menu" class="collapsed">';
1607311aa0dSLouis Ouellet                    $return .= '<ul class="menu" role="menu">';
1617311aa0dSLouis Ouellet                        foreach($userItems as $item) {
1627311aa0dSLouis Ouellet                            $return .= '<li>'
1637311aa0dSLouis Ouellet                                .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
1647311aa0dSLouis Ouellet                                .'<i></i> '
1657311aa0dSLouis Ouellet                                .$item->getLabel()
1667311aa0dSLouis Ouellet                                .'</a></li>';
1677311aa0dSLouis Ouellet                        }
1687311aa0dSLouis Ouellet                    $return .= '</ul>';
1697311aa0dSLouis Ouellet                $return .= '</div>';
1707311aa0dSLouis Ouellet            $return .= '</div>';
1717311aa0dSLouis Ouellet        } else {
1727311aa0dSLouis Ouellet            $return .= '<div class="user-tools">';
1737311aa0dSLouis Ouellet            foreach($userItems as $item) {
1747311aa0dSLouis Ouellet                $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">'
1757311aa0dSLouis Ouellet                    .'<i></i> '
1767311aa0dSLouis Ouellet                    .$item->getLabel()
1777311aa0dSLouis Ouellet                    .'</a>';
1787311aa0dSLouis Ouellet            }
1797311aa0dSLouis Ouellet            $return .= '</div>';
1807311aa0dSLouis Ouellet        }
1817311aa0dSLouis Ouellet
1827311aa0dSLouis Ouellet        $return .= '</div>';
1837311aa0dSLouis Ouellet
1847311aa0dSLouis Ouellet        return $return;
1857311aa0dSLouis Ouellet    }
1867311aa0dSLouis Ouellet}
187