1<?php 2/** 3 * Template Functions 4 * 5 * This file provides template specific custom functions that are 6 * not provided by the DokuWiki core. 7 * It is common practice to start each function with an underscore 8 * to make sure it won't interfere with future core functions. 9 */ 10 11// must be run from within DokuWiki 12if (!defined('DOKU_INC')) die(); 13 14/** 15 * Generate the HTML for the Site-Branding Area 16 * 17 * @return string 18 */ 19if (!function_exists('tpl_getSiteBranding')) { 20 function tpl_getSiteBranding() 21 { 22 // Retrieve the global variables 23 global $ID,$conf; 24 25 // Initialize the return value 26 $return = ''; 27 28 // Initialize the site branding configurations 29 $logoSize = array(); 30 $logoImages = array(); 31 if(tpl_getConf('doLogoChangesByNamespace')){ 32 $namespace = ""; 33 $namespaces = array(); 34 foreach(explode(':',getNS($ID)) as $ns){ 35 $namespace .= "$ns:"; 36 $namespaces[] = $namespace; 37 } 38 foreach(array_reverse($namespaces) as $namespace){ 39 $logoImages[] = ":".trim($namespace,":").":logo.png"; 40 } 41 } 42 $logoImages[] = ':logo.png'; 43 $logoImages[] = ':wiki:logo.png'; 44 $logoImages[] = 'images/logo.png'; 45 $logo = tpl_getMediaFile($logoImages, false, $logoSize); 46 $link = wl(); 47 if(tpl_getConf('doLogoLinkChangesByNamespace')){ 48 $link = str_replace(['/_media','logo.png'],['',$conf['start']],$logo); 49 } 50 $title = $conf['title']; 51 if(tpl_getConf('doTitleChangesByNamespace')){ 52 $nstitle = tpl_include_page('nstitle', 0, 1); 53 if ($nstitle) { 54 $title = str_replace(['<p>','</p>',"\n"],'',$nstitle); 55 } 56 } 57 $tagline = $conf['tagline']; 58 if(tpl_getConf('doTaglineChangesByNamespace')){ 59 $nstagline = tpl_include_page('nstagline', 0, 1); 60 if ($nstagline) { 61 $tagline = str_replace(['<p>','</p>',"\n"],'',$nstagline); 62 } 63 } 64 65 // Initialize the logo 66 $return .= '<a class="site-logo" href="'.$link.'" title="'.$title.'" rel="home" accesskey="h">'; 67 $return .= '<img src="'.$logo.'" '.$logoSize[3].' class="no-grav header-image" />'; 68 $return .= '</a>'; 69 70 // Initialize the site branding 71 $return .= '<div class="site-branding">'; 72 $return .= '<h1 class="site-title"><a href="'.$link.'" rel="home" accesskey="h" title="'.$title.'">'.$title.'</a></h1>'; 73 if($tagline){ 74 $return .= '<h2 class="site-description">'.$tagline.'</h2>'; 75 } 76 $return .= '</div>'; 77 78 return $return; 79 } 80} 81 82/** 83 * Generate the gravatar URL for a given email 84 * 85 * @return string 86 */ 87if (!function_exists('tpl_getGravatarURL')) { 88 function tpl_getGravatarURL($email, $size = 96) 89 { 90 return 'https://www.gravatar.com/avatar/'.md5(strtolower(trim($email))).'?s='.$size; 91 } 92} 93 94 95/** 96 * Generate the HTML for a menu 97 * 98 * @return string 99 */ 100if (!function_exists('tpl_getMenu')) { 101 function tpl_getMenu($menu) 102 { 103 switch($menu){ 104 case 'usermenu': 105 return tpl_getUserMenu(); 106 break; 107 case 'sidebarmenu': 108 return tpl_getSidebarMenu(); 109 break; 110 } 111 } 112} 113 114/** 115 * Generate the HTML for the user menu 116 * 117 * @return string 118 */ 119if (!function_exists('tpl_getUserMenu')) { 120 function tpl_getUserMenu() 121 { 122 global $lang,$ID,$conf,$INFO; 123 124 $return = ''; 125 126 $items = (new \dokuwiki\Menu\UserMenu())->getItems(); 127 128 if(isset($INFO['userinfo'])){ 129 $return .= '<div class="tools-menus">'; 130 $return .= '<div class="dropdown user-tools">'; 131 $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">'; 132 $return .= '<i class="bi bi-person"></i>'.$INFO['userinfo']['name']; 133 $return .= '</a>'; 134 $return .= '<ul class="dropdown-menu" role="menu">'; 135 $return .= '<li>'; 136 $return .= '<p class="avatar">'; 137 $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail']).'" />'; 138 $return .= '</p>'; 139 $return .= '</li>'; 140 foreach($items as $item) { 141 $return .= '<li>' 142 .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 143 .'<i></i> ' 144 .$item->getLabel() 145 .'</a></li>'; 146 } 147 $return .= '</ul>'; 148 $return .= '</div>'; 149 if(tpl_getConf('enableStarredBookmark')){ 150 if (!plugin_isdisabled('sqlite')) { 151 if (!plugin_isdisabled('starred')) { 152 $return .= '<div class="dropdown bookmarks">'; 153 $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 $return .= '<i class="bi bi-star"></i>'.tpl_getLang('Bookmarks'); 155 $return .= '</a>'; 156 $return .= '<ul class="dropdown-menu" role="menu">'; 157 $instructions = p_get_instructions('{{starred>min}}'); 158 if(count($instructions) > 0) { 159 $render = p_render('xhtml',$instructions, $info); 160 // Sanitize the output 161 $render = preg_replace('/<div class="plugin_starred">/', '', $render); 162 $render = preg_replace('/<\/div>/', '', $render); 163 $render = preg_replace('/<div class="li">/', '', $render); 164 $render = preg_replace('/<\/div>/', '', $render); 165 $render = preg_replace('/<ul>/', '', $render); 166 $render = preg_replace('/<\/ul>/', '', $render); 167 $render = preg_replace('/<li class="level1">/', '<li>', $render); 168 $return .= $render; 169 } 170 $return .= '</ul>'; 171 $return .= '</div>'; 172 } 173 } 174 } 175 $return .= '</div>'; 176 } else { 177 $return .= '<div class="inline user-tools">'; 178 foreach($items as $item) { 179 $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 180 .'<i></i> ' 181 .$item->getLabel() 182 .'</a>'; 183 } 184 $return .= '</div>'; 185 } 186 187 return $return; 188 } 189} 190 191/** 192 * Generate the HTML for the sidebar menus 193 * 194 * @return string 195 */ 196if (!function_exists('tpl_getSidebarMenu')) { 197 function tpl_getSidebarMenu() 198 { 199 global $lang,$ID,$conf,$INFO; 200 201 $userItems = (new \dokuwiki\Menu\UserMenu())->getItems(); 202 203 $return = ''; 204 $return .= '<div id="writr__sidebar__tools">'; 205 206 if(isset($INFO['userinfo'])){ 207 $return .= '<div class="user-tools">'; 208 $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">'; 209 $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail'], 32).'" />'; 210 $return .= '<span>'.$INFO['userinfo']['name'].'</span>'; 211 $return .= '</a>'; 212 $return .= '<div id="user-tools-menu" class="collapsed">'; 213 $return .= '<ul class="menu" role="menu">'; 214 foreach($userItems as $item) { 215 $return .= '<li>' 216 .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 217 .'<i></i> ' 218 .$item->getLabel() 219 .'</a></li>'; 220 } 221 $return .= '</ul>'; 222 $return .= '</div>'; 223 $return .= '</div>'; 224 } else { 225 $return .= '<div class="user-tools">'; 226 foreach($userItems as $item) { 227 $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 228 .'<i></i> ' 229 .$item->getLabel() 230 .'</a>'; 231 } 232 $return .= '</div>'; 233 } 234 235 $return .= '</div>'; 236 237 return $return; 238 } 239} 240