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 { 90*197e9867Shanzlik global $conf; 91*197e9867Shanzlik $email = trim(strtolower((string)$email)); 92*197e9867Shanzlik $tplName = basename(__DIR__); 93*197e9867Shanzlik $variant = function_exists('tpl_getConf') ? tpl_getConf('profile_pic_variant') : 'white'; 94*197e9867Shanzlik 95*197e9867Shanzlik if ($variant === 'black') { 96*197e9867Shanzlik $fallback = DOKU_BASE.'lib/tpl/'.$tplName.'/images/profile_pic_black.png'; 97*197e9867Shanzlik } else { 98*197e9867Shanzlik $fallback = DOKU_BASE.'lib/tpl/'.$tplName.'/images/profile_pic_white.png'; 99df5bf7f3SLouis Ouellet } 100df5bf7f3SLouis Ouellet 101*197e9867Shanzlik if (empty($email)) { 102*197e9867Shanzlik return $fallback; 103*197e9867Shanzlik } 104*197e9867Shanzlik 105*197e9867Shanzlik $hash = md5(strtolower(trim($email))); 106*197e9867Shanzlik $testUrl = 'https://www.gravatar.com/avatar/'.$hash.'?s='.$size.'&d=404'; 107*197e9867Shanzlik $headers = @get_headers($testUrl); 108*197e9867Shanzlik if ($headers && isset($headers[0]) && strpos($headers[0], '200') !== false) { 109*197e9867Shanzlik return 'https://www.gravatar.com/avatar/'.$hash.'?s='.$size; 110*197e9867Shanzlik } 111*197e9867Shanzlik return $fallback; 112*197e9867Shanzlik } 113*197e9867Shanzlik} 114df5bf7f3SLouis Ouellet 115df5bf7f3SLouis Ouellet/** 116df5bf7f3SLouis Ouellet * Generate the HTML for a menu 117df5bf7f3SLouis Ouellet * 118df5bf7f3SLouis Ouellet * @return string 119df5bf7f3SLouis Ouellet */ 120df5bf7f3SLouis Ouelletif (!function_exists('tpl_getMenu')) { 121df5bf7f3SLouis Ouellet function tpl_getMenu($menu) 122df5bf7f3SLouis Ouellet { 123df5bf7f3SLouis Ouellet switch($menu){ 124df5bf7f3SLouis Ouellet case 'usermenu': 125df5bf7f3SLouis Ouellet return tpl_getUserMenu(); 126df5bf7f3SLouis Ouellet break; 1277311aa0dSLouis Ouellet case 'sidebarmenu': 1287311aa0dSLouis Ouellet return tpl_getSidebarMenu(); 1297311aa0dSLouis Ouellet break; 130df5bf7f3SLouis Ouellet } 131df5bf7f3SLouis Ouellet } 132df5bf7f3SLouis Ouellet} 133df5bf7f3SLouis Ouellet 134df5bf7f3SLouis Ouellet/** 135df5bf7f3SLouis Ouellet * Generate the HTML for the user menu 136df5bf7f3SLouis Ouellet * 137df5bf7f3SLouis Ouellet * @return string 138df5bf7f3SLouis Ouellet */ 139df5bf7f3SLouis Ouelletif (!function_exists('tpl_getUserMenu')) { 140df5bf7f3SLouis Ouellet function tpl_getUserMenu() 141df5bf7f3SLouis Ouellet { 142df5bf7f3SLouis Ouellet global $lang,$ID,$conf,$INFO; 143df5bf7f3SLouis Ouellet 144df5bf7f3SLouis Ouellet $return = ''; 145df5bf7f3SLouis Ouellet 146df5bf7f3SLouis Ouellet $items = (new \dokuwiki\Menu\UserMenu())->getItems(); 147df5bf7f3SLouis Ouellet 148df5bf7f3SLouis Ouellet if(isset($INFO['userinfo'])){ 149df086b5dSLouis Ouellet $return .= '<div class="tools-menus">'; 150df5bf7f3SLouis Ouellet $return .= '<div class="dropdown user-tools">'; 15136603110SLouis 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">'; 152df5bf7f3SLouis Ouellet $return .= '<i class="bi bi-person"></i>'.$INFO['userinfo']['name']; 153df5bf7f3SLouis Ouellet $return .= '</a>'; 154df5bf7f3SLouis Ouellet $return .= '<ul class="dropdown-menu" role="menu">'; 155df5bf7f3SLouis Ouellet $return .= '<li>'; 156df5bf7f3SLouis Ouellet $return .= '<p class="avatar">'; 157df5bf7f3SLouis Ouellet $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail']).'" />'; 158df5bf7f3SLouis Ouellet $return .= '</p>'; 159df5bf7f3SLouis Ouellet $return .= '</li>'; 160df5bf7f3SLouis Ouellet foreach($items as $item) { 161df5bf7f3SLouis Ouellet $return .= '<li>' 162df5bf7f3SLouis Ouellet .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 163df5bf7f3SLouis Ouellet .'<i></i> ' 164df5bf7f3SLouis Ouellet .$item->getLabel() 165df5bf7f3SLouis Ouellet .'</a></li>'; 166df5bf7f3SLouis Ouellet } 167df5bf7f3SLouis Ouellet $return .= '</ul>'; 168df5bf7f3SLouis Ouellet $return .= '</div>'; 169df086b5dSLouis Ouellet if(tpl_getConf('enableStarredBookmark')){ 170df086b5dSLouis Ouellet if (!plugin_isdisabled('sqlite')) { 171df086b5dSLouis Ouellet if (!plugin_isdisabled('starred')) { 172df086b5dSLouis Ouellet $return .= '<div class="dropdown bookmarks">'; 173df086b5dSLouis 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">'; 174df086b5dSLouis Ouellet $return .= '<i class="bi bi-star"></i>'.tpl_getLang('Bookmarks'); 175df086b5dSLouis Ouellet $return .= '</a>'; 176df086b5dSLouis Ouellet $return .= '<ul class="dropdown-menu" role="menu">'; 177df086b5dSLouis Ouellet $instructions = p_get_instructions('{{starred>min}}'); 1784cc54253SLouis Ouellet if(count($instructions) > 0) { 179df086b5dSLouis Ouellet $render = p_render('xhtml',$instructions, $info); 180df086b5dSLouis Ouellet // Sanitize the output 181df086b5dSLouis Ouellet $render = preg_replace('/<div class="plugin_starred">/', '', $render); 182df086b5dSLouis Ouellet $render = preg_replace('/<\/div>/', '', $render); 183df086b5dSLouis Ouellet $render = preg_replace('/<div class="li">/', '', $render); 184df086b5dSLouis Ouellet $render = preg_replace('/<\/div>/', '', $render); 185df086b5dSLouis Ouellet $render = preg_replace('/<ul>/', '', $render); 186df086b5dSLouis Ouellet $render = preg_replace('/<\/ul>/', '', $render); 187df086b5dSLouis Ouellet $render = preg_replace('/<li class="level1">/', '<li>', $render); 188df086b5dSLouis Ouellet $return .= $render; 189df086b5dSLouis Ouellet } 190df086b5dSLouis Ouellet $return .= '</ul>'; 191df086b5dSLouis Ouellet $return .= '</div>'; 192df086b5dSLouis Ouellet } 193df086b5dSLouis Ouellet } 194df086b5dSLouis Ouellet } 195df086b5dSLouis Ouellet $return .= '</div>'; 196df5bf7f3SLouis Ouellet } else { 197df5bf7f3SLouis Ouellet $return .= '<div class="inline user-tools">'; 198df5bf7f3SLouis Ouellet foreach($items as $item) { 199df5bf7f3SLouis Ouellet $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 200df5bf7f3SLouis Ouellet .'<i></i> ' 201df5bf7f3SLouis Ouellet .$item->getLabel() 202df5bf7f3SLouis Ouellet .'</a>'; 203df5bf7f3SLouis Ouellet } 204df5bf7f3SLouis Ouellet $return .= '</div>'; 205df5bf7f3SLouis Ouellet } 206df5bf7f3SLouis Ouellet 207df5bf7f3SLouis Ouellet return $return; 208df5bf7f3SLouis Ouellet } 209df5bf7f3SLouis Ouellet} 2107311aa0dSLouis Ouellet 2117311aa0dSLouis Ouellet/** 2127311aa0dSLouis Ouellet * Generate the HTML for the sidebar menus 2137311aa0dSLouis Ouellet * 2147311aa0dSLouis Ouellet * @return string 2157311aa0dSLouis Ouellet */ 2167311aa0dSLouis Ouelletif (!function_exists('tpl_getSidebarMenu')) { 2177311aa0dSLouis Ouellet function tpl_getSidebarMenu() 2187311aa0dSLouis Ouellet { 2197311aa0dSLouis Ouellet global $lang,$ID,$conf,$INFO; 2207311aa0dSLouis Ouellet 2217311aa0dSLouis Ouellet $userItems = (new \dokuwiki\Menu\UserMenu())->getItems(); 2227311aa0dSLouis Ouellet 2237311aa0dSLouis Ouellet $return = ''; 2247311aa0dSLouis Ouellet $return .= '<div id="writr__sidebar__tools">'; 2257311aa0dSLouis Ouellet 2267311aa0dSLouis Ouellet if(isset($INFO['userinfo'])){ 2277311aa0dSLouis Ouellet $return .= '<div class="user-tools">'; 2287311aa0dSLouis 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">'; 2297311aa0dSLouis Ouellet $return .= '<img alt="'.$INFO['userinfo']['name'].'" src="'.tpl_getGravatarURL($INFO['userinfo']['mail'], 32).'" />'; 2307311aa0dSLouis Ouellet $return .= '<span>'.$INFO['userinfo']['name'].'</span>'; 2317311aa0dSLouis Ouellet $return .= '</a>'; 2327311aa0dSLouis Ouellet $return .= '<div id="user-tools-menu" class="collapsed">'; 2337311aa0dSLouis Ouellet $return .= '<ul class="menu" role="menu">'; 2347311aa0dSLouis Ouellet foreach($userItems as $item) { 2357311aa0dSLouis Ouellet $return .= '<li>' 2367311aa0dSLouis Ouellet .'<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 2377311aa0dSLouis Ouellet .'<i></i> ' 2387311aa0dSLouis Ouellet .$item->getLabel() 2397311aa0dSLouis Ouellet .'</a></li>'; 2407311aa0dSLouis Ouellet } 2417311aa0dSLouis Ouellet $return .= '</ul>'; 2427311aa0dSLouis Ouellet $return .= '</div>'; 2437311aa0dSLouis Ouellet $return .= '</div>'; 2447311aa0dSLouis Ouellet } else { 2457311aa0dSLouis Ouellet $return .= '<div class="user-tools">'; 2467311aa0dSLouis Ouellet foreach($userItems as $item) { 2477311aa0dSLouis Ouellet $return .= '<a href="'.$item->getLink().'" class="action '.strtolower($item->getType()).'" rel="nofollow" title="'.$item->getTitle().'">' 2487311aa0dSLouis Ouellet .'<i></i> ' 2497311aa0dSLouis Ouellet .$item->getLabel() 2507311aa0dSLouis Ouellet .'</a>'; 2517311aa0dSLouis Ouellet } 2527311aa0dSLouis Ouellet $return .= '</div>'; 2537311aa0dSLouis Ouellet } 2547311aa0dSLouis Ouellet 2557311aa0dSLouis Ouellet $return .= '</div>'; 2567311aa0dSLouis Ouellet 2577311aa0dSLouis Ouellet return $return; 2587311aa0dSLouis Ouellet } 2597311aa0dSLouis Ouellet} 260