From 9de555450931ca264628c7b4528a01adc4779439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ctibor=20Bran=C4=8D=C3=ADk?= Date: Wed, 23 Mar 2016 20:36:47 +0100 Subject: Add template for the site to repo. --- lib/tpl/nowawes/tpl_functions.php | 377 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 377 insertions(+) create mode 100644 lib/tpl/nowawes/tpl_functions.php (limited to 'lib/tpl/nowawes/tpl_functions.php') diff --git a/lib/tpl/nowawes/tpl_functions.php b/lib/tpl/nowawes/tpl_functions.php new file mode 100644 index 000000000..1147e5afb --- /dev/null +++ b/lib/tpl/nowawes/tpl_functions.php @@ -0,0 +1,377 @@ + + */ + +// must be run from within DokuWiki +if (!defined('DOKU_INC')) die(); +if (!defined('DOKU_LF')) define('DOKU_LF',"\n"); + +// 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 'both': + $notoc = (in_array('toc',$sbl) || in_array('toc',$sbr)) ? true : false; + $toolb = (in_array('toolbox',$sbl) || in_array('toolbox',$sbr)) ? true : false; + break; + 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('closedwiki') && !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'].'/nosidebar.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('closedwiki') && !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('closedwiki') && !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 ''; + } + // 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('closedwiki') && !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('closedwiki') && !isset($_SERVER['REMOTE_USER'])) return; + print '' . DOKU_LF; + break; + + case 'toc': + if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) return; + if(auth_quickaclcheck($svID) >= AUTH_READ) { + $toc = tpl_toc(true); + // replace ids to keep XHTML compliance + if(!empty($toc)) { + $toc = preg_replace('/id="(.*?)"/', 'id="sb__' . $pos . '__\1"', $toc); + print '' . DOKU_LF; + } + } + break; + + case 'toolbox': + + if(tpl_getConf('hideactions') && !isset($_SERVER['REMOTE_USER'])) return; + + if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) { + print '' . DOKU_LF; + } else { + $actions = array('admin', + 'revert', + 'edit', + 'history', + 'recent', + 'backlink', + 'media', + 'subscription', + 'index', + 'login', + 'profile', + 'top'); + + print '' . DOKU_LF; + } + + break; + + case 'trace': + if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) return; + print '' . DOKU_LF; + break; + + case 'extra': + if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) return; + print '' . DOKU_LF; + break; + + default: + if(tpl_getConf('closedwiki') && !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', 'media' ); + if(in_array($ACT, $act_hide)) { + return true; + } else { + return false; + } +} + +// vim:ts=4:sw=4:et:enc=utf-8: +?> -- cgit v1.2.3