diff options
Diffstat (limited to 'lib/exe/ajax.php')
-rw-r--r-- | lib/exe/ajax.php | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 5218803ea..3f64dc7ac 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -23,8 +23,12 @@ header('Content-Type: text/html; charset=utf-8'); //call the requested function -if (!isset($_POST['call'])) { return; } -$call = 'ajax_'.$_POST['call']; +if(isset($_POST['call'])) + $call = 'ajax_'.$_POST['call']; +else if(isset($_GET['call'])) + $call = 'ajax_'.$_GET['call']; +else + return; if(function_exists($call)){ $call(); }else{ @@ -47,6 +51,7 @@ function ajax_qsearch(){ global $lang; $query = cleanID($_POST['q']); + if(empty($query)) $query = cleanID($_GET['q']); if(empty($query)) return; require_once(DOKU_INC.'inc/html.php'); @@ -68,6 +73,48 @@ function ajax_qsearch(){ } /** + * Support OpenSearch suggestions + * + * @link http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0 + * @author Mike Frysinger <vapier@gentoo.org> + */ +function ajax_suggestions() { + global $conf; + global $lang; + + $query = cleanID($_POST['q']); + if(empty($query)) $query = cleanID($_GET['q']); + if(empty($query)) return; + + require_once(DOKU_INC.'inc/html.php'); + require_once(DOKU_INC.'inc/fulltext.php'); + require_once(DOKU_INC.'inc/JSON.php'); + + $data = array(); + $data = ft_pageLookup($query); + if(!count($data)) return; + + // limit results to 15 hits + $data = array_slice($data, 0, 15); + $data = array_map('trim',$data); + $data = array_map('noNS',$data); + $data = array_unique($data); + sort($data); + + /* now construct a json */ + $suggestions = array( + $query, // the original query + $data, // some suggestions + array(), // no description + array() // no urls + ); + $json = new JSON(); + + header('Content-Type: application/x-suggestions+json'); + print $json->encode($suggestions); +} + +/** * Refresh a page lock and save draft * * Andreas Gohr <andi@splitbrain.org> |