Files
2024-07-08 03:32:47 +09:00

208 lines
5.6 KiB
PHP

<?php
/**
* Provide navigation sidebar functionality to Dokuwiki Templates
*
* @author Christopher Smith <chris@jalakai.co.uk>
* @author Esther Brunner <wikidesign@gmail.com>
* @author Don Bowman <don@lynsoft.co.uk>
*/
/**
* Recursive function to establish best sidebar file to be used
*/
function getSidebarFN($ns, $file) {//func
/****** check for wiki page = $ns:$file (or $file where no namespace) ******/
$nsFile = ($ns) ? "$ns:$file" : $file;
if (file_exists(wikiFN($nsFile)) && auth_quickaclcheck($nsFile))
return $nsFile;
/****** no namespace left, exit with no file found ******/
if (!$ns)
return '';
/****** remove deepest namespace level and call function recursively ******/
$i = strrpos($ns, ":");
$ns = ($i) ? substr($ns, 0, $i) : false;
return getSidebarFN($ns, $file);
}//function getSidebarFN($ns, $file)
/**
* Display the sidebar
*/
function minima_sidebar() {//func
/****** declare global variables ******/
global $ID, $REV, $ACT, $conf;
/****** save global variables ******/
$saveID = $ID;
$saveREV = $REV;
// $saveACT = $ACT;
/****** find file to be displayed in navigation sidebar ******/
$sidebar = tpl_getConf('sidebar_page');
$fileSidebar = getSidebarFN(getNS($ID), $sidebar);
/****** show main sidebar if necessary ******/
if (tpl_getConf('minima_main_sidebar') && $fileSidebar != $sidebar) {//do
$ID = $sidebar;
$REV = '';
echo p_wiki_xhtml($ID, $REV, false);
// $ACT = 'show';
// tpl_content(false);
echo "<hr>";
}//if (tpl_getConf('minima_main_sidebar') && $fileSidebar != $sidebar)
/****** show current sidebar ******/
if ($fileSidebar) {//do
$ID = $fileSidebar;
$REV = '';
echo p_wiki_xhtml($ID, $REV, false);
// $ACT = 'show';
// tpl_content(false);
}//if ($fileSidebar)
/****** show index ******/
else {//if (!$fileSidebar)
// $REV = '';
// $ACT = 'index';
global $IDX;
html_index($IDX);
// tpl_content(false);
}//if (!$fileSidebar)
/****** restore global variables ******/
$ID = $saveID;
$REV = $saveREV;
// $ACT = $saveACT;
}//function minima_sidebar()
/**
* Return the correct ID for <div class="dokuwiki">
*/
function minima_classID() {//func
echo 'minima__'.tpl_getConf('width').'_'.tpl_getConf('sidebar_position');
}//function minima_classID()
/**
* Checks if the color scheme has changed
*/
function minima_checkColor() {//func
/****** set local variables ******/
$color = tpl_getConf('color');
$file = tpl_incdir().'style.ini';
$file2 = tpl_incdir().'style_'.$color.'.ini';
$ini = parse_ini_file($file);
/****** change theme as requested ******/
if ($ini['__theme__'] != '_'.$color) {//do
if ((@file_exists($file2)) && (@unlink($file)) && (@copy($file2, $file))) {//do
global $conf;
if ($conf['fperm']) chmod($file, $conf['fperm']);
}//if ((@file_exists($file2)) && (@unlink($file)) && (@copy($file2, $file)))
else {//if not ((@file_exists($file2)) && (@unlink($file)) && (@copy($file2, $file)))
msg('Could not set correct style.ini file for your chosen color scheme.', -1);
}//else {//if not ...
}//if ($ini['__theme__'] != '_'.$color)
}//function minima_checkColor()
/**
* Display tabs for easy navigation
*/
function minima_tabs() {//func
/****** declare global variables ******/
global $ID;
/****** set local variables ******/
$out = '';
/****** get tabs file name ******/
$ns = getNS($ID);
$tabsFile = wikiFN(($ns).':'.tpl_getConf('tabs_page'));
/****** show tabs ******/
if ((@file_exists($tabsFile)) && (auth_quickaclcheck($tabs))) {//do
$ins = p_cached_instructions($tabsFile);
/****** process each tab ******/
foreach ($ins as $in) {//do
/****** collect internal links to pages in same namespace ******/
if ($in[0] == 'internallink') {//do
list($id, $hash) = explode('#', $in[1][0], 2);
resolve_pageid(getNS($ID), $id, $exists);
/****** ignore links to other namespaces ******/
if (getNS($id) != $ns)
continue;
/****** ignore links to non-existent pages ******/
if (!$exists)
continue;
/****** determine link title ******/
$title = hsc($in[1][1]);
if (!$title)
$title = hsc(p_get_first_heading($id));
if (!$title)
$title = hsc(ucwords(noNS($id)));
/****** now construct the output link ******/
if ($id == $ID)
$out .= '<span class="activetab">'.$title.'</span> ';
else
$out .= '<a href="'.wl($id).'" class="tab">'.$title.'</a> ';
}//if ($in[0] == 'internallink')
/****** first header of tabs.txt is heading for whole namespace ******/
elseif (($in[0] == 'header') && (!$heading)) {//do
$heading = $in[1][0];
$level = $in[1][1];
}//if (($in[0] == 'header') && (!$heading))
}//foreach ($ins as $in)
/****** add heading to list ******/
if ($heading)
$out = '<h'.$level.'>'.$heading.'</h'.$level.'>'.$out;
/****** show list ******/
if ($out <> "")
echo '<div class="tabs">'.$out.'</div>';
}//if ((@file_exists($tabsFile)) && (auth_quickaclcheck($tabs)))
}//function minima_tabs()
/**
* Outputs the namespace title
*/
function minima_nstitle() {//func
/****** declare global variables ******/
global $ID;
/****** get namespace title ******/
$title = p_get_metadata(getNS($ID).':'.tpl_getConf('tabs_page'), 'title');
/****** show namespace title ******/
if ($title)
echo $title.': ';
}//function minima_nstitle()