* @author Johannes Winkler */ // must be run from within DokuWiki if (!defined('DOKU_INC')) die(); if (!defined('DOKU_LF')) define('DOKU_LF',"\n"); // load language files require_once(DOKU_TPLINC.'lang/en/lang.php'); if(@file_exists(DOKU_TPLINC.'lang/'.$conf['lang'].'/lang.php')) { require_once(DOKU_TPLINC.'lang/'.$conf['lang'].'/lang.php'); } // load sidebar contents $sbl = explode(',',tpl_getConf('left_sidebar_content')); $sbr = explode(',',tpl_getConf('right_sidebar_content')); $sbpos = tpl_getConf('sidebar'); // set notoc option and toolbar regarding the sitebar setup switch($sbpos) { case 'left': $notoc = (in_array('toc',$sbl)) ? true : false; $toolb = (in_array('toolbox',$sbl)) ? true : false; break; case 'right': $notoc = (in_array('toc',$sbr)) ? true : false; $toolb = (in_array('toolbox',$sbr)) ? true : false; break; case 'none': $notoc = false; $toolb = false; break; } /** * Prints the sidebars * * @author Michael Klier */ function tpl_sidebar($pos) { $sb_order = ($pos == 'left') ? explode(',', tpl_getConf('left_sidebar_order')) : explode(',', tpl_getConf('right_sidebar_order')); $sb_content = ($pos == 'left') ? explode(',', tpl_getConf('left_sidebar_content')) : explode(',', tpl_getConf('right_sidebar_content')); // process contents by given order foreach($sb_order as $sb) { if(in_array($sb,$sb_content)) { $key = array_search($sb,$sb_content); unset($sb_content[$key]); tpl_sidebar_dispatch($sb,$pos); } } // check for left content not specified by order if(is_array($sb_content) && !empty($sb_content) > 0) { foreach($sb_content as $sb) { tpl_sidebar_dispatch($sb,$pos); } } } /** * Dispatches the given sidebar type to return the right content * * @author Michael Klier */ function tpl_sidebar_dispatch($sb,$pos) { global $lang; global $conf; global $ID; global $REV; global $INFO; global $TOC; $svID = $ID; // save current ID $svREV = $REV; // save current REV $svTOC = $TOC; // save current TOC $pname = tpl_getConf('pagename'); switch($sb) { case 'main': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; $main_sb = $pname; if(@page_exists($main_sb) && auth_quickaclcheck($main_sb) >= AUTH_READ) { $always = tpl_getConf('main_sidebar_always'); if($always or (!$always && !getNS($ID))) { print '' . DOKU_LF; } } elseif(!@page_exists($main_sb) && auth_quickaclcheck($main_sb) >= AUTH_CREATE) { if(@file_exists(DOKU_TPLINC.'lang/'. $conf['lang'].'/nonidebar.txt')) { $out = p_render('xhtml', p_get_instructions(io_readFile(DOKU_TPLINC.'lang/'.$conf['lang'].'/nosidebar.txt')), $info); } else { $out = p_render('xhtml', p_get_instructions(io_readFile(DOKU_TPLINC.'lang/en/nosidebar.txt')), $info); } $link = '' . $pname . '' . DOKU_LF; print '' . DOKU_LF; } break; case 'namespace': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; $user_ns = tpl_getConf('user_sidebar_namespace'); $group_ns = tpl_getConf('group_sidebar_namespace'); if(!preg_match("/^".$user_ns.":.*?$|^".$group_ns.":.*?$/", $svID)) { // skip group/user sidebars and current ID $ns_sb = _getNsSb($svID); if($ns_sb && auth_quickaclcheck($ns_sb) >= AUTH_READ) { print '' . DOKU_LF; } } break; case 'user': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; $user_ns = tpl_getConf('user_sidebar_namespace'); if(isset($INFO['userinfo']['name'])) { $user = $_SERVER['REMOTE_USER']; $user_sb = $user_ns . ':' . $user . ':' . $pname; if(@page_exists($user_sb)) { $subst = array('pattern' => array('/@USER@/'), 'replace' => array($user)); print '' . DOKU_LF; } // check for namespace sidebars in user namespace too if(preg_match('/'.$user_ns.':'.$user.':.*/', $svID)) { $ns_sb = _getNsSb($svID); if($ns_sb && $ns_sb != $user_sb && auth_quickaclcheck($ns_sb) >= AUTH_READ) { print '' . DOKU_LF; } } } break; case 'group': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; $group_ns = tpl_getConf('group_sidebar_namespace'); if(isset($INFO['userinfo']['name'], $INFO['userinfo']['grps'])) { foreach($INFO['userinfo']['grps'] as $grp) { $group_sb = $group_ns.':'.$grp.':'.$pname; if(@page_exists($group_sb) && auth_quickaclcheck(cleanID($group_sb)) >= AUTH_READ) { $subst = array('pattern' => array('/@GROUP@/'), 'replace' => array($grp)); print '' . DOKU_LF; } } } break; case 'index': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; print '' . DOKU_LF; break; case 'toc': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if (auth_quickaclcheck($svID) >= AUTH_READ) { $toc = tpl_toc(true); if(!empty($toc)) { print tpl_toc(true); } } break; case 'toolbox': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('hideactions') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) { print '' . DOKU_LF; } else { $actions = array('admin', 'revert', 'edit', 'history', 'recent', 'backlink', 'subscription', 'index', 'login', 'profile', 'top'); print '' . DOKU_LF; } break; case 'trace': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; print '' . DOKU_LF; break; case 'extra': if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; print '' . DOKU_LF; break; default: if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) return; if(tpl_getConf('closedwiki2') && !isset($_SERVER['REMOTE_USER'])) return; // check for user defined sidebars if(@file_exists(DOKU_TPLINC.'sidebars/'.$sb.'/sidebar.php')) { print '' . DOKU_LF; } break; } // restore ID, REV and TOC $ID = $svID; $REV = $svREV; $TOC = $svTOC; } /** * Removes the TOC of the sidebar pages and * shows a edit button if the user has enough rights * * TODO sidebar caching * * @author Michael Klier */ function p_sidebar_xhtml($sb,$pos,$subst=array()) { $data = p_wiki_xhtml($sb,'',false); if(!empty($subst)) { $data = preg_replace($subst['pattern'], $subst['replace'], $data); } if(auth_quickaclcheck($sb) >= AUTH_EDIT) { $data .= '
'.html_btn('secedit',$sb,'',array('do'=>'edit','rev'=>'','post')).'
'; } // strip TOC $data = preg_replace('/
.*?(<\/div>\n<\/div>)/s', '', $data); // replace headline ids for XHTML compliance $data = preg_replace('/(.*?<\/a><\/h.*?>)/','\1sb_'.$pos.'_\2\3sb_'.$pos.'_\4\5', $data); return ($data); } /** * Renders the Index * * copy of html_index located in /inc/html.php * * TODO update to new AJAX index possible? * * @author Andreas Gohr * @author Michael Klier */ function p_index_xhtml($ns,$pos) { require_once(DOKU_INC.'inc/search.php'); global $conf; global $ID; $dir = $conf['datadir']; $ns = cleanID($ns); #fixme use appropriate function if(empty($ns)){ $ns = dirname(str_replace(':','/',$ID)); if($ns == '.') $ns =''; } $ns = utf8_encodeFN(str_replace(':','/',$ns)); // extract only the headline preg_match('/

