diff --git a/xmlrpc.php b/xmlrpc.php
index 0e1d5023bb..ba8ff3330e 100644
--- a/xmlrpc.php
+++ b/xmlrpc.php
@@ -46,6 +46,8 @@ class wp_xmlrpc_server extends IXR_Server {
'blogger.getTemplate' => 'this:blogger_getTemplate',
'blogger.setTemplate' => 'this:blogger_setTemplate',
'blogger.newPost' => 'this:blogger_newPost',
+ 'blogger.editPost' => 'this:blogger_editPost',
+ 'blogger.deletePost' => 'this:blogger_deletePost',
'demo.sayHello' => 'this:sayHello',
'demo.addTwoNumbers' => 'this:addTwoNumbers'
@@ -148,14 +150,14 @@ class wp_xmlrpc_server extends IXR_Server {
$content = '
'.stripslashes($post_data['Title']).'';
$content .= ''.$categories.'';
$content .= stripslashes($post_data['Content']);
-
+
$struct = array(
'userid' => $post_data['Author_ID'],
'dateCreateed' => mysql2date('Ymd\TH:i:s', $post_data['Date']),
'content' => $content,
'postid' => $post_data['ID']
);
-
+
return $struct;
}
@@ -273,7 +275,7 @@ class wp_xmlrpc_server extends IXR_Server {
/* warning: here we make the assumption that the weblog's URI is on the same server */
$filename = get_settings('home').'/'.get_settings('blogfilename');
$filename = preg_replace('#http://.+?/#', $_SERVER['DOCUMENT_ROOT'].'/', $filename);
-
+
$f = fopen($filename, 'r');
$content = fread($f, filesize($filename));
fclose($f);
@@ -307,7 +309,7 @@ class wp_xmlrpc_server extends IXR_Server {
/* warning: here we make the assumption that the weblog's URI is on the same server */
$filename = get_settings('home').'/'.get_settings('blogfilename');
$filename = preg_replace('#http://.+?/#', $_SERVER['DOCUMENT_ROOT'].'/', $filename);
-
+
if ($f = fopen($filename, 'w+')) {
fwrite($f, $content);
fclose($f);
@@ -343,7 +345,7 @@ class wp_xmlrpc_server extends IXR_Server {
$post_author = $user_data->ID;
- $post_title = addslashes(xmlrpc_getposttitle($content));
+ $post_title = xmlrpc_getposttitle($content);
$post_category = xmlrpc_getpostcategory($content);
$content = xmlrpc_removepostdata($content);
@@ -364,8 +366,95 @@ class wp_xmlrpc_server extends IXR_Server {
return $post_ID;
}
+
+
+ /* blogger.editPost ...edits a post */
+ function blogger_editPost($args) {
+
+ global $wpdb;
+
+ $post_ID = $args[1];
+ $user_login = $args[2];
+ $user_pass = $args[3];
+ $new_content = $args[4];
+ $publish = $args[5];
+
+ if (!$this->login_pass_ok($user_login, $user_pass)) {
+ return $this->error;
+ }
+
+ $actual_post = wp_get_single_post($post_ID,ARRAY_A);
+
+ if (!$actual_post) {
+ return new IXR_Error(404, 'Sorry, no such post.');
+ }
+
+ $post_author_data = get_userdata($actual_post['post_author']);
+ $user_data = get_userdatabylogin($user_login);
+
+ if (!user_can_edit_post($user_data->ID, $post_ID)) {
+ return new IXR_Error(401, 'Sorry, you do not have the right to edit this post.');
+ }
+
+ extract($actual_post);
+ $content = $newcontent;
+
+ $post_title = xmlrpc_getposttitle($content);
+ $post_category = xmlrpc_getpostcategory($content);
+
+ $content = xmlrpc_removepostdata($content);
+ $post_content = format_to_post($content);
+
+ $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt');
+
+ $result = wp_update_post($postdata);
+
+ if (!$result) {
+ return new IXR_Error(500, 'For some strange yet very annoying reason, this post could not be edited.');
+ }
+
+ return true;
+ }
+
+
+ /* blogger.deletePost ...deletes a post */
+ function blogger_deletePost($args) {
+
+ global $wpdb;
+
+ $post_ID = $args[1];
+ $user_login = $args[2];
+ $user_pass = $args[3];
+ $publish = $args[4];
+
+ if (!$this->login_pass_ok($user_login, $user_pass)) {
+ return $this->error;
+ }
+
+ $actual_post = wp_get_single_post($post_ID,ARRAY_A);
+
+ if (!$actual_post) {
+ return new IXR_Error(404, 'Sorry, no such post.');
+ }
+
+ $user_data = get_userdatabylogin($user_login);
+
+ if (!user_can_delete_post($user_data->ID, $post_ID)) {
+ return new IXR_Error(401, 'Sorry, you do not have the right to delete this post.');
+ }
+
+ $result = wp_delete_post($post_ID);
+
+ if (!$result) {
+ return new IXR_Error(500, 'For some strange yet very annoying reason, this post could not be deleted.');
+ }
+
+ return true;
+ }
+
}
+
$wp_xmlrpc_server = new wp_xmlrpc_server();
?>
\ No newline at end of file