1<?php 2if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../'); 3 4require_once(DOKU_INC.'inc/init.php'); 5session_write_close(); //close session 6 7if(!$conf['remote']) die('XML-RPC server not enabled.'); 8 9/** 10 * Contains needed wrapper functions and registers all available 11 * XMLRPC functions. 12 */ 13class dokuwiki_xmlrpc_server extends IXR_Server { 14 var $remote; 15 16 /** 17 * Constructor. Register methods and run Server 18 */ 19 function dokuwiki_xmlrpc_server(){ 20 $this->remote = new RemoteAPI(); 21 $this->remote->setDateTransformation(array($this, 'toDate')); 22 $this->remote->setFileTransformation(array($this, 'toFile')); 23 $this->IXR_Server(); 24 } 25 26 function call($methodname, $args){ 27 try { 28 $result = $this->remote->call($methodname, $args); 29 return $result; 30 } catch (RemoteAccessDeniedException $e) { 31 if (!isset($_SERVER['REMOTE_USER'])) { 32 http_status(401); 33 return new IXR_Error(-32603, "server error. not authorized to call method $methodname"); 34 } else { 35 http_status(403); 36 return new IXR_Error(-32604, "server error. forbidden to call the method $methodname"); 37 } 38 } catch (RemoteException $e) { 39 return new IXR_Error($e->getCode(), $e->getMessage()); 40 } 41 } 42 43 /** 44 * @param string|int $data iso date(yyyy[-]mm[-]dd[ hh:mm[:ss]]) or timestamp 45 * @return IXR_Date 46 */ 47 function toDate($data) { 48 return new IXR_Date($data); 49 } 50 51 /** 52 * @param string $data 53 * @return IXR_Base64 54 */ 55 function toFile($data) { 56 return new IXR_Base64($data); 57 } 58} 59 60$server = new dokuwiki_xmlrpc_server(); 61 62// vim:ts=4:sw=4:et: 63