[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/lib/exe/ -> ajax.php (source)

   1  <?php
   2  /**
   3   * DokuWiki AJAX call handler
   4   *
   5   * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
   6   * @author     Andreas Gohr <andi@splitbrain.org>
   7   */
   8  
   9  //fix for Opera XMLHttpRequests
  10  if(!count($_POST) && $HTTP_RAW_POST_DATA){
  11    parse_str($HTTP_RAW_POST_DATA, $_POST);
  12  }
  13  
  14  if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
  15  require_once (DOKU_INC.'inc/init.php');
  16  require_once (DOKU_INC.'inc/common.php');
  17  require_once (DOKU_INC.'inc/pageutils.php');
  18  require_once (DOKU_INC.'inc/auth.php');
  19  //close sesseion
  20  session_write_close();
  21  
  22  header('Content-Type: text/html; charset=utf-8');
  23  
  24  
  25  //call the requested function
  26  if(isset($_POST['call']))
  27    $call = 'ajax_'.$_POST['call'];
  28  else if(isset($_GET['call']))
  29    $call = 'ajax_'.$_GET['call'];
  30  else
  31    exit;
  32  if(function_exists($call)){
  33    $call();
  34  }else{
  35    $call = $_POST['call'];
  36    $evt = new Doku_Event('AJAX_CALL_UNKNOWN', $call);
  37    if ($evt->advise_before()) {
  38      print "AJAX call '".htmlspecialchars($_POST['call'])."' unknown!\n";
  39    }
  40    $evt->advise_after();
  41    unset($evt);
  42  }
  43  
  44  /**
  45   * Searches for matching pagenames
  46   *
  47   * @author Andreas Gohr <andi@splitbrain.org>
  48   */
  49  function ajax_qsearch(){
  50    global $conf;
  51    global $lang;
  52  
  53    $query = cleanID($_POST['q']);
  54    if(empty($query)) $query = cleanID($_GET['q']);
  55    if(empty($query)) return;
  56  
  57    require_once (DOKU_INC.'inc/html.php');
  58    require_once (DOKU_INC.'inc/fulltext.php');
  59  
  60    $data = array();
  61    $data = ft_pageLookup($query);
  62  
  63    if(!count($data)) return;
  64  
  65    print '<strong>'.$lang['quickhits'].'</strong>';
  66    print '<ul>';
  67    foreach($data as $id){
  68      print '<li>';
  69      $ns = getNS($id);
  70      if($ns){
  71        $name = shorten(noNS($id), ' ('.$ns.')',30);
  72      }else{
  73        $name = $id;
  74      }
  75      print html_wikilink(':'.$id,$name);
  76      print '</li>';
  77    }
  78    print '</ul>';
  79  }
  80  
  81  /**
  82   * Support OpenSearch suggestions
  83   *
  84   * @link   http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
  85   * @author Mike Frysinger <vapier@gentoo.org>
  86   */
  87  function ajax_suggestions() {
  88    global $conf;
  89    global $lang;
  90  
  91    $query = cleanID($_POST['q']);
  92    if(empty($query)) $query = cleanID($_GET['q']);
  93    if(empty($query)) return;
  94  
  95    require_once (DOKU_INC.'inc/html.php');
  96    require_once (DOKU_INC.'inc/fulltext.php');
  97    require_once (DOKU_INC.'inc/JSON.php');
  98  
  99    $data = array();
 100    $data = ft_pageLookup($query);
 101    if(!count($data)) return;
 102  
 103    // limit results to 15 hits
 104    $data = array_slice($data, 0, 15);
 105    $data = array_map('trim',$data);
 106    $data = array_map('noNS',$data);
 107    $data = array_unique($data);
 108    sort($data);
 109  
 110    /* now construct a json */
 111    $suggestions = array(
 112      $query,  // the original query
 113      $data,   // some suggestions
 114      array(), // no description
 115      array()  // no urls
 116    );
 117    $json = new JSON();
 118  
 119    header('Content-Type: application/x-suggestions+json');
 120    print $json->encode($suggestions);
 121  }
 122  
 123  /**
 124   * Refresh a page lock and save draft
 125   *
 126   * Andreas Gohr <andi@splitbrain.org>
 127   */
 128  function ajax_lock(){
 129    global $conf;
 130    global $lang;
 131    $id = cleanID($_POST['id']);
 132    if(empty($id)) return;
 133  
 134    if(!checklock($id)){
 135      lock($id);
 136      echo 1;
 137    }
 138  
 139    if($conf['usedraft'] && $_POST['wikitext']){
 140      $client = $_SERVER['REMOTE_USER'];
 141      if(!$client) $client = clientIP(true);
 142  
 143      $draft = array('id'     => $id,
 144                     'prefix' => $_POST['prefix'],
 145                     'text'   => $_POST['wikitext'],
 146                     'suffix' => $_POST['suffix'],
 147                     'date'   => $_POST['date'],
 148                     'client' => $client,
 149                    );
 150      $cname = getCacheName($draft['client'].$id,'.draft');
 151      if(io_saveFile($cname,serialize($draft))){
 152        echo $lang['draftdate'].' '.strftime($conf['dformat']);
 153      }
 154    }
 155  
 156  }
 157  
 158  /**
 159   * Delete a draft
 160   *
 161   * @author Andreas Gohr <andi@splitbrain.org>
 162   */
 163  function ajax_draftdel(){
 164    $id = cleanID($_POST['id']);
 165    if(empty($id)) return;
 166  
 167    $client = $_SERVER['REMOTE_USER'];
 168    if(!$client) $client = clientIP(true);
 169  
 170    $cname = getCacheName($client.$id,'.draft');
 171    @unlink($cname);
 172  }
 173  
 174  /**
 175   * Return subnamespaces for the Mediamanager
 176   *
 177   * @author Andreas Gohr <andi@splitbrain.org>
 178   */
 179  function ajax_medians(){
 180    global $conf;
 181    require_once (DOKU_INC.'inc/search.php');
 182    require_once (DOKU_INC.'inc/media.php');
 183  
 184    // wanted namespace
 185    $ns  = cleanID($_POST['ns']);
 186    $dir  = utf8_encodeFN(str_replace(':','/',$ns));
 187  
 188    $lvl = count(explode(':',$ns));
 189  
 190    $data = array();
 191    search($data,$conf['mediadir'],'search_index',array('nofiles' => true),$dir);
 192    foreach($data as $item){
 193      $item['level'] = $lvl+1;
 194      echo media_nstree_li($item);
 195      echo media_nstree_item($item);
 196      echo '</li>';
 197    }
 198  }
 199  
 200  /**
 201   * Return list of files for the Mediamanager
 202   *
 203   * @author Andreas Gohr <andi@splitbrain.org>
 204   */
 205  function ajax_medialist(){
 206    global $conf;
 207    require_once (DOKU_INC.'inc/media.php');
 208  
 209    media_filelist($_POST['ns']);
 210  }
 211  
 212  /**
 213   * Return sub index for index view
 214   *
 215   * @author Andreas Gohr <andi@splitbrain.org>
 216   */
 217  function ajax_index(){
 218    global $conf;
 219    require_once (DOKU_INC.'inc/search.php');
 220    require_once (DOKU_INC.'inc/html.php');
 221  
 222    // wanted namespace
 223    $ns  = cleanID($_POST['idx']);
 224    $dir  = utf8_encodeFN(str_replace(':','/',$ns));
 225  
 226    $lvl = count(explode(':',$ns));
 227  
 228    $data = array();
 229    search($data,$conf['datadir'],'search_index',array('ns' => $ns),$dir);
 230    foreach($data as $item){
 231      $item['level'] = $lvl+1;
 232      echo html_li_index($item);
 233      echo '<div class="li">';
 234      echo html_list_index($item);
 235      echo '</div>';
 236      echo '</li>';
 237    }
 238  }
 239  
 240  //Setup VIM: ex: et ts=2 enc=utf-8 :
 241  ?>


Generated: Tue Dec 2 01:30:01 2008 Cross-referenced by PHPXref 0.7