.*?<\/h1>/', p_locale_xhtml('index'), $match); print preg_replace('##', '', $match[0]); $data = array(); search($data,$conf['datadir'],'search_index',array('ns' => $ns)); print '
' . DOKU_LF; print html_buildlist($data,'idx','html_list_index','html_li_index'); print '
' . DOKU_LF; } /** * searches for namespace sidebars * * @author Michael Klier */ function _getNsSb($id) { $pname = tpl_getConf('pagename'); $ns_sb = ''; $path = explode(':', $id); $found = false; while(count($path) > 0) { $ns_sb = implode(':', $path).':'.$pname; if(@page_exists($ns_sb)) return $ns_sb; array_pop($path); } // nothing found return false; } /** * Checks wether the sidebar should be hidden or not * * @author Michael Klier */ function tpl_sidebar_hide() { global $ACT; $act_hide = array( 'edit', 'preview', 'admin', 'conflict', 'draft', 'recover'); if(in_array($ACT, $act_hide)) { return true; } else { return false; } } function tpl_userbar() { if(tpl_getConf('userbar')) { if(!tpl_getConf('closedwiki2') || (tpl_getConf('closedwiki2') && isset($_SERVER['REMOTE_USER']))) { // check if new page button plugin is available if(!plugin_isdisabled('npd') && ($npd =& plugin_load('helper', 'npd'))) { $npd->html_new_page_button(); } } if(!tpl_getConf('closedwiki2') || (tpl_getConf('closedwiki2') && isset($_SERVER['REMOTE_USER']))) { tpl_actionlink('admin'); tpl_actionlink('profile'); tpl_actionlink('login'); } else { tpl_actionlink('login'); } } } function tpl_sitemap() { if(tpl_getConf('sitemap')) { tpl_button('index') . DOKU_LF; } } function tpl_closedwiki1() { if(tpl_getConf('closedwiki1') && !isset($_SERVER['REMOTE_USER'])) { print '
' . DOKU_LF; print '
' . DOKU_LF; tpl_link(wl($ID,'do=backlink'),tpl_pagetitle($ID,true),'title="'.$lang['btn_backlink'].'"'); print '
' . DOKU_LF; print '
' . DOKU_LF; // wikipage start print '
' . DOKU_LF; tpl_toc(); print '
' . DOKU_LF; tpl_content(false); // wikipage stop print '
' . DOKU_LF; print '
' . DOKU_LF; // Pageinfo. print '
' . DOKU_LF; print '
' . DOKU_LF; tpl_pageinfo(); print '
' . DOKU_LF; print '
' . DOKU_LF; tpl_button('edit'); tpl_button('history'); tpl_button('revert'); print '
' . DOKU_LF; print '
' . DOKU_LF; } } /* thanks to dokubook-template */ function tpl_logo() { global $conf; $out = ''; switch(tpl_getConf('logo')) { case 'text': $out .= '

