*/ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); if (!defined('DOKU_LF')) define('DOKU_LF', "\n"); if (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once DOKU_PLUGIN.'syntax.php'; class syntax_plugin_simplenavi extends DokuWiki_Syntax_Plugin { function getType() { return 'substition'; } function getPType() { return 'block'; } function getSort() { return 155; } function connectTo($mode) { $this->Lexer->addSpecialPattern('{{simplenavi>[^}]*}}',$mode,'plugin_simplenavi'); } function handle($match, $state, $pos, &$handler){ $data = array(cleanID(substr($match,13,-2))); return $data; } function render($mode, &$R, $pass) { if($mode != 'xhtml') return false; global $conf; global $INFO; $R->info['cache'] = false; $ns = utf8_encodeFN(str_replace(':','/',$pass[0])); $data = array(); search($data,$conf['datadir'],array($this,'_search'),array('ns' => $INFO['id']),$ns); $R->doc .= '
'; $R->doc .= html_buildlist($data,'idx',array($this,'_list'),array($this,'_li')); $R->doc .= '
'; return true; } function _list($item){ return html_wikilink(':'.$item['id']); } function _li($item){ if($item['type'] == "f"){ return '
  • '; }elseif($item['open']){ return '
  • '; }else{ return '
  • '; } } function _search(&$data,$base,$file,$type,$lvl,$opts){ global $conf; $return = true; $item = array(); $id = pathID($file); if($type == 'd' && !( preg_match('#^'.$id.'(:|$)#',$opts['ns']) || preg_match('#^'.$id.'(:|$)#',getNS($opts['ns'])) )){ //add but don't recurse $return = false; }elseif($type == 'f' && ($opts['nofiles'] || substr($file,-4) != '.txt')){ //don't add return false; } if($type=='d' && $conf['sneaky_index'] && auth_quickaclcheck($id.':') < AUTH_READ){ return false; } if($type == 'd'){ // link directories to their start pages $exists = false; $id = "$id:"; resolve_pageid('',$id,$exists); $this->startpages[$id] = 1; }elseif($this->startpages[$id]){ // skip already shown start pages return false; }elseif(noNS($id) == $conf['start']){ // skip the main start page return false; } //check hidden if(isHiddenPage($id)){ return false; } //check ACL if($type=='f' && auth_quickaclcheck($id) < AUTH_READ){ return false; } $data[]=array( 'id' => $id, 'type' => $type, 'level' => $lvl, 'open' => $return); return $return; } } // vim:ts=4:sw=4:et:enc=utf-8: