*
* @return wp_xmlrpc_server
*/
- function __construct() {
+ public function __construct() {
$this->methods = array(
// WordPress API
'wp.getUsersBlogs' => 'this:wp_getUsersBlogs',
'wp.deleteCategory' => 'this:wp_deleteCategory',
'wp.suggestCategories' => 'this:wp_suggestCategories',
'wp.uploadFile' => 'this:mw_newMediaObject', // Alias
+ 'wp.deleteFile' => 'this:wp_deletePost', // Alias
'wp.getCommentCount' => 'this:wp_getCommentCount',
'wp.getPostStatusList' => 'this:wp_getPostStatusList',
'wp.getPageStatusList' => 'this:wp_getPageStatusList',
$this->methods = apply_filters( 'xmlrpc_methods', $this->methods );
}
- function serve_request() {
+ /**
+ * Make private/protected methods readable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param callable $name Method to call.
+ * @param array $arguments Arguments to pass when calling.
+ * @return mixed|bool Return value of the callback, false otherwise.
+ */
+ public function __call( $name, $arguments ) {
+ return call_user_func_array( array( $this, $name ), $arguments );
+ }
+
+ public function serve_request() {
$this->IXR_Server($this->methods);
}
* @param array $args Method Parameters.
* @return string
*/
- function sayHello($args) {
+ public function sayHello($args) {
return 'Hello!';
}
* @param array $args Method Parameters.
* @return int
*/
- function addTwoNumbers($args) {
+ public function addTwoNumbers($args) {
$number1 = $args[0];
$number2 = $args[1];
return $number1 + $number2;
* @param string $password User's password.
* @return mixed WP_User object if authentication passed, false otherwise
*/
- function login( $username, $password ) {
+ public function login( $username, $password ) {
/*
* Respect old get_option() filters left for back-compat when the 'enable_xmlrpc'
* option was deprecated in 3.5.0. Use the 'xmlrpc_enabled' hook instead.
* @param string $password User's password.
* @return bool Whether authentication passed.
*/
- function login_pass_ok( $username, $password ) {
+ public function login_pass_ok( $username, $password ) {
return (bool) $this->login( $username, $password );
}
* @param string|array $data Escape single string or array of strings.
* @return string|array Type matches $data and sanitized for the database.
*/
- function escape( &$data ) {
+ public function escape( &$data ) {
if ( ! is_array( $data ) )
return wp_slash( $data );
* @param int $post_id Post ID.
* @return array Custom fields, if exist.
*/
- function get_custom_fields($post_id) {
+ public function get_custom_fields($post_id) {
$post_id = (int) $post_id;
$custom_fields = array();
* @param int $post_id Post ID.
* @param array $fields Custom fields.
*/
- function set_custom_fields($post_id, $fields) {
+ public function set_custom_fields($post_id, $fields) {
$post_id = (int) $post_id;
foreach ( (array) $fields as $meta ) {
*
* @since 2.6.0
*/
- function initialise_blog_option_info() {
+ public function initialise_blog_option_info() {
global $wp_version;
$this->blog_options = array(
* - 'blogName'
* - 'xmlrpc' - url of xmlrpc endpoint
*/
- function wp_getUsersBlogs( $args ) {
+ public function wp_getUsersBlogs( $args ) {
// If this isn't on WPMU then just use blogger_getUsersBlogs
if ( !is_multisite() ) {
array_unshift( $args, 1 );
* - any other fields supported by wp_insert_post()
* @return string post_id
*/
- function wp_newPost( $args ) {
+ public function wp_newPost( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
if ( ! $user = $this->login( $username, $password ) )
return $this->error;
+ // convert the date field back to IXR form
+ if ( isset( $content_struct['post_date'] ) && ! is_a( $content_struct['post_date'], 'IXR_Date' ) ) {
+ $content_struct['post_date'] = $this->_convert_date( $content_struct['post_date'] );
+ }
+
+ // ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct,
+ // since _insert_post will ignore the non-GMT date if the GMT date is set
+ if ( isset( $content_struct['post_date_gmt'] ) && ! is_a( $content_struct['post_date_gmt'], 'IXR_Date' ) ) {
+ if ( $content_struct['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) ) {
+ unset( $content_struct['post_date_gmt'] );
+ } else {
+ $content_struct['post_date_gmt'] = $this->_convert_date( $content_struct['post_date_gmt'] );
+ }
+ }
+
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.newPost' );
* - array $content_struct
* @return true on success
*/
- function wp_editPost( $args ) {
+ public function wp_editPost( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
* - int $post_id
* @return true on success
*/
- function wp_deletePost( $args ) {
+ public function wp_deletePost( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - 'tags'
* - 'enclosure'
*/
- function wp_getPost( $args ) {
+ public function wp_getPost( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - array $fields optional
* @return array contains a collection of posts.
*/
- function wp_getPosts( $args ) {
+ public function wp_getPosts( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
* - 'slug'
* @return string term_id
*/
- function wp_newTerm( $args ) {
+ public function wp_newTerm( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - 'slug'
* @return bool True, on success.
*/
- function wp_editTerm( $args ) {
+ public function wp_editTerm( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
* - string $term_id
* @return boolean|IXR_Error If it suceeded true else a reason why not
*/
- function wp_deleteTerm( $args ) {
+ public function wp_deleteTerm( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
* - 'parent'
* - 'count'
*/
- function wp_getTerm( $args ) {
+ public function wp_getTerm( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
* - array $filter optional
* @return array terms
*/
- function wp_getTerms( $args ) {
+ public function wp_getTerms( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - string $taxonomy
* @return array (@see get_taxonomy())
*/
- function wp_getTaxonomy( $args ) {
+ public function wp_getTaxonomy( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - string $password
* @return array taxonomies
*/
- function wp_getTaxonomies( $args ) {
+ public function wp_getTaxonomies( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
* - 'display_name'
* - 'roles'
*/
- function wp_getUser( $args ) {
+ public function wp_getUser( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - array $fields optional
* @return array users data
*/
- function wp_getUsers( $args ) {
+ public function wp_getUsers( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
* - array $fields optional
* @return array (@see wp_getUser)
*/
- function wp_getProfile( $args ) {
+ public function wp_getProfile( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
* - 'bio'
* @return bool True, on success.
*/
- function wp_editProfile( $args ) {
+ public function wp_editProfile( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - password
* @return array
*/
- function wp_getPage($args) {
+ public function wp_getPage($args) {
$this->escape($args);
$blog_id = (int) $args[0];
}
// If the page doesn't exist indicate that.
else {
- return(new IXR_Error(404, __('Sorry, no such page.')));
+ return new IXR_Error( 404, __( 'Sorry, no such page.' ) );
}
}
* - num_pages
* @return array
*/
- function wp_getPages($args) {
+ public function wp_getPages($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters. See {@link wp_xmlrpc_server::mw_newPost()}
* @return unknown
*/
- function wp_newPage($args) {
+ public function wp_newPage($args) {
// Items not escaped here will be escaped in newPost.
$username = $this->escape($args[1]);
$password = $this->escape($args[2]);
* @param array $args Method parameters.
* @return bool True, if success.
*/
- function wp_deletePage($args) {
+ public function wp_deletePage($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return unknown
*/
- function wp_editPage($args) {
+ public function wp_editPage($args) {
// Items not escaped here will be escaped in editPost.
$blog_id = (int) $args[0];
$page_id = (int) $this->escape($args[1]);
* @param array $args Method parameters.
* @return unknown
*/
- function wp_getPageList($args) {
+ public function wp_getPageList($args) {
global $wpdb;
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function wp_getAuthors($args) {
+ public function wp_getAuthors($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function wp_getTags( $args ) {
+ public function wp_getTags( $args ) {
$this->escape( $args );
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return int Category ID.
*/
- function wp_newCategory($args) {
+ public function wp_newCategory($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return mixed See {@link wp_delete_term()} for return info.
*/
- function wp_deleteCategory($args) {
+ public function wp_deleteCategory($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_suggestCategories($args) {
+ public function wp_suggestCategories($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_getComment($args) {
+ public function wp_getComment($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array. Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents
*/
- function wp_getComments($args) {
+ public function wp_getComments($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* - comment_id
* @return mixed {@link wp_delete_comment()}
*/
- function wp_deleteComment($args) {
+ public function wp_deleteComment($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* - content_struct
* @return bool True, on success.
*/
- function wp_editComment($args) {
+ public function wp_editComment($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return mixed {@link wp_new_comment()}
*/
- function wp_newComment($args) {
- global $wpdb;
-
+ public function wp_newComment($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_getCommentStatusList($args) {
+ public function wp_getCommentStatusList($args) {
$this->escape( $args );
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_getCommentCount( $args ) {
+ public function wp_getCommentCount( $args ) {
$this->escape($args);
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_getPostStatusList( $args ) {
+ public function wp_getPostStatusList( $args ) {
$this->escape( $args );
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_getPageStatusList( $args ) {
+ public function wp_getPageStatusList( $args ) {
$this->escape( $args );
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_getPageTemplates( $args ) {
+ public function wp_getPageTemplates( $args ) {
$this->escape( $args );
$blog_id = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function wp_getOptions( $args ) {
+ public function wp_getOptions( $args ) {
$this->escape( $args );
$blog_id = (int) $args[0];
* @param array $options Options to retrieve.
* @return array
*/
- function _getOptions($options) {
+ public function _getOptions($options) {
$data = array();
$can_manage = current_user_can( 'manage_options' );
foreach ( $options as $option ) {
* @param array $args Method parameters.
* @return unknown
*/
- function wp_setOptions( $args ) {
+ public function wp_setOptions( $args ) {
$this->escape( $args );
$blog_id = (int) $args[0];
* - 'description'
* - 'metadata'
*/
- function wp_getMediaItem($args) {
+ public function wp_getMediaItem($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* - filter
* @return array. Contains a collection of media items. See {@link wp_xmlrpc_server::wp_getMediaItem()} for a description of each item contents
*/
- function wp_getMediaLibrary($args) {
+ public function wp_getMediaLibrary($args) {
$this->escape($args);
$blog_id = (int) $args[0];
* - password
* @return array
*/
- function wp_getPostFormats( $args ) {
+ public function wp_getPostFormats( $args ) {
$this->escape( $args );
$blog_id = (int) $args[0];
* - 'taxonomies'
* - 'supports'
*/
- function wp_getPostType( $args ) {
+ public function wp_getPostType( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - array $fields
* @return array
*/
- function wp_getPostTypes( $args ) {
+ public function wp_getPostTypes( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
* - array $fields
* @return array contains a collection of posts.
*/
- function wp_getRevisions( $args ) {
+ public function wp_getRevisions( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
* - int $post_id
* @return bool false if there was an error restoring, true if success.
*/
- function wp_restoreRevision( $args ) {
+ public function wp_restoreRevision( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
* @param array $args Method parameters.
* @return array
*/
- function blogger_getUsersBlogs($args) {
+ public function blogger_getUsersBlogs($args) {
if ( is_multisite() )
return $this->_multisite_getUsersBlogs($args);
*
* @access protected
*/
- function _multisite_getUsersBlogs($args) {
+ protected function _multisite_getUsersBlogs($args) {
$current_blog = get_blog_details();
$domain = $current_blog->domain;
* @param array $args Method parameters.
* @return array
*/
- function blogger_getUserInfo($args) {
+ public function blogger_getUserInfo($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function blogger_getPost($args) {
+ public function blogger_getPost($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function blogger_getRecentPosts($args) {
+ public function blogger_getRecentPosts($args) {
$this->escape($args);
* @since 1.5.0
* @deprecated 3.5.0
*/
- function blogger_getTemplate($args) {
+ public function blogger_getTemplate($args) {
return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
}
* @since 1.5.0
* @deprecated 3.5.0
*/
- function blogger_setTemplate($args) {
+ public function blogger_setTemplate($args) {
return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
}
* @param array $args Method parameters.
* @return int
*/
- function blogger_newPost($args) {
+ public function blogger_newPost($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return bool true when done.
*/
- function blogger_editPost($args) {
+ public function blogger_editPost( $args ) {
$this->escape($args);
$content = $args[4];
$publish = $args[5];
- if ( !$user = $this->login($username, $password) )
+ if ( ! $user = $this->login( $username, $password ) ) {
return $this->error;
+ }
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'blogger.editPost' );
- $actual_post = get_post($post_ID,ARRAY_A);
+ $actual_post = get_post( $post_ID, ARRAY_A );
- if ( !$actual_post || $actual_post['post_type'] != 'post' )
- return new IXR_Error(404, __('Sorry, no such post.'));
+ if ( ! $actual_post || $actual_post['post_type'] != 'post' ) {
+ return new IXR_Error( 404, __( 'Sorry, no such post.' ) );
+ }
$this->escape($actual_post);
- if ( !current_user_can('edit_post', $post_ID) )
+ if ( ! current_user_can( 'edit_post', $post_ID ) ) {
return new IXR_Error(401, __('Sorry, you do not have the right to edit this post.'));
+ }
+ if ( 'publish' == $actual_post['post_status'] && ! current_user_can( 'publish_posts' ) ) {
+ return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this post.' ) );
+ }
- extract($actual_post, EXTR_SKIP);
-
- if ( ('publish' == $post_status) && !current_user_can('publish_posts') )
- return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.'));
-
- $post_title = xmlrpc_getposttitle($content);
- $post_category = xmlrpc_getpostcategory($content);
- $post_content = xmlrpc_removepostdata($content);
-
- $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt');
+ $postdata = array();
+ $postdata['ID'] = $actual_post['ID'];
+ $postdata['post_content'] = xmlrpc_removepostdata( $content );
+ $postdata['post_title'] = xmlrpc_getposttitle( $content );
+ $postdata['post_category'] = xmlrpc_getpostcategory( $content );
+ $postdata['post_status'] = $actual_post['post_status'];
+ $postdata['post_excerpt'] = $actual_post['post_excerpt'];
- $result = wp_update_post($postdata);
+ $result = wp_update_post( $postdata );
- if ( !$result )
+ if ( ! $result ) {
return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be edited.'));
-
- $this->attach_uploads( $ID, $post_content );
+ }
+ $this->attach_uploads( $actual_post['ID'], $postdata['post_content'] );
/**
* Fires after a post has been successfully updated via the XML-RPC Blogger API.
* @param array $args Method parameters.
* @return bool True when post is deleted.
*/
- function blogger_deletePost($args) {
+ public function blogger_deletePost($args) {
$this->escape($args);
$post_ID = (int) $args[1];
* - publish
* @return int
*/
- function mw_newPost($args) {
+ public function mw_newPost($args) {
$this->escape($args);
$blog_ID = (int) $args[0];
return strval($post_ID);
}
- function add_enclosure_if_new( $post_ID, $enclosure ) {
+ public function add_enclosure_if_new( $post_ID, $enclosure ) {
if ( is_array( $enclosure ) && isset( $enclosure['url'] ) && isset( $enclosure['length'] ) && isset( $enclosure['type'] ) ) {
$encstring = $enclosure['url'] . "\n" . $enclosure['length'] . "\n" . $enclosure['type'] . "\n";
$found = false;
* @param int $post_ID Post ID.
* @param string $post_content Post Content for attachment.
*/
- function attach_uploads( $post_ID, $post_content ) {
+ public function attach_uploads( $post_ID, $post_content ) {
global $wpdb;
// find any unattached files
* @param array $args Method parameters.
* @return bool True on success.
*/
- function mw_editPost($args) {
+ public function mw_editPost($args) {
$this->escape($args);
}
$this->escape($postdata);
- extract($postdata, EXTR_SKIP);
+
+ $ID = $postdata['ID'];
+ $post_content = $postdata['post_content'];
+ $post_title = $postdata['post_title'];
+ $post_excerpt = $postdata['post_excerpt'];
+ $post_password = $postdata['post_password'];
+ $post_parent = $postdata['post_parent'];
+ $post_type = $postdata['post_type'];
+ $menu_order = $postdata['menu_order'];
// Let WordPress manage slug if none was provided.
$post_name = "";
if ( isset($content_struct['wp_page_order']) )
$menu_order = $content_struct['wp_page_order'];
+ $page_template = null;
if ( ! empty( $content_struct['wp_page_template'] ) && 'page' == $post_type )
$page_template = $content_struct['wp_page_template'];
* @param array $args Method parameters.
* @return array
*/
- function mw_getPost($args) {
+ public function mw_getPost($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function mw_getRecentPosts($args) {
+ public function mw_getRecentPosts($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function mw_getCategories($args) {
+ public function mw_getCategories($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function mw_newMediaObject($args) {
+ public function mw_newMediaObject($args) {
global $wpdb;
$blog_ID = (int) $args[0];
* @param array $args Method parameters.
* @return array
*/
- function mt_getRecentPostTitles($args) {
+ public function mt_getRecentPostTitles($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function mt_getCategoryList($args) {
+ public function mt_getCategoryList($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function mt_getPostCategories($args) {
+ public function mt_getPostCategories($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return bool True on success.
*/
- function mt_setPostCategories($args) {
+ public function mt_setPostCategories($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function mt_supportedMethods($args) {
+ public function mt_supportedMethods($args) {
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'mt.supportedMethods' );
*
* @param array $args Method parameters.
*/
- function mt_supportedTextFilters($args) {
+ public function mt_supportedTextFilters($args) {
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'mt.supportedTextFilters' );
* @param array $args Method parameters.
* @return mixed
*/
- function mt_getTrackbackPings($args) {
+ public function mt_getTrackbackPings($args) {
global $wpdb;
* @param array $args Method parameters.
* @return int
*/
- function mt_publishPost($args) {
+ public function mt_publishPost($args) {
$this->escape($args);
* @param array $args Method parameters.
* @return array
*/
- function pingback_ping($args) {
+ public function pingback_ping($args) {
global $wpdb;
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
$urltest = parse_url($pagelinkedto);
if ( $post_ID = url_to_postid($pagelinkedto) ) {
$way = 'url_to_postid()';
- } elseif ( preg_match('#p/[0-9]{1,}#', $urltest['path'], $match) ) {
+ } elseif ( isset( $urltest['path'] ) && preg_match('#p/[0-9]{1,}#', $urltest['path'], $match) ) {
// the path defines the post_ID (archives/p/XXXX)
$blah = explode('/', $match[0]);
$post_ID = (int) $blah[1];
} elseif ( is_string($urltest['fragment']) ) {
// ...or a string #title, a little more complicated
$title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']);
- $sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", like_escape( $title ) );
+ $sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", $title );
if (! ($post_ID = $wpdb->get_var($sql)) ) {
// returning unknown error '0' is better than die()ing
return $this->pingback_error( 0, '' );
* @param array $args Method parameters.
* @return array
*/
- function pingback_extensions_getPingbacks($args) {
+ public function pingback_extensions_getPingbacks($args) {
global $wpdb;