1<?php 2/** 3 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4 * @author Todd Augsburger <todd@rollerorgans.com> 5 */ 6 7if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); 8if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 9require_once(DOKU_INC.'inc/fulltext.php'); 10require_once(DOKU_PLUGIN.'syntax.php'); 11 12class syntax_plugin_searchresults extends DokuWiki_Syntax_Plugin { 13 14 function getInfo(){ 15 return array( 16 'author' => 'Todd Augsburger', 17 'email' => 'todd@rollerorgans.com', 18 'date' => '2007-08-30', 19 'name' => 'SearchResults Plugin', 20 'desc' => "returns search results as bulleted list:\n{{search>the words}}", 21 'url' => 'http://wiki.splitbrain.org/plugin:searchresults', 22 ); 23 } 24 25 function getType() { 26 return 'substition'; 27 } 28 29 function getSort() { 30 return 300; 31 } 32 33 function connectTo($mode) { 34 $this->Lexer->addSpecialPattern("{{search>.*?}}", $mode, 'plugin_searchresults'); 35 } 36 37 function handle($match, $state, $pos, &$handler) { 38 if ($state == DOKU_LEXER_SPECIAL) { 39 // strip / from start and / from end 40 $match = substr($match,9,-2); 41 return array($state, $match); 42 } 43 return array(); 44 } 45 46 //natsort an array of pagenames 47 function _addSorted(&$target,$names){ 48 global $conf; 49 if ($conf['useheading']) { 50 // sort by headings 51 $title_array = array(); 52 foreach($names as $key=>$value) { 53 if ($title = p_get_first_heading($value)) 54 $title_array[$key] = $title; 55 else 56 $title_array[$key] = $value; 57 } 58 natsort($title_array); 59 foreach($title_array as $key=>$value) 60 $target[] = $names[$key]; 61 } else { 62 // sort by pagenames 63 natsort($names); 64 foreach($names as $value) 65 $target[] = $value; 66 } 67 } 68 69 function render($mode, &$renderer, $data) { 70 if ($mode == 'xhtml') { 71 list($state, $match) = $data; 72 if ($state == DOKU_LEXER_SPECIAL) { 73 $search = ft_pageSearch($match,$poswords); 74 if(count($search)){ 75 $renderer->doc .= "<ul>\n"; 76 $key_array = array(); 77 $this->_addSorted($key_array,array_keys($search)); 78 foreach($key_array as $value) { 79 $renderer->doc .= '<li class="level1"><div class="li">'; 80 $renderer->doc .= html_wikilink(':'.$value); 81 $renderer->doc .= "</div>\n"; 82 } 83 $renderer->doc .= "</ul>\n"; 84 } 85 } 86 return true; 87 } 88 return false; 89 } 90} 91