From f01ff8c1a9f0299f431bb7106dbdce85d0cc7dd0 Mon Sep 17 00:00:00 2001 From: Gina Haeussge <osd@foosel.net> Date: Sun, 24 Aug 2008 12:00:43 +0200 Subject: [PATCH] XMLRPC: Fixed identation, added deleteAttachment, changed params of putAttachment to fit Wiki RPC specs darcs-hash:20080824100043-2b4f5-4ad6d86abcf6bc816a47bfd902e37684483ff43e.gz --- lib/exe/xmlrpc.php | 111 ++++++++++++++++++++++++++++++--------------- 1 file changed, 74 insertions(+), 37 deletions(-) diff --git a/lib/exe/xmlrpc.php b/lib/exe/xmlrpc.php index cadff5ede..4666f0b7e 100644 --- a/lib/exe/xmlrpc.php +++ b/lib/exe/xmlrpc.php @@ -136,6 +136,12 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { array('struct', 'string', 'base64', 'struct'), 'Upload a file to the wiki.' ); + $this->addCallback( + 'wiki.deleteAttachment', + 'this:deleteAttachment', + array('int', 'string'), + 'Delete a file from the wiki.' + ); $this->addCallback( 'wiki.getAttachment', 'this:getAttachment', @@ -190,17 +196,17 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { * @author Gina Haeussge <osd@foosel.net> */ function getAttachment($id){ - $id = cleanID($id); - if (auth_quickaclcheck(getNS($id).':*') < AUTH_READ) - return new IXR_Error(1, 'You are not allowed to read this file'); - - $file = mediaFN($id); - if (!@ file_exists($file)) - return new IXR_Error(1, 'The requested file does not exist'); - - $data = io_readFile($file, false); - $base64 = base64_encode($data); - return $base64; + $id = cleanID($id); + if (auth_quickaclcheck(getNS($id).':*') < AUTH_READ) + return new IXR_Error(1, 'You are not allowed to read this file'); + + $file = mediaFN($id); + if (!@ file_exists($file)) + return new IXR_Error(1, 'The requested file does not exist'); + + $data = io_readFile($file, false); + $base64 = base64_encode($data); + return $base64; } /** @@ -209,19 +215,19 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { * @author Gina Haeussge <osd@foosel.net> */ function getAttachmentInfo($id){ - $id = cleanID($id); - $info = array( - 'lastModified' => 0, - 'size' => 0, - ); - - $file = mediaFN($id); - if ((auth_quickaclcheck(getNS($id).':*') >= AUTH_READ) && file_exists($file)){ - $info['lastModified'] = new IXR_Date(filemtime($file)); - $info['size'] = filesize($file); - } - - return $info; + $id = cleanID($id); + $info = array( + 'lastModified' => 0, + 'size' => 0, + ); + + $file = mediaFN($id); + if ((auth_quickaclcheck(getNS($id).':*') >= AUTH_READ) && file_exists($file)){ + $info['lastModified'] = new IXR_Date(filemtime($file)); + $info['size'] = filesize($file); + } + + return $info; } /** @@ -276,10 +282,10 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { $ns = cleanID($ns); - if (!is_array($options)) - $options = array(); + if (!is_array($options)) + $options = array(); - if (!isset($options['recursive'])) $options['recursive'] = false; + if (!isset($options['recursive'])) $options['recursive'] = false; if(auth_quickaclcheck($ns.':*') >= AUTH_READ) { $dir = utf8_encodeFN(str_replace(':', '/', $ns)); @@ -294,12 +300,12 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { $files = array(); foreach($data as $item) { - if (isset($options['pattern']) && !@preg_match($options['pattern'], $item['id'])) - continue; + if (isset($options['pattern']) && !@preg_match($options['pattern'], $item['id'])) + continue; $file = array(); $file['id'] = $item['id']; $file['size'] = $item['size']; - $file['lastModified'] = new IXR_Date($item['mtime']); + $file['lastModified'] = new IXR_Date($item['mtime']); $file['isimg'] = $item['isimg']; $file['writable'] = $item['writeable']; $file['perms'] = auth_quickaclcheck(getNS($item['id']).':*'); @@ -428,18 +434,17 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { * * Michael Klier <chi@chimeric.de> */ - function putAttachment($ns, $file, $params) { + function putAttachment($id, $file, $params) { global $conf; global $lang; - $auth = auth_quickaclcheck($ns.':*'); + $auth = auth_quickaclcheck(getNS($id).':*'); if($auth >= AUTH_UPLOAD) { - if(!isset($params['name'])) { + if(!isset($id)) { return new IXR_ERROR(1, 'Filename not given.'); } - $ftmp = $conf['tmpdir'] . '/' . $params['name']; - $name = $params['name']; + $ftmp = $conf['tmpdir'] . '/' . $id; // save temporary file @unlink($ftmp); @@ -447,8 +452,8 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { io_saveFile($ftmp, $buff); // get filename - list($iext, $imime) = mimetype($name); - $id = cleanID($ns.':'.$name); + list($iext, $imime) = mimetype($id); + $id = cleanID($id); $fn = mediaFN($id); // get filetype regexp @@ -490,6 +495,38 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer { return new IXR_ERROR(1, "You don't have permissions to upload files."); } } + + /** + * Deletes a file from the wiki. + * + * @author Gina Haeussge <osd@foosel.net> + */ + function deleteAttachment($id){ + $auth = auth_quickaclcheck(getNS($id).':*'); + if($auth < AUTH_DELETE) return new IXR_ERROR(1, "You don't have permissions to delete files."); + global $conf; + global $lang; + + // check for references if needed + $mediareferences = array(); + if($conf['refcheck']){ + require_once(DOKU_INC.'inc/fulltext.php'); + $mediareferences = ft_mediause($id,$conf['refshow']); + } + + if(!count($mediareferences)){ + $file = mediaFN($id); + if(@unlink($file)){ + msg(str_replace('%s',noNS($id),$lang['deletesucc']),1); + io_sweepNS($id,'mediadir'); + return 0; + } + //something went wrong + return new IXR_ERROR(1, 'Could not delete file'); + } else { + return new IXR_ERROR(1, 'File is still referenced'); + } + } /** * Moves the temporary file to its final destination. -- GitLab