' . DOKU_LF; $out .= '' . $conf['title'] . '' . DOKU_LF; $out .= '

' . DOKU_LF; $out .= '

' . DOKU_LF; $out .= ' ' . DOKU_LF; if(tpl_getConf('logo_yourdefinition')) { $out .= tpl_getConf('logo_yourdefinition') . DOKU_LF; } $out .= '
' . DOKU_LF; if(tpl_getConf('logo_yourname')) { $out .= tpl_getConf('logo_yourname') . DOKU_LF; } $out .= '
' . DOKU_LF; $out .= '

' . DOKU_LF; break; case 'image': switch(true) { case(tpl_getConf('logo_image')): $logo = tpl_getConf('logo_image'); break; case(@file_exists(DOKU_TPLINC.'user/logo.jpg')): $logo = DOKU_TPL.'user/logo.jpg'; break; case(@file_exists(DOKU_TPLINC.'user/logo.jpeg')): $logo = DOKU_TPL.'user/logo.jpeg'; break; case(@file_exists(DOKU_TPLINC.'user/logo.png')): $logo = DOKU_TPL.'user/logo.png'; break; case(@file_exists(DOKU_TPLINC.'images/logo.jpg')): $logo = DOKU_TPL.'images/logo.jpg'; break; case(@file_exists(DOKU_TPLINC.'images/logo.jpeg')): $logo = DOKU_TPL.'images/logo.jpeg'; break; case(@file_exists(DOKU_TPLINC.'images/logo.png')): $logo = DOKU_TPL.'images/logo.png'; break; default: $logo = DOKU_TPL.'user/logo.png'; break; } $out .= ''; $out .= ' ' . DOKU_LF; break; } print $out; } function tpl_navi() { // nb = navibutton print '
    ' . DOKU_LF; for ($i = 1; $i <= 6; $i++){ $nb = tpl_getConf('navibutton' . $i); $nb_without_bracket = substr($nb, 2, -2); $nb_explode = explode('|', $nb_without_bracket); $nb_cleaned = array(); if (count($nb_explode) > 0) { foreach ($nb_explode as $nb_foreach) { if ($nb_foreach) { $nb_cleaned[] = $nb_foreach; } } } if(!empty($nb_cleaned)) { print '
  • ' . DOKU_LF; if((substr($nb_cleaned[0],0,7) == 'http://') || (substr($nb_cleaned[0],0,8) == 'https://')) { print '' . $nb_cleaned[1] . ''; } else {tpl_link(wl($nb_cleaned[0]),$nb_cleaned[1]); } print '
  • ' . DOKU_LF; } } print '
' . DOKU_LF; } function tpl_top_link() { if(tpl_getConf('top_link')) { print '' . DOKU_LF; } }s ?>