<?php /** * DokuWiki Plugin asyncsearch (Action Component) * * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html * @author i-net software / Gerry Weißbach <tools@inetsoftware.de> */ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); class action_plugin_asyncsearch_pagelookup extends DokuWiki_Action_Plugin { /** * Registers a callback function for a given event * * @param Doku_Event_Handler $controller DokuWiki's event controller object * @return void */ public function register(Doku_Event_Handler $controller) { $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax_call_unknown'); } /** * [Custom event handler which performs action] * * @param Doku_Event $event event object by reference * @param mixed $param [the parameters passed as fifth argument to register_hook() when this * handler was registered] * @return void */ public function handle_ajax_call_unknown( Doku_Event &$event, $param) { global $ACT, $INPUT; if ( $event->data === 'asyncsearch' && $INPUT->str('pluginID') == 'pagelookup' ) { $this->handle_ft_pageLookup( $INPUT->str('term') ); } else if ( $event->data === 'asyncsearch' && $INPUT->str('pluginID') == 'pagesearch' ) { $this->handle_ft_pageSearch( $INPUT->str('term') ); } else { return true; } $event->preventDefault(); return false; } /** * [Custom event handler which performs action] * * @param Doku_Event $event event object by reference * @param mixed $param [the parameters passed as fifth argument to register_hook() when this * handler was registered] * @return void */ private function handle_ft_pageLookup( $QUERY ) { global $lang; //do quick pagesearch $data = ft_pageLookup($QUERY,true,useHeading('navigation')); if(count($data)){ print '<div class="search_quickresult">'; print '<h3>'.$lang['quickhits'].':</h3>'; print '<ul class="search_quickhits">'; foreach($data as $id => $title){ print '<li> '; if (useHeading('navigation')) { $name = $title; }else{ $ns = getNS($id); if($ns){ $name = shorten(noNS($id), ' ('.$ns.')',30); }else{ $name = $id; } } print html_wikilink(':'.$id,$name); print '</li> '; } print '</ul> '; //clear float (see http://www.complexspiral.com/publications/containing-floats/) print '<div class="clearer"></div>'; print '</div>'; } } /** * [Custom event handler which performs action] * * @param Doku_Event $event event object by reference * @param mixed $param [the parameters passed as fifth argument to register_hook() when this * handler was registered] * @return void */ private function handle_ft_pageSearch( $QUERY ) { global $lang; //do fulltext search $data = ft_pageSearch($QUERY,$regex); if(count($data)){ print '<dl class="search_results">'; $num = 1; foreach($data as $id => $cnt){ print '<dt>'; print html_wikilink(':'.$id,useHeading('navigation')?null:$id,$regex); if($cnt !== 0){ print ': '.$cnt.' '.$lang['hits'].''; } print '</dt>'; if($cnt !== 0){ if($num < FT_SNIPPET_NUMBER){ // create snippets for the first number of matches only print '<dd>'.ft_snippet($id,$regex).'</dd>'; } $num++; } flush(); } print '</dl>'; }else{ print '<div class="nothing">'.$lang['nothingfound'].'</div>'; } } } // vim:ts=4:sw=4:et: