From b4279a1c37799da9b64614fbe8b1bfc6662341d2 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Sun, 8 Jan 2012 04:48:00 +0100 Subject: [PATCH] xml-rpc: * Choose media dir for client uploads in the configuration. * debug log marked as such: client won't work with it. * ignores. --- .gitignore | 1 + .../UTF-8/lang_de.inc.php | 8 +++-- serendipity_event_xmlrpc/lang_de.inc.php | 8 +++-- serendipity_event_xmlrpc/lang_en.inc.php | 8 +++-- .../serendipity_event_xmlrpc.php | 35 +++++++++++++++++-- .../serendipity_xmlrpc.inc.php | 10 +++--- 6 files changed, 53 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 3ae760a7..a3fa0d73 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /zipplugin.sh /*.zip /testxmlrpc.php +/test.php diff --git a/serendipity_event_xmlrpc/UTF-8/lang_de.inc.php b/serendipity_event_xmlrpc/UTF-8/lang_de.inc.php index c2dfc353..cda1abf0 100644 --- a/serendipity_event_xmlrpc/UTF-8/lang_de.inc.php +++ b/serendipity_event_xmlrpc/UTF-8/lang_de.inc.php @@ -9,12 +9,14 @@ @define('PLUGIN_EVENT_XMLRPC_DOC_RPCLINK','Zur Information:
Dieses Blog hat eine URL, an der XML-RPC Aufrufe abgearbeitet werden. Modernere Clients können diese automatisch mit der Blog URL ermitteln, bei älteren Clients muss sie explizit angegeben werden.
Deine XML-RPC URL ist: %s
'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG', 'Debug Log'); -@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC', 'Wenn Du daran interessiert bist, was die XML-RPC Schnittstelle empfängt und antwortet, kannst Du das Debug Log anschalten. Das Logfile wird als rpc.log im Plugin Verzeichnis angelegt.'); +@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC', 'Wenn Du daran interessiert bist, was die XML-RPC Schnittstelle empfängt und antwortet, kannst Du das Debug Log anschalten. Das Logfile wird als rpc.log im Plugin Verzeichnis angelegt. Die \'debug\' Einstellung ist nur zum Auffinden von Problemen geeignet, sie produziert Antworten, mit denen ein Client nicht umgehen kann. Also bitte nicht in einem Live System einschalten!'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_NONE', 'ausgeschaltet'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_NORMAL', 'angeschaltet'); -@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_VERBOSE', 'ausführlich'); +@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_VERBOSE', 'debug: Nicht für Clients!'); @define('PLUGIN_EVENT_XMLRPC_WPFAKEVERSION', 'WordPress Version vortäuschen'); @define('PLUGIN_EVENT_XMLRPC_WPFAKEVERSION_DESC', 'Die XML-RPC Schnittlstelle kann auf WordPress Aufrufe reagieren. Wenn sie nach der installierten Software Version gefragt wird, antwortet sie normaler Weise mit Serendipity ' . $serendipity['version'] .'. Wenn Du hier eine Version einträgst, dann wird sie mit WordPress (angegebene Version) antworten. Einige Clients könnten auf eine minimale WordPress Version testen, eine Version wie 3.2 erscheint dann okay.'); @define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT', 'Text Artikel nach HTML konvertieren'); -@define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC', 'Das Plugin versucht zu erkennen, ob Artikel als reine Texte oder als HTML übermittelt werden. Bei reinem Text wird es Zeilenumbrüche in HTML umwandeln. Wenn Du z.B: ein Textile oder das NL2BR Plugin für Artikel benutzt, solltest Du diese Option ausschalten.'); \ No newline at end of file +@define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC', 'Das Plugin versucht zu erkennen, ob Artikel als reine Texte oder als HTML übermittelt werden. Bei reinem Text wird es Zeilenumbrüche in HTML umwandeln. Wenn Du z.B: ein Textile oder das NL2BR Plugin für Artikel benutzt, solltest Du diese Option ausschalten.'); +@define('PLUGIN_EVENT_XMLRPC_UPLOADDIR', 'Upload Verzeichnis'); +@define('PLUGIN_EVENT_XMLRPC_UPLOADDIR_DESC', 'In welches Medienverzeichnis sollen Medien (wie Bilder und Videos) hoch geladen werden, die der Client schickt?'); \ No newline at end of file diff --git a/serendipity_event_xmlrpc/lang_de.inc.php b/serendipity_event_xmlrpc/lang_de.inc.php index 535075f1..386e1a4f 100644 --- a/serendipity_event_xmlrpc/lang_de.inc.php +++ b/serendipity_event_xmlrpc/lang_de.inc.php @@ -9,12 +9,14 @@ @define('PLUGIN_EVENT_XMLRPC_DOC_RPCLINK','Zur Information:
Dieses Blog hat eine URL, an der XML-RPC Aufrufe abgearbeitet werden. Modernere Clients können diese automatisch mit der Blog URL ermitteln, bei älteren Clients muss sie explizit angegeben werden.
Deine XML-RPC URL ist: %s
'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG', 'Debug Log'); -@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC', 'Wenn Du daran interessiert bist, was die XML-RPC Schnittstelle empfängt und antwortet, kannst Du das Debug Log anschalten. Das Logfile wird als rpc.log im Plugin Verzeichnis angelegt.'); +@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC', 'Wenn Du daran interessiert bist, was die XML-RPC Schnittstelle empfängt und antwortet, kannst Du das Debug Log anschalten. Das Logfile wird als rpc.log im Plugin Verzeichnis angelegt. Die \'debug\' Einstellung ist nur zum Auffinden von Problemen geeignet, sie produziert Antworten, mit denen ein Client nicht umgehen kann. Also bitte nicht in einem Live System einschalten!'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_NONE', 'ausgeschaltet'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_NORMAL', 'angeschaltet'); -@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_VERBOSE', 'ausführlich'); +@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_VERBOSE', 'debug: Nicht für Clients!'); @define('PLUGIN_EVENT_XMLRPC_WPFAKEVERSION', 'WordPress Version vortäuschen'); @define('PLUGIN_EVENT_XMLRPC_WPFAKEVERSION_DESC', 'Die XML-RPC Schnittlstelle kann auf WordPress Aufrufe reagieren. Wenn sie nach der installierten Software Version gefragt wird, antwortet sie normaler Weise mit Serendipity ' . $serendipity['version'] .'. Wenn Du hier eine Version einträgst, dann wird sie mit WordPress (angegebene Version) antworten. Einige Clients könnten auf eine minimale WordPress Version testen, eine Version wie 3.2 erscheint dann okay.'); @define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT', 'Text Artikel nach HTML konvertieren'); -@define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC', 'Das Plugin versucht zu erkennen, ob Artikel als reine Texte oder als HTML übermittelt werden. Bei reinem Text wird es Zeilenumbrüche in HTML umwandeln. Wenn Du z.B: ein Textile oder das NL2BR Plugin für Artikel benutzt, solltest Du diese Option ausschalten.'); \ No newline at end of file +@define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC', 'Das Plugin versucht zu erkennen, ob Artikel als reine Texte oder als HTML übermittelt werden. Bei reinem Text wird es Zeilenumbrüche in HTML umwandeln. Wenn Du z.B: ein Textile oder das NL2BR Plugin für Artikel benutzt, solltest Du diese Option ausschalten.'); +@define('PLUGIN_EVENT_XMLRPC_UPLOADDIR', 'Upload Verzeichnis'); +@define('PLUGIN_EVENT_XMLRPC_UPLOADDIR_DESC', 'In welches Medienverzeichnis sollen Medien (wie Bilder und Videos) hoch geladen werden, die der Client schickt?'); \ No newline at end of file diff --git a/serendipity_event_xmlrpc/lang_en.inc.php b/serendipity_event_xmlrpc/lang_en.inc.php index 5ce20fcd..84f805e0 100644 --- a/serendipity_event_xmlrpc/lang_en.inc.php +++ b/serendipity_event_xmlrpc/lang_en.inc.php @@ -15,12 +15,14 @@ @define('PLUGIN_EVENT_XMLRPC_DOC_RPCLINK','For your information:
This blog has an URL where XMLRPC calls are handled. More modern clients are able to detect this RPC URL automatically from your blog URL, but for some older clients you have to tell them the RPC URL explicitly.
Your XML-RPC URL is: %s
'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG', 'Debug log'); -@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC', 'If you are interested in what the XML-RPC interface is receiving and responding, switch on the debug log. The logfile is written as rpc.log in the plugins directory.'); +@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC', 'If you are interested in what the XML-RPC interface is receiving and responding, switch on the debug log. The logfile is written as rpc.log in the plugins directory. "debug" will produce output not readable by clients! It\'s only for debugging problems, so please don\'t use it in production environment.'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_NONE', 'disabled'); @define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_NORMAL', 'enabled'); -@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_VERBOSE', 'verbose'); +@define('PLUGIN_EVENT_XMLRPC_DEBUGLOG_VERBOSE', 'debug: Don\'t use for clients!'); @define('PLUGIN_EVENT_XMLRPC_WPFAKEVERSION', 'Fake WordPress version'); @define('PLUGIN_EVENT_XMLRPC_WPFAKEVERSION_DESC', 'This XML-RPC interface is able to respond to WordPress type calls. Normally, if asked for the software used, it answers with Serendipity ' . $serendipity['version'] .'. But if you enter a version here, it will response as WordPress (version entered). Some clients might check, if the WP version is high enough, so a version like 3.2 would be okay here.'); @define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT', 'Convert plaintext articles to HTML'); -@define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC', 'The plugin tries to detect plain text delivered as article body and if detected converts its linefeeds to HTML. If you use plugins like the textile or nl2br textformats for articles you should disable this.'); \ No newline at end of file +@define('PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC', 'The plugin tries to detect plain text delivered as article body and if detected converts its linefeeds to HTML. If you use plugins like the textile or nl2br textformats for articles you should disable this.'); +@define('PLUGIN_EVENT_XMLRPC_UPLOADDIR', 'Upload directory'); +@define('PLUGIN_EVENT_XMLRPC_UPLOADDIR_DESC', 'If the clients uploads medias (i.e. images and videos) in what medialibrary directory should they be stored?'); \ No newline at end of file diff --git a/serendipity_event_xmlrpc/serendipity_event_xmlrpc.php b/serendipity_event_xmlrpc/serendipity_event_xmlrpc.php index 4f026151..4454c1a9 100644 --- a/serendipity_event_xmlrpc/serendipity_event_xmlrpc.php +++ b/serendipity_event_xmlrpc/serendipity_event_xmlrpc.php @@ -36,7 +36,7 @@ class serendipity_event_xmlrpc extends serendipity_event 'frontend_header' => true )); $propbag->add('configuration', - array('doc_rpclink','category', 'gmt', 'htmlconvert', 'wpfakeversion', 'debuglog') + array('doc_rpclink','category', 'gmt', 'uploaddir', 'htmlconvert', 'wpfakeversion', 'debuglog') ); $propbag->add('groups', array('FRONTEND_FULL_MODS', 'FRONTEND_EXTERNAL_SERVICES')); } @@ -92,6 +92,13 @@ class serendipity_event_xmlrpc extends serendipity_event $propbag->add('description', ''); $propbag->add('default', false); break; + case 'uploaddir' : + $propbag->add('type', 'select'); + $propbag->add('select_values', $this->scanUploadDir()); + $propbag->add('name', PLUGIN_EVENT_XMLRPC_UPLOADDIR); + $propbag->add('description', PLUGIN_EVENT_XMLRPC_UPLOADDIR_DESC); + $propbag->add('default', ''); + break; case 'htmlconvert': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_EVENT_XMLRPC_HTMLCONVERT); @@ -170,7 +177,8 @@ class serendipity_event_xmlrpc extends serendipity_event $serendipity['xmlrpc_debuglog'] = $this->get_config('debuglog','none'); $serendipity['xmlrpc_wpfakeversion'] = $this->get_config('wpfakeversion',''); $serendipity['xmlrpc_htmlconvert'] = $this->get_config('htmlconvert',true); - + $serendipity['xmlrpc_uploadreldir'] = $this->get_config('uploaddir',''); + @define('SERENDIPITY_IS_XMLRPC', true); $serendipity['XMLRPC_GMT'] = serendipity_db_bool($this->get_config('gmt')); @@ -208,6 +216,29 @@ class serendipity_event_xmlrpc extends serendipity_event @define('PLUGIN_EVENT_XMLRPC_PEAR_PATH',dirname(__FILE__) . '/PEAR/'); // } } + + function scanUploadDir(){ + global $serendipity; + + if (!serendipity_checkPermission('adminImagesDirectories')) { + return; + } + $folders = serendipity_traversePath( + $serendipity['serendipityPath'] . $serendipity['uploadPath'], + '', + true, + NULL, + 1, + NULL, + 'write' + ); + usort($folders, 'serendipity_sortPath'); + $result = array('' => PARENT_DIRECTORY); + foreach ($folders as $dirmeta) { + $result[$dirmeta['relpath']] = $dirmeta['relpath']; + } + return $result; + } } /* vim: set sts=4 ts=4 expandtab : */ diff --git a/serendipity_event_xmlrpc/serendipity_xmlrpc.inc.php b/serendipity_event_xmlrpc/serendipity_xmlrpc.inc.php index 82bc943b..1d6e7f01 100644 --- a/serendipity_event_xmlrpc/serendipity_xmlrpc.inc.php +++ b/serendipity_event_xmlrpc/serendipity_xmlrpc.inc.php @@ -24,9 +24,6 @@ if ($debug_xmlrpc) { @define('DEBUG_XMLRPC', false); } -if ($debug_xmlrpc === 2) { - #$HTTP_RAW_POST_DATA = file_get_contents('/www/input.xml'); -} @define('XMLRPC_WP_COMPATIBLE', TRUE); @define('XMLRPC_ERR_CODE_AUTHFAILED', 4); @@ -143,7 +140,6 @@ function wp_uploadFile($message) { } function wp_getCategories($message) { global $serendipity; - $val = $message->params[1]; $username = $val->getval(); $val = $message->params[2]; @@ -1329,7 +1325,8 @@ function metaWeblog_newMediaObject($message) { return new XML_RPC_Response('', XMLRPC_ERR_CODE_AUTHFAILED, XMLRPC_ERR_NAME_AUTHFAILED); } - $full = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $struct['name']; + $full = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $serendipity['xmlrpc_uploadreldir'] . $struct['name']; + universal_debug("path: " . $full); if (!is_dir(dirname($full))) { @mkdir(dirname($full)); @@ -1352,7 +1349,8 @@ function metaWeblog_newMediaObject($message) { @umask(0000); @chmod($full, 0664); - $path = $serendipity['baseURL'] . $serendipity['uploadHTTPPath'] . $struct['name']; + $path = $serendipity['baseURL'] . $serendipity['uploadHTTPPath'] . $serendipity['xmlrpc_uploadreldir'] . $struct['name']; + universal_debug("url: " . $path); return new XML_RPC_Response(new XML_RPC_Value(array('url' => new XML_RPC_Value($path, 'string')), 'struct')); }