summaryrefslogtreecommitdiff
path: root/lib/tpl/nowawes/tpl_functions.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tpl/nowawes/tpl_functions.php')
-rw-r--r--lib/tpl/nowawes/tpl_functions.php377
1 files changed, 377 insertions, 0 deletions
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 @@
+<?php
+/**
+ * DokuWiki Template Arctic Functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Michael Klier <chi@chimeric.de>
+ */
+
+// 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 <chi@chimeric.de>
+ */
+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 <chi@chimeric.de>
+ */
+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 '<div class="main_sidebar sidebar_box">' . DOKU_LF;
+ print p_sidebar_xhtml($main_sb,$pos) . DOKU_LF;
+ print '</div>' . 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 = '<a href="' . wl($pname) . '" class="wikilink2">' . $pname . '</a>' . DOKU_LF;
+ print '<div class="main_sidebar sidebar_box">' . DOKU_LF;
+ print str_replace('LINK', $link, $out);
+ print '</div>' . 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 '<div class="namespace_sidebar sidebar_box">' . DOKU_LF;
+ print p_sidebar_xhtml($ns_sb,$pos) . DOKU_LF;
+ print '</div>' . 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 '<div class="user_sidebar sidebar_box">' . DOKU_LF;
+ print p_sidebar_xhtml($user_sb,$pos,$subst) . DOKU_LF;
+ print '</div>';
+ }
+ // 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 '<div class="namespace_sidebar sidebar_box">' . DOKU_LF;
+ print p_sidebar_xhtml($ns_sb,$pos) . DOKU_LF;
+ print '</div>' . 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 '<div class="group_sidebar sidebar_box">' . DOKU_LF;
+ print p_sidebar_xhtml($group_sb,$pos,$subst) . DOKU_LF;
+ print '</div>' . DOKU_LF;
+ }
+ }
+ }
+ break;
+
+ case 'index':
+ if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) return;
+ print '<div class="index_sidebar sidebar_box">' . DOKU_LF;
+ print ' ' . p_index_xhtml($svID,$pos) . DOKU_LF;
+ print '</div>' . 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 '<div class="toc_sidebar sidebar_box">' . DOKU_LF;
+ print ($toc);
+ print '</div>' . DOKU_LF;
+ }
+ }
+ break;
+
+ case 'toolbox':
+
+ if(tpl_getConf('hideactions') && !isset($_SERVER['REMOTE_USER'])) return;
+
+ if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) {
+ print '<div class="toolbox_sidebar sidebar_box">' . DOKU_LF;
+ print ' <div class="level1">' . DOKU_LF;
+ print ' <ul>' . DOKU_LF;
+ print ' <li><div class="li">';
+ tpl_actionlink('login');
+ print ' </div></li>' . DOKU_LF;
+ print ' </ul>' . DOKU_LF;
+ print ' </div>' . DOKU_LF;
+ print '</div>' . DOKU_LF;
+ } else {
+ $actions = array('admin',
+ 'revert',
+ 'edit',
+ 'history',
+ 'recent',
+ 'backlink',
+ 'media',
+ 'subscription',
+ 'index',
+ 'login',
+ 'profile',
+ 'top');
+
+ print '<div class="toolbox_sidebar sidebar_box">' . DOKU_LF;
+ print ' <div class="level1">' . DOKU_LF;
+ print ' <ul>' . DOKU_LF;
+
+ foreach($actions as $action) {
+ if(!actionOK($action)) continue;
+ // start output buffering
+ if($action == 'edit') {
+ // check if new page button plugin is available
+ if(!plugin_isdisabled('npd') && ($npd =& plugin_load('helper', 'npd'))) {
+ $npb = $npd->html_new_page_button(true);
+ if($npb) {
+ print ' <li><div class="li">';
+ print $npb;
+ print '</div></li>' . DOKU_LF;
+ }
+ }
+ }
+ ob_start();
+ print ' <li><div class="li">';
+ if(tpl_actionlink($action)) {
+ print '</div></li>' . DOKU_LF;
+ ob_end_flush();
+ } else {
+ ob_end_clean();
+ }
+ }
+
+ print ' </ul>' . DOKU_LF;
+ print ' </div>' . DOKU_LF;
+ print '</div>' . DOKU_LF;
+ }
+
+ break;
+
+ case 'trace':
+ if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) return;
+ print '<div class="trace_sidebar sidebar_box">' . DOKU_LF;
+ print ' <h1>'.$lang['breadcrumb'].'</h1>' . DOKU_LF;
+ print ' <div class="breadcrumbs">' . DOKU_LF;
+ ($conf['youarehere'] != 1) ? tpl_breadcrumbs() : tpl_youarehere();
+ print ' </div>' . DOKU_LF;
+ print '</div>' . DOKU_LF;
+ break;
+
+ case 'extra':
+ if(tpl_getConf('closedwiki') && !isset($_SERVER['REMOTE_USER'])) return;
+ print '<div class="extra_sidebar sidebar_box">' . DOKU_LF;
+ @include(dirname(__FILE__).'/' . $pos .'_sidebar.html');
+ print '</div>' . 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 '<div class="'.$sb.'_sidebar sidebar_box">' . DOKU_LF;
+ @require_once(DOKU_TPLINC.'sidebars/'.$sb.'/sidebar.php');
+ print '</div>' . 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 <chi@chimeric.de>
+ */
+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 .= '<div class="secedit">'.html_btn('secedit',$sb,'',array('do'=>'edit','rev'=>'','post')).'</div>';
+ }
+ // strip TOC
+ $data = preg_replace('/<div class="toc">.*?(<\/div>\n<\/div>)/s', '', $data);
+ // replace headline ids for XHTML compliance
+ $data = preg_replace('/(<h.*?><a.*?name=")(.*?)(".*?id=")(.*?)(">.*?<\/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 <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+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>.*?<\/h1>/', p_locale_xhtml('index'), $match);
+ print preg_replace('#<h1(.*?id=")(.*?)(".*?)h1>#', '<h1\1sidebar_'.$pos.'_\2\3h1>', $match[0]);
+
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $ns));
+
+ print '<div id="' . $pos . '__index__tree">' . DOKU_LF;
+ print html_buildlist($data,'idx','html_list_index','html_li_index');
+ print '</div>' . DOKU_LF;
+}
+
+/**
+ * searches for namespace sidebars
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+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 <chi@chimeric.de>
+ */
+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:
+